Artemis

Aus Programmieren-Wiki
🚧 Diese Seite befindet sich in Bearbeitung 🚧

Was ist Artemis?

Artemis ist eine Verwaltungssoftware, die am KIT für Module wie Programmieren und Softwaretechnik verwendet wird. Entwickelt wird es von der Technischen Universität München (TUM).

In Artemis finden sich innerhalb separierten Kursen Aufgabenfelder und Statistiken zur eigenen Leistung, sowie ein Kommunikationsforum.

Erste Schritte in Artemis

Bevor wir irgendetwas in Artemis sehen müssen wir uns anmelden. Das geschieht über das Login-Feld, durch welches man auf die Loginseite des KIT weitergeleitet wird. Die Anmeldedaten sind dann die, des Studentenaccounts (uxxxx@student.kit.edu und Passwort).

Wir sehen dann ein relativ leeres Fenster mit einigen Knöpfchen in der Kopfzeile. Zu finden ist ein Feld Kurseinschreibung oben rechts. Dort werden alle Kurse angezeigt, in die man sich gerade Anmelden kann. Das passiert durch das drücken von Einschreiben. Nach Bestätigen ist man dem Kurs beigetreten und kann diesen jetzt in der Kursübersicht auswählen.

In der Kursansicht angekommen finden wir jetzt ein großes Menü an allen möglichen Ansichten. Wichtig sind dabei vor allem Aufgaben, Statistiken und Kommunikation.

Aufgaben

Hier finden sich alle Aufgaben, die zur Zeit freigeschaltet sind. Nach dem Starten der Aufgabe und hochladen einer Lösung sieht man hier dann das Ergebnis und die vorläufige Punktzahl der eigenen Lösung und nach Beendigung der Korrektur auch Korrekturnotizen der Tutor:innen, sowie die Finale Punktzahl. Auch erscheint dann ein Link zur Musterlösung und ein Feld für Beschwerden.

Statistiken

Hier siehst du, wie du bis jetzt abgeschlossen hast. Wichtig ist hier eigentlich nur der große Kreis mit der Punkt- und Prozentzahl. Nach der Korrektur sollte die Prozentzahl über 50 sein, allerdings gilt ja bekanntlich "je mehr desto besser". Auch sieht man hier, wie man selbst im Vergleich zum Schnitt abgeschnitten hat, sowie was die höchste erreichte Punktzahl unter allen Teilnehmern war.

Kommunikation

Hier sind alle Ankündigungen und Fragen von allen Lehrpersonen und Tutanten (euch) zu finden. Wichtig hier sind vor allem die Announcements (Ankündigungen) der Übungsleiter. Diese sind in der Regel auch ganz oben zu finden. Sonstige Fragen und Antworten zu den Übungsblättern sind auch gefiltert in den einzelnen Aufgabenseiten zu finden. Ansonsten kann man sich natürlich auch hier die Fragen & Antworten durchlesen.

Wie klone ich ein Projekt von Artemis?

Die Aufgaben in Artemis werden mit dem Tool Git verwaltet. Um ein Projekt aus Artemis zu klonen, müssen wir zuerst die URL des Repositories kopieren. Diese findet man in dem entsprechendem Aufgabenblock. Dort starten wir zuerst die Aufgabe. Nach einer kurzen Ladezeit erscheint dort ein neuer Knopf zum Klonen. Drückt man auf diesen, bekommt man ein größeres Fenster mit einigen Knöpfen und einem Link (URL). Wir drücken einfach nur auf den Knopf URL Kopieren. Mithilfe der Git-Integration einiger IDE's können wir das Projekt dann dort einfach hereinklonen. Meißtens heißt das Feld dafür "Project from Version Control". Im Folgenden wird das Vorgehen nochmal für IntelliJ und Eclipse gezeigt:

IntelliJ

Eclipse

Datei:Project Download Eclipse.webp

Wie lade ich eine neue Version meines Projektes auf Artemis hoch?

Wie zuvor benutzen wir auch für diesen Schritt wieder Git. Die meißten IDE's haben auch dafür ein spezielles Interface um das Handhaben mit Git zu vereinfachen. Insbesondere ist hierbei das Committen und Pushen von besonderem Interesse. Im Folgenden wird das Vorgehen in den verschiedenen IDE's gezeigt. Wer sich mehr für Git interessiert oder vielleicht weder IntelliJ noch Eclipse benutzt, für den geht es hier weiter.

IntelliJ

Eclipse

Was bedeuted mein Ergebnis?

Bei erfolgreichem Pushen (d.h. keine Fehlermeldung) sieht die Abgabe so in Artemis aus. Gab es einen Fehler, werden die weiter unten in diesem Artikel erläutert. ArtemisRating.png Wie oben zu sehen gibt es einige interessante Stellen im Feedback.

  1. Hier findest du einen Link zu dem Commit, der Bewertet wurde. Das ist in der Regel die letzte Version die hochgeladen wurde.
  2. In diesem Block sind Tests zu finden, die Fehlgeschlagen sind. Meißt steht dabei, wo genau, was gesendet wurde und was erwartet wurde. Auch zu finden ist hier eine Aufbröselung des Feedbacks und in welchen Kategorien es Abzüge gab und auch wie viel.
  3. Hier sind Kommentare zu den einzelnen Abzügen zu finden, sowie Tipps und Tricks der Tutoren. Auch zu finden sind hier Anmerkungen zu Stellen, die zukünftig Abzug geben würden.
  4. Hier werden alle Tests angezeigt, die erfolgreich waren. Auch stehen dort die Punkte, die für jeden einzelnen Test vergeben wurden.

Es ist etwas schief gelaufen.. was tu ich jetzt?

Eigene lokale tests funktionieren, in Artemis jedoch nicht

Code zu Testen ist eine Wissenschaft für sich und wird oft nicht korrekt umgesetzt. Da sporadisch geschriebene Tests oft visuell validiert werden, liegt darin, neben dem Mensch selbst, auch das größte Fehlerpotenzial. Insbesondere sind Leerzeichen am Ende der Zeile, oder fehlende/zusätzliche Zeilenumbrüche nicht/schwer erkennbar. Dadurch scheint es, als würden die Beispielinteraktionen korrekt umgesetzt werden, wird es tatsächlich jedoch nicht, was in Artemis zum Nichtbestehen der Tests führt. Zudem sollte sichergestellt werden, dass die Interaktionen tatsächlich korrekt eingegeben werden, hierbei hilft oft direktes Kopieren aus den Aufgaben, oder den Fehlermeldungen in Artemis.

Zudem sollten Systemabhängigkeiten vermieden werden, da die Tests nicht zwangsläufig auf dem gleichen System ausgeführt werden. Eine häufige Fehlerquelle hierbei sind wieder Zeilenumbrüche, die je nach System unterschiedlich sein können.

Exited Prematurely

Diese Meldung bedeutet, dass das Durchlaufen der Beispielinteraktion/Protokolle frühzeitig beendet wurde, also noch Ein-/Ausgaben erwartet werden. Was genau erwartet wird, kann unterschiedlich sein. Häufig liegt es daran, dass die Ausgaben nicht mit einem Zeilenumbruch (System.lineSeparator()) abgeschlossen wurden, beziehungsweise System.out.print() statt System.out.println() verwendet wurde, oder gar ganze Zeilen in der Ausgabe fehlen.

Build gescheitert

Wenn der Build scheitert, liegt ein Compilation Error vor, der Code ist also nicht kompilierbar. Der Grund dafür wird angezeigt, dazu muss gegebenenfalls runtergescrollt werden, ist allerdings immer rot markiert und daher gut zu finden:

Compilation error.png

Die Fehlermeldung wird automatisch erzeugt und ist daher nicht 100%ig genau. Es wird die betroffene Klasse angezeigt, die Zeilen und Zeichennummer sowie eine kurze Beschreibung des Fehlers. Wenngleich die Beschreibung manchmal irreführend ist, so ist die Klassen- und Zeilenangabe meist ausreichend, um den Fehler zu identifizieren. In diesem Beispiel wurde der Kompilierungsfehler in der Klasse TicTacToe in Zeile 87 erzeugt.

UnsupportedOperationException: Implementation missing

Die Vorlagen enthalten manchmal bereits Code, der zur Vereinfachung verwendet werden kann. Darin wird meist eine UnsupportedOperationException geworfen, um bei den Tests direkt anzuzeigen, dass die Klassen nicht fertig implementiert sind, bzw. etwas vergessen wurde. Der Wurf dieser Exception muss entfernt und mit dem eigenen Code ersetzt werden. Wird dieser Fehler dennoch angezeigt, so liegt es daran, dass die Exception noch enthalten ist, gegebenenfalls weil die Vorlage gar nicht verwendet wurde, aber sich dennoch in der Abgabe befindet.

Use of illegal class or package

In diesem Modul ist es nicht erlaubt bestimmte Elemente der Java API zu nutzen, dies hat vor allem didaktische Gründe. Den Bearbeitungshinweisen am Anfang jedes Blattes ist zu entnehmen, welche Pakete, oder Klassen (nicht) erlaubt sind. Einzelne Aufgaben können diese Regelung weiter Einschränken.

A class which name is [...] could not be found

Wenn in der Abgabe eine geforderte Klasse nicht gefunden werden kann, erfüllt diese nicht eine der folgenden Anforderungen:

  • Die Klasse ist public
  • Alle Klassen besitzen eine gültige Paket Deklaration passend zu ihrem Ordner
  • Die Klassen liegen nicht außerhalb des "src" Ordners
  • Alle Java Quellcode Dateien enden mit ".java"

Main method could not be resolved

Folgende Kriterien müssen erfüllt sein, damit die main() gefunden werden kann:

  • Die main-Methode muss static sein
  • Die Klasse und die Methode müssen public sein
  • Alle Klassen besitzen eine gültige Paket Deklaration passend zu ihrem Ordner
  • Die Klassen liegen nicht außerhalb des "src" Ordners
  • Alle Java Quellcode Dateien enden mit ".java"

AssertionError: Main class found at [...] cannot be accessed

Hier konnte die main() zwar gefunden werden, die Klasse, in der sie sich befindet, besitzt allerdings eine eingeschränke Sichtbarkeit. Die Klassen, die die main() enthalten, müssen immer public sein.

Missing package declaration

Alle Klassen sollen in einem, ihrer Domäne passendem, Paket liegen. Klassen ohne Paketdeklaration, die also im Standardordner "src" liegen, erzeugen diesen Fehler. Mehr zu Paketen gibt es hier zu lesen.

Class Load Test fehlgeschlagen

In diesem Fall könnten Sie ein falsches Paket deklariert haben, z.B lautet die erste Zeile in Ihrer Datei `package example`, aber Ihre Datei liegt im src-Ordner, wobei diese nach Paket-Deklaration im Ordner example liegen muss (und der example-Ordner im src-Ordner). Mehr zu Paketen gibt es hier zu lesen.

Expected [...] a string matching the pattern <^Error: .*> bzw. <^(?!Error: ).*$>

Im weiteren Verlauf des Übungsbetriebes werdet ihr mit dem Ausgeben von Fehlermeldungen konfrontiert. Artemis kann und wird auch diese prüfen. Genauer: Artemis wird überprüfen, ob eine Fehlermeldung ausgegeben werden soll oder nicht und ob sie richtig formatiert ist. Hierbei werdet ihr auf die im Titel gezeigten, sogenannten Regex, stoßen.

(Das Wort Error in diesem Beispiel kann je nach Aufgabenstellung variieren. Zum Beispiel kann auch ERROR vorkommen. Dann ist die erwartete Ausgabe entsprechend dem Wort)

<^Error: .*>

Die Ausgabe war keine Fehlermeldung oder falsch formatiert. Artemis erwartet dann eine Ausgabe, die mit "Error: " anfängt und mit einer beliebige Zeichenkette endet.

<^(?!Error: ).*$>

Die Ausgabe war eine Fehlermeldung bzw. hat mit "Error: " angefangen. Artemis erwartet in diesem Fall aber keine Fehlermeldung.

Hier die Erklärung zum Regex:

  • ^ Markiert den Anfang der Zeile.
  • (?![...]) Ist ein sogenannter "negative lookahead". Das heißt, dass die ausgegebene Zeile nicht die Zeichenkette innerhalb der Klammer, nach dem ?! beinhalten darf.
  • .* Ist eine Zeichenkette beliebiger Länge.
  • $ Markiert das Ende der Zeile.

Quelle: Regex101

Magic Literals

Diese Meldung bedeutet, dass im Code ein eigentlich konstanter Wert benutzt wurde, der jedoch nicht als Konstante definiert wurde. Mehr dazu auf dieser Seite.


Zurück zur Hauptseite geht es hier