Zum Hauptinhalt springen

Abgabesystem

Damit Sie über GitHub Classroom abgeben können, müssen Sie einen Account auf github.com anlegen. Wie Sie sich nennen und welche Mailadresse Sie benutzen, ist Ihnen überlassen; falls Sie schon einen GitHub-Account haben, können Sie auch diesen verwenden (Ihre Abgaben sind nur für das Progra-Team sichtbar).

Sobald Sie ein GitHub-Konto haben, müssen Sie uns über den Link „GitHub-Zuordnung“ im Ilias mitteilen, welchen GitHub-Namen Sie haben, damit wir Ihnen Ihre Punkte richtig zuordnen können. (Falls Sie noch keinen Zugang zum Ilias haben, holen Sie diesen Schritt später nach – machen Sie sich eine Erinnerung in Ihrem Kalender.)

In den folgenden Videos erklären wir Ihnen, wie Sie Ihre Lösungen in GitHub Classroom abgeben, Abgaben nachbessern können und wo Sie Ihr Korrekturfeedback einsehen können.

Bemerkung

Der Dienst GitHub ist eigentlich nicht primär zur Abgabe von Übungsaufgaben gedacht, sondern ist eine populäre Website, über die Entwickler:innen Code Ihrer Software mit der Welt teilen. Im Programmierpraktikum werden Sie auch weiter mit GitHub arbeiten und die eigentliche Kernfunktionalität außerhalb des Classrooms kennenlernen. Wir verwenden nur sehr, sehr wenige Funktionen von GitHub (und gar kein git) in der Veranstaltung Programmierung.

Abgeben

Erhöhen Sie gerne die Wiedergabegeschwindigkeit über das Zahnrad unten rechts.

Transkript

Wie du deine Lösungen für die Übungsaufgaben in Programmierung abgibst, erkläre ich dir in diesem Video anhand der Hello-World-Aufgabe des ersten Übungsblatts.

Ich gehe jetzt davon aus, dass du die Aufgabe bereits gelöst hast und einmal auf deinem Computer getestet hast, ob das Programm kompiliert und so funktioniert, wie es von der Aufgabenstellung vorgesehen ist. Außerdem musst du in deinem Browser auf github.com eingeloggt sein.

Um deine Lösung abzugeben, klickst du auf dem Übungsblatt auf das Symbol rechts neben dem Aufgabentitel. Jetzt sollte sich eine GitHub-Seite in deinem Browser öffnen. Dort bestätigst du durch einen Klick auf „Accept this assignment“, dass du die eine erste Lösung abgeben möchtest.

Jetzt dauert es einen kleinen Augenblick. Nach wenigen Sekunden kannst du die Seite neu laden und kannst mit einem Klick auf den jetzt erschienenen Link zur Abgabeseite gehen. Dann siehst du eine Seite, die ungefähr so aussieht. Da du deine Lösung bisher noch nicht hochgeladen hast, wird aktuell noch angezeigt, dass du voraussichtlich 0 Punkte für deine Abgabe bekommst. Darauf wirst du auch in einer E-Mailbenachrichtigungen von GitHub hingewiesen, die standardmäßig aktiviert ist.

Um deine Lösung hochzuladen, klickt du oben rechts auf den „Add file“-Button und wählst „Upload Files“. Ziehe dann alle für die Aufgabe relevanten Code-Dateien hier rein und bestätige anschließend mit einem Klick auf „Commit changes“. Zurück auf der Hauptseite sehen wir jetzt oben rechts am orangenen Kreis, dass die Tests für die automatische Bewertung aktuell ausgeführt werden. In der Regel stehen die Ergebnisse nach wenigen Minuten zur Verfügung. Wenn du die Seite dann neu lädst, siehst du hier, dass in diesem Fall die volle Punktzahl erreicht wurde.

Zum Abschluss noch zwei Hinweise:

  • Du hast sicherlich gesehen, dass hier schon andere Dateien in der Abgabe vorhanden sind. Diese sind wichtig für die automatischen Tests und dürfen weder verändert, noch gelöscht werden. Solltest du sie einmal versehentlich verändern, melde dich bitte per Mail beim Organisationsteam und gib deinen GitHub-Namen sowie die betroffene Aufgabe an.
  • Falls du nicht sofort die volle Punktzahl erreichst, kannst du deine Abgabe beliebig oft vor der Deadline nachbessern. Das erkläre ich dir im nächsten Video.
Übrigens

Mit welchem Ansatz Sie unsere Aufgaben lösen, ist uns (und den Tests) vollkommen egal. Es ist nur wichtig, dass Sie die in der Aufgabenstellung genannten Anforderungen (z. B. den Programmnamen) genau einhalten. (Auch später in der professionellen Softwareentwicklung ist es sehr wichtig, die formalen Anforderungen an ein System genau einzuhalten, damit Code unterschiedlicher Teams oder Firmen richtig zusammen funktioniert.)

Nachbessern

Einsehen der Fehlermeldungen der automatischen Tests und hochladen einer verbesserten Version

Transkript

Es wird sicherlich allen von euch einmal passieren, dass ihr im ersten Versuch keine vollständig korrekte Lösung abgebt. Wie ihr dann sehen könnt, welcher Testfall fehlgeschlagen ist und wie ihre eure Abgabe nachbessert, erkläre ich euch jetzt.

Wir starten zunächst mit einer frischen Abgabe. Ich habe auf meinem Computer getestet, ob mein Hello-World-Programm hier compiliert und funktioniert. Ich lade meine java-Datei jetzt, wie im ersten Video gezeigt, hoch.

Nach wenigen Minuten bekomme ich jetzt das Ergebnis der automatischen Tests angezeigt: Ich habe nicht die volle Punktzahl bekommen – über den nicht vollständig erfolgreichen Testdurchlauf wurde ich auch standardmäßig per E-Mail informiert. Um zu sehen, was schiefgegangen ist, klicke ich oben rechts auf das rote X und dann auf „Details“. Unter „Prüfe Abgabe mit automatischen Tests“ kann ich sehen, welche Tests durchgeführt worden sind. Interessant sind jetzt die Tests, die nicht PASSED sind. Hier sehe ich in der Testbeschreibung, dass geprüft wird, ob meine Ausgabe genau „Hello World!“ enthält. Meine Ausgabe enthält aber nicht das geforderte Ausrufezeichen.

Ich bessere jetzt also den Code auf meinem Computer nach, teste nochmal und jetzt kann ich meine nachgebesserten Code hochladen. Dazu öffne ich wieder die GitHub Classroom-Seite für die Abgabe (z. B. über das Übungsblatt), und lade die überarbeite Datei hoch. Nach wenigen Minuten bekomme ich dann wieder das Ergebnis der Tests: Diesmal ist alles richtig.

Ursache für fehlende Punkte

Wenn ein automatischer Test nicht erfolgreich durchläuft, wird Ihnen – wie im Video gezeigt – eine Fehlerbeschreibung angezeigt. Meistens ist diese Beschreibung einigermaßen gut verständlich, manchmal aber etwas kryptisch. Hier finden Sie eine Liste von typischen Fehlern, was Sie bedeuten, und was eine wahrscheinliche Ursache ist.

Typische Fehlermeldungen der automatischen Tests

Wir ergänzen ggf. die folgende Liste im Laufe des Semesters.

Task :compileJava FAILED
Ihr Code lässt sich in unserer Test-Umgebung nicht compilieren. Testen Sie vor der Abgabe, ob Ihr Code fehlerfrei compiliert. Denken Sie ggf. daran, alle für die Aufgabe relevanten java-Dateien mit abzugeben. Benutzen Sie keine Java-Funktionalität, die erst nach Java 17 eingeführt worden ist (alles, was wir in der Vorlesung besprechen, funktioniert in Java 17).
java.lang.AssertionError: Expected class Klassenname to exist but it didn't
Ein Klassenname (bzw. Programmname) entspricht nicht der Vorgabe. Haben Sie auf Groß- und Kleinschreibung geachtet oder eventuell vergessen, eine Datei hochzuladen? Entspricht der Programmname dem Dateinamen? Löschen Sie ggf. auch falsche Dateien, die noch in Ihrer Abgabe sind (s. u.).
error: duplicate class: Klassenname
Wahrscheinlich wurde die java-Datei mehrfach, ggf. in unterschiedlichen Ordnern, hochgeladen. Löschen Sie (s. Anleitung unten) die falschen Dateien.
error: cannot find symbol Name
Ein Variablenname oder Klassenname existiert nicht bzw. entspricht nicht der Vorgabe oder dem Dateinamen.
java.util.concurrent.TimeoutException: testName() timed out after 2 seconds oder
Test … SKIPPED in Kombination mit Timeout has been exceeded oder
Requesting stop of task ':test' as it has exceeded its configured timeout oder
Current stacktrace of timed out but not yet stopped task ':test':
Ihr Code enthält wahrscheinlich eine Endlosschleife (also eine Schleife, deren Abbruchbedingung immer wahr ist, sodass sie unendlich lange läuft), die bei bestimmten Eingaben auftritt. Testen Sie Ihren Code nochmal mit verschiedenen Eingaben. Welche Testeingabe zu dem Problem führt, sollte oberhalb der Timeout-Meldung zu sehen sein. Wenn Sie sie nicht finden, fragen Sie im Forum nach.
SKIPPED … There were failing tests. See the report at:

Vermutlich beansprucht ihr Code zu viel Arbeitsspeicher und es kommt zu einem OutOfMemoryError. Dies kann z. B. passieren, wenn Sie versehentlich unendlich viele neue Objekte anlegen (z. B. beim Bearbeiten einer dynamischen Datenstruktur). (Hinweis: Den angegeben Report können Sie nicht einsehen.)

Can't find any online and idle self-hosted runner in the current repository
Unser Testsystem ist gerade entweder durch viele Abgaben in der Warteschlange überlastet (kurz vor der Deadline wahrscheinlich) oder ist abgestürzt (hoffentlich nicht). Bitte melden Sie sich per Ilias-Forum bei uns, falls das Problem nach 12 Stunden weiterhin besteht.
E-Mail: Run failed: Automatische Tests

Sie erhalten diese E-Mail, wenn die automatischen Tests nicht alle erfolgreich bestanden wurden (es kann also z. B. auch sein, dass Sie 9/10 Punkten haben). Schauen Sie wie im Erklärvideo gezeigt nach, welche Tests fehlgeschlagen sind, und bessern Sie Ihre Abgabe ggf. nach.

Die Tests sagen, dass mein Code Optional[etwas] ausgibt, aber ich benutze gar kein Optional im Code?

Beim automatischen Testen müssen wir manchmal mit dem Fall umgehen können, dass es einen oder keinen Rückgabewert gibt. Zum Umgang mit „nur möglicherweise existierenden Werten“ kann in Java der „Container“-Datentyp Optional verwendet werden, den Sie im Programmierpraktikum kennenlernen werden. Bei der Testausgabe können Sie im Wesentlichen das Optional außen herum ignorieren. Wenn z. B. die Tests sagen, dass Optional[0] den Wert 25 nicht enthält, dann heißt das, dass Ihr Programm 0 statt 25 berechnet hat.

java.util.NoSuchElementException … at java.base/java.util.Scanner

Sie lesen Daten von der Standardeingabe, obwohl es nichts mehr auf der Standardeingabe zu lesen gibt. Stellen Sie vorm Lesen von der Standardeingabe mit hasNext sicher, dass es noch Daten gibt, die gelesen werden können. (vgl. Vorlesung zum Thema IO)

WARNING: A terminally deprecated method in java.lang.System has been called
Die Meldung erscheint in jedem Testdurchlauf und ist nicht auf ein Problem in Ihrem Code zurückzuführen. (Wir verwenden eine veraltete Methode, um zu verhindern, dass Sie aus Ihrem Programmcode heraus das Ausführen der Tests versehentlich abbrechen können. Bis nächstes Jahr müssen wir unseren Code überarbeiten.)
Nicht stundenlang über die Fehlermeldungen grübeln!

Falls Sie bei der Fehlerbehebung bzw. der Interpretation der Fehlmeldung nicht weiterkommen, fragen Sie in Ihrer Übung, im Tutorium, im Ilias oder einer Sprechstunde nach. (Bitte keine (Teil-)Lösungen im Ilias posten.) Beachten Sie, dass die Korrektor:innen Ihnen nur dann weiterhelfen können, wenn Sie Ihren GitHub-Namen nennen.

Falsch hochgeladene Dateien löschen

Wenn Sie eine bereits hochgeladene Datei aktualiseren (aber nicht löschen wollen), muss die betroffene Datei vorher nicht gelöscht werden.

Wenn Sie eine Datei an der falschen Stelle oder mit einem falschen Namen hochgeladen haben, müssen Sie diese löschen. Einerseits funktionieren nämlich ggf. die automatischen Tests nicht, denn – das wissen Sie aus der ersten Vorlesung – Java-Programmnamen und die Dateinamen müssen übereinstimmen, damit das Programm compiliert werden kann. Andererseits wissen wir, wenn Sie mehrere Dateien abgeben, bei der Korrektur auch nicht, welche Datei korrigiert werden soll; in dem Fall gilt wie in der Klausur, dass wir die schlechteste Abgabe werten.

  1. Falsch hochgeladene/falsch benannte Datei anklicken.

Helloworld.java auswählen

  1. Rechts auf das Dreipunktmenü klicken und dann auf „Delete file“.

Delete this file

  1. Das Löschen mit einem Klick auf „Commit changes“ (oben rechts) und dann nochmal mit „Commit changes“ bestätigen.

Commit changes

Wie bei jeder Änderung an Ihrer Abgabe dauert es dann i. d. R. wenige Minuten, bis Sie das neue Testergebnis sehen. Falls die automatischen Tests bei Ihnen nicht richtig durchlaufen, melden Sie sich bitte per Mail bei uns.

Korrekturfeedback

Spätestens eine Woche nach der Abgabefrist erhalten Sie Feedback zu Ihrer Abgabe und die finale Punktzahl.

Transkript

Ob euer Programmcode die funktionalen Anforderungen erfüllt, testen unsere automatischen Tests. Ihr bekommt aber zusätzlich innerhalb von 7 Tagen nach der Abgabefrist Feedback von unseren menschlichen Korrektor:innen mit Hinweisen zur Codequalität, Verbesserungstipps usw., sowie der finalen Punktzahl für jede Aufgabe. Ich zeige nun, wie Ihr das Feedback einsehen könnt.

Wenn du auf der Upload-Seite der Aufgabe bist, kannst du über den Reiter Issues auf das Korrekturfeedback zugreifen. Dort siehst du die final festgelegte Punktzahl, die in der Regel der automatisch bestimmten Punktzahl entspricht.

Sobald dein Korrekturfeedback angekommen ist, erhältst du standardmäßig auch eine E-Mailbenachrichtigung.

Falls du Rückfragen zu deiner Korrektur hast, melde dich bitte per E-Mail oder (bevorzugt) Rocket.Chat bei der Person, die dich korrigiert hat.

Weitere Hinweise

  • Eine Übersicht über all Ihre Abgaben bekommen Sie unter https://github.com/hhu-progra; ältere Abgaben finden Sie später unter https://github.com/hhu-progra2.
  • Rückfragen zur Korrektur stellen Sie bitte immer zuerst via Rocket.Chat direkt an die Person, die Sie korrigiert hat. Die Zuordnung von GitHub-Namen zu Unikennungen finden Sie auf der Kursstartseite im Ilias. Geben Sie in Ihrer Nachricht die Aufgabe und Ihren GitHub-Namen an.
    • Antworten Sie nicht auf die E-Mail-Benachrichtigung, die Sie von GitHub erhalten.
    • Erst wenn Sie beim direkten Korrektorenkontakt keine zufriedenstellende Antwort bekommen haben, können Sie sich per E-Mail an das Organisationsteam wenden. (Warum? Wenn Sie uns direkt schreiben, müssten wir sehr viele E-Mails bearbeiten und hätten weniger Zeit für die Vorbereitung der Lehrveranstaltung. Die meisten Fragen lassen sich direkt mit den Korrektor:innen klären.)
  • Abgaben bzw. Änderungen, die nach der Deadline (i. d. R. montags 10 Uhr) hochgeladen werden, werden nicht korrigiert. Bewertet wird der Stand Ihrer Abgabe vor montags 10 Uhr. Falls Sie erst kurz vor der Deadline abgeben, kann es sein, dass die automatischen Tests erst nach der Abgabefrist fertig werden; dies ist aber insofern nicht schlimm, als dass dieses Testergebnis trotzdem zählt (der Abgabezeitpunkt zählt für das Einhalten der Frist, nicht der Testzeitpunkt).
  • Falls Sie versehentlich Dateien löschen, die für die automatischen Tests wichtig sind (Ordner test und .github), melden Sie sich per Mail bei uns.
  • Die von den automatischen Tests festgestellte Punktzahl ist final und wird von unseren Korrektor:innen so übernommen. Ausnahmen:
    • Falls wir (oder Sie) Fehler in unseren Tests feststellen, wird dies bei der Korrektur berücksichtigt.
    • Falls in einer Abgabe Tests bewusst umgangen werden oder Aspekte der Aufgabenstellung missachtet werden, die nicht (einfach) automatisch getestet werden können (z. B. die Verwendung von Rekursion [was das ist, lernen Sie noch]), werden unsere menschlichen Korrektor:innen nachträglich (Teil-)Punkte abziehen.
    • Textaufgaben werden nicht automatisch bewertet, sondern immer durch unsere Korrektor:innen.
  • Beachten Sie auch die allgemeinen Infos zu den Übungsblättern, insbesondere bzgl. Plagiaten.

Was tun, wenn es zum Abgabezeitpunkt zu technischen Problemen kommt?

Es kann immer mal unvorhergesehene, technische Probleme geben, die nicht Sie zu verschulden haben (z. B. Probleme im GitHub Classroom). Sagen Sie uns dann bitte über das Forum (Organisatorisches) Bescheid.

Falls Sie nicht rechtzeitig abgeben können, weil Ihr Konto fälschlicherweise von GitHub gesperrt wurde und nicht rechtzeitig entsperrt wird, schicken Sie uns Ihre Abgabe per Mail am Abgabetag zu. Nach der Deadline nehmen wir keine Lösungen mehr an.

Wir empfehlen Ihnen dringend, dass Sie Ihre Abgabe nicht erst kurz vor Abgabeschluss hochladen. Sollten die Probleme auf Ihrer Seite liegen (z. B. Ihre private Internetverbindung funktioniert nicht), können wir dies nicht berücksichtigen. Sollte ein länger andauerndes Problem (z. B. ein Ausfall bei GitHub) vorliegen, werden wir uns über das Ankündigungs-Forum bei Ihnen melden (bei diesem Forum sind Mailbenachrichtigungen standardmäßig aktiviert). Die Abgabefrist wird in solchen Fällen kurzfristig verlängert und ggf. eine alternative Abgabemöglichkeit via Ilias angeboten.

Wenn sehr viele Personen gleichzeitig abgeben, kann es außerdem sein, dass die automatischen Tests länger dauern als gewohnt (Test in der Warteschlange (gelber Kreis) und Meldung „Can't find any online and idle self-hosted runner in the current repository“). Bewertet wird auf jeden Fall Ihre letzte Abgabe vor der Abgabefrist, auch wenn die automatischen Tests erst später beendet sind. Wenn Sie aber vor der Abgabefrist noch eine Rückmeldung haben wollen, um ggf. eine verbesserte Version abzugeben, sollten Sie nicht kurz vor der Deadline Ihren Code hochladen.

Bitte beachten Sie, dass Mitarbeiter:innen am Wochenende in der Regel frei haben und deshalb bei Problemmeldungen am Wochenende vor Montagmorgen nicht mit einer finalen, offiziellen Antwort zu rechnen ist. Nach Veröffentlichung der Lösungsvorschläge akzeptieren wir auch keine Abgaben mehr – schicken Sie uns im Zweifel eine Abgabe per Mailanhang bei kurzfristigen Problemen.

Punkteübersicht

Wenn Sie selbst keine Übersicht über Ihre bisher gesammelten Punkte führen, können Sie diese Seite benutzen, um die Punkte der bisher korrigierten Abgaben abzufragen.

Warum ist die Bedienung so kompliziert?

GitHub schützt sich sehr gut gegen das (unberechtigte) Abgreifen von Daten durch Dritte. Daher ist ein sogenannter Access Token notwendig, damit das Tool auf ihre Korrektur-Feedbacks zugreifen kann. Das ist für unseren Zweck zugegeben nicht sehr benutzerfreundlich, aber wir glauben, dass Sie das Tool trotzdem bedient bekommen. (Wer es genau wissen möchte: Uns steht der Sicherheitsmechanismus Same-Origin-Policy im Weg und die Tatsache, dass GitHub dritten keinen Zugang via Benutzername und Passwort erlaubt.)