Problem
Die Kursabschlussbedingung kennzeichnet einen Kurs beziehungsweise eine Node bereits dann als „in Bearbeitung“, wenn der Studierende noch keinen Fortschritt erzielt hat.
In classes/course_completion/conditions/course_completed.php steht:
$progress = progress::get_course_progress_percentage(
$course,
$userid
) ?? 0;
if ($progress !== null) {
$isinbetween = true;
}
Ursache
Durch den Null-Coalescing-Operator
kann $progress bei der nachfolgenden Prüfung nicht mehr null sein.
Die Bedingung
ist daher immer erfüllt, sobald dieser Codepfad erreicht wird – auch bei:
Der Kurs wird somit fachlich als begonnen behandelt, obwohl keinerlei Aktivität vorliegt.
Lösung
Die Prüfung muss vor der Normalisierung oder explizit gegen einen positiven Fortschritt erfolgen:
$progress = progress::get_course_progress_percentage(
$course,
$userid
);
if ($progress !== null && $progress > 0) {
$isinbetween = true;
}
$progress ??= 0;
Es ist fachlich festzulegen, ob bereits ein bloßer Kursaufruf als Beginn gelten soll. Falls ja, sollte dafür ein bewusstes und nachvollziehbares Kriterium verwendet werden, beispielsweise:
- erster Kursaufruf,
- erste Aktivitätsinteraktion,
- erster Completion-Datensatz,
- Fortschritt größer als 0 Prozent.
Die aktuelle Nullprüfung bildet keines dieser Kriterien korrekt ab.
Manuelles Testverfahren
Vorbereitung
- Einen Kurs mit aktivierter Abschlussverfolgung anlegen.
- Mindestens eine Aktivität mit Aktivitätsabschluss hinzufügen.
- Den Kurs als Kursabschlussbedingung einer Adele-Node konfigurieren.
- Einen neuen Studierenden in den Hostkurs und gegebenenfalls den Node-Kurs einschreiben.
- Der Studierende darf den Node-Kurs noch nicht öffnen oder bearbeiten.
Testschritte
- Als Studierender ausschließlich den Adele-Hostkurs öffnen.
- Die Rückmeldung beziehungsweise Darstellung der betroffenen Node prüfen.
- Den Datensatz in
local_adele_path_user kontrollieren.
- Insbesondere den
inbetween-Status und das Fortschrittsfeedback der Kursabschlussbedingung prüfen.
- Anschließend eine Aktivität im Node-Kurs beginnen, ohne sie abzuschließen.
- Den Lernpfad neu berechnen.
- Den Status erneut kontrollieren.
- Abschließend den Kurs vollständig abschließen und erneut prüfen.
Aktuelles Ist-Verhalten
Bereits vor jeder Bearbeitung kann die Bedingung als „in Bearbeitung“ beziehungsweise inbetween = true gespeichert und dargestellt werden.
Erwartetes Soll-Verhalten
- Vor jeder Bearbeitung: nicht begonnen.
- Nach nachweisbarer Bearbeitung: in Bearbeitung.
- Nach vollständigem Kursabschluss: abgeschlossen.
Automatisierte Tests
get_course_progress_percentage() liefert null.
- Fortschritt ist exakt
0.
- Fortschritt liegt zwischen
0 und 100.
- Fortschritt ist
100.
- Kurs ohne aktivierte Abschlussverfolgung.
- Mehrere Kurse mit unterschiedlichem Bearbeitungsstand.
Akzeptanzkriterien
Problem
Die Kursabschlussbedingung kennzeichnet einen Kurs beziehungsweise eine Node bereits dann als „in Bearbeitung“, wenn der Studierende noch keinen Fortschritt erzielt hat.
In
classes/course_completion/conditions/course_completed.phpsteht:Ursache
Durch den Null-Coalescing-Operator
?? 0kann
$progressbei der nachfolgenden Prüfung nicht mehrnullsein.Die Bedingung
ist daher immer erfüllt, sobald dieser Codepfad erreicht wird – auch bei:
Der Kurs wird somit fachlich als begonnen behandelt, obwohl keinerlei Aktivität vorliegt.
Lösung
Die Prüfung muss vor der Normalisierung oder explizit gegen einen positiven Fortschritt erfolgen:
Es ist fachlich festzulegen, ob bereits ein bloßer Kursaufruf als Beginn gelten soll. Falls ja, sollte dafür ein bewusstes und nachvollziehbares Kriterium verwendet werden, beispielsweise:
Die aktuelle Nullprüfung bildet keines dieser Kriterien korrekt ab.
Manuelles Testverfahren
Vorbereitung
Testschritte
local_adele_path_userkontrollieren.inbetween-Status und das Fortschrittsfeedback der Kursabschlussbedingung prüfen.Aktuelles Ist-Verhalten
Bereits vor jeder Bearbeitung kann die Bedingung als „in Bearbeitung“ beziehungsweise
inbetween = truegespeichert und dargestellt werden.Erwartetes Soll-Verhalten
Automatisierte Tests
get_course_progress_percentage()liefertnull.0.0und100.100.Akzeptanzkriterien
null,0, Zwischenwert und100ab.