=Paper= {{Paper |id=Vol-2250/WS_Pro_paper4 |storemode=property |title=it4all – Ein Korrekturframework für Programmieraufgaben(it4all - A Framework for Verification of Programming Exercises) |pdfUrl=https://ceur-ws.org/Vol-2250/WS_Pro_paper4.pdf |volume=Vol-2250 |authors=Björn Eyselein,Frank Puppe |dblpUrl=https://dblp.org/rec/conf/delfi/EyseleinP18 }} ==it4all – Ein Korrekturframework für Programmieraufgaben(it4all - A Framework for Verification of Programming Exercises)== https://ceur-ws.org/Vol-2250/WS_Pro_paper4.pdf
                                   Daniel Schiffner (Hrsg.): Proceedings of DeLFI Workshops 2018
         co-located with 16th e-Learning Conference of the German Computer Society (DeLFI 2018)
                                                           Frankfurt, Germany, September 10, 2018

it4all – Ein Korrekturframework für
Programmieraufgaben

Björn Eyselein, Frank Puppe1



Abstract: Dieses Paper stellt das E-Assessment-Framework „it4all“ vor, das an der Universität
Würzburg entwickelt wird. Der Fokus liegt hierbei auf der leichten Erweiterbarkeit durch die
Integration neuer Tools zur Bewertung formaler Aufgaben und der leichten Bedienbarkeit sowohl
durch Lehrende aus auch Lernende. Es wurden bereits verschiedene einzelne Korrekturtools, z. B.
für Webprogrammierung, entwickelt und getestet.
Keywords: E-Learning, E-Assessment



1        Einleitung

Die Programmierung gehört nicht nur in der Informatik, sondern auch in der digitalen
Gesellschaft zu den Kernkompetenzen. Daher ist die Programmierausbildung ein
wichtiges Thema im universitären Umfeld. Eine reine theoretische Erläuterung der
einzelnen Funktionen und Merkmale einer Programmiersprache sind hier nicht
ausreichend, die Lernenden müssen durch „Learning by doing“, also durch das
Schreiben eigener Programme, ihre eigenen „handwerklichen“ Fertigkeiten
weiterentwickeln. Dabei ist es wichtig, dass die Lerner Feedback bekommen, um zu
überprüfen, wie gut ihre Lösung ist. Eine früher übliche Methode ist es, die Aufgaben als
Übungsblatt bereitzustellen, die Lösungen einzusammeln und durch Hilfskräfte
korrigieren zulassen. Dieses Vorgehen ist aufwendig, zudem kommt das Feedback spät,
da von der Erstellung der Lösung über die Abgabe an einem meist festen Termin, der
Korrektur und der Rückgabe der korrigierten Lösung zu viel Zeit vergeht.
Daher wurden in verschiedenen Arbeiten, auch an der Universität Würzburg, Tools zur
automatischen Korrektur von Aufgaben zu allgemeinen Programmierung ([ST04],
[Hr03]), SQL ([So10], [Ab08], [If14]) und zu UML-Diagrammen ([So10], [If14])
entwickelt. Diese sind meist jedoch nur Prototypen, um die Konzepte zu testen. Auch
wenn die Tools den Alpha- oder Betastatus verlassen, sind sie meist nur für sehr
spezielle Anwendungsfälle ausgelegt. Eine Benutzerverwaltung oder Integration in ein
Learning-Management-System wie zum Beispiel Moodle ist, wenn überhaupt, nur als
Prototyp vorhanden. Außerdem endet die aktive Entwicklung häufig mit dem
1
    Julius-Maximilians-Universität Würzburg
    Lehrstuhl für Informatik VI – Künstliche Intelligenz und Angewandte Informatik
    Am Hubland, 97074 Würzburg
    {bjoern.eyselein , frank.puppe }@informatik.uni-wuerzburg.de
Björn Eyselein und Frank Puppe

Ausscheiden der Mitarbeiter, die das Tool hauptsächlich entwickelt haben. Eine
Einbindung in ein größeres Framework und eine Weiterentwicklung der Tools durch
neues Personal scheitert oft an der verwendeten Programmiersprache bzw. den zur
Implementierung verwendeten Tools und Bibliotheken.
Mit it4all wurde ein Framework geschaffen, dass diese Probleme lösen soll. Dabei
wurden auch Tools, die bereits an der Universität Würzburg entwickelt wurden und im
Einsatz waren, in das neue Framework eingebunden. Dabei waren verschiedene
Anpassungen und teilweise Neuimplementierung nötig.
 Dies betrifft zum Beispiel die Korrektur von SQL-Anfragen, die in [If14] als
„Übungsprogramm für SQL“ entwickelt wurde. Dieses Tool kann SELECT-, UPDATE-,
INSERT- und DELELTE-Anfragen korrigieren. Da die verwendeten Tools und Libraries
nicht mit dem Framework kompatibel waren, wurde das Tool für das Framework neu
entwickelt und um die Möglichkeit der Korrektur von CREATE-Statements erweitert.
Ein weiteres integriertes Tool ist das Korrekturtool für UML-Klassendiagramme, das
auch in [If14]. Hier konnten Lernende ein komplettes Klassendiagramm mit einem
integrierten Editor erstellen. Dies wurde an den Server gesendet und dort mit einer
Musterlösung verglichen. Auch hier wurde das Tool aufgrund der Wahl der Bibliotheken
neu implementiert. Hinzugekommen ist hier die Möglichkeit, die Erstellung des
Klassendiagrammes in mehreren logisch aufeinanderfolgenden Schritten vorzunehmen.
In diesem Fall werden zuerst die zu erstellenden Klassen gewählt, diese korrigiert, dann
die Beziehungen zwischen den nun definitiv korrekten Klassen erstellt, diese wiederum
korrigiert und zum Schluss die Methoden und Attribute den jeweiligen Klassen
zugeordnet.
Neu entwickelt wurde ein Tool zur Korrektur von Tabellenkalkulationsaufgaben, die mit
Microsoft Office Excel oder LibreOffice Calc bearbeitet werden können. Die
Lösungsdatei wird in diesem Tool auf den Server hochgeladen und dort mit einer
Musterdatei verglichen. Nach dem Download der korrigierten Datei kann der Lerner
seine Fehler sehen.


2    it4all als Framework

it4all stellt ein Korrekturframework mit verschiedenen bereits implementierten Tools (u.
a. für Programmierung mit Python, Webprogrammierung, SQL und UML) als Scala -
Webserver bereit. Es ist mit dem Play Framework implementiert. Die einzelnen
Korrekturtools nutzen bei dynamischer Korrektur Docker-Container, um die Ausführung
der Nutzerlösungen nicht auf dem eigentlichen Produktivserver auszuführen und somit
die Sicherheit zu erhöhen. Bei der Implementierung wurde auf Wiederverwendbarkeit
von Gemeinsamkeiten der verschiedenen Aufgabentypen geachtet. Dazu gehören sowohl
                                   it4all – Ein Korrekturframework für Programmieraufgaben

Eigenschaften der Aufgaben (Generelle Felder wie Autor, Titel, Text, ...) als auch
komplette Funktionsweisen wie der generelle Ablauf einer Korrektur. So können sich die
Nutzer an ein festes Benutzungsschema gewöhnen und müssen sich nicht für jedes neue
Tool neu in eine Oberfläche einarbeiten.

Eine Einführung in die eigentlichen Themenbereiche ist dabei ausdrücklich kein Ziel
von it4all. Das Framework und die Tools sind jeweils vorlesungsbegleitend als
Übungshilfe gedacht, Einführungsmaterial muss aus anderen Quellen bereitgestellt
werden.
Bei den bereits bestehenden Tools werden Beispielaufgaben mitgeliefert, so dass sich
Lehrende bei der Erstellung einer neuen Aufgabe daran orientieren können.


2.1    Allgemeine Funktionsweise der Korrektur

Die Korrektur einer Aufgabe findet jeweils asynchron mit Hilfe eines AJAX-Requests
statt. Dabei wird die generelle Vorgehensweise vom Framework vorgegeben und es
müssen bei den einzelnen Tools nur noch spezielle Funktionalitäten, wie das Auslesen
der Lösung, implementiert werden. Während einer Korrektur wird die Möglichkeit, eine
weitere Korrektur anzufordern, gesperrt, so dass die Nutzer den Korrekturserver nicht
überlasten kann. Das Resultat der Korrektur wird als JSON an den Browser des Nutzers
zurückgesendet und dort von Javascript gerendert. Somit können die Resultate bei
unterschiedlichen Tools unterschiedlich angezeigt werden. Außerdem können die
Lernenden ihre Lösung gegebenenfalls iterativ verbessern, da die Resultate der
Korrektur in der Bearbeitungsseite selbst dargestellt werden.


2.2    Integration eines neuen Tools

Ein neues Korrekturtool kann durch die Erweiterung verschiedener Basisklassen
hinzugefügt werden. Dabei wird der größte Teil der Grundfunktionalität bereitgestellt, so
dass nur noch toolspezifische Funktionalität implementiert werden muss, also die genaue
Definition der Persistenzschickt, die Funktionsweise der eigentlichen Korrekur, eine
Bearbeitungsansicht und die Darstellung der Lösung in Javascript. Die eigentliche
Korrektur kann in einem Docker-Container durchgeführt werden. Die Ergebnisse
müssen dann z. B. in eine Datei geschrieben und von it4all wieder ausgelesen werden.
Eine Dokumentation der zu erweiternden Schnittstellen wird momentan erstellt.


2.3    Erstellung von Aufgaben

Für die Definition von Aufgaben wird die Auszeichnugssprache YAML [Ya18] genutzt.
YAML ist eine Obermenge von JSON, d. h., jedes JSON-Dokument ist auch ein YAML-
Dokument und kann somit auch von it4all verarbeitet werden. YAML bzw. JSON haben
Björn Eyselein und Frank Puppe

gegenüber XML den Vorteil, dass weniger Text zum Auszeichnen geschrieben werden
muss und somit die Struktur des Dokuments leichter erkennbar ist. YAML hat im
Vergleich zu JSON zusätzlich den Vorteil, dass Strings, die länger als eine Zeile sind,
getrennt werden können. Bei JSON wird die Zeile in diesem Fall sehr lange oder es muss
ein Workaround (z. B. eine Konkatenierung eines Arrays) eingesetzt werden. Einige
(reduzierte) Beispiele für Aufgabendefinition befindet sich auf den nächsten Seiten.
 Aufgabenbeschreibung:
 Welche Emailadresse hat Max Becker für die Arbeit?

 Korrekturspezifikation:
 exerciseType: SELECT
 samples:
 - SELECT emailaddress
     FROM employee JOIN emailaddress
     ON employee.id = emailaddress.employee_id
     WHERE firstname = 'Max' AND lastname = 'Becker'
 - SELECT emailaddress FROM employee, emailaddress
     WHERE employee.id = emailaddress.employee_id
     AND firstname = 'Max' AND lastname = 'Becker'



Abbildung 1: SQL-Aufgabe. Das Datenbankschema ist in einem separaten Fenster
gegeben und hier aus Platzgründen nicht angezeigt.

  Aufgabenstellung:
  In dieser XML-Datei soll eine Mannschaft „team“ beschrieben
  werden. Diese besteht aus mindestens einem Spieler „player“.
  Ein Spieler hat eine Nummer „number“ und einen Namen „name“.

  Korrekturspezifikation:
                    
                     
                    
  
         (CDATA) #REQUIRED>




Abbildung 2: XML-Aufgabe. Es ist möglich, mehrere DTDs anzugeben. Partiell
richtige Lösungen werden erkannt.
                               it4all – Ein Korrekturframework für Programmieraufgaben



 Aufgabenstellung:
 Erstellen Sie ein Bild in HTML, das gleichzeitig ein Link ist.
 Verwenden Sie als Link-URL 'de.wikipedia.org/Ford_Mustang', als
 Bildquelle die URL '/pictures/mustang.jpg' und geben Sie als
 alternative Beschreibung für das Bild 'Ford Mustang' an.

 Korrekturspezifikation:
 - xpathQuery: /html/body//a
   attributes:
   - {key: href, value: 'de.wikipedia.org/Ford_Mustang'}
 - xpathQuery: /html/body//a//img
   attributes:
   - {key: src, value: '/pictures/mustang.jpg'}
   - {key: alt, value: Ford Mustang}

Abbildung 3: HTML-Aufgabe. Die XPath-Query gibt das zu suchende Element an. Die
nötigen Attribute werden unter Attributes angegeben


 Aufgabenstellung:
 Berechnen Sie den Durchschnittswert aller Elemente als
 Gleitkommazahl in der übergebenen Liste von (Ganz-)Zahlen! Ihr
 Programm sollte z. B. für die Eingabe [1, 5, 7] die Ausgabe
 4.333333 zurückgeben. Erweitern Sie dazu folgenden
 Programmrumpf:

    def average(my_list):
      return 0

 Korrekturspezifikation:

 Musterlösung:
   def average(my_list):
     if len(my_list) == 0:
       return "Fehler"
     else:
       return sum(my_list) / len(my_list)

 Testdaten:
 - {inputs: [], output: 0.}
 - {inputs: [1, 3, 5], output: 3.}

Abbildung 4: Programmier-Aufgabe
Björn Eyselein und Frank Puppe

    Aufgabenstellung:
    Im Entwurfsmuster "Komposition" sind die drei Klassen Grafik,
    Container und Bild vorhanden. Die Klassen Container und Bild
    erben von der abstrakten Klasse Grafik. Sie besitzen nur die
    Methode zeichnen. Ein Container kann beliebig viele Bilder
    enthalten.

    Korrekturspezifikation:
    classes:
    - {classType: ABSTRACT, name: Grafik, methods: [{visibility:
    public, name: zeichnen, parameters: '', type: void}]}
    - {classType: CLASS, name: Container}
    - {classType: CLASS, name: Bild}
    associations:
    - {assocType: ASSOCIATION, firstEnd: Container, firstMult:
    SINGLE, secondEnd: Bild, secondMult: UNBOUND}
    implementations:
    - {subClass: Container, superClass: Grafik}
    - {subClass: Bild, superClass: Grafik}

Abbildung 5: UML-Aufgabe


3     Beispiel: Korrekturtool Web

Beispielhaft stellen wir im eines der für it4all implementierten Tools genauer vor: die
Korrektur von Web-Programmen. Hier wird derzeit für HTML (+ CSS) und Javascript
Feedback generiert. Abbildung 1 zeigt die Bearbeitungsansicht einer Aufgabe dieses
Tools (Siehe auch Aufgabenbeschreibung oben).
In der linken Hälfte des Webbrowsers wird dem Lernen ein Codeeditor mit
Syntaxhighlighting zur Verfügung gestellt. Im Editor ist ein Teil der Lösung bereits
eingetragen worden.
In der rechten Hälfte sind unter Reitern jeweils die Aufgabenstellung beziehungsweise
die Livevorschau der von dem oder der Lernenden erstellten Webseite zu sehen. Die
Aufgabenstellung zeigt einen kleinen Einführungstext zur Aufgabe und dann die
einzelnen Elemente, die auf dieser Seite erstellt werden sollen. Jeder Unterpunkt stellt
dabei ein Element dar. Darunter wird ein Beispiel für die Korrektur dargestellt, in der
drei von vier Elementen gefunden wurden. Beim letzten Element fehlen jedoch einige
Attribute.
                                   it4all – Ein Korrekturframework für Programmieraufgaben




Abbildung 6: Bearbeitungsansicht Webprogrammierung mit Korrektur (vgl. Abb. 1)


3.1    Funktionsweise der Korrektur

Bei der Korrektur von HTML-Dokumenten wird auf das Vorhandensein von Elementen
geprüft. Dafür wird für jedes der Elemente eine XPath-Query angegeben, die dieses in
einer korrekten Lösung eindeutig im Dokument identifiziert und das Element anhand
dieser Query gesucht. Wird keines gefunden, gilt diese Teilaufgabe als falsch und die
Korrektur fährt mit dem nächsten Element fort. Gleiches gilt, falls mit der Query mehr
als ein passendes Element gefunden wird. Nur wenn genau ein passendes Element
gefunden wird, werden ein optionaler Textinhalt und die Attribute des Elements getestet.
Die Korrektur von Javascript macht sich die bereits bestehende Korrekturweise von
HTML zu Nutze. Hier wird jeweils geprüft, ob die HTML-Seite eine bestimmte
Vorbedingung erfüllt, also zum Beispiel die Anwesenheit eines Elements mit einem
bestimmten Textinhalt. Dann wird eine Aktion ausgeführt, die eine Javascript-Funktion
auslösen soll, also zum Beispiel das Klicken eines Knopfes oder das Ausfüllen von Text
in einem Textfeld. Dann wird geprüft, ob die HTML-Seite die Nachbedingungen erfüllt,
also ob sich zum Beispiel der Textinhalt eines Elements geändert hat.
Björn Eyselein und Frank Puppe

Zusammenfassung und Ausblick

Das Programm it4all ist derzeit für die Aufgabentypen UML (Klassen- und
Aktivitätsdiagramme), SQL, XML, Webprogrammierung (HTML, Javascript) und
Programmierung mit Python sowie für Boolesche Algebra und Arithmetik in
Binärzahlen verfügbar. Es wurde in den Vorlesungen „Einführung in die Informatik für
Studierende aller Fakultäten“ und Softwaretechnik in diesem Jahr getestet. Eine
umfassende Evaluation liegt noch nicht vor, die ersten Rückmeldungen sind aber sehr
positiv. Dabei werden vor allem die Gestaltung und die Fairness des Feedbacks gelobt.

Literaturverzeichnis

[If14]    Marian Ifland (2014). Feedback-Generierung für offene, strukturierte
          Aufgaben in E-Learning-Systemen. Dissertation Universität Würzburg,
          Fakultät für Mathematik und Informatik
[ST04]    Sterbini, A., & Temperini, M. (2004). Automatic correction of C
          programming exercises through Unit-Testing and Aspect-Programming. In
          Proc. of International Conference on Education and Information Systems:
          Technologies and Applications (EISTA’04), Orlando, USA.
[Hr03]    Maria Hristova, Ananya Misra, Megan Rutter, and Rebecca Mercuri. 2003.
          Identifying and correcting Java programming errors for introductory
          computer science students. In Proceedings of the 34th SIGCSE technical
          symposium on Computer science education (SIGCSE '03). ACM, New York,
          NY, USA, 153-156.
[So10]    Soler, J., Boada, I., Prados, F., Poch, J., & Fabregat, R. (2010, April). A web-
          based e-learning tool for UML class diagrams. In Education Engineering
          (EDUCON), 2010 IEEE (pp. 973-979). IEEE.
[So06]    Soler, J., Prados, F., Boada, I., & Poch, J. (2006). A Web-based tool for
          teaching and learning SQL. In International Conference on Information
          Technology Based Higher Education and Training, ITHET.
[Ab08]    Abelló, A., Rodríguez, M. E., Urpí, T., Burgués, X., Casany, M. J., Martín,
          C., & Quer, C. (2008, July). LEARN-SQL: Automatic assessment of SQL
          based on IMS QTI specification. In Advanced Learning Technologies, 2008.
          ICALT'08. Eighth IEEE International Conference on (pp. 592-593). IEEE.
[Ya18]    The Official YAML Web Site, yaml.org, abgerufen am 17.07.2018