
Matrizen fuer valide Antworten und Ableitungen
valid-coding-matrices.RmdDie Statusmatrizen pruefen, wie Quellstatus in Ableitungen
weitergegeben werden. Diese Seite ergaenzt sie um regulaere Antworten
und bereits kodierte Quellen. Die Regressionstests vergleichen jeweils
status, value, code und
score. Auch eine regulaer beantwortete Aufgabe ohne Punkte
gehoert zu diesen Tests: Code 0 und Score 0
sind gueltige Ergebnisse.
Die Sollwerte sind unabhaengig vom Autocoder festgelegt. Fuer das
Update von @iqb/responses 5.3.1 auf 5.5.0 werden dieselben
Tests zuerst mit dem alten Bundle und danach mit dem neuen Bundle
ausgefuehrt. Ein erfolgreiches Ergebnis mit der alten Version allein
ersetzt die fachliche Festlegung der Sollwerte nicht.
Eingabe- und Ausgabematrix
Die fachlichen Faelle werden ueber vier Kombinationen geprueft:
| R-Funktion | Eingabe |
|---|---|
code_responses() |
R-Listen |
code_responses() |
JSON-Strings |
code_responses_array() |
R-Listen |
code_responses_array() |
JSON-Strings |
Der Array-Einstieg gibt Werte als Zeichenketten zurueck und verpackt
Mehrfachwerte standardmaessig als [[[a;;;b]]]. Die Tests
beruecksichtigen diesen dokumentierten Unterschied, pruefen aber in
allen Kombinationen dieselben Codes und Scores. Zusaetzlich werden
Antwort- und Unit-Bezeichner geprueft, damit bei der Verarbeitung
mehrerer Antworten keine Zuordnung verloren geht.
Regulaere Antworten
Die 113 Testfaelle stehen in
tests/testthat/test-valid_response_matrix.R. Mit den vier
Eingabe-/API-Kombinationen ergibt das 452 Kodieraufrufe. Alle
Ausgangsantworten haben status = "VALUE_CHANGED". Die
Regeln entscheiden zwischen einem passenden Code und einer regulaeren
Restkodierung. Erwartet wird jeweils CODING_COMPLETE,
einschliesslich der Antworten ohne Punkte.
Numerische Regelmatrix
Die folgende Matrix verwendet die Antwortwerte -2,
-1, 0, 1 und 2.
ja bedeutet Code 17, Score 2.5;
nein bedeutet Code 0, Score 0.
Der Antwortwert bleibt erhalten. Dadurch koennen Verwechslungen zwischen
Antwortwert, Code und Score erkannt werden.
| Regel | Parameter | -2 | -1 | 0 | 1 | 2 |
|---|---|---|---|---|---|---|
NUMERIC_MATCH |
0 |
nein | nein | ja | nein | nein |
NUMERIC_LESS_THAN |
0 |
ja | ja | nein | nein | nein |
NUMERIC_MAX |
0 |
ja | ja | ja | nein | nein |
NUMERIC_MORE_THAN |
0 |
nein | nein | nein | ja | ja |
NUMERIC_MIN |
0 |
nein | nein | ja | ja | ja |
NUMERIC_RANGE |
-1, 1 |
nein | nein | ja | ja | nein |
NUMERIC_FULL_RANGE |
-1, 1 |
nein | ja | ja | ja | nein |
Damit sind insbesondere die offenen und geschlossenen Intervallgrenzen abgedeckt. Weitere Faelle pruefen negative Dezimalzahlen, numerische Strings mit Punkt oder Komma sowie umgebende Leerzeichen.
Weitere Regelgruppen
| Gruppe | Abgedeckte Unterschiede |
|---|---|
| Wahrheitswerte |
TRUE/FALSE, 1/0
und entsprechende Strings;
IS_TRUE/IS_FALSE
|
| Textvergleich | Gross-/Kleinschreibung, Leerzeichen, Kombinationen der Verarbeitung und Unicode |
| Regulaere Ausdruecke | Unicode, Lookahead, Lookbehind, Rueckreferenzen, Unicode-/Hex-Escapes, passende und nicht passende Antworten |
| Mehrfachwerte | Positionen, ANY, ANY_OPEN, Summe, Laenge,
Einzelelement und Sortierung nur fuer den Vergleich |
| Fragmente | Numerische und textuelle Teile einer fragmentierten Antwort |
| Regellogik | UND/ODER innerhalb eines Regelsatzes und zwischen Regelsaetzen |
| Codes und Scores | Kein, teilweiser und voller Credit; unterschiedliche Code-/Score-Werte; Vorrang der ersten passenden Regel |
Valide Ableitungen
Die 188 Testfaelle stehen in
tests/testthat/test-valid_derivation_matrix.R. Mit den vier
Eingabe-/API-Kombinationen ergibt das 752 Kodieraufrufe. Fuer
mehrquellige Ableitungen werden unterschiedliche Quellprofile
vollstaendig gekreuzt. Alle Quellen enthalten valide Codes und Scores;
Werte, Codes und Scores sind absichtlich verschieden. Neben dem
abgeleiteten Wert wird auch dessen anschliessende Regelkodierung
geprueft.
| Methode | Zu pruefendes Ergebnis |
|---|---|
SUM_CODE |
Summe der Codes, einschliesslich Code 0
|
SUM_SCORE |
Summe der Scores, einschliesslich Score 0 und
gebrochener Scores |
CONCAT_CODE |
Codes in der Reihenfolge von deriveSources; gesondert
mit Sortierung |
UNIQUE_VALUES |
Eindeutigkeit der Werte; gleiche Codes oder Scores allein bedeuten keine gleichen Werte |
SOLVER |
Numerisches Ergebnis des Ausdrucks auf den Quellwerten |
COPY_VALUE |
Uebernahme einer einzelnen Quelle und erneute Regelkodierung des Zielwerts |
MANUAL |
Verarbeitung manueller Kodierungen und ihrer Quellabhaengigkeiten |
Weitere Faelle pruefen mehrstufige Ableitungen, Aliasse und eine von den Abhaengigkeiten abweichende Eingabereihenfolge. Die erwarteten Zielcodes und Scores sind eigenstaendige Sollwerte; ein pauschaler Restcode wuerde einen falschen abgeleiteten Wert nicht zuverlaessig erkennen.
Quellprofile und vollstaendige Wertmatrizen
Die fuenf Quellprofile unterscheiden Antwortwert, Code und Score.
Insbesondere haben positive und same_value
denselben Antwortwert, aber verschiedene Codes und Scores. Fuer
UNIQUE_VALUES zaehlen sie daher als gleiche Werte.
| profile | value | code | score |
|---|---|---|---|
| negative | -2.0 | -3 | 1.50 |
| zero | 0.0 | 0 | 0.00 |
| fraction | 1.5 | 2 | 2.25 |
| positive | 3.0 | 7 | 4.00 |
| same_value | 3.0 | 11 | 0.50 |
In jeder folgenden Matrix ist die Zeile die Quelle a und
die Spalte die Quelle b. Gezeigt wird der abgeleitete Wert.
Die Zielvariable hat eine exakt dazu passende Regel mit Code
41, Score 2.5 und Endstatus
CODING_COMPLETE. Ein abweichender Wert erhaelt im Test
einen unterscheidbaren Restcode 99 mit Score
-1. Die beiden Quellantworten muessen ihre Werte, Codes und
Scores behalten.
SUM_CODE
| negative | zero | fraction | positive | same_value | |
|---|---|---|---|---|---|
| negative | -6 | -3 | -1 | 4 | 8 |
| zero | -3 | 0 | 2 | 7 | 11 |
| fraction | -1 | 2 | 4 | 9 | 13 |
| positive | 4 | 7 | 9 | 14 | 18 |
| same_value | 8 | 11 | 13 | 18 | 22 |
SUM_SCORE
| negative | zero | fraction | positive | same_value | |
|---|---|---|---|---|---|
| negative | 3.00 | 1.50 | 3.75 | 5.50 | 2.00 |
| zero | 1.50 | 0.00 | 2.25 | 4.00 | 0.50 |
| fraction | 3.75 | 2.25 | 4.50 | 6.25 | 2.75 |
| positive | 5.50 | 4.00 | 6.25 | 8.00 | 4.50 |
| same_value | 2.00 | 0.50 | 2.75 | 4.50 | 1.00 |
CONCAT_CODE
| negative | zero | fraction | positive | same_value | |
|---|---|---|---|---|---|
| negative | -3_-3 | -3_0 | -3_2 | -3_7 | -3_11 |
| zero | 0_-3 | 0_0 | 0_2 | 0_7 | 0_11 |
| fraction | 2_-3 | 2_0 | 2_2 | 2_7 | 2_11 |
| positive | 7_-3 | 7_0 | 7_2 | 7_7 | 7_11 |
| same_value | 11_-3 | 11_0 | 11_2 | 11_7 | 11_11 |
UNIQUE_VALUES
| negative | zero | fraction | positive | same_value | |
|---|---|---|---|---|---|
| negative | FALSE | TRUE | TRUE | TRUE | TRUE |
| zero | TRUE | FALSE | TRUE | TRUE | TRUE |
| fraction | TRUE | TRUE | FALSE | TRUE | TRUE |
| positive | TRUE | TRUE | TRUE | FALSE | FALSE |
| same_value | TRUE | TRUE | TRUE | FALSE | FALSE |
SOLVER
Ausdruck: 2 * ${a} - ${b}.
| negative | zero | fraction | positive | same_value | |
|---|---|---|---|---|---|
| negative | -2 | -4 | -5.5 | -7 | -7 |
| zero | 2 | 0 | -1.5 | -3 | -3 |
| fraction | 5 | 3 | 1.5 | 0 | 0 |
| positive | 8 | 6 | 4.5 | 3 | 3 |
| same_value | 8 | 6 | 4.5 | 3 | 3 |
Fuer CONCAT_CODE wird die Eingabereihenfolge der
Antworten absichtlich umgekehrt; entscheidend bleibt
deriveSources = c("a", "b"). Eine weitere 5-x-5-Matrix
prueft die Option SORT: Die Codes werden dabei als Strings
sortiert, sodass beispielsweise 11_2 entsteht.
MANUAL wird ebenfalls mit allen 25 Quellpaaren geprueft.
Ohne vorgegebene manuelle Kodierung wird die Ableitung abgeschlossen,
liefert aber keinen automatisch erzeugten Code oder Score. Zwei weitere
Faelle pruefen vorgegebene manuelle Codes einschliesslich Code
0.
Bekanntes Verhalten bei COPY_VALUE
Acht Faelle pruefen die regulaere Uebernahme skalarer und
mehrwertiger Antworten. Zwei weitere Faelle halten ein bereits in 5.3.1
vorhandenes Verhalten fest: Der numerische Wert 0 und der
boolesche Wert FALSE werden von COPY_VALUE zu
null. Die Strings "0" und "false"
bleiben dagegen erhalten.
Diese zwei Faelle sind ausdruecklich eine Beschreibung des bestehenden Verhaltens und keine Aussage, dass die Umwandlung fachlich erwuenscht ist. Sie machen sichtbar, ob sich dieses Verhalten beim Versionswechsel aendert.
Vergleich bei einem Update
- Tests und fachliche Sollwerte ergaenzen, waehrend das alte Bundle noch eingebunden ist.
- Die vollstaendige Testsuite mit dem alten Bundle ausfuehren und die Ergebnisse mit Paket- und Autocoder-Version festhalten.
- npm-Abhaengigkeiten aktualisieren,
npm run productionundnpm run updateVersionausfuehren. - In einem frischen R-Prozess dieselben Tests unveraendert wiederholen.
- Jede Abweichung nach Eingabe, Methode und betroffenem Feld untersuchen. Sollwerte nur bei einer fachlich begruendeten Verhaltensaenderung anpassen.
Die neuen Partial-Credit-Optionen fuer angezeigte oder leere Quellen werden gesondert getestet. Sie sind in den regulaeren Vergleichsmatrizen ausgeschaltet. So bleiben die Ergebnisse fuer bisherige Coding-Schemes direkt vergleichbar.
Die zugehoerigen Statuspruefungen sind in den Artikeln zu allen Ableitungsmethoden und
zu SUM_SCORE
dokumentiert.