<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta>
      <journal-title-group>
        <journal-title>Frankfurt, Germany, September</journal-title>
      </journal-title-group>
    </journal-meta>
    <article-meta>
      <title-group>
        <article-title>it4all - Ein Korrekturframework für Programmieraufgaben</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Björn Eyselein</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Frank Puppe</string-name>
        </contrib>
      </contrib-group>
      <pub-date>
        <year>2018</year>
      </pub-date>
      <volume>10</volume>
      <issue>2018</issue>
      <abstract>
        <p>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. 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</p>
      </abstract>
      <kwd-group>
        <kwd>E-Learning</kwd>
        <kwd>E-Assessment</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Einleitung</title>
      <p>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.</p>
      <p>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</p>
      <p>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
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.</p>
      <p>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.</p>
      <p>Bei den bereits bestehenden Tools werden Beispielaufgaben mitgeliefert, so dass sich
Lehrende bei der Erstellung einer neuen Aufgabe daran orientieren können.
2.1</p>
      <sec id="sec-1-1">
        <title>Allgemeine Funktionsweise der Korrektur</title>
        <p>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</p>
      </sec>
      <sec id="sec-1-2">
        <title>Integration eines neuen Tools</title>
        <p>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</p>
      </sec>
      <sec id="sec-1-3">
        <title>Erstellung von Aufgaben</title>
        <p>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
YAMLDokument und kann somit auch von it4all verarbeitet werden. YAML bzw. JSON haben
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.</p>
        <p>Aufgabenbeschreibung:
Welche Emailadresse hat Max Becker für die Arbeit?
Korrekturspezifikation:
exerciseType: SELECT
samples:
- SELECT emailaddress</p>
        <p>FROM employee JOIN emailaddress
ON employee.id = emailaddress.employee_id</p>
        <p>WHERE firstname = 'Max' AND lastname = 'Becker'
- SELECT emailaddress FROM employee, emailaddress</p>
        <p>WHERE employee.id = emailaddress.employee_id</p>
        <p>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.</p>
        <p>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:
&lt;!ELEMENT team (player+)&gt;
&lt;!ELEMENT player (name)&gt;
&lt;!ELEMENT name (#PCDATA)&gt;
&lt;!ATTLIST player number
(CDATA) #REQUIRED&gt;
&lt;!ELEMENT team (player+)&gt;
&lt;!ELEMENT player (name)&gt;
&lt;!ELEMENT name (#PCDATA)&gt;
&lt;!ELEMENT player (#PCDATA)&gt;
Abbildung 2: XML-Aufgabe. Es ist möglich, mehrere DTDs anzugeben. Partiell
richtige Lösungen werden erkannt.
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</p>
        <p>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):</p>
        <p>return 0
Korrekturspezifikation:
Musterlösung:
def average(my_list):
if len(my_list) == 0:</p>
        <p>return "Fehler"
else:</p>
        <p>return sum(my_list) / len(my_list)
Testdaten:
- {inputs: [], output: 0.}
- {inputs: [1, 3, 5], output: 3.}
Abbildung 4: Programmier-Aufgabe</p>
        <p>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.</p>
        <p>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</p>
      </sec>
    </sec>
    <sec id="sec-2">
      <title>Beispiel: Korrekturtool Web</title>
      <p>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).</p>
      <p>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.</p>
      <p>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.
Abbildung 6: Bearbeitungsansicht Webprogrammierung mit Korrektur (vgl. Abb. 1)
3.1</p>
      <sec id="sec-2-1">
        <title>Funktionsweise der Korrektur</title>
        <p>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.
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]
[ST04]
[Hr03]
[So10]
[So06]
[Ab08]</p>
        <p>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
Sterbini, A., &amp; 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.</p>
        <p>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.</p>
        <p>Soler, J., Boada, I., Prados, F., Poch, J., &amp; Fabregat, R. (2010, April). A
webbased e-learning tool for UML class diagrams. In Education Engineering
(EDUCON), 2010 IEEE (pp. 973-979). IEEE.</p>
        <p>Soler, J., Prados, F., Boada, I., &amp; Poch, J. (2006). A Web-based tool for
teaching and learning SQL. In International Conference on Information
Technology Based Higher Education and Training, ITHET.</p>
        <p>Abelló, A., Rodríguez, M. E., Urpí, T., Burgués, X., Casany, M. J., Martín,
C., &amp; Quer, C. (2008, July). LEARN-SQL: Automatic assessment of SQL
based on IMS QTI specification. In Advanced Learning Technologies, 2008.</p>
        <p>ICALT'08. Eighth IEEE International Conference on (pp. 592-593). IEEE.</p>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          <article-title>The Official YAML Web Site, yaml</article-title>
          .org,
          <source>abgerufen am 17.07</source>
          .2018
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>