<!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>Automatische Bewertung von Übungsaufgaben in VIPS</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Helmar Gust</string-name>
          <email>helmar.gust@uos.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Nadine Werner</string-name>
          <email>nadine.werner@uos.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>IKW Universität Osnabrück, virtUOS Universität Osnabrück</institution>
        </aff>
      </contrib-group>
      <abstract>
        <p>Vips ist ein virtuelles Prüfungssystem und dient zur Verwaltung, Durchführung und Auswertung von Online-Übungen und Online-Klausuren. Der Schwerpunkt der Vips-Entwicklung liegt auf der automatischen Auswertung von Aufgaben, um demjenigen, der die Aufgaben stellt und beurteilen muss, möglichst viel Arbeit abzunehmen. Darüber hinaus ermöglicht Vips Übungen und Klausuren für die Studierenden in einem Selbsttest-Modus anzubieten. Das System bietet verschiedene Möglichkeiten zur Entwicklung, Pflege und Auswertung virtueller Prüfungen sowie die Verwaltung des gesamten Übungsbetriebs eines Kurses.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>Zum andern gibt es aber starke formale Restriktionen an
die eingegebenen Texte: Sie müssen als Programm-Code
fehlerfrei kompilierbar sein und sie müssen das
geforderte Programm-Verhalten produzieren. Die Korrektur und
Bewertung von Programmieraufgaben ist
normalerweise erheblich aufwändiger als bei Freitextaufgaben,
insbesondere dann, wenn sie Fehler enthalten. Eine
Unterstützung bei diesen Aufgaben ist also sehr hilfreich aber
wegen der Komplexität solcher Aufgaben auch
entsprechend schwierig.</p>
      <p>In diesem Papier soll der Schwerpunkt auf
Programmieraufgaben und deren automatischer Auswertung
liegen. Single Choice, Multiple Choice, Ja/Nein-Fragen,
Zuordnung und Lückentext-Aufgaben können einfach
automatisch bewertet werden. Vips führt für diese
Aufgaben standardmäßig eine komplett automatische
Bewertung durch. Allerdings kann das Ergebnis auch bei
diesen Aufgaben vom Dozenten nachträglich
überschrieben werden. Für Freitext und Programmieraufgaben
ist eine vollständig automatische Auswertung i.a. nicht
möglich. Trotzdem kann eine Korrektur erheblich durch
automatisierte Verfahren unterstützt werden. Vips stellt
für Programmieraufgaben eine Runtime-Umgebung mit
einer einfachen GUI zur Verfügung. Dies ermöglicht den
Kursteilnehmern die Aufgaben ohne lokale Installationen
der Programmiersprachen zu lösen. Allerdings stehen
interaktive Debug-Möglichkeiten in einer solchen
Umgebung nicht zur Verfügung. Daher kann auf eine
lokale Installation der Programmiersprachen insbesondere
bei komplexen Aufgaben nicht immer verzichtet werden.
Um lokale Installationen zum Aufgabenlösen benutzen
zu können, gibt es Down- und Upload-Möglichkeiten für
die Aufgaben. Die Runtime-Umgebung steht auch für
die Aufgabenkorrektur zur Verfügung. Zusammen mit
einem vorgegebenen Default-Aufruf der Hauptfunktion
eines Programms ermöglicht dies sowohl dem
Kursteilnehmer als auch dem Korrekteur sich mit einem Mausklick
einen ersten Überblick über die Lauffähigkeit der Lösung
zu verschaffen.</p>
      <p>
        Zur Unterstützung dieser Programmieraufgaben gibt
es ein eigenes Servermodul VEA (Vips Evaluation
Assistent), das auf einem vom StudIP/Vips-System
getrennten Rechner läuft. Die Kommunikation zwischen
StudIP/Vips und der Programmierumgebung geschieht
über HTTP. Mit einem Bowser kann diese Schnittstelle
auch direkt benutzt werden1, um VEA zu testen und zu
konfigurieren. Vips entstand aus Ansätzen, die im
Vorfeld und im Rahmen eines Projektes am Institut für
Kognitionswissenschaft entwickelt wurden [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. Vips ist ein
Plugin für Stud.IP2 und daher zur Zeit nur in
Kombination mit Stud.IP verfügbar. Eine Überblick über die
Architektur gibt Bild 1.
      </p>
    </sec>
    <sec id="sec-2">
      <title>Abbildung 1: ViPS / VEA -Architektur</title>
      <p>2</p>
      <sec id="sec-2-1">
        <title>Das Vips Modul in StudIP</title>
        <p>An der Universität Osnabrück ist das Übungs- und
Prüfungssystem Vips seit Sommersemester 2004 als
modulare Erweiterung der Lehr- und Lernplattform StudIP
in einer ersten Version verfügbar. Es kann einer
Lehrveranstaltung als Plugin hinzugefügt werden. Das
System bietet verschiedene Möglichkeiten zur Entwicklung,
Pflege und Auswertung virtueller Prüfungen sowie die
1https://mvc.ikw.uni-osnabrueck.de/vips/vips.php
2www.studip.de
Verwaltung des gesamten Übungsbetriebs eines Kurses.
Vips stellt Übungsblätter und Kausuren zur Verfügung.
Beide unterscheiden sich nicht in der Struktur der
Aufgaben sondern nur im Modus des Ablaufes und der
Zuordnung zu einzelnen Teilnehmern (bei Klausuren) bzw.
zu Arbeitsgruppen (bei Übungsblättern). Zudem gibt es
für Übungsblätter einen Selbsttest-Modus, bei dem dem
Kursteilnehmer nach dem Absenden einer Lösung sofort
das Ergebnis der automatischen Auswertung angezeigt
wird. Der Klausur-Modus erlaubt eine online
Überprüfung der Zugriffsparameter sowie ein Überwachung des
Arbeitsfortschritts der Teilnehmer.</p>
        <p>Vips umfasst eine Arbeitsgruppenverwaltung,
Punkteund Notenübersichten für einzelne Teilnehmer und
Arbeitsgruppen, sowie eine flexible Notenberechnung.
Arbeitsblätter und Klausuren können (zur Zeit) als
TextDateien importiert und exportiert werden. Darüber
hinaus gibt es eine Druckansicht.</p>
        <p>Im Folgenden wird insbesondere auf
Programmieraufgaben und die automatische Unterstützung deren
Auswertung eingegangen.
3</p>
      </sec>
      <sec id="sec-2-2">
        <title>Programmieraufgaben in Vips</title>
        <p>Vips stellt für Programmieraufgaben eine
RuntimeUmgebung mit einer einfachen GUI zur Verfügung. Die
GUI ist über einen Reiter einer Lehrveranstaltung
erreichbar. Sie ermöglicht für Programmieraufgaben den
Programm-Code einzugeben und zu editieren sowie die
Programme auszuführen. So können Kursteilnehmern
die Aufgaben lösen, ohne die Programmiersprachen
lokal auf ihrem Rechner installieren zu müssen.
Allerdings stehen interaktive Debug-Möglichkeiten in einer
solchen Umgebung nicht zur Verfügung. Um für
komplexe Aufgabenstellungen auch lokale Installationen zum
Aufgabenlösen benutzen zu können, gibt es Down- und
Upload-Möglichkeiten für die Aufgaben.</p>
        <p>Die Runtime-Umgebung steht auch für die
Aufgabenkorrektur zur Verfügung. Zusammen mit einem
vorgegebenen Default-Aufruf der Hauptfunktion ermöglicht
dies sowohl dem Kursteilnehmer als auch dem Korrektor
sich mit einem Mausklick einen ersten überblick über die
Lauffähigkeit der Lösung zu verschaffen.
3.1</p>
        <sec id="sec-2-2-1">
          <title>Anlegen eines Übungsblattes mit</title>
        </sec>
        <sec id="sec-2-2-2">
          <title>Programmieraufgaben</title>
          <p>Um ein Übungsblatt mit Programmieraufgaben in Vips
anzulegen, gibt es unter dem Reiter ’Vips’ einer
Lehrveranstaltung mehrere Aktionen. Der Dozent kann ein
neues Übungsblatt anlegen, ein Übungsblatt auch aus
einer Textdatei importieren oder die Daten aus
bereits vorhandenen Übungsblättern importieren. Ist das
Übungsblatt in der Oberfläche mit Titel und
Beschreibung sowie Start und Endzeitpunkt versehen,
können Übungsaufgaben neu hinzugefügt werden.
Weiterhin hat der Dozent die Möglichkeit, Aufgaben aus
bereits im StudIP vorhandenen Übungsblättern dieses
oder anderer Kurse zu übernehmen. Vips stellt für
eine Programmier-Übungsaufgabe, die einem Übungsblatt
hinzugefügt wird, neben der Aufgabenstellung eine
Reihe von Informations-Feldern bereit:</p>
          <p>Ein Lösungesfeld in das der Bearbeiter den zu
entwickelnden Code eingeben kann. Dieses Felder kann
vorbelegt werden, so dass dem Kursteilnehmer
bereits ein Lösungsgerüst präsentiert werden kann, das
z.B. vom Bearbeiter ergänzt bzw. geändert werden
muss.</p>
          <p>Ein Feld für Musterlösungen. Dieses Feld kann
mehrere Musterlösungen enthalten. zudem enthält diese
Feld noch den Evaluations-Code. Dieser wird in
Zukunft in einem eigenen Textfeld verwaltet.</p>
          <p>Ein Feld mit Aufruf der Hauptfunktion. In Prolog
ist dies eine Folge von Subgoals durch Kommas
getrennt. In anderen Programmiersprachen kann dies
ein Funktionsaufruf oder ein arithmetischer
Ausdruck sein.</p>
          <p>Da das Erscheinungsbild einer Aufgabenspezifikation für
die Kursteilnehmer nicht immer einfach vorhergesehen
werden kann, gibt es eine einfache Möglichkeit zwischen
der Darstellung für die Aufgabenentwicklung und der
Darstellung für den Kursteilnehmer umzuschalten.
3.2</p>
        </sec>
        <sec id="sec-2-2-3">
          <title>Bearbeiten eines Übungsblattes mit</title>
        </sec>
        <sec id="sec-2-2-4">
          <title>Programmieraufgaben</title>
          <p>Aus Kursteinehmer-Sicht bietet die GUI folgende
Möglichkeiten:</p>
          <p>Der Kursteilnehmer kann seine Lösung in ein
Textfeld eintragen. Dieser Bereich ist eventuell bereits
mit einem Lösungsgerüst vorbelegt.</p>
          <p>Basierend auf der aktuellen Lösung kann eine
Testanfrage gestellt werden. Das Ergebnis des
Programmlaufs wird angezeigt.</p>
          <p>Der Inhalt des Lösungsbereichs kann in eine
lokale Datei heruntergeladen werden, so dass eine
lokale Installation der Programmiersprache zur
Programmentwicklung benutzt werden kann.</p>
          <p>Anschießend kann die fertige Lösung wieder in das
Bearbeitungsfeld hochgeladen werden.
Über den Button ’abschicken’, wird die
Übungsaufgabe abgegeben. Übungsaufgaben können im
Rahmen der Bearbeitungszeit mehrfach abgegeben
werden. Die als letztes abgegeben Lösung zählt.</p>
          <p>Kursteilnehmer können in Arbeitsgruppen organisiert
sein. Dann gilt bei einem Aufgabenblatt eine
abgegebene Lösung für die gesamte Arbeitsgruppe. Bei einer
Klausur gilt sie immer nur für einzelnen Teilnehmer. Im
Selbsttestmodus wird nach der Abgabe die Auswertung
und die (erste) Musterlösung angezeigt.
3.3</p>
        </sec>
        <sec id="sec-2-2-5">
          <title>Auswertung eines Übungsblattes mit</title>
        </sec>
        <sec id="sec-2-2-6">
          <title>Programmieraufgabe</title>
          <p>Im Korrektur- und Bewertungsmodes von Vips stellt die
Oberfläche folgende Funktionen zur Verfügung
Im Programm-Code kann korrigiert und
kommentiert werden.</p>
          <p>In einem Textfeld können generelle Kommentare
hinzugefügt werden.</p>
          <p>Punkte können für die Lösung vergeben werden.
Dabei werden zunächst die automatisch vergebenen
Punkte angezeigt.</p>
          <p>Der query-Knopf kompiliert den Lösungsfeld-Inhalt
und ruft die Hauptfunktion auf. Die
Ergebnistexte der Kompilation und der Programmausführung
werden ausgegeben. Für nichtdeterministische
Sprachen wie Prolog gibt es den Knopf ’query next’, der
bei jeder Betätigung eine weitere Lösung ausgibt.
Der eval-Knopf stößt die automatisceh Bewertung
an (siehe Abbildung 2). Der Bewertungprozess kann
über Tags in der Musterkösung gesteuert werden.
Als Ergebnis werden u.a. zwei Zahlen zwischen 0
und 1 angezeigt: Ein Score, der die Güte der
Lösung repräsentiert und ein Validitätswert, der die
Verlässlichkeit der Bewertung signalisiert. Bei einem
Validitätswert von 1 kann die Bewertung als sicher
angesehen werden. Als Bewertungkriterien können
die IO-Relation (also das Verhalten) des Programms
sowie textuelle Vergleiche des Lösungscodes mit den
Musterlösungen auf verschiedenen
Normalisierungsebenen herangezogen werden.</p>
          <p>Die abgegebenen Übungsblätter werden dem Dozenten
in einer Übersicht präsentiert. Von hier aus gelangt er
zu den einzelnen Übungsaufgaben.
4</p>
        </sec>
      </sec>
      <sec id="sec-2-3">
        <title>Der Vips Evaluation Assistent VEA</title>
        <p>Zur Unterstützung der Auswertung von
Programmieraufgaben gibt es ein eigenes Server-Modul VEA (Vips
Evaluation Assistent), das auf einem vom
StudIPSystem getrennten Rechner läuft. Sinnvoll ist hier eine
dedizierter Rechner, der nur für diese Aufgabe zur
Verfügung steht, da die Ausführung von fremden
Programmcode immer auch mit Sicherheitsrisiken verbunden ist.
VEA stellt Runtime-Umgebungen für
Programmieraufgaben in ausgewählten Programmiersprachen zur
Verfügung. Diese Umgebungen können zur Entwicklung der
Lösungen und zur Bewertung dieser Lösungen benutzt
werden. Die Kommunikation zwischen StudIP/Vips und
der Programmierumgebung geschieht über HTTP, so
dass diese Schnittstelle mit einem Bowser auch direkt
benutzt kann. Dieses Interface gestattet neben der
Konfiguration auch den Test aller Funktionen, sowie die
Erweiterung des Systems um weitere Programmiersprachen.
4.1</p>
        <sec id="sec-2-3-1">
          <title>Kommunikation mit Vips</title>
          <p>Zur Zeit gibt es zwei Modi für die Kommunikation
zwischen Vips und VEA:
1. Alle Datenfelder werden als eigene Post-Felder
übertragen (wird zur Zeit von Vips benutzt).
2. Die Aufgabenspezifikation wird als XML-Strutur
übertragen und nur die abgegebene Lösung wird</p>
          <p>Abbildung 2: Auswertungsmodi einer Programmier-Übungsaufgabe
als eigenes Feld übertragen. Die XML-Struktur
entspricht dem Aufgaben-Austauschformat, das im</p>
          <p>Rahmen von eCULT3 entwickelt wird.</p>
          <p>Die wichtigsten Felder, die VEA erwartet, sind in
Tabelle 1 aufgeführt: Im Fall, dass eine XML-Struktur
über</p>
        </sec>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Tabelle 1: Liste der wichtigsten Felder</title>
      <p>Feldname
adm
typ
mgc
srv
qry
exp
ini
exc
xml</p>
      <p>Beschreibung Werte
Administrationsebenen 0|1|2|3|4|5|6
Auswertungsmodus query | eval
Password
Service
Query / Call
Musterlösungen
Vorbelegung des
Lösungsfeldes
ausführbare Lösung
XML-Spezifikation
einer Aufgabe</p>
      <p>Prolog | Lisp ....
trage wird, werden diese Felder teilweise aus der
XMLStruktur gefüllt.
4.2</p>
      <sec id="sec-3-1">
        <title>Implementierte Funktionen</title>
        <p>Die Schnittstelle erlaubt neben der Konfiguration die
Ausführung eine Reihe von Funktionen: list, hash, query
und eval.</p>
        <p>3http://www.ecult-niedersachsen.de/
list Es wir eine Liste der verfügbaren Services
zurückgegeben. Zur Zeit ist nur der Service Prolog und Lisp
komplett realisiert. Haskel, Oktave und R sind nur
rudimentär vorhanden.
query Der Auswertungsmodus query kompiliert den
Lösungsfeld-Inhalt und ruft die Hauptfunktion auf. Der
Ergebnistext (Compiler-Protokoll und das Ergebnis der
Ausführung, falls das Programm fehlerfrei kompiliert
werden konnte) wird an Vips übertragen und
ausgegeben. Im Falle einer Fehlermeldung oder einer Warnung
wird zusätzlich der mit Zeilennummern versehene Code
ausgegeben, um die Fehlersuche zu erleichtern. Damit
wird eine rudimentäre Entwicklungsumgebung realisiert,
in der Programmentwürfe und Lösungsansätze getestet
werden können.
eval Der Auswertungsmodus eval testet die
abgegebene Lösung und versucht, eine automatische Bewertung
durchzuführen. In diesem Modus liefert VEA im
Wesentlichen zwei Zahlen s (score) und v (validity) zwischen 0
und 1 zurück. v = 1 bedeutet, dass eine valide
Bewertung vorgenommen werden konnte. s = 0 bedeutet in
diesem Fall, dass die Lösung vollkommen falsch ist und
s = 1 entsprechend, dass sie vollkommen richtig ist (z.B.
wenn sie mit einer Musterlösung übereinstimmt). Eine
Überprüfung durch einen Korrekteur sollte in diesem Fall
nicht notwendig sein. Werte von v kleiner 1 deuten
darauf hin, dass keine sichere Bewertung vorgenommen
werden konnte, der Score s also nur ein Anhaltspunkt für
den Korrekteur sein sollte. Es stehen mehrere
Testverfahren zur Verfügung. VEA iteriert die beiden folgenden
Verfahren jeweils über alle Musterlösungen m.</p>
        <p>Vergleich der Ergebnisse der Lösung und der
Musterlösung bei verschiedenen Eingaben. Der
Auswertungs-Modus ’eval’ kompiliert sowohl den
Lösungsfeld-Inhalt als auch die Musterlösung
sowie ein Stückchen Test-Code, dass die Ergebnisse
des Lösungsvorschlags und den Musterlösungen
vergleicht. Die Werte für s und v für diesen Testteil
werden folgendermaßen berechnet:
m
scomp
m
seval
vemval
=
=
=</p>
        <p>1
1 + #compiler_f ehler
0:5</p>
        <p>#pos
#pos + #neg)
m
seval
+ 0:5 scomp
(1)
(2)
(3)
#pos ist dabei die Anzahl der Testfälle, für die
korrekte Ergebnisse geliefert wurden, und #neg
entsprechend die Fälle, für die falsche Ergebnisse
geliefert wurden. Die letzte Gleichung ist in
sofern plausibel, als dass ein niedriger Score-Wert
nicht bedeuten muss, dass das Programm komplett
falsch ist: Ein kleiner Fehler kann etwa eine Reihe
von Compiler-Fehlermeldungen evozierten. In
diesem Fall sollte also auch ein entsprechend niedriger
Validitätswert angesetzt werden. Auf der anderen
Seite bedeutet eine hoher Score-Wert, dass das
Programmverhalten korrekt ist, was ein relativ sicherer
Hinweis darauf sein sollte, dass auch das Programm
korrekt ist.</p>
        <p>Textueller Vergleich des Lösungsvorschlags mit der
Musterlösung und der Vorbelegung des
Lösungsfeldes. Auf der Basis eines Ähnlichkeitsmaßes4 sim
werden ein Score ssim und ein Validitätswert vsim
nach folgender Formel berechnet
s0 = sim(EXC; EXP )
1
1
sim(IN I; EXC)
sim(IN I; EXPm)
(4)
m
ssim
vsmim
=
=
s02
max(1
m
smax
s0; ssmim)2
(5)
(6)
EXC und IN I referieren auf die entsprechenden
Feldinhalte (Lösungsvorschlag und Vorbelegung)
und EXPm auf die m-te Musterlösung. s0 liefert also
0, falls die Vorbelegung nicht geändert wurde, und
1, falls eine der Musterlösungen eingegeben wurde.
Formel (5) realisiert eine pessimistische Sichtweise
für den Score-Wert und Formel (6) entsprechend für
den Validitätswert. smmax ist der vorgegebene
maximal Score für die m-te Musterlösung5. Kritisch ist
natürlich die Wahl der Funktion sim. Das
Mögliche Spektrum reicht von spezifischen Funktionen für
4Für ein Ähnlichkeitsmaß sim muss gelten 0
sim(x; y) sim(x; x) = 1</p>
        <p>5Musterlösungen können unterschiedliche Güte haben.
Für die erste Musterlösung gilt immer smmax = 1
die einzelnen Programmiersprachen, die die
syntaktische Struktur berücksichtigen können bis zu
robusten Textvergleichen unabhängig von der konkreten
Programmiersprache. In der gegenwärtigen
VEAVersion wird die zweite Möglichkeit benutzt:
sim(t1; t2)
=
2 similar_text(t1; t2)
jt1j + jt2j
(7)
Dabei ist similar_text eine PHP-Funktion, die die
die übereinstimmenden Zeichen zählt.</p>
        <p>Textueller Vergleich des Lösungsvorschlags und der
Musterlösungen auf der Basis verschieden starker
Normalisierungsstufen. Die wesentlichen Stufen sind
folgende:
– In der Standard-Stufe (wird grundsätzlich
angewendet) werden nur Kommentare am Anfang
und Ende der Lösung sowie doppelte
Zeilenumbrüche und Blanks am Zeilenende entfernt.
– In der schwachen Stufe werden zusätzlich
Blanks vor und nach Operatoren und
Trennzeichen sowie mehrfache Blanks und Kommentare
entfernt.
– In der mittleren Stufe werden zusätzlich alle</p>
        <p>Blanks und Zeilenümbrüche entfernt.
– In der starken Stufe werden zusätzlich alle
kleingeschriebenen Symbole auf ’a’ und alle
großgeschriebenen Symbole auf ’V’ reduziert,
so dass nur die Programmstruktur selbst
erhalten bleibt. 6
Für die ersten drei Stufen wird auf Identität der
normalisierten Texte getestet. Für die stärkste
Stufe wird ein toleranter Textmatch, der maximale
gemeinsame Teilstrings berücksichtigt, verwendet.
Diese Vergleiche werden u.a. dazu benutzt, um ein
textuelles Ergebnis ausgeben zu können: ’literally
same’, ’same with similar layout’, ’same up to
layout’ und ’stucturally similar’, je nachdem, auf
welcher Stufe die Gleichheit erkannt wurde. Für diese
Fälle können auch feste vorgegebene Werte für den
Score s und den Validitätswert v vergeben werden.
In diesem Fall überschreiben diese die Werte aus
dem vorigen Verfahren.</p>
        <p>Hieraus berechnen sich die Werte (vsim; ssim)
als maxm((vsmim; ssmim)) und (veval; seval) als
maxm((vemval; semval)) bezüglich der lexikalischen
Ordnung. Für jede Aufgabe kann festgelegt werden, ob nur
der Lösungsmengenvergleich, nur der Textvergleich oder
eine Kombination von beiden (default) in die
endgültigen Werte von s und v eingehen, die zur Berechnung
eines Bewertungsvorschlages benutzt werden. Diese
relativ groben heuristischen Verfahren zur Berechnung
der Werte s und v haben sich insbesondere für Prolog
als durchaus brauchbar erwiesen.</p>
        <p>6Insbesondere die stärkste Normalisierungsstufe sollte
abhängig von der Programmiersprache sein. Es ist daran
gedacht, für alle Stufen in der Konfiguration parametrisierbare
Pattern zu erlauben.
hash Es werden vier MD5-Hash-Werte zurückgegeben,
die den vier Code-Normalisierungen entsprechen. Diese
Werte können in Vips benutzt werden, um Ähnlichkeiten
zwischen den Lösungen unterschiedlicher Teilnehmer zu
erkennen. So kann z.B. festgestellt werden, ob eine
Lösung schon als Lösung eines anderen Teilnehmers
korrigiert wurde.
4.3</p>
      </sec>
      <sec id="sec-3-2">
        <title>Konfiguration</title>
        <p>Zur Konfiguration eines Services sind zwei Dateien
notwendig:
config enthält eine Reihe von Attribut-Wert-Paare zur
Konfiguration des Systems. Hier werden u.a. die
Auswertungsparameter eingestellt, die Kommentarspezifikation
der Programmiersprache festgelegt sowie die erlaubten
Funktionen und Symbole aufgelistet.
exec ist ein Shell-Script und Implementiert für die
Funktionen query und eval den Compiler-Aufruf. Hier ist
darauf zu achten, dass der Resourcen-Verbrauch des
Prozesses limitiert und die Priorität niedrig eingestellt wird,
damit der Prozess die Machine nicht blockiert. Zudem
sind Sicherheitsmaßnahmen gegen den Missbrauch
dieser Schnittstelle zu bedenken.</p>
        <p>Darüber hinaus muss für die Funktion eval ein
Programm zur Verfügung gestellt werden, dass die
IORelation des Lösungsvorschlag überprüft. In den
implementierten Services wird dazu die erste Musterlösung
benutzt und für eine Reihe von Testfällen die Ergebnisse
beider Programme verglichen.
5</p>
        <sec id="sec-3-2-1">
          <title>Zusammenfassung und Ausblick</title>
          <p>Das Modul Vips (Virtuelles PrüfungsSystem)
übernimmt in StudIP die komplette Verwaltung des
Übungsbetriebs einer Veranstaltung. Vips wurde um eine
Komponente VEA (Vips Evaluation Assistent) zur
automatischen Bewertung von Programmieraufgaben erweitert.
VEA stellt sowohl semantische (Programmverhalten) als
auch syntaktische (Beurteilung des Programm-Codes)
Verfahren zur Bewertung von Programmieraufgaben zur
Verfügung. VEA ist immer noch in einem
experimentellen Stadium. Sowohl die Funktionalität, als auch die
Kommunikation zwischen Vips und VEA sollen
weiterentwickelt werden.</p>
        </sec>
        <sec id="sec-3-2-2">
          <title>Literatur</title>
        </sec>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <surname>Peylo</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>Gust</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          ; Rollinger,
          <string-name>
            <given-names>C.</given-names>
            ;
            <surname>Thelen</surname>
          </string-name>
          ,
          <string-name>
            <surname>T.</surname>
          </string-name>
          (
          <year>2000</year>
          )
          <article-title>: A web-based intelligent educational system for PROLOG</article-title>
          . In: C.
          <string-name>
            <surname>Peylo</surname>
          </string-name>
          (Ed.), Proceedings of the International Workshop on Adaptive and
          <article-title>Intelligent WebBased Education Systems held in conjunction with ITS 2000 Montreal, Canada</article-title>
          .
          <source>Technical Report of the Institute for Semantic Information Processing</source>
          ,
          <year>Osnabrück 2000</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>