<!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 />
    <article-meta>
      <title-group>
        <article-title>Ein Schnittstellen-Datenmodell der Variabilität in automatisch bewerteten Programmieraufgaben</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Robert Garmann</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Hannover</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Germany robert.garmann@hs-hannover.de</string-name>
        </contrib>
      </contrib-group>
      <pub-date>
        <year>2018</year>
      </pub-date>
      <fpage>52</fpage>
      <lpage>56</lpage>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>Stichwörter—individuelle Programmieraufgaben;
Autobewerter; E-Assessment; Variabilität
Grader;</p>
    </sec>
    <sec id="sec-2">
      <title>I. EINLEITUNG</title>
      <p>
        Im formativen E-Assessment bearbeiten Studierende
verpflichtende Programmieraufgaben1 im Selbststudium. Die über
ein Lernmanagementsystem (LMS) eingereichten Lösungen
werden entweder direkt oder über eine spezielle Middleware
[
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] an einen Autobewerter (Grader) gegeben, der die
Ein1 Mit Programmieraufgaben bezeichnen wir Aufgaben, in denen ein
Programm in einer Programmiersprache erstellt werden muss (Synthese).
Einfachere Aufgaben, die sich mit der Analyse eines gegebenen Quelltextes
befassen, sind für das hier betrachtete unüberwachte Selbststudium nur
bedingt geeignet.
reichung hinsichtlich korrekter Funktion und hinsichtlich
weiterer Qualitätsaspekte untersucht.
      </p>
      <p>Es spricht einiges dafür, Aufgaben als Aufgabenschablonen
mit variablen Stellen, sog. Variationspunkten (Vp) zu
konzipieren. Durch Einsetzen individueller Variablenwerte entstehen
automatisch sehr viele Aufgabeninstanzen, deren
Schwierigkeitsgrad2 je nach Zielsetzung entweder vergleichbar ist oder
intentionsgemäß variiert. So lassen sich etwa Zusatzaufgaben
gleicher Schwierigkeit für intensives Üben generieren oder
aber am individuellen Lernstand ausgerichtete
Aufgabeninstanzen unterschiedlicher Schwierigkeit. Im summativen
Assessment können Aufgabenvarianten gleicher Schwierigkeit
individuell jedem Studierenden zugeordnet werden und so helfen,
Plagiate zu unterbinden.</p>
      <p>Die variablen Stellen einer Aufgabe und deren konkrete
Werte müssen an den Schnittstellen zwischen LMS,
Middleware und Grader übertragen werden (Abschnitt IV). Dieser
Beitrag stellt ein hierfür geeignetes Datenmodell vor (Abschnitt
V) und plausibilisiert dieses anhand einer Beispielaufgabe
(Abschnitt III). Das Datenmodell wurde in einer unabhängig von
einem konkreten Grader implementierten Klassenbibliothek
realisiert. Die grundsätzliche praktische Eignung konnten wir
anhand einiger variabler Programmieraufgaben für den Grader
Graja belegen (Abschnitt VI).</p>
    </sec>
    <sec id="sec-3">
      <title>II. VERWANDTE ARBEITEN</title>
      <p>
        Insbesondere in den Fachgebieten Mathematik und Physik
werden individualisierbare Aufgaben schon länger eingesetzt
(s. etwa [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]). Aber auch in der Informatik gibt es Ansätze. Die
im Folgenden beispielhaft genannten Lösungen sind allerdings
entweder nur in einem eingeschränkten Systemumfeld
einsetzbar oder fokussieren auf einfache Codeanalyse-Aufgaben. Der
Beitrag [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] beschreibt ein sehr einfaches System zur
Generierung von Varianten für C++-Programmieraufgaben. In [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] wird
ein Ansatz zur Generierung individueller Aufgaben für ein
Teilgebiet der Programmierung (Auswertung von Ausdrücken)
diskutiert. Der Aufsatz [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] berichtet über das
QuizPACK-System für parametrisierte Aufgaben für die Sprache C, das später
für Java portiert wurde. Dieses System stellt „parameterized
code-execution exercises“, bei denen Studierende ein
gegebe2 Für Ideen zur systematischen Ermittlung der Variantenschwierigkeit
s. z. B. [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ].
nes Programm durchdenken müssen und dann Fragen wie
„Welchen Wert hat die Variable x?“ beantworten müssen.
Codesynthese-Aufgaben werden nicht unterstützt.
      </p>
      <p>
        In der Produktlinienentwicklung werden
Variabilitätsmodelle genutzt, um Varianten und deren sog. Constraints
darzustellen. Beispielhaft seien die Common Variability Language
(CVL, [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]) und das Orthogonal variability model [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] genannt.
Die Produktlinienentwicklung hat mit individualisierbaren
Programmieraufgaben gemeinsam, dass Variablen,
Wertausprägungen und teilweise komplexe Randbedingungen formuliert
werden müssen. Die Möglichkeiten solcher Ansätze gehen weit
über die Erfordernisse einer variablen Programmieraufgabe
hinaus. Das verwundert nicht, da in der
Produktlinienentwicklung Modelle mit hunderten von Variablen keine Seltenheit
sind [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ], während wir in variablen Programmieraufgaben mit
kaum mehr als einer kleinen zweistelligen Anzahl von
Variablen rechnen.
      </p>
    </sec>
    <sec id="sec-4">
      <title>III. BEISPIELAUFGABE</title>
      <p>
        Die in Abb. 1 gezeigte Programmieraufgabe liege im
ProFormA-Format [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] als automatisch bewertete
Java-Aufgabenschablone vor. Zur Aufgabe gehören weitere Artefakte.
Beispielsweise definiert der Grader Graja [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] u. a.
JUnit-Testmethoden, Regeln zur statischen Codeanalyse und
Bewertungsvorschriften als Teil einer Aufgabe.
      </p>
      <p>Die grauen Stellen in Abb. 1 definieren sieben sog.
Variationspunkte (kurz Vp), deren Wertemengen in TAB. I. gelistet
sind. Ein wichtiger Parameter ist die domain (werden
Buchstaben oder Ziffern gezählt?), von der weitere Vp-Wertemengen
abhängen. Bspw. hängt der className von domain ab.</p>
      <p>Write a main method in class %vp{className} in the default package
that reads a series of characters from user input. Your program should
output a statistic of %vp{domain} in the input, i. e. the percentage of
characters in { %vp{set} }. Example (user input is highlighted):
Give me characters, please: %vp{input}
%vp{output} % are %vp{domain}
Your program should print %vp{precision} decimal places of the
percentage value. %vp{lowerSentence}
Abb. 1. Beispielaufgabe mit variablen Stellen (Variationspunkte)
TAB. I.</p>
      <p>VARIATIONSPUNKTE DER BEISPIELAUFGABE
domain: String</p>
      <p>{„letters“, „numbers“}</p>
      <p>Name: Typ
input: String
className:
String
set: String
countLower:
Boolean
lowerSentence:
String
precision:
Integer</p>
      <p>Sinnvolle Werte
Die Beispieleingabe {„x.ÜL:0€ÁHDú/7Ú“}. Hier nicht
variiert aus Platzgründen.
{„Letters“}, falls domain=„letters“
{„Digits“, „Numbers“, „Figures“}, sonst
{„A-Z“, „A-Z, Ä, Ö, Ü“, „A-Z, Œ“}, für domain=„letters“
{„0-9“, „0-9, I, V, X, L, C, D, M“}, sonst
{null}, falls set=„0-9“
{true, false}, sonst
{„“}, falls countLower=null,
{„Lowercase should be counted.”}, falls countLower=true
{„Lowercase should not be counted.”}, sonst
{1-9}</p>
      <p>
        Einige Vp verändern intentionsgemäß die Schwierigkeit der
Aufgabe. Z. B. fordert set=„A-Z, Œ“ im Gegensatz zu „A-Z“
i. d. R. die Berücksichtigung von Zeichenkodierungen. Andere
Vp wie precision dienen der möglichst zahlreichen
Variantenbildung bei gleichbleibender Schwierigkeit. Weitere Vp
werden je nach Wahl anderer Vp sogar überflüssig: der letzte Satz
der Aufgabe, der die Behandlung von Kleinbuchstaben fordert,
ist bei set=„0-9“ zu streichen3. Die Tabelle enthält auch einen
achten „versteckten“ Vp countLower, der zwar nicht im
Aufgabentext, aber in weiteren Artefakten auftaucht [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ].
      </p>
    </sec>
    <sec id="sec-5">
      <title>IV. SYSTEMUMFELD UND ANFORDERUNGEN</title>
      <p>In einem typischen Szenario lädt die Lehrkraft im LMS
eine im ProFormA-Format vorliegende Aufgabenschablone
hoch und reicht zum Test eine Musterlösung ein. In einem
Dialog gibt sie für jeden Vp Werte ein, die zur Musterlösung
passen. Der Dialog leitet die Lehrkraft und verhindert die Eingabe
ungültiger Vp-Wertkombinationen. Das LMS erstellt mit den
Werten eine Aufgabeninstanz, sendet diese und die
Musterlösung an eine Grading-Middleware bzw. an den Grader und
zeigt abschließend das zurück erhaltene Feedback an (Abb. 2).</p>
      <p>Für einen Studenten erstellt das LMS im Moment des
erstmaligen Aufrufs eine individuelle Aufgabeninstanz. Es nimmt
eine zufällige, die Vp-Abhängigkeiten berücksichtigende
Wertbelegung vor und lässt ggf. weitere Faktoren wie die
Lernhistorie des Studenten in die Auswahl einfließen. Das LMS
speichert die für den Studenten geltende Variante persistent ab. Der
eigentliche Einreichungs- und Bewertungsvorgang über die
Middleware unterscheidet sich nicht von einer „normalen“
Aufgabe. Ggf. kann das LMS, wenn die Aufgabe gelöst wurde,
eine individuelle neue Variante zu Übungszwecken anbieten.</p>
      <p>In dem Szenario ist das LMS für die Auswahl von
Wertbelegungen und Aufgabeninstanziierungen alleine verantwortlich.
Das LMS wird jedoch kaum ohne die Unterstützung des
Graders auskommen. Ggf. liegen die von den Vp betroffenen
Aufgabenartefakte in proprietären Binärformaten vor. Nur der
Grader wird letztverantwortlich aus einer Aufgabenschablone eine
Instanz erzeugen können. Einfache Aufgabenteile wie den
Aufgabentext kann ggf. das LMS autark instanziieren. Abb. 2 stellt
dar, wie das LMS auf einen sog. Instanziierungsdienst
zurückgreift, welcher aus einer Aufgabenschablone und einer
vorgegebenen „Auflösung“ der Variationspunkte (cvr) eine
Aufgabeninstanz erzeugt. Ggf. bedient sich der Instanziierungsdienst
dabei weiterer Unterstützung des betroffenen Graders, der
hierfür eine spezielle Instanziierungsfunktion anbietet.</p>
      <p>LMS
tt + cvr
fb
ti
ti + sm</p>
      <p>Instantiation service</p>
      <p>middleware
Grading service
middleware
tt + cvr
ti + sm
ti
fb</p>
      <p>
        Grader
Instantiation
engine
Grading
engine
Abb. 2. Nutzung eines Instanziierungsdienstes. Abkürzungen: tt = task
template (Aufgabenschablone), ti = task instance (Aufgabeninstanz),
cvr = composite variation resolution (Auflösung aller Variationspunkte
zu konkreten Werten), sm = submission (Einreichung), fb = Feedback.
3 Die in [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] beschriebene Abhängigkeit „Variant excludes variation
point“ ist hiermit vergleichbar.
output: String
      </p>
      <p>Die erwartete Ausgabe wie sie im Aufgabentext steht.</p>
      <p>
        Der Instanziierungsdienst entscheidet auch über den
Zeitpunkt, in dem variable Artefakte einer Aufgabe in konkrete
Artefakte überführt werden. Diese sog. binding time kann von
Artefakt zu Artefakt variieren. Details und weitere Szenarien,
in denen ein Instanziierungsdienst nutzbringend eingesetzt
werden kann, sind in [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] beschrieben.
      </p>
      <p>Wir wollen im ProFormA-Format vorliegende Aufgaben
LMS- und Grader-unabhängig individualisieren. Wir benötigen
dazu eine Grader-unabhängige Sprache zur Beschreibung der
Vp, die es LMS in verschiedenen technischen Umgebungen
erlaubt, das oben beschriebene Szenario umzusetzen. Die
Beschreibung soll Wertemengen und gegenseitige
Vp-Abhängigkeiten enthalten und dabei sowohl komplexe als auch geringe
Abhängigkeiten redundanzarm abbilden. Die Auswahl gültiger
Vp-Wertkombinationen muss effizient unterstützt werden.</p>
    </sec>
    <sec id="sec-6">
      <title>V. EIN DATENMODELL DER VARIABILITÄT</title>
      <p>Wir haben ein in XML repräsentierbares Datenmodell
entwickelt, welches eine Teilmenge des von mehreren Vp
aufgespannten mehrdimensionalen Raums beschreibt. Neben
Grundoperationen wie kartesisches Produkt und Vereinigungsmenge
werden weitere Operationen unterstützt, die es erlauben, die Vp
redundanzarm und damit wartbar zu spezifizieren.
Kontinuierliche Wertebereiche werden mit einer vorzugebenden
Schrittweite diskretisiert. Zudem kann man Vp-Werte von
anderen Vp-Werten ableiten4, indem eine Javascript-Funktion in
die XML-Beschreibung eingebettet wird. Wir wählten
Javascript wegen der weiten Verbreitung auf Serverplattformen und
im Browser.</p>
      <sec id="sec-6-1">
        <title>A. Benutzersicht</title>
        <p>Wir beginnen mit der Benutzersicht des weiter unten
beschriebenen Datenmodells, um dessen effiziente und
Graderunabhängige Einsetzbarkeit zu plausibilisieren. Abb. 3 zeigt die
Benutzersicht für die Werteauswahl.</p>
        <p>Der Benutzer arbeitet sich oben beginnend durch alle Vp
durch. Wenn zu einer getätigten Auswahl Abhängigkeiten zu
weiter unten stehenden Vp bestehen, schränkt der Dialog die
unten auswählbaren Werte geeignet ein. Vp, die keine Auswahl
erlauben (bspw. output) werden ohne Eingabemöglichkeit
dargestellt. Abb. 3 zeigt, wie nach Wechsel der domain zu
„numbers“ der Regler für className mit drei Auswahloptionen
erscheint (erkennbar an den Einrastpositionen), während set
nur noch zwei statt drei Optionen anbietet. Wir haben einen
Schieberegler als Interaktionselement gewählt, weil dieser
ressourcenschonend auch bei großen Wertemengen zu Beginn
lediglich die Anzahl der Optionen kennen muss, um dann bei
jedem Schiebeereignis den zur aktuellen Reglerposition
zugehörigen Wert on-the-fly zu berechnen.</p>
        <p>Bedingung für die Eignung des Schiebereglers ist, dass sich
die Werte jedes Vp durch einen fortlaufenden Index aufzählen
lassen und dass der zu einem gegebenen Index gehörige Wert
effizient ermittelbar ist. Die im weiteren Verlauf beschriebene
Spezifikation der Wertemenge erfüllt diese Bedingung.</p>
      </sec>
      <sec id="sec-6-2">
        <title>B. Variabilitätsmodell der Beispielaufgabe</title>
        <p>In Abb. 4 veranschaulichen wir für die obige
Beispielaufgabe das im nachfolgenden Abschnitt C allgemein spezifizierte
Datenmodell.</p>
        <p>Abb. 3. Dialog in zwei verschiedenen Zuständen zur Auswahl einer den
Abhängigkeiten genügenden Wertbelegung
4</p>
        <p>
          Ableitungen ähneln dem Konzept der VSpec derivations in [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ]
Abb. 4. AND-XOR-Baum zur Beschreibung der Vp der Beispielaufgabe.
        </p>
        <p>AND-Knoten repräsentieren kartesische Produkte, XOR-Knoten stehen
für Vereinigungsoperationen und Einzelwertangaben.</p>
        <p>Die fünf Kinder des Wurzel-AND-Knotens (Nr. 1) besagen,
dass sich alle Werte aufzählen lassen, wenn man Wertemengen
für die Vp (input), (domain, className, set, countLower),
(lowerSentence), (precision) und (output) aufzählt und diese
geeignet zu achtdimensionalen Tupeln zusammensetzt. Die
Zusammensetzung muss alle Kindknoten einbeziehen, da es
sich um einen AND-Knoten handelt. Sie beginnt links mit einer
einelementigen und eindimensionalen Menge S2 für input
(XOR-Knoten 2). Die Menge S2 wird (da Knoten 1 ein
ANDKnoten ist) kartesisch mit der vierdimensionalen Menge S4 für
(domain, className, set, countLower) multipliziert (S2×S4).
Der Inhalt von S4 entsteht als Vereinigungsmenge (XOR) der
Mengen S9 S19, die ihrerseits kartesische Produkte sind.
Besonders sind die Knoten 18 und 33, die ihren Wertebereich
S18=S33={true, false} durch Verweis auf die Wertemenge des
Knotens 5 erhalten, der die Wertemenge vorab unter dem
Symbol „id1“ definiert5.</p>
        <p>Bewegen wir uns zu den Geschwistern des Knotens 4 nach
rechts weiter. Der XOR-Knoten 34 repräsentiert eine
Operation, die S2×S4 mit dem folgenden Javascript-Fragment
(Knoten 35) für lowerSentence „kombiniert“:
function apply(o) {
if (o.countLower===null) return "";
if (o.countLower===true)</p>
        <p>return "Lowercase should be counted.";
return "Lowercase should not be counted.";
};</p>
        <p>Die Vorschrift zur Bildung der resultierenden
sechsdimensionalen Menge ist kein einfaches kartesisches Produkt, da die
Menge S34 nicht vorab bekannt ist. Die Bildungsvorschrift, die
wir als ⓓerivation-Operation notieren, ist wie folgt: Für jedes
Element e aus (S2×S4), füge (e, apply(e)) zum Ergebnis
(S2×S4)ⓓS4 hinzu. Weiter geht es mit dem XOR-Knoten 36.
Die hierin als Wertebereich definierte eindimensionale Menge
S36={1, …., 9} für precision wird wieder kartesisch
multipliziert (S2×S4ⓓS4×S36). Die letzte Operation für Knoten 38
gleicht der für lowerSentence mit einer hier aus Platzgründen
nicht wiedergegebenen Javascript-Funktion für output
(S2×S4ⓓS4×S36ⓓS38).</p>
      </sec>
      <sec id="sec-6-3">
        <title>C. UML-Klassenmodell</title>
        <p>
          Nachdem wir das Beispiel durchgesehen haben, stellen wir
nun das Datenmodell als UML-Klassendiagramm vor (Abb. 5).
Wo inhaltlich Parallelen bestehen, haben wir uns bei der
Benennung von Entitäten an [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ] und [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ] orientiert. Ein
Variationspunkt (Vp) besitzt einen Namen (key) und einen Datentyp
(VpT) mit optionaler Vergleichsgenauigkeit (accuracy). Eine
Ausprägung des Vp ist eine Variante (V) mit einem Wert. Alle
Vp einer Aufgabe zusammen sind in einem composite variation
point (CVp) zusammengefasst. Eine Aufgabenschablone (tt,
Abb. 2) enthält eine Komposition der Spezifikationen aller Vp
der Aufgabe (CVSpec, composite variation specification). Ein
CVSpec-Objekt ist Wurzelknoten einer Hierarchie von
CVSpecNode-Objekten. Die Hierarchie beschreibt alle
VpWerte durch geschachtelte Vereinigungsmengen (Collect…),
kartesische Produkte (Combine…) und Wertangaben (Val).
        </p>
        <p>
          5 Mit dem Define-Knoten verwandt ist das Konzept von feature
model references [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ].
        </p>
        <p>Abb. 5. UML-Diagramm des Datenmodells. Die Menge unterstützter
Datentypen (VpT) ist beliebig erweiterbar.</p>
        <p>Um Redundanz und lange Auflistungen zu vermeiden,
ergänzen wir spezielle Definitions- und Referenzierungsknoten
(Def, Ref), Bereichsknoten (Range) und Ableitungsknoten
(Derivation6). Der Wurzelknoten besitzt mit dem Attribut cvp
eine Spezifikation aller Vp der Aufgabe. Nachfolgerknoten
speichern die für den jeweiligen Teilraum geltenden Vp7.</p>
        <p>Um alle Vp zwecks Erzeugung einer Aufgabeninstanz (ti,
Abb. 2) aufzulösen, wird ein CVr-Objekt (composite variant
resolution) benötigt. Dieses beinhaltet einen Vektor vom Typ
CV, der je Vp die gewählte Variante speichert.</p>
      </sec>
      <sec id="sec-6-4">
        <title>D. XML-Fragment</title>
        <p>
          Um einen Implementierungseindruck zu zeigen, skizzieren
wir in Abb. 6 einen Teil der XML-Repräsentation des
Datenmodells der Beispielaufgabe aus Abschnitt III. Das
vollständige Beispiel wird in [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ] besprochen.
        </p>
        <p>9: &lt;v:combineGroup&gt;
: &lt;v:cvp&gt;
: &lt;v:vp key="domain" type="string"&gt;&lt;/v:vp&gt;
: &lt;v:vp key="className" type="string"&gt;&lt;/v:vp&gt;
: &lt;v:vp key="set" type="string"&gt;&lt;/v:vp&gt;
: &lt;v:vp key="countLower" type="boolean"&gt;&lt;/v:vp&gt;
: &lt;/v:cvp&gt;
10: &lt;v:val&gt;
11: &lt;v:string value="letters"&gt;&lt;/v:string&gt;</p>
        <p>: &lt;/v:val&gt;
12: &lt;v:val&gt;
13: &lt;v:string value="Letters"&gt;&lt;/v:string&gt;</p>
        <p>: &lt;/v:val&gt;
14: &lt;v:collect&gt;
15: &lt;v:string value="A-Z"&gt;&lt;/v:string&gt;
16: &lt;v:string value="A-Z, Ä, Ö, Ü"&gt;&lt;/v:string&gt;
17: &lt;v:string value="A-Z, Œ"&gt;&lt;/v:string&gt;</p>
        <p>: &lt;/v:collect&gt;
18: &lt;v:ref id="id1"&gt;&lt;/v:ref&gt;</p>
        <p>: &lt;/v:combineGroup&gt;
Abb. 6. Fragment der XML-Repräsentation der CVSpec der Beispielaufgabe.</p>
        <p>Die führenden Zeilennummern korrespondieren mit den rautenförmig
umrandeten Ziffern der Abb. 4.</p>
      </sec>
    </sec>
    <sec id="sec-7">
      <title>6 Details zum DerivativeAggregateType: s. [4].</title>
      <p>
        7 Das cvp-Attribut ist optional, da jeder Knoten die zugehörigen Vp
leicht vom Mutterknoten ermitteln lassen kann. Verpflichtend ist cvp, wenn
lokale Umordnungen von Vp in Kindknoten gewünscht sind, um die
Spezifikation kompakter zu gestalten. Mehr Details: s. [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ].
      </p>
      <p>VI. EINSATZ</p>
      <p>Das Datenmodell wurde bereits für mehrere Java-Aufgaben
für den Grader Graja prototypisch eingesetzt. Dabei wurden
aus unserer bisherigen Lehrpraxis entnommene Aufgaben mit
Vp ausgestattet und deren Wertemengen und Constraints als
AND-XOR-Baum beschrieben. Das entsprechende, den Baum
repräsentierende XML-Dokument wurde in die Graja-Aufgabe
aufgenommen, die damit zu einer Aufgabenschablone wurde.
Um einem „proof of concept“ nahe zu kommen, wurden
Aufgaben unterschiedlichen Umfangs umgesetzt: Programmierung
eines einzelnen Ausdrucks, einer (main-)Methode sowie einer
ganzen Klasse. Dabei wurden alle in Abschnitt V
beschriebenen Konzepte praktisch eingesetzt: Wertebereich,
Werteaufzählung, kartesisches Produkt, Vereinigungsmenge,
Ableitungsvorschrift, Definition und Referenzierung.</p>
      <p>
        Zur dialogbasierten Eingabe (vgl. Abb. 3) sowie zur
zufallsbasierten Auswahl einer gültigen Wertebelegung (cvr)
wurde eine eigens implementierte, kleine Bibliothek eingesetzt,
die unabhängig von der in der Aufgabe geforderten
Programmiersprache und dem Grader ist. Die Bibliothek implementiert
effiziente Datenstrukturen: Intervallbäume für intervallskalierte
Vp, balancierte Suchbäume für ordinalskalierte Vp. Unter der
praxisnahen Annahme, dass die Anzahl der Knoten im
ANDXOR-Baum deutlich kleiner als die Anzahl gültiger
Vp-Wertkombinationen ist, diskutiert [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] ausführlich die Effizienz
dieser Datenstruktur und liefert damit einen Hinweis auf die
prinzipielle Eignung des vorgeschlagenen Datenmodells für die
effiziente Eingabe bzw. Auswahl von Vp-Werten.
      </p>
      <p>
        Um die Aufgaben praktisch einsetzen zu können, wurde
eine speziell auf Graja zugeschnittene „Instantiation engine“
implementiert [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. Diese erzeugt derzeit Aufgabeninstanzen (ti)
u. a. durch einfache Such- und Ersetzungsoperationen. Die
Graja-„Grading engine“ bewertet Einreichungen zu
Aufgabeninstanzen i. w. wie gewöhnliche Aufgaben.
      </p>
      <p>Derzeit liegen Einsatzerfahrungen mit Graja im Labor vor,
die sich nach unserer Einschätzung unmittelbar auf einen
Einsatz im Feld übertragen lassen. Die Anbindung der
GrajaInstantiation engine an das an der HS Hannover eingesetzte
LMS Moodle und damit der Einsatz der variablen Aufgaben in
einer realen Lehrveranstaltung mit vielen Studierenden steht
noch aus. Ein dazu benötigter Grader-unabhängiger
Instanziierungsdienst als Middleware soll demnächst entstehen.</p>
    </sec>
    <sec id="sec-8">
      <title>VII. AUSBLICK</title>
      <p>Das vorliegende Datenmodell soll für Grader-spezifische
Erweiterungen geöffnet werden. LMS, Instanziierungsdienst
und Grader könnten auf dieser Grundlage die Verantwortung
für die variation resolution (Vr) jedes Vp aushandeln. So
könnte das LMS die zufallsbasierte Vr eines Vp, dessen
Wertemenge installationsabhängig nur dem Grader bekannt ist,
jenem überlassen.</p>
      <p>Zudem sind die Auswirkungen von Vp auf instanziierte
Artefakte derzeit noch „ad hoc“ realisiert. Die Notation
variabler Stellen in Artefakten könnte zumindest für einige
häufig in Programmieraufgaben vorkommende Artefakte
standardisiert werden.</p>
      <p>Der derzeit in JavaFX realisierte Auswahldialog (Abb. 3)
soll nach Javascript portiert werden, um einen breiten Einsatz
in verschiedenen LMS zu erleichtern. Zudem soll er um die
Möglichkeit einer manuellen Texteingabe erweitert werden,
damit auch solche Vp effizient manuell aufgelöst werden
können, die auf große, nur dem Grader bekannte, proprietäre
Wertemengen zurückgreifen.</p>
      <p>Schließlich sollen sukzessive weitere Aufgaben aus unserer
Lehrpraxis auf der Basis des hier beschriebenen Datenmodells
variabel umgestaltet und im Feld erprobt werden. Dabei sollen
andere Grader und Programmiersprachen einbezogen werden.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <surname>Brusilovsky</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>Sosnovsky</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          :
          <article-title>Individualized exercises for selfassessment of programming knowledge: An evaluation of QuizPACK</article-title>
          ,
          <source>ACM Journal of Educational Resources in Computing</source>
          , Vol.
          <volume>5</volume>
          , No.
          <volume>3</volume>
          ,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <surname>Czarnecki</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>Kim</surname>
            ,
            <given-names>C.H.P.</given-names>
          </string-name>
          :
          <article-title>Cardinality-based feature modeling and constraints: a progress report</article-title>
          .
          <source>In: Proceedings of the International Workshop on Software Factories at OOPSLA</source>
          , San Diego, California, USA,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <surname>Garmann</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          :
          <article-title>Der Grader Graja</article-title>
          . In (Bott,
          <string-name>
            <surname>O. J.</surname>
          </string-name>
          et. al. Hrsg):
          <article-title>Automatisierte Bewertung in der Programmierausbildung</article-title>
          . Waxmann, Münster,
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <surname>Garmann</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          :
          <article-title>Spezifikation von Variabilität in automatisch bewerteten Programmieraufgaben</article-title>
          , Bericht, Hochschule Hannover, http://nbnresolving.de/urn:nbn:de:bsz:
          <fpage>960</fpage>
          -
          <lpage>opus4</lpage>
          -11893,
          <year>2018</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <surname>Garmann</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          :
          <article-title>Eine Java-Bibliothek zur Spezifikation von Variabilität in automatisch bewerteten Programmieraufgaben</article-title>
          . Bericht, Hochschule Hannover. http://nbn-resolving.de/urn:nbn:de:bsz:
          <fpage>960</fpage>
          -
          <lpage>opus4</lpage>
          -11874,
          <year>2018</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <surname>Garmann</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>Heine</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>Werner</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          :
          <article-title>Grappa - die Spinne im Netz der Autobewerter und Lernmanagementsysteme</article-title>
          . In (Pongratz,
          <string-name>
            <surname>H.</surname>
          </string-name>
          et. al. Hrsg.):
          <source>DeLFI</source>
          <year>2015</year>
          :
          <article-title>Die 13. e-Learning Fachtagung Informatik</article-title>
          .
          <source>Gesellschaft für Informatik</source>
          , Bonn, S.
          <fpage>169</fpage>
          -
          <lpage>182</lpage>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <surname>Haugen</surname>
          </string-name>
          , Ø.:
          <string-name>
            <surname>Common Variability Language (CVL) - OMG Revised</surname>
          </string-name>
          <article-title>Submission</article-title>
          .
          <source>OMG document ad/2012-08-05</source>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <surname>Kashy</surname>
            ,
            <given-names>D.A.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>Albertelli</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ; Ashkenazy,
          <string-name>
            <given-names>G.</given-names>
            ;
            <surname>Kashy</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            ;
            <surname>Ng</surname>
          </string-name>
          , H.
          <article-title>-</article-title>
          K.;
          <string-name>
            <surname>Theonnessen</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Individualized interactive exercises: A promising role for network technology</article-title>
          .
          <source>In: Proc. of the 31st ASEE/IEEE Frontiers in Education Conference (Reno, NV)</source>
          ,
          <year>2001</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <surname>Krishna</surname>
            ,
            <given-names>A.K.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>Kumar</surname>
            ,
            <given-names>A.N.:</given-names>
          </string-name>
          <article-title>A problem generator to learn expression: evaluation in CSI, and its effectiveness</article-title>
          ,
          <source>Journal of Computing Sciences in Colleges 16</source>
          .4,
          <string-name>
            <surname>S.</surname>
          </string-name>
          34-
          <fpage>43</fpage>
          ,
          <year>2001</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <surname>Otto</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>Goedicke</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Auf dem Weg zu variablen Programmieraufgaben: Requirements Engineering anhand didaktischer Aspekte</article-title>
          .
          <source>In: Proc. of the ABP 2017. CEUR Workshop Proceedings</source>
          , ceur-ws.
          <source>org/</source>
          Vol-2015/#ABP2017_paper_
          <fpage>12</fpage>
          ,
          <year>2017</year>
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <surname>Pohl</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>Böckle</surname>
          </string-name>
          , G.;
          <article-title>van der</article-title>
          <string-name>
            <surname>Linden</surname>
          </string-name>
          , F.: Software Product Line Engineering: Foundations, Principles, and Techniques. Springer,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <surname>Radosevic</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ; Orehavocki,
          <string-name>
            <given-names>T.</given-names>
            ;
            <surname>Stapic</surname>
          </string-name>
          ,
          <string-name>
            <surname>Z.</surname>
          </string-name>
          :
          <article-title>Automatic On-line Generation of Student's Exercises in Teaching Programming</article-title>
          .
          <source>In: Central European Conference on Information and Intelligent Systems</source>
          , Varazdin, S.
          <fpage>87</fpage>
          -
          <lpage>93</lpage>
          ,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <surname>Strickroth</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ; Striewe,
          <string-name>
            <given-names>M.</given-names>
            ;
            <surname>Müller</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O.</given-names>
            ;
            <surname>Priss</surname>
          </string-name>
          ,
          <string-name>
            <given-names>U.</given-names>
            ;
            <surname>Becker</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            ;
            <surname>Rod</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O.</given-names>
            ;
            <surname>Garmann</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            ;
            <surname>Bott</surname>
          </string-name>
          ,
          <string-name>
            <surname>O.J.</surname>
          </string-name>
          ; Pinkwart, N.:
          <article-title>ProFormA: An XML-based exchange format for programming tasks</article-title>
          , in: eleed, Nr.
          <volume>11</volume>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>