Adaptives Testen
Aufgaben können während einer Studiendurchführung abhängig von den gegebenen Antworten angezeigt werden. Eine Antwort besteht nicht einfach nur aus einem Antwortwert. Der Player erzeugt vielmehr ein Datenobjekt bestehend aus vielen Variablen. Die folgenden Variablen sind in diesem Objekt enthalten:
id
: ID des Datenobjektes, welches zu einem bestimmten Aufgabenelement (Bsp. Optionsfeld) gehörtstate
: Status des Datenobjektesvalue
: Gespeicherter Antwortwert, bspw. bei einem Optionselement true oder falsecode
: Kategorie des Antwortwertes nach dem Kodierungsprozessscore
: Auswertung des Codes nach dem Kodierungsprozess
Das Datenobjekt unterliegt einer Spezifikation. Die Spezifikation ist hier zu finden.
Jede Variable dieses Datenobjektes kann ausgewertet und davon abhängig eine Aufgabe angezeigt werden. Es ist auch möglich mehrere Antworten in Kombination auszuwerten. So können diese bspw. logisch verknüpft oder addiert werden.
Die Konfiguration erfolgt in der Booklet-XML und in der Testtaker-XML. Dort stehen Options-Elemente (<Option>
) und Zustands-Elementen (<State>
) zur Verfügung, die in Kombination die jeweiligen Bedingungen zur Anzeige abbilden. Welche Attribute in diesen Elementen verwendet werden können, ist der Schema-Definition für die Booklet-XML und Testtaker-XML zu entnehmen.
Konfiguration in der Booklet-XML
Optionen und Status anlegen
Hier ein Beispiel:
States>
<State id="bonus" label="Bonusaufgaben">
<Option id="bonus1" label="ja" >
<If>
<Sum>
<Score of="radio_1" from="unit0"/>
<Score of="radio_2" from="unit0"/>
<Score of="radio_3" from="unit0"/>
<Sum>
</Is equal="3" />
<If>
</Option>
</Option id="bonus2" label="ja" />
<State>
</States> </
<States>
Elternelement für das Status- Element. Dieses Element darf nur einmal in der XML vorhanden sein.
<State>
Bildet den Testheft Status ab und ist Elternelement für die Optionen. Dieses Element kann mehrfach verwendet werden. Jedes State-Element erhält eine eindeutig ìd
und ein label
. Zur Selektierung (es kann mehrere State-Elemente geben) wird die ID verwendet.
<Option>
Optionen können ohne bedingte Verzweigungen angelegt sein und sind damit bedingungslos aktiv. Sie können aber auch um bedingte Verzweigungen (IF-ELSE-Anweisungen) erweitert werden und sind dann in Abhängigkeit dieser IF-Anweisung aktiv. In diesem Beispiel wird die Option mit der ID: bonus2 aktiv, wenn die Option mit der ID: bonus1 nicht aktiv werden kann, weil die IF-Bedingungen nicht erfüllt ist. Es können beliebige viele Options-Elemente angelegt werden. Jedes Options-Element verfügt über eine id
. Über diese kann die Option selektiert werden. Später werden Status und Option in Kombination abgefragt, um eine Aufgabe anzuzeigen.
Es kann nur eine Option innerhalb des State-Elements aktiv sein. Dabei gilt die Regel: Die erste Option (von oben nach unten) die aktiv werden kann (IF-Bedingung erfüllt oder Option ohne IF-Bedingung angelegt), wird für den jeweiligen Status aktiv. Die nachfolgenden Optionen werden dann nicht mehr betrachtet. Um sicherzustellen, dass immer nur eine Option aktiv ist, sollte immer eine Option am Ende angelegt sein, die keine IF-Bedingungen enthält. Das garantiert min. eine aktive Option innerhalb eines Status.
<If>
Hiermit werden die Bedingungen für eine Option festgelegt. Es können mehrere IF-Anweisung verschachtelt werden.
<Sum>
In diesem Beispiel wird der Score von 3 Antworten mit den ID`s: radio1, radio2 und radio3 der Unit mit der ID: unit0 addiert.
Es gibt außer sum
noch weitere Funktionen:
<Count>
Hiermit können bspw. logische Verknüpfungen erstellt werden.
Beispiel: Es darf nur eine der 3 IF-Bedingungen erfüllt sein (ODER-Verknüpfung)
If> <Count> <If> <Value of="radio1" from="unit0"/> <Is equal="1" /> <If> </If> <Value of="radio2" from="unit0"/> <Is equal="1" /> <If> </If> <Value of="radio3" from="unit0"/> <Is equal="1" /> <If> </Count> </Is equal="1" /> <If> </
<Median>
Beispiel: Median des Score von 3 Antworten
If> <Median> <Score of="radio1" from="unit0"/> <Score of="radio2" from="unit0"/> <Score of="radio3" from="unit0"/> <Median> </Is equal="2"/> <If> </
<Mean>
Beispiel: Mittelwert
If> <Mean> <Score of="radio1" from="unit0"/> <Score of="radio2" from="unit0"/> <Score of="radio3" from="unit0"/> <Mean> </Is equal="2"/> <If> </
<Score>
Hier wird die Variable: score
einer Antwort ausgelesen. Diese Element weist die folgenden Attribute auf:
of
: ID des Aufgabenelements, hier bspw. radio1from
: ID oder Alias der Unit. In diesem Fall die Unit mit der ID: unit0or
: Fallback für den Fall das ein Wert nicht verfügbar ist. Bspw. wenn radio1 keinen Score hat (Kodierfehler), wird -1 angenommen. Das ist bei Additionen und anderen Aggregationen mitunter relevant. Default ist 0.
Wie eingangs bereits erwähnt, können anstelle des Score auch die anderen Variablen einer Antwort (Datenobjekt) abgefragt werden. Hierfür muss nur der Name des Elements durch einen der nachfolgenden ersetzt werden:
State
Value
Code
Die beiden Variablen score
und code
können nur sinnvoll zur Erstellung von Bedingungen eingesetzt werden, wenn zu den Aufgabenelementen, in diesem Beispiel: radio1 - radio3, auch eine Kodieranweisung vorhanden ist. Außerdem muss dem Testcenter diese Kodieranweisung bekannt gemacht werden. Zu der eigentlichen Unit-XML muss dann zwingend auch die Unit-VOCS in das Testcenter geladen werden. Die Unit-VOCS enthält die Kodieranweisungen.
<Is>
In den vorhergehenden Beispielen wird geprüft, ob ein Ergebnis einem bestimmten Wert entspricht. Hierfür wird das Attribut: equal
benutzt. Es können auch andere Vergleichsoperatoren eingesetzt werden:
lowerThan
greaterThan
notEqual
Optionen abfragen
In Abhängigkeit der aktiven Optionen und des Status kann nun festgelegt werden, welche Aufgabe angezeigt werden soll. Hierfür wird im Testlet im Element: <Restriction>
das Element: <Show>
mit einem IF-Attribut angelegt. In diesem IF-Attribut wird geprüft, ob ein State-Element ein bestimmtes aktives Options-Element enthält. Zur Selektierung wird die ID der beiden Elemente verwendet.
Units>
<
Unit id="unit0" label="Startunit" labelshort="1"/>
<
Testlet id="Bonus-Aufgaben-1">
<Restrictions>
<Show if="bonus" is="bonus1" />
<Restrictions>
</
Unit id="BonusUnit1" label="Bonus Unit 1" labelshort="2" />
<Unit id="BonusUnit2" label="Bonus Unit 2" labelshort="3" />
<Unit id="BonusUnit3" label="Bonus Unit 3" labelshort="4" />
<Testlet>
</
Units> </
In diesem Beispiel wird geprüft, ob das State-Element mit der ID:bonus ein aktives Options-Element mit der ID: bonus1 enthält. Ist das der Fall, sollen die entsprechenden Bonusaufgaben angezeigt werden. Da die Option mit der ID: bonus1 in Abhängigkeit von den Antwortwerten in der unit0 aktiv werden soll, muss natürlich auch die unit0 angezeigt werden. Deshalb wird diese an erster Stelle im Element: <Units>
eingebunden.
Das komplette Beispiel
Optionen und Status anlegen
States>
<State id="bonus" label="Bonusaufgaben">
<Option id="bonus1" label="ja">
<If>
<Sum>
<Score of="radio_1" from="unit0"/>
<Score of="radio_2" from="unit0"/>
<Score of="radio_3" from="unit0"/>
<Sum>
</Is equal="3" />
<If>
</Option>
</Option id="bonus2" label="ja" />
<State>
</States> </
Optionen und Status abfragen:
Units>
<
Unit id="unit0" label="Startunit" labelshort="1"/>
<
Testlet id="Bonus-Aufgaben-1">
<Restrictions>
<Show if="bonus" is="bonus1" />
<Restrictions>
</
Unit id="BonusUnit1" label="Bonus Unit 1" labelshort="2" />
<Unit id="BonusUnit2" label="Bonus Unit 2" labelshort="3" />
<Unit id="BonusUnit3" label="Bonus Unit 3" labelshort="4" />
<Testlet>
</
Testlet id="Bonus-Aufgaben-2">
<Restrictions>
<Show if="bonus" is="bonus2" />
<Restrictions>
</
Unit id="BonusUnit4" label="Bonus Unit 4" labelshort="5" />
<Unit id="BonusUnit5" label="Bonus Unit 5" labelshort="6" />
<Unit id="BonusUnit6" label="Bonus Unit 6" labelshort="7" />
<Testlet>
</
Units> </
Konfiguration in der Testtaker-XML
Optionen und Status anlegen
DDie Aktivierung bestimmter Optionen kann auch bereits in der Testtaker-XML erfolgen.
Beispiel: Das Booklet: BOOKLET.SAMPLE-1 wird nach Anmeldung zweimal zur Auswahl angezeigt. Einmal mit Bonusaufgaben, einmal ohne.
Group id="sample_group" label="Primary Sample Group">
<
Login mode="run-hot-return" name="er3Cdx" pw="123">
<Booklet>BOOKLET.SAMPLE-1</Booklet>
<Booklet state="bonus1:yes">BOOKLET.SAMPLE-1</Booklet>
<Login>
</
Group> </
Damit die Option mit der ID: yes über die Testtaker-XML aktiviert werden kann, muss die Option auch in der Booklet-XML angelegt sein:
States>
<
State id="bonus1" label="Bonusmaterial">
<Option id="no" label="nein" />
<Option id="yes" label="ja" />
<State>
</
States> <
Wird in diesem Fall das Booklet ohne Bonus ausgewählt, ist die erste Option im Status die Option mit der ID: no. Diese Option wird also für diesen Status aktiviert. In Abhängigkeit von der Konfiguration in der Booklet-XML werden die entsprechenden Bonusaufgaben nicht angezeigt. Wird das Booklet mit Bonus gewählt, wird eine der 2 Optionen bereits mit Hilfe der Testtaker-XML für den Status aktiviert. In diesem Fall die Option mit der ID: yes. Entsprechend der Konfiguration in der Booklet-XML werden die Bonusaufgaben angezeigt.
Prüfen der Konfiguration im Review-Modus
Der Review-Modus kann zur Prüfung der Konfiguration genutzt werden. Im Unit-Menu (rechts) kann unten in einem Listenfeld eine der konfigurierten Optionen ausgewählt werden. Sobald eine Option gewählt ist, werden oberhalb die entsprechende Aufgaben angezeigt, die abhängig von dieser Option angezeigt werden sollen. In der Liste ist auch zu erkennen, welche Option gerade aufgrund des aktuellen Antwortstatus aktiv ist. Die Option ist dann mit einem grau hinterlegten Haken markiert. Werden Frageitems probeweise beantwortet, kann geprüft werden, ob die richtige Option aktiv angezeigt wird. So ist es zum einen möglich zu testen, ob die richtigen Aufgaben zur Option angezeigt werden und ob die jeweiligen Optionen bei entsprechenden Antworten auch aktiv werden.