GithubHelp home page GithubHelp logo

programmiermethoden-campusminden / deploy-to-grading Goto Github PK

View Code? Open in Web Editor NEW
3.0 3.0 1.0 7.13 MB

"Deploy-to-Grading" is a toolchain for automated analysis and grading of programming tasks.

License: Creative Commons Attribution Share Alike 4.0 International

Shell 9.72% Python 90.28%
auto-grading cicd-pipeline clean-code hacktoberfest oer open-educational-resources

deploy-to-grading's People

Contributors

akirsch1 avatar amatutat avatar cagix avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

akirsch1

deploy-to-grading's Issues

[D2G] Python Skript

Siehe https://github.com/PM-Dungeon/PM-Lecture/issues/465#issuecomment-1179278330

Für ein POC alles für EIN Repo

  • Einlesen der Abgefristen

Pro Task:

  • Den jeweils letzten Commit vor der Abgabefrist auschecken
  • Programmiermethoden/deploy-to-abgabe#1
  • Programmiermethoden/vorgabe-dummy#9
  • Prüfen welche Studierende an der Lösung (vor Abgabedatum) mitgearbeitet haben
  • Punkte den Studierenden zuschreiben
  • Ergebnisse Ausgeben

Am Ende des Skriptes:

  • Map Student:Task:Punkte ausgeben

[D2G] Sammlung an Konferenzen für D2G

Konkretes:

Workshop "Automatische Bewertung von Programmieraufgaben" (Deutschland) (h-Index: Nichts gefunden)

Einreichfrist: 15. Juni 2023 12:00 Uhr
Workshop: 12.-13. Oktober 2023

Weiteres:

ACM/SIGCSE conference on Innovation and Technology in Computer Science Education (ITiCSE) (Europa) (h-Index: 32)
SIGCSE Technical Symposium (USA) (h-Index: 24 (Irgendwie kann ich mir nicht vorstellen, dass der Europäische besser sein soll. Dieses Symposium ist laut SIGCSE größer.)

Bereits zu spät für beides, aber unter SIGCSE habe ich schon ein paar Paper zum Thema AutoGrader gesehen. Für ITiCSE 2024 könnte die nächste Deadline im Januar 2024 sein, habe aber noch nicht genaueres gefunden.

IEEE Transactions on Learning Technologies (h-Index: 52)

Als Alternative noch ein Journal.

[D2G] Deploy-to-Grading konzipieren

Konzeptaufgaben

  • Metriken wie Spotbugs, Checkstyle und co.
  • Testfälle (JUnit, Mockito, Behavior-Driven Development mit Spock/Cucumba?, Nelson)
  • Toolchain welche die Ergebnisse der Metrik-Analyse und Tests zusammenfasst und Punkte verteilt.
  • 1-2 Aufgaben als pok umbauen.

Dungeon

  • Metriken wie Spotbugs, Checkstyle, Test-Coverage und co. (40%)
  • (Kreative) Umsetzung der Aufgaben (60%)
  • Abgabemodus überdenken (alla Nelson)

Vorgaben

  • Im Vorgabe-Repo sind die Aufgaben (Markdown), Tests und Vorgaben (Code).
    • Pro Task ein eigenes Verzeichnis
    • Jeder Task hat ein eigenes Gradle-Skript
  • Es gibt eine YAML- oder Json-Datei, in der zu jedem Task das Abgabedatum eingetragen ist
    • Eventuell das data/schedule.yaml im Lecture-Repo auslesen?! Dort stehen die Daten sowieso ...
    • Alternativ entsprechende Tabelle im Lecture-Repo
  • Im Vorgabe-Repo liegen auch die Skripte für die CI sowie Konfigurationsdateien
  • Wir legen vom Vorgabe Repo ein Fork für jedes Team an
  • Jedes Team bekommt zusätzlich ein Dungeon-Repo mit der CI
    • Dungeon-Repo bekommt auch einen Ordner mit den Dungeon-Tasks (Markdown)
    • CI-Skripte analog zu Vorgabe-Repo

Abgaben

  • Die Studierenden lösen die Aufgaben in ihren Repos und mergen die Lösungen in ihren Master.
  • Die CI und das Bewertungs-Skript im Studi-Repo dient als Orientierung für die Studierenden.
    • Wird automatisch bei jedem Merge in den Master ausgeführt
    • Kann manuell ausgeführt werden
    • Gibt eine Übersicht über die Tasks, die beteiligten User und den jeweiligen Score aus
  • Wir führen am Ende des Semesters das selbe Bewertungs-Skript für alle Repos (lokal) aus

Skript für die Bewertung

  • Am Ende des Semsters führen wir die Bewertung durch
  • Dafür checkt ein separates Skript alle Studi-Repos lokal aus. Dafür wird eine Liste mit allen Repos geführt.
  • Das Bewertungs-Skript läuft über alle ausgecheckten Studi-Repos und führt darin die CI-Skripte lokal aus:
    • Checkout des Studis-Repos in lokalen Ordner (über GH-Action, nur in CI für Studi-Repo)
    • Checkout des Vorgabe-Repos in separaten lokalen Ordner (direkt über Git-Befehl)
    • Vergleich der relevanten Ordner zw. Vorgabe-Repo und Studi-Repo (Diff in Konsole)
    • In jedem Repo wird für jeden Task der letzte Commit vor der Abgabefrist des Tasks ausgechecked und die Toolchain gestartet (JUnit, Nelson, Spotbugs, Spotless, Checkstyle etc.)
      • Für Tests: Konfiguration der relevanten Ordner in Vorgabe-Repo und Studi-Repo als Source-Ordner (Gradle) => Tests werden aus dem Vorgabe-Repo genommen, Lösung aus dem Studi-Repo
      • Code-Qualität wird nur über die relevanten Ordner im Studi-Repo berechnet
      • Ergebnis: Sammlung von XML-Dateien pro Studi-Repo und Task
    • Das Skript muss prüfen, wer an der Abgabe beteiligt war:
      • Usernamen sammeln für alle Commits im jeweiligen Zeitfenster (Start bis Deadline), die den Task-Ordner betreffen
      • "Sign off"-Commit für alle, die nicht inhaltlich beigetragen haben?
      • Ergebnis: Liste mit Usernamen, die im Zeitfenster zum Task beigetragen haben
  • Die Ergebnisse der Tools müssen eingesammelt werden
    • XML-Files (JUnit, Checkstyle, ...) einlesen, parsen, Ergebnisse sammeln
    • Ergebnisse in Score überführen
    • Für jeden Task: Map aus beteiligten User und Score für den Task
    • Gesamt: Summe für jeden User und die jeweiligen Punkte berechnen
  • Am Ende die Liste mit den Studierenden und deren Punkte abspeichern.
    • Schlüssel: Username (GH/GL) vs. realer Studi
  • Für das Dungeon ist der Ablauf ähnlich
    • Nur haben wir dafür keine Tests (also nur Code-Qualität)
    • Score wochenweise über die veränderten Ordner berechnen (=> damit können die Studis nacharbeiten und werden nur einmal bestraft, wenn sie in einer Aufgabe die Code-Qualität nicht einhalten)

Sonstiges

  • Team-Repos (Konzept, Dungeon) liegen in der Organisation, Sichtbarkeit: private
  • Team-Repos (Konzept, Dungeon) manuell einrichten
  • Wir müssen Teamwechsel manuell durchführen
  • Schauen wie man das in eine GitHub Action einbinden kann

hängt mit Dungeon-CampusMinden/Dungeon#335 zusammen

[D2G] Einordnung von D2G ins Forschungs-/Entwicklungsgebiet automatischer Bewertungstools

Nach Arnold Pears

System Einordnung
Visualisierungstool Da Studierende bereits vor der endgültigen Abgabe automatischen Feedback erhalten sollen, wird eine Darstellung der Testergebnisse benötigt. Minimum als Textausgabe in dem GitHub Workflow.
Automatisches Bewertungstool Primäre Einordnung in dieses System. D2G soll die auf GitHub erstellen Pull Requests bewerten und eine entsprechende Punktzahl generieren.
Programmierumgebung Nicht passend. Studierende programmieren in ihrer gewählten IDE.
Andere Tools (z.B. Plagiatserkennung oder intelligente Tutoring-Systeme) Plagiatserkennung: Sinnvoll einzusetzen erst bei der endgültigen Abgabe vom Lehrenden, da erst hier alle Abgaben in einem gemeinsamen geschützten Workspace vorliegen.

Nach Petri Ihantola

Feature Einordnung
Unterstützte Programmiersprachen Es soll nur die Programmiersprache Java unterstützt werden.
Integration in Learning-Management-Systeme Eine Anbindung an ILIAS ist bisher nicht geplant.
Definition von Tests Die genaue Auswahl an Testmetriken wird in Kapitel Test Metriken beschrieben.
Erneute Einreichung von Lösungen Studierende erhalten die Möglichkeit, ihre Lösung bis zur finalen Abgabe abzuändern und neu prüfen zu können.
Möglichkeiten einer manuellen Bewertung Die Prüfung, bei der Studierende eine erste Rückmeldung erhalten, soll vollständig automatisch passieren. Erst bei der endgültigen Prüfung wären nachträglich manuelle Änderungen möglichen. Dort ist die Frage der Rückmeldung aber nicht geklärt.
Sandboxing (Sicherheit) Die Tests werden in von GitHub zur Verfügung gestellten Runnern durchgeführt.
Verbreitung und Verfügbarkeit Bisher nicht diskutiert. Sollte aber problemlos möglich sein.
Spezielle/einmalige Funktionen Bisher keine speziellen Metriken zum Testen von z.B. grafischen Benutzeroberflächen, SQL-Abfragen, nebenläufiger Programmierung oder Webprogrammierung geplant.

Nach Thomas Staubitz

Scenario Einordnung
The user installs some sort of development software locally. The platform only provides the description of the exercise and, if necessary, required additional materials. The user in return uploads her solution to the platform for automated assessment. Hier zutreffend: Studierende arbeiten in ihrer gewählten Entwicklungsumgebung. Der einzige Unterschied zu anderen Assessment Tools dieser Kategorie ist, dass keine eigene Online-Plattform benötigt wird, da alles über GitHub läuft.
Instead of using locally installed development software, third party online coding tools are employed. Apart from that, scenario 2 is identical to scenario 1. Könnte auch zutreffen, wenn sich Studierende für ein Online Tool entscheiden, z.B. GitHub Codespaces.
The platform itself features a development environment. Exercises are provided and assessed in this environment. Code execution and assessment is handled on the server side. Nicht zutreffend.
Identical to scenario 3 except for client-side code execution. Nicht zutreffend.

Abgrenzung von anderen AutoGradern

Durch die folgenden Punkte können wir uns von anderen AutoGradern abgrenzen:

  • Integration von Git in den Arbeits-Workflow
  • Serverseitige Evaluation der Abgaben ohne eigene Serverstruktur
  • Gedacht für die fortgeschrittene Programmierausbildung
    • Erfordert Kenntnisse über Git und die Arbeit mit IDEs
  • Vorteile von IDEs nutzbar machen gegenüber Texteingabefelder auf einer Webseite
  • Wegen des Git-Workflows können wir kein ProFormA 2.0 verwenden
    • Das ist eher eine Einschränkung als Abgrenzung. Aber im Hinblick auf ABP 2023 relevant
  • (Hier darf gerne ergänzt werden.)

[D2G] D2G-Ablauf für Lehrende

Aus dem ABP 2023-Paper:

"Den in der CI/CD-Pipeline genutzten Docker-Container können Lehrende lokal ausführen und so die Ergebnisse aller Studierenden datenschutzgerecht einsammeln und auswerten. Dazu wird dem Container eine aus dem LMS heruntergeladene Liste mit PR-URLs übergeben. Über die GitHub-API werden anschließend die Ergebnisse der PRs der Studierenden eingesammelt. Alternativ ist es auch möglich, das Deploy-to-Grading erneut lokal auszuführen. Dies ist notwendig, wenn die Verfügbarkeit eines Artefakts abgelaufen ist. Zusätzlich kann eine Plagiatsprüfung durchgeführt werden. Abschließend wird eine csv-Datei mit den Punkten generiert, welche zurück in das LMS überführt werden muss."


Übersicht

Das Deploy-to-Grading, welches Studierende über die GitHub Action ausführen, soll von Lehrenden auch lokal in einem Docker Container zur Sammlung der Ergebnisse ausgeführt werden können. Zur Zusammenführung von ILIAS- und GitHub-Daten geben Studierende im ILIAS die URL zu ihrem Pull Request ab.

Aus dem ILIAS kann von Lehrenden folgende Liste heruntergeladen werden:

student,pr
ILIAS_NAME,PR_URL

Hinweis 1: Da ich gerade nicht weiß, wie bei ILIAS die Ergebnisse bei Textabgaben aussehen, habe ich jetzt vereinfacht eine csv-Datei angenommen.

Hinweis 2: In der csv-Datei fehlt aktuell noch die Zuordnung ILIAS-Name <-> GitHub-Username. Da müsste geprüft werden, was ILIAS für Möglichkeiten hierfür bietet. Alternativ wäre eine "Abgabe" des GitHub-Usernames zu Beginn des Semesters möglich.

Ablauf

Im Folgenden wird der D2G-Ablauf für Lehrende beschrieben:

Schritt Bezeichnung Beschreibung
1. csv-Datei einlesen Einlesen der Daten aus dem ILIAS.
2. Auswerten der Ergebnisse (für jeden Eintrag in der csv-Datei) Für jede(n) Studierenden werden die Ergebnisse der abgegebenen Aufgabe aus dem jeweiligen Repository geladen und überprüft. Alternativ ist es auch möglich, den Deploy-to-Grading-Prozess für jede Abgabe erneut auszuführen. Dies ist zum Beispiel notwendig, wenn das herunterzuladende Artefakt nicht mehr verfügbar ist oder Änderungen an der GitHub Action festgestellt wurden.
3. Plagiatsprüfung Da an dieser Stelle alle Abgaben der Studierenden an einem Ort gesammelt sind, kann eine Plagiatsprüfung durchgeführt werden.
4. Export der Ergebnisse Die gesammelten Ergebnisse werden so aufbereitet, dass sie ins ILIAS übertragen werden können. (siehe dazu #17)

[D2G] Konzept für GH Action-Ablauf

Vergleich Docker vs Cmd-based

Docker Cmd-based
Kann mit wenigen Änderungen sowohl auf GitHub, GitLab als auch lokal ausgeführt werden. Ablauf des Programms direkt in der Definition ersichtlich.
Kein Docker-Overhead.

Zusammenfassung: Auch wenn in der Tabelle mehr Vorteile für eine Cmd-basierte Action genannt sind, ist der aktuelle Favorit von mir die Docker-basierte Action, da sie flexiber ist. Ein deutlicher Nachteil der Docker-basierten Action ist der Overhead und damit die längere Ausführungszeit. Ob es im Hinblick auf das verfügbare Zeitkontingent (2.000 min/Monat auf Linux für GitHub Free) Probleme geben könnte, muss während der Implementierung geprüft werden.

Ablauf in der GH-Action

Im folgenden wird der Ablauf der GH-Action beschrieben:

Schritt Bezeichnung Beschreibung
1. Aufgabenblatt-yml laden Einlesen der Aufgabenblatt-yml (Definiert in #14). Relevant sind für die Bewertung das Abgabedatum (due_date) und die Liste der Aufgaben (tasks).
2. Vorbereiten des Repositories Basierend auf dem Abgabedatum (due_date) wird das Repository passend ausgecheckt.
3. Aufgaben-yml laden (wiederholend bis 6. für jede Aufgabe in tasks) Einlesen der Aufgaben-yml für die jeweilige Aufgabe. Relevant sind die Tests (tests) und die Liste an nicht zu überschreibenden Dateien (no_override).
4. Überschreiben der Vorlagendateien Zur Vermeidung von veränderten Vorgabedateien werden alle in der Aufgabe vorhandenen Dateien mit den Dateien aus der Vorgabe überschrieben (Ausgenommen Lösungendateien, die nicht in der Vorlage vorhanden sind, und Dateien, die in no_override genannt sind.
5. Ausführen des Tests (wiederholend bis 6. für jeden Test in tests) Führt den jeweiligen Test aus. Die Ausführung wird über Gradle angestoßen. Ergebnisse werden im Ordner results/{task}/{test}/ gespeichert.
6. Auswerten der Ergebnisse der Tests Wertet die Ergebnisse der Tests aus und berechnet die erreichte Punktzahl für die jeweilige Aufgabe. Die Ergebnisse werden in der Datei results/{task}/result.yml gespeichert.
8. Präsentation der Ergebnisse Gibt die Ergebnisse auf der Konsole aus und stellt die Ergebnisse als Artefakt zur Verfügung (results-Ordner als zip-Datei).

Format der result.yml

task:                 # Name der Aufgabe für eine eindeutige Zuordnung
students:             # Liste mit Git-Namen der Studierenden, die an der Aufgabe beteiligt waren
tests:                # Metriken, die bei dieser Aufgabe ausgeführt wurden
  junit:
    mistakes:         # Auflistung aller Fehler innerhalb dieser Metrik
      - deduction:    # Anzahl Punkte, die für den Fehler abgezogen wurden
        description:  # Beschreibung des Fehlers
    points:           # Anzahl Punkte, die bei dieser Metrik erreicht wurden
    max_points:       # Maximal erreichbare Punktzahl (Hier notwendig für Vergabestrategie wie bei JUnit)

[D2G] Ergebnispräsentation für Studierende

Bei der Ausgabe für Studierende wird unterschieden zwischen einer einfachen Ausgabe über die Konsole der GH-Action und einer webbasierten Ergebnispräsentation.

Einfache Ergebnisausgabe für Studis

Als erste Präsentation der Ergebnisse soll eine einfache Ausgabe auf der Konsole des Workflows herhalten. Dazu gehört die Präsentation der Fehler, für die Punkte abgezogen wurden und am Ende eine Übersicht über die erreichte Punktzahl.

Die Ausgabe von Fehlern sieht folgendermaßen aus:

[TESTKLASSE (ABZUG)] KURZE_BESCHREIBUNG_DES_FEHLERS

Beispiel:

[JUnit (-1 Punkt)] Test `testSetVelocityNegative()` fehlgeschlagen.

Anmerkung: Eine detailliertere Ausgabe der Fehler soll durch eine lokale Ausführung mit gradle möglich sein.

Die Zusammenfassung sieht dann folgendermaßen aus:

Aufgabenblatt: NAME
Abgabedatum: DATUM
Beteiligte Studis: LIST_STUDIS
Erreichte Gesamtpunktzahl: P/ALL

|-----------|--------|
|  Aufgabe  | Punkte |
|-----------|--------|
| Aufgabe 1 |     19 |
| Aufgabe 2 |     10 |
|    ...    |      . |
|-----------|--------|

Erklärungen:

  • NAME: Name des Aufgabenblattes
  • DATUM: Abgabedatum
  • LIST_STUDIS: Liste der Studierenden, die mindestens einmal für diese Abgabe committed haben
  • P: Erreichte Punktzahl
  • ALL: Maximal erreichbare Punktzahl

Anmerkung: Die Formatierung der Tabelle kann in der finalen Implementierung anders ausehen.

Webbasierte Ergebnispräsentation für Studis (Optional)

Da bei der konsolenbasierten Ausgabe die Übersicht wahrscheinlich nicht wirklich gut sein wird, ist eine zweite Ausgabevariante sinnvoll, die insbesondere bei der Ausgabe der einzelnen Fehler hilfreicher sein soll. Im Allgemeinen ist die Idee vergleichbar zu der Übersicht von JPlag. Auf einer über GitHub.io gehosteten Webseite können Studierende ihre Ergebnisse in Form eines zip-Archivs hochgeladen. Dieses Archiv wird in Frontend verarbeitet und die Informationen daraus dargestellt.

Das zip-Archiv wird von der GH-Action als Artefakt (GH-Action) zur Verfügung gestellt und kann von GitHub heruntergeladen und auf die Webseite hochgeladen werden. Es enthält eine Zusammenfassung der Ergebnisse sowie die Aufgaben- und Aufgabenblattdefinitionen und die Ausgaben der einzelnen Tests (JUnit, Checkstyle, ...).

[D2G] Demo für den Abschlussbericht erstellen

Für den erfolgreichen Abschluss des Projekts, soll zum vorhandene Deploy-to-Abgabe System eine (präsentierbare) Demo gebastelt werden.
Das bedeutet:

  • das System für EINE konkrete Aufgabe aufsetzen
  • ggf. vorhandene. Bugs fixen
    • hier muss ich mal über die offenen Issues gehen
  • beispiel Abgaben für die verschiedenen Szenarien
    • fehlerfrei
    • kleine Fehler
    • abgabe nach Deadline
    • manipulierte Abgabe

@cagix Ich würde das gerne getrennt von den ganzen anderen Repos halten. Also einen mini Kosmos für die D2A-Demo.
Grob skizziert stelle ich mir das so vor:

D2A-Demo-Vorgabe-Repo

  • Aufgabentext und Vorgaben
  • D2A Skripte, Toolchain etc.

D2A-Demo-Studi-Repo

  • "Fork" des Dummy-Demo-Vorgabe-Repo
  • Unterschiedliche Branches für die oben genannten Szenarien (simulieren verschiedene Abgabe-Gruppen)
  • PR in den eigenen Master als Abgabe -> CI läuft

[D2G] Aufgaben anpassen

Alle Aufgaben müssen so umformuliert werden, dass sie mit der neuen Struktur zur gewollten Lösung führen.

[D2G] Automatischen laden der Subprojekte

Alle Aufgaben-Projekte sollen automatisch eingelesen werden.

In Gradle müssen die Subprojekte in settings.gradle hinterlegt werden. Damit wir diese Liste nicht manuell pflegen müssen, sollten diese automatisch eingelesen werden.

[D2G] Metrik PR Check

Es soll eine Metrik implementiert werden, mit der überprüft werden kann, ob ein Pull Request korrekt erstellt wurde. Dazu gehören unter anderem die folgenden Punkte

  • Korrekte Beschreibung des Commits
    • Sinnvoller Titel
    • Sinnvolle und ausführliche Beschreibung
    • Metadaten korrekt gesetzt (Assignees, Labels, ...)
  • Sauberer Inhalt des Commits
    • Commits sinnvolll gegliedert
    • Nur für den PR relevante Änderungen im Commit enthalten

Je nachdem wie tief man in das Thema einsteigen möchte, könnten auch LLMs zur Analyse der PR-Beschreibung genutzt werden.

Siehe dazu auch die Beschreibungen in der Design Dokumentation.

[D2G] Ergebnispräsentation für Lehrende

Die finale Rückmeldung an Lehrende sollte eine einfach weiterzuverarbeitende results.csv-Datei im folgenden Format sein:

name,mat_number,usernames,repository,no_commits,grade,overall_points,assignment1,assignment2,...
Max Mustermann,123456,mustermax;mmuster3000,https://github.com/mustermax/tasks,0,1.7,176,40,38,...

Anmerkung: Je nachdem, was präferiert wird, können wir auch Semikolons statt Kommata nutzen.

Erklärungen:

  • name: Vollständiger Name des/der Studierenden
  • mat_number: (optional?) Matrikelnummer des/der Studierenden
  • usernames: Liste an GitHub-Benutzernamen, die von dem/der Studierenden verwendet werden
  • repository: Repository, an dem mitgearbeitet wurde (Im Falle von Gruppenwechseln bräuchten wir hier eine Liste)
  • no_commits: Anzahl an Aufgabenblättern, an denen nicht aktiv mitgearbeitet/mitcommitet wurde
    • Notiz: Hier muss noch definiert werden, ob die Punktzahl trotzdem zu der Gesamtpunktzahl gerechnet wird oder nicht.
  • grade: (optional) Note für das Praktikum
  • overall_points: Gesamtpunktzahl für alle Aufgabenblätter zusammen
  • assignment1,assignment2,...: Punkte für die einzelnen Aufgabenblätter

Anmerkung: Statt oder zusätzlich zu name könnte der ILIAS-Name oder die E-Mail-Adresse angegeben werden.

Für eine detailliertere Übersicht über die Punktzahlen einzelner Studierenden existiert für jede Person noch eine eigene {firstname_lastname_mat_number}.csv-Datei (z.B. max_mustermann_123456.csv).

assignment,usernames,repository,has_commit,overall_points,task1,task2,...
Aufgabenblatt 1,mustermax,https://github.com/mustermax/tasks,true,40,10,10,...

Erklärungen:

  • assignment: Name des Aufgabenblattes
  • usernames: Liste an GitHub-Benutzernamen, die von dem/der Studierenden für dieses Aufgabenblatt verwendet wurden
  • repository: Repository, in dem das Aufgabenblatt abgegeben wurde
  • has_commit: true/false. Zeigt an, ob aktiv an der Aufgabe mitgearbeitet wurde
  • overall_points: Gesamtpunktzahl für das Aufgabenblatt
  • task1,task2,...: Punkte für die einzelnen Aufgaben

Je nachdem, ob die finale Bewertung als GH-Action oder lokal ausgeführt wird, wird entweder ein Ordner results mit den Dateien erstellt oder dieser wird in einer results.zip verpackt und als Artefakt in der GH-Action hochgeladen.

In einem Archiv {firstname_lastname_mat_number}/ (z.B. max_mustermann_123456/) werden die Ergebnisse einzelner Aufgabenblätter in .zip-Archiven gespeichert, sodass sie in der webbasierten Ergebnispräsentation für Studis (siehe #16) angesehen werden können.

[D2G] Deploy-to-Grading How to

okay hier einmal ein "schnell" runtegeschriebenes How to:

für Studis

An sich sind die Properties für Lokales arbeiten mit default werten versehen und somit müssen diese hier nicht extra konfiguriert werden.

  • einzelne Konzeptaufgabe
    • .\gradlew -p Konzeptaufgaben_name test --test LoesungsTestSuite
    • .\gradlew -p Konzeptaufgaben_name checkstyleMain
    • .\gradlew -p Konzeptaufgaben_name spotbugsMain
    • .\gradlew -p Konzeptaufgaben_name build (Kein Fehler da loesung_ordner im projekt_ordner liegt)
    • .\gradlew -p Konzeptaufgaben_name spotlessApply
  • alle Konzeptaufgaben
    • .\gradlew test --test LoesungsTestSuite
    • .\gradlew checkstyleMain
    • .\gradlew spotbugsMain
    • .\gradlew build (Kein Fehler da loesung_ordner im projekt_ordner liegt)
    • .\gradlew spotlessApply
für Deploy to abgabe

Bei Deploy to Abgabe sind die Pfade abweichend von dem lokalen arbeiten, daher müssen diese konfiguriert werden.

  • Parameter, die angegeben werden können, aber nicht müssen
    • loesung_ordner ist der Pfad von der Konzeptaufgabe zum Ordner wo das Repo mit den Lösungen ausgechecked wurden. Als Beispiel loesung_ordner="../../studi-repo" im default ist der pfad "../". Dies wurde gemacht, damit sowohl einzelne Konzeptaufgaben kontrolliert werden können sowie alle Konzeptaufgaben. Außerdem muss hier nicht die Konzeptaufgabe mit angegeben werden. Dies übernimmt gradle sowie auch nicht den Namen des Ordners aktuell "loesung".

    • checkstyle_config ist der Pfad von der Konzeptaufgabe zur checkstyle.xml. Als Beispiel checkstyle_config="../../vorgabe/.config/checkstyle_config/checks.xml" im default ist der pfad "../.config/checkstyle_config/checks.xml".

    • report_folder ist der Pfad wo die gesammten reports von Junit, Spotbugs und checkstyle abgespeichert werden sollen. Als Beispiel report_folder="../../reports" im default ist der pfad "../build/reports" also im Hauptordner neben den Ordnern für die Konzeptaufgaben. Die reports werden wie folgt angelegt:

(report_folder)
  Konzeptaufgaben_name
    checkstyle
      main.html
      main.xml
      test.html
      test.xml
    junit
      html
        ...
        index.html
      xml
        TEST-...xml
        ...
    spotbugs
      main.html
      main.xml
      test.html
      test.xml
  • Aufrufe einzelner Konzeptaufgaben mit der Struktur von #15

    • im vorgabe repo hauptordner
      • .\gradlew -Ploesung_ordner="../../studi-repo" -Preport_ordner="../../results" -p Konzeptaufgaben_name test --test LoesungsTestSuite
      • .\gradlew -Ploesung_ordner="../../studi-repo" -Preport_ordner="../../results" -p Konzeptaufgaben_name checkstyleMain
      • .\gradlew -Ploesung_ordner="../../studi-repo" -Preport_ordner="../../results" -p Konzeptaufgaben_name spotbugsMain
      • .\gradlew -Ploesung_ordner="../../studi-repo" -Preport_ordner="../../results" -p Konzeptaufgaben_name build (returns build failed wegen spotlessJava optimiert Pfade und verbietet das Arbeiten in Ordnern, die nicht direkt unter dem Projekt liegen)
  • Aufrufe aller konfigurierten Konzeptaufgaben mit der Struktur von #15

    • im vorgabe repo hauptordner
      • .\gradlew -Ploesung_ordner="../../studi-repo" -Preport_ordner="../../results" test --test LoesungsTestSuite
      • .\gradlew -Ploesung_ordner="../../studi-repo" -Preport_ordner="../../results" checkstyleMain
      • .\gradlew -Ploesung_ordner="../../studi-repo" -Preport_ordner="../../results" spotbugsMain
      • .\gradlew -Ploesung_ordner="../../studi-repo" -Preport_ordner="../../results" build (returns build failed wegen spotlessJava optimiert Pfade und verbietet das Arbeiten in Ordnern, die nicht direkt unter dem Projekt liegen)

@AMatutat

Originally posted by @AHeinisch in https://github.com/Programmiermethoden/Homework-Solutions/issues/55#issuecomment-1195345499

[D2G] Minimalversion

Es sollte zuerst eine Minimalversion entwickelt werden, auf der aufbauend neue Features implementiert werden können.

Folgende Funktionen sollte die Minimalversion unterstützen:

  • Ausführen des Programms für Studierende (Noch nicht für Lehrende)
  • Einlesen von yaml-Dateien
  • Ausführen und Auswerten der Tests und Speichern der Ergebnisse im results-Ordner (Noch keine Ergebnispräsentation)
  • Metriken: Nur die compile-Metric

Für den zu implementierenden Code sollen existieren:

  • Der Programmcode selbst
  • JavaDoc
  • Dokumentation im docs-Ordner
  • Unittests

[D2G] Dateistruktur von Aufgaben

Jede Aufgabe stellt ein eigenes vollständiges Java-Projekt mit folgendem Aufbau dar (Basiert zum Teil auf Link):

taskX/
|__.config/
|  |__task.yml            # Konfiguration der Aufgabe für D2A
|  |__checkstyle.xml
|  |__(Sonstige Konfigurationen)
|__.editorconfig
|__gradle/wrapper         # Wenn nicht anderweitig auslagerbar
|__src/
|__loesung/               # Notwendig?
|__test/
|__README.md              # Aufgabenstellung
|__build.gradle
|__(Restliche Gradle-Dateien)

Das Vorgaben-Repo enthält dann auf obersten Ebene die taskX-Ordner.

Anmerkung: Zur genauen Definition der task.yml siehe #14.
Anmerkung: Es sollte noch geprüft werden, ob Gradle-Standardsachen aus den Aufgaben ausgelagert werden können.

[D2G] Aufbau der D2G-Repositories

Anmerkung: Basierend auf Kommentar von @AMatutat.

Repository Struktur

Anmerkung: Die Namen der Repositories sind nicht final.

Notiz: Für Informationen zu git filter-repo siehe hier.

Repository Erläuterung
D2A Enthält die GitHub Action, die über den Workflow ab dem Template-Repository in jedes darunter liegende Repository eingebunden wird.
Template Enthält die Vorlagen für alle Aufgaben.
Tasks (Optional) Enthält die Vorlagen für ausschließlich die Aufgaben, die die Studierenden bearbeiten sollen.
StudiSolution Lösungen der Studierenden zu den Aufgaben.
HomeworkSolution (Option 1): Die Lösungen werden wie bisher im gleichen Repository gesammelt wie die Vorlagen. Das Template-Repository ist ein über Subtree erstelltes Repository, welches nur die Vorlagen enthält.
SampleSolution (Option 2): Enthält wie Option 1 die Lösungen zu den Vorlagen. Verhält sich im Gegensatz dazu aber wie StudiSolution.

Gegenüberstellung HomeworkSolution vs SampleSolution

HomeworkSolution SampleSolution
- Neue Aufgaben können in ein und demselben Repository erstellt werden (Keine Arbeit in zwei Repositories gleichzeitig oder Rüberkopieren von Dateien notwendig). - Entspricht dem Workflow der Studierenden.
- Kein doppelter Vorlagen-Code in zwei unterschiedlichen Repositories. - Erlaubt das Testen durch D2A, ohne eine Unterscheidung zu StudiSolution machen zu müssen.
- Bereits Pull-Request mit dieser Lösung vorhanden. - Ermöglicht das Arbeiten in den Vorgaben (größerer möglicher Aufgabenpool).
- Keine unterschiedlichen Build-Skripte und kein Ändern der Gradle-Konfiguration durch Source-Code, der an unterschiedlichen Stellen liegt.

Zusammenfassung: Der Ansatz SampleSolution erscheint mir deutlich simpler und ermöglicht zusätzliche Aufgabentypen und Testmöglichkeiten. HomeworkSolution vereinfacht dagegen die Erstellung von neuen Aufgaben und wir haben bereits einen PR dazu.

Erläuterung Task-Repository

Studierenden wird pro Praktikumseinheit eine ausgewählte Liste an Aufgaben gestellt. Da im Template-Repository aber alle Vorlagen vorhanden sind, wird ein "Zwischenrepository" benötigt, welches Aufgaben zu Praktikumseinheiten zuordnet, die an Studierende verteilt werden. Möglicher Aufbau des Repos: Zum Beispiel pro Praktikumseinheit ein Branch oder Aktualisieren bei jedem Aufgabenbeginn oder Praktikumseinheiten aufgeteilt in Unterordner.

Anmerkung: Die Erläuterung basiert darauf, dass ich nicht weiß, wie die Aufgaben vorher an Studierende gegeben wurden.

Anmerkung 2: @AMatutat hat mir mittlerweile gesagt, dass ihr im letzten Semester den Studis alle Aufgaben auf einmal zur Verfügung gestellt habt.

[D2G] GitHub Education Autograding

@cagix @AMatutat Hat sich einer von euch schon einmal mit dem Autograding von GitHub Education befasst? Deren Umsetzung klingt stark nach unserer Idee, wenn auch mit einigen Einschränkungen möglicherweise.

Im Hinblick auf Paper sollten wir uns davon auf jeden Fall abgrenzen können.

[D2G] Definition von Konfigurationsdateien für Aufgabenblattdefinition und Aufgabendefinition

Aus dem alten Konzept existiert eine task.json, in der die zu bewertenden Aufgaben aufgelistet sind. Ich bin der Meinung, dass wir auch nicht um eine solche Konfigurationsdatei herumkommen. Daher im folgenden mein Vorschlag.

Im folgenden unterscheide ich zwischen einer Definition für das Aufgabenblatt und für die einzelnen Aufgaben. Während die Aufgabenblattdefinition die Auswahl an Aufgaben und das Abgabedatum angibt, befindet sich in der Aufgabendefinition die eigentliche Konfiguration zum Testen und Bewerten.

Alternative: Könnten uns hier oder hier dran orientieren oder das sogar einhalten. Im zweiten Fall tun wir das schon zum Teil.

Format Aufgabenblattdefinition (assignment.yml)

name:                  # Name des Aufgabenblatts
description:           # (optional) Pfad zu einer README, falls man daraus mal richtige Aufgabenblätter generieren möchte oder direkt hier
due_date:              # Abgabetermin (Commits danach zählen nicht mehr) (Muss jedes Semester aktualisiert werden)
tasks:                 # Liste mit allen zu dem Aufgabenblatt gehörenden Aufgaben (Würde entfallen bei Zwischen-Repository)
    - (List)

Notiz: Könnte das Abgabedatum auch aus der schedule.yaml aus PM-Lecture gelesen werden?

Format Aufgabendefinition (task.yml)

name:                  # Name der Aufgabe (nötig?)
description:           # (optional) Sollte immer zur README.md zeigen
metrics:                 # Liste an Tests, die für die Benotung ausgeführt werden sollen
    compile:
        # Individuelle Konfiguration des Tests (Unvollständige Auflistung)
        points:        # siehe [Strategie der Punktevergabe](#strategie-der-punktevergabe)
    junit:
        # Individuelle Konfiguration des Tests (Unvollständige Auflistung)
        points_per_test: # siehe [Strategie der Punktevergabe](#strategie-der-punktevergabe)
        depends_on: compile
    checkstyle:
        # Individuelle Konfiguration des Tests (Unvollständige Auflistung)
        max_points:    # siehe [Strategie der Punktevergabe](#strategie-der-punktevergabe)
        depends_on:    # Wird nur ausgeführt und gibt nur Punkte, wenn das genannte target bestanden wurde
no_override:           # Liste an Dateien, die nicht mit der Vorlage überschrieben werden dürfen

Strategie der Punktevergabe

Im Gegensatz zum task.json-Vorschlag könnte man die Punktevergabe für jeden Test einzeln lösen, um das Verhältnis auch justieren zu können.

Vergabestrategie Erläuterung Anwendungsbeispiel
Alles oder nichts Es werden nur alle Punkte vergeben oder keine Punkte. Dies findet z.B. Anwendung bei compile, wo es kein klappt nur zur Hälfte gibt. compile
Punktabzug pro Fehler Es wird eine Maximalpunktzahl für diesen Testtyp vergeben. Das bedeutet auch, dass man mehr Fehler haben kann, für die keine Punkte mehr abgezogen werden, wenn bereits 0 Punkte erreicht werden. checkstyle
Eindeutige Punktevorgabe Es werden die möglichen Punkte genau vorgegeben. Im Falle von junit bedeutet das, dass die Anzahl der definierten Tests die Punkteanzahl angibt. (Erweiterung: Anwenden (der Idee) von JGrade, dass bei jedem Test genau definiert ist, wie viele Punkte man für diesen erhalten kann.) junit

[D2G] Ergebnisse der Toolchain extrahieren

Die Ergebnisse der Toolchain werden in verschiedenen Dateien gespeichert.
Diese müssen im Python Skript eingelesen und ausgewertet werden.
Dafür soll für jeden Task für jedes Kriterium eine "Map" angelegt werden.

  • JUnit
    • Wie viele Tests gibt es im LoesungsTestSuit?
    • Wie viele sind gescheitert?
  • Spotbugs
    • Wie viele Probleme gibt es pro Stufe?
  • Checkstyle
    • Wie viele Probleme gibt es pro Stufe?
  • (Spotless)

[D2G] Überschreiben der Vorlagedateien

Umsetzung des vierten Schrittes des GH-Action-Ablaufs aus der Dokumentation:

Schritt Bezeichnung Beschreibung
4. Überschreiben der Vorlagendateien Zur Vermeidung von veränderten Vorgabedateien werden alle in der Aufgabe vorhandenen Dateien mit den Dateien aus der Vorgabe überschrieben (Ausgenommen Lösungendateien, die nicht in der Vorlage vorhanden sind, und Dateien, die in no_override genannt sind.

[D2G] Ergänzungen zum Related Work

Folgendes sollte aufbereitet in das Related Work unter doc/related_work hinzugefügt werden:

Automatisierte Bewertung in der Programmierausbildung, Oliver J. Bott, Peter Fricke, Uta Priss, Michael Striewe (Hrsg.), 2017, Digitale Medien in der Hochschullehre, Band 6, ISBN 978-3-8309-3606-0

Gibt einen umfangreichen Überblick über das Autograding an deutschen Hochschulen und Universitäten. Es stellt einige aktuell eingesetzte Autograder vor und vergleicht diese.

Für die Einordnung von D2A in das Forschungs-/Entwicklungsgebiet der AutoGrader, siehe #619

Teaching Clean Code, Dietz, Manner, Harrer, Lenhard, 2018, ISEE 2018: 1st Workshop on Innovative Software Engineering Education @ SE18, Ulm, Germany (https://mediatum.ub.tum.de/1428241)

Allgemein: Google Scholar "Teaching Clean Code": https://scholar.google.de/scholar?q=related:Y3CjdfUuTXAJ:scholar.google.com/&scioq=teaching+clean+code&hl=en&as_sdt=0,5

Aus alten Quellenverzeichnis im Dungeon-Repo

[D2G] Wahl der Implementierungssprache

Nach dem gestrigen Meeting habe ich nochmal über die Wahl der richtigen Programmiersprache nachgedacht. Hier mal eine Zusammenfassung dazu:

bash Python Java
- Funktioniert nicht unter Windows - Benötigt zusätzliche Installation eines Python-Interpreters - Muss kompiliert werden
- Bei größeren Skripten schnell schwer verständlich (Ich denke da ans Einlesen von YAML und Auswerten der Ergebnisse - Wenn man es "richtig" machen will, dann wird es keinen großen Unterschied im Vergleich zur Größe des Java-Projekts geben - Für eine solche Aufgabe könnte das Projekt unnötig groß werden
- Schwer zu testen (Unittests) o Mittelding zwischen bash und Java mit dem Nachteil, dass es zusätzlich installiert werden muss. Ob das Python jetzt insgesamt besser oder schlechter macht ist schwer einzuschätzen + Egal wer längerfristig gesehen sonst noch daran arbeiten sollte, sollte kein Problem mit der Programmiersprache haben
- Keine wirkliches Dokumentationsschema
+ sehr flexibel

Frage: Wie relevant ist eigentlich Flexibilität und wie zeichnet die sich aus? Am ehesten wird doch Flexibilität bei der Wahl der Metriken benötigt und da frage ich mich, ob bash oder Java dort einen Unterschied macht. Oder verstehe ich Flexibilität falsch?

Hier mal eine Auflistung, was meiner Einschätzung nach durch welche Sprache am einfachsten umzusetzen wäre:

Schritt Bezeichnung Sprache
1. Aufgabenblatt-yml laden Python/Java
2. Vorbereiten des Repositories bash
3. Aufgaben-yml laden (wiederholend bis 6. für jede Aufgabe in tasks) Python/Java
4. Überschreiben der Vorlagendateien bash
5. Ausführen des Tests (wiederholend bis 6. für jeden Test in tests) gradle
6. Auswerten der Ergebnisse der Tests Python/Java
7. Präsentation der Ergebnisse Python/Java, bash fürs Zippen der Ergebnisse fürs Artefakt

Bash hat für manche Sachen definitiv Vorteile, da es einfacher ist. Sobald es aber um komplexere Datensätze geht, wäre der Einsatz von Python oder Java wahrscheinlich sinnvoller, wobei ich da eher bei Java bin.

Ich würde mal versuchen, bis nächste Woche Schritt 2 in Bash zu implementieren.

@cagix @AMatutat Was ist eure Ansicht dazu? Falls es etwas länger wird, könnt ihr auch gerne das https://github.com/Programmiermethoden/Deploy-to-Grading/labels/meeting -Label an das Issue packen.

[D2G] Build Script für alle Task

Ziel wäre es, ein Master-Buildskript im vorgabe/.config Verzeichnis.
Diesem Master-Buildskript würde ich folgende Parameter übergeben:

  • Welcher Task "gebaut" werden soll
  • Wo der zu verwendende loesung Ordner liegt.
  • Wo die Ergebnisse von JUnti, Spotbugs und co gespeichert werden sollen
  • Wo die Checkstyle config liegt.

Das Master-Buildskript ruft dann das ensprechende Task-Buildskript auf und übergibt die genannten Parameter.
Ausgeführt werden soll:

  • build
  • test
  • spotbugs
  • checkstyle
  • spotless

Dieses Ticket besteht daher aus zwei Schritten;

  • Struktur der Vorgaben (und des Homework-Solution) ändern und für jeden Task ein build.gradle einfügen
  • Erstellen des Master-Buildskripts
    vorgabe
        alles_von_gradle
        .config
                python-skript
                master-build.gradle   <- mache $TASK (build.gradle) mit $../../studi-repo/$TASK/loesung und speicher ../../result/$TASK (issue) mit ./checkstyle
                task.jsons
                checkstyle/
                (local.bash (was die action macht))
        task1  
            src/
            test/
                vorgaben/
                loesung/
            build.grade   (<- wo loesung ordner?, wo results speichern?, welcher Checkstyle?)
        task2
            ...
        README.md
        LICENCE.md


    studi-repo
        (alles_von_gradle)
        .config
                (python-skript)
                (master-build.gradle)
                (task.jsons)
                (checkstyle/)
                local.bash (was die action macht)
                
        task1
            (src/)
            (test/)
            loesung/
            (build.gradle)
        task2

    results
        task1
            junit
            spotbugs
            spotless
            checkstyle
            punkte(studi : dieser Task)
            all_outputs.html (spotbugs,junit und co)
        task2
            ...
        gesamtPunkte (studi: gesamtenPunkten)

    


LEGENDE:
    () means: Wird in diesem Repo nicht verwendet

[D2G] Eindeutige Bennung von D2A / D2G

Für eine Publikation sollten wir uns für einen eindeutigen Namen entscheiden. Momentan verwenden wir ja sowohl Deploy-2-Abgabe als auch Deploy-2-Grading.

[D2G] Freie Aufgabenwahl / Konfiguration durch Studierende

Studierende sollen sich die Aufgabenstellungen selbst basierend auf ihrem Vorlesungsfortschritt auswählen und den Abgabetermin selbst terminieren können. Siehe dazu auch folgenden Kommentar:

"Um ein Self-Paced Learning zu ermöglichen, haben wir darauf verzichtet, in die Dungeon-Aufgaben konkrete Bezüge zu den verschiedenen Lehrinhalten zu formulieren: Die Vorlesungsinhalte haben (derzeit noch) einen festen zeitlichen Plan, während die Aufgaben in einer freien zeitlichen Reihenfolge bearbeitet werden können. Anderenfalls könnten bestimmte Aufgaben erst zu einem bestimmten Zeitpunkt bearbeitet werden. Die Studierenden sind aber aufgefordert, die Bezüge zum Vorlesungsstoff selbst herzustellen und beispielsweise ein Pattern zu erkennen und anzuwenden, sofern es bereits in der Vorlesung behandelt wurde. Mit der Einführung eines automatisierten Bewertungssystems soll es auch wieder Aufgaben geben, die sich spezifisch mit bestimmten Vorlesungsthemen auseinander setzen bzw. die Vorlesungsthemen spezifisch in die Dungeon-Aufgaben integrieren. Zusätzlich sollen dann auch die Vorlesungsthemen in einer relativ freien zeitlichen Reihenfolge bearbeitet werden können - das automatisierte Bewertungssystem ermöglicht diesen Spielraum."

Originally posted by @cagix in https://github.com/Programmiermethoden/2022-freiraum-dungeon/pull/146#discussion_r1219166273

[D2G] Testmetriken

Eine Auflistung an möglichen Metriken, mit denen die Abgaben bewertet werden sollen. Die Metriken sind unterteilt in Metriken, die von Studierenden selbst ausgeführt werden können (durch die GH-Action) und Metriken, die nur bei der endgültigen Bewertung eingesetzt werden können, da sie z.B. Gruppenübergreifend arbeiten.

Für alle (insbesondere Studierende)

Metrik Erläuterung Einordnung Tool
Kompilierung Die erste Anforderung an eine Abgabe sollte sein, dass es erfolgreich kompiliert werden kann. Gleichzeitig können wir hiermit und dem depends_on in der Aufgabendefinition verhindern, dass andere Tests unnötig ausgeführt werden. Muss javac
Unittests Zum Testen der konkreten Implementierung verwenden wir offensichtlicherweise Unittests. Dazu kann auch das Testen über Logging genutzt werden. Muss JUnit / JGrade
CLI-Tests (Blackbox Testing) Für alle möglichen Testfälle, die sich nicht mit Unittests umsetzen lassen, stellen wir noch eine zweite Variante bereit. Hiermit sollte auch die Nelson-Methode aus Dungeon-CampusMinden/Dungeon#337 abgedeckt sein. Falls Logging-Tests nicht direkt über Unittests durchgeführt werden sollen, können auch CLI-Tests dafür genutzt werden. Muss (noch offen) / JGrade
Code Format Zum Prüfen, ob der Code korrekt formatiert ist bzw. der Formatierungsprozess korrekt angestoßen wurde. Muss Spotless
JavaDoc Documentation Zum Prüfen, ob JavaDoc mit abgegeben und korrekt eingesetzt wurde. Muss Checkstyle
Code Coverage Zum Prüfen von Aufgaben, in denen Studierende Tests schreiben sollen. Insbesondere im Hinblick, ob Methoden vergessen wurden. Sollte https://emma.sourceforge.net/intro.html
Coding-Style und Softwaremetriken Sammelmetrik für alle Coding-Style Sachen. Je nachdem, was für Checkstyle definiert wurde. Sollte Checkstyle (alternativ PMD)
Bug Checking Prüfen auf Bugs. Wenn nicht eh bereits über Unittests abgedeckt. Kann SpotBugs
Effizienz (z.B. Ausführungszeiten) Wahrscheinlich nicht überall anwendbar, aber vielleicht findet man ein paar Fälle, in denen sich das Prüfen auf Effizienz lohnt. Kann (offen)
Dungeon Damit alle Ergebnisse an einer Stelle gesammelt sind, könnte man hier auch die Dungeon-Ergebnisse auswerten. Kann (eigene Anwendung)
GUI Testing Falls überhaupt relevant. Kann (offen)
PR Check In Dungeon-CampusMinden/Dungeon#334 ist eine Checkliste mit Punkten, die ein PR erfüllen muss. Das könnte man auch überprüfen. Folgende Punkte sind genannt: Titel, Beschreibung, Assignes, ggf. Review, Mehrere kleine Commit, Nur relevante Dateien, Sortiertes Repo. Basierend auf dieser Definition ist eine eigenständige Aufgabe für den PR Check notwendig. Kann (offen)

Nur für die endgültige Bewertung

Metrik Erläuterung Einordnung Tool
Plagiats-/Abschreibeerkennung Gerade bei der automatischen Bewertung kann leicht dieselbe Lösung von unterschiedlichen Studis eingereicht werden. Nach dem Motto: Schaut sich doch eh keiner mehr an. Um dies zu verhindern, sollte eine Abschreibeerkennung eingefügt werden. Muss JPlag
Dungeon Damit alle Ergebnisse an einer Stelle gesammelt sind, könnte man hier auch die Dungeon-Ergebnisse auswerten. (Doppelnennung, da Studierende vermutlich schon im Dungeon eine Rückmeldung bekommen sollten. Hier dann nur zur Zusammenfassung der Ergebnisse.) Kann (eigene Anwendung)
Manuelle Bewertung Falls die Bewertung angepasst werden muss, z.B. weil die automatischen Tools etwas nicht abdecken oder ein Fehler bei den Tools gefunden werden, wird diese zusätzliche "Metrik" benötigt. Hierbei besteht bei dem bisherigen Konzept noch das Problem, dass die manuelle Bewertung nicht für Studierende sichtbar ist. Kann (offen)

[D2G] GUI für YAML-Generierung

Basierend auf folgendem Kommentar könnten wir eine GUI zum Erstellen der yaml-Dateien basteln. Webbasiert, da das wahrscheinlich der einfachste Weg ist, die an Studis zu verteilen. Könnte man z.B. über das ILIAS HTML Lernmodul hosten?

"Im Prinzip müsste man wochenweise Deadlines als solche vorgeben und die Studis können sich nach irgendwelchen Regeln für jede Deadline Aufgaben zusammensuchen. D.h. sie müssten sich tatsächlich eine Art Konfiguration zusammen bauen (lassen) - vielleicht könnten wir dann eine Art GUI anbieten, wo man die Deadlines und Aufgaben auswählen (anklicken) kann, und wo dann das passende .yaml rausfällt? Die GUI selbst sollte auf einer .yaml von uns basieren, d.h. mit den Deadlines und Aufgaben und so und daraus dynamisch eine Ansicht generieren."

Originally posted by @cagix in https://github.com/Programmiermethoden/2022-freiraum-dungeon/pull/146#discussion_r1221263741

Edit: Die Frage ist, ob das webbasiert sein muss - das zieht gleich wieder Fragen nach einem Server o.ä. nach sich. Mir würde eine einfache Swing-basierte Lösung völlig reichen, die man per .jar verteilt und die die Studis direkt starten können.

[D2G] Basisstruktur für die Ausführung durch Lehrende

Umsetzung der Schritte 1, 2 und 4 für die Ausführung durch Lehrende.

Schritt Bezeichnung Beschreibung
1. csv-Datei einlesen Einlesen der Daten aus dem ILIAS.
2. Auswerten der Ergebnisse (für jeden Eintrag in der csv-Datei) Für jede(n) Studierenden werden die Ergebnisse der abgegebenen Aufgabe aus dem jeweiligen Repository geladen und überprüft. Alternativ ist es auch möglich, den Deploy-to-Grading-Prozess für jede Abgabe erneut auszuführen. Dies ist zum Beispiel notwendig, wenn das herunterzuladende Artefakt nicht mehr verfügbar ist oder Änderungen an der GitHub Action festgestellt wurden.
4. Export der Ergebnisse Die gesammelten Ergebnisse werden so aufbereitet, dass sie ins ILIAS übertragen werden können.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.