Wunderbyte-GmbH / moodle-local_catquiz

ALiSe CAT Quiz
Other
1 stars 2 forks source link

Error "No standarderror is set in scale 91" (mit kompletten ErrorLog #474

Closed ralferlebach closed 1 week ago

ralferlebach commented 2 months ago

Wir haben das heute bei drei Personen gehabt und erst das Löschen von Attempts in der Datenbank in adaptivequiz_attempt hat das Problem lösen können.

Es wäre gut, nicht nur das Symptom, sondern auch die Ursache zu beheben. Daher hier der komplette ErrorLog-Auszug.

[Tue Apr 30 13:02:57.567820 2024] [php:notice] [pid 43612] [client 132.195.51.237:50081] Default exception handler: Fehler: No standarderror is set for scale 91 Debug: \nError code: generalexceptionmessage\n line 328 of /local/catquiz/classes/teststrategy/feedbacksettings.php: Exception thrown\n line 178 of /local/catquiz/classes/teststrategy/strategy/inferlowestskillgap.php: call to local_catquiz\teststrategy\feedbacksettings->filter_semax()\n line 222 of /local/catquiz/classes/teststrategy/feedbackgenerator.php: call to local_catquiz\teststrategy\strategy\inferlowestskillgap->select_scales_for_report()\n line 193 of /local/catquiz/classes/teststrategy/feedbackgenerator/customscalefeedback.php: call to local_catquiz\teststrategy\feedbackgenerator->select_scales_for_report()\n line 131 of /local/catquiz/classes/teststrategy/feedbackgenerator.php: call to local_catquiz\teststrategy\feedbackgenerator\customscalefeedback->load_data()\n line 229 of /local/catquiz/classes/output/attemptfeedback.php: call to local_catquiz\teststrategy\feedbackgenerator->update_data()\n line 148 of /local/catquiz/classes/output/attemptfeedback.php: call to local_catquiz\output\attemptfeedback->load_data_from_generators()\n line 213 of /local/catquiz/classes/teststrategy/strategy.php: call to local_catquiz\output\attemptfeedback->update_feedbackdata()\n line 160 of /local/catquiz/classes/teststrategy/strategy.php: call to local_catquiz\teststrategy\strategy->update_attemptfeedback()\n line 820 of /local/catquiz/classes/catquiz_handler.php: call to local_catquiz\teststrategy\strategy->return_next_testitem()\n line 84 of /mod/adaptivequiz/catmodel/catquiz/classes/local/catmodel/itemadministration/catquiz_item_administration.php: call to local_catquiz\catquiz_handler::fetch_question_id()\n line 106 of /mod/adaptivequiz/classes/local/adaptive_quiz_session.php: call to adaptivequizcatmodel_catquiz\local\catmodel\itemadministration\catquiz_item_administration->evaluate_ability_to_administer_next_item()\n* line 141 of /mod/adaptivequiz/attempt.php: call to mod_adaptivequiz\local\adaptive_quiz_session->administer_next_item_or_stop()\n, referer: https://lti.alise.uni-wuppertal.de/mod/adaptivequiz/view.php?id=2362

Gern können wir auch in der Datenbank nachsehen, was dort zu dem Versuch noch so gespeichert ist.

davidszkiba commented 2 months ago

@ralferlebach Ist hier die aktuelle Version mit git tag 0.9.4-rc8 verwendet worden? In dieser Version wird die Exception nämlich erst in Zeile 330 (nicht 328) geworfen: https://github.com/Wunderbyte-GmbH/moodle-local_catquiz/blob/0.9.4-rc8/classes/teststrategy/feedbacksettings.php#L330 Und in dieser Version wird auch der Standardfehler standardmäßig gesetzt.

ralferlebach commented 2 months ago

Das war die Version, die am Dienstag im Einsatz war:

grafik

Das ist ja merkwürdig. Kann man irgendwo sehen, wann ein Plugin installiert wurde?

ralferlebach commented 2 months ago

Ich sehe gerade, dass die rc-8 erst NACH dem Testlauf installiert wurde:

grafik

OK; dann war es RC-7, der im Einsatz war.

ralferlebach commented 2 months ago

Die JSON aus der Progress-Table des Versuchs 321:

JSON.Attempt321.txt

und hier die CSV:

CATQuiz-Export-Attempt321.csv

davidszkiba commented 2 months ago

Danke sehr!

Im JSON sind folgende Infos zu sehen: playedquestions ist ein leeres array isfirstquestion ist true ABER "lastquestion" ist gesetzt und nicht leer. Ich denke das passiert, wenn es schon beim ersten Quiz-Start zu einem Fehler gekommen ist.* Daher ist der code nicht vollständig ausgeführt worden und wurde abgebrochen, noch bevor die Standardfehler berechnet worden sind. Wenn jetzt versucht wird das quiz fortzusetzen, wird beim Update der Feedback-Daten versucht auf einen nicht vorhandenen Standardfehler zuzugreifen. Das sollte mit der letzten Version behoben sein, da ich hier jedes mal noch vor der Auswahl der Frage überall Default-Werte für den Standardfehler setze, falls es noch keinen Wert gibt.

* Ich vermute, dass es beim ersten Quiz-Start zu einem Fehler gekommen ist, weil die maximum questions per attempt noch 0 waren und dadurch der division by zero Fehler in adaptivequiz ausgelöst worden ist.

ralferlebach commented 2 months ago

Es war aber der erste Quiz-Start, vorher gab es von der Person keinen Attempt.

Der Fehler muss also woanders entstehen. Ganz "regulär" bei einem (ersten) Testversuch.

grafik

Auch das mit der maxquestions-Einstellung kann nicht der Fall gewesen sein, da diese noch vor dem erster Attempt in dem Test bereits gesetzt war.

davidszkiba commented 2 months ago

Hm ok.

Im "firstquestionselector" wird eigentlich automatisch ein Standarderror gesetzt. Die einzige Ausnahme ist, wenn eine Person bereits eine person ability hat - aber in dem Fall sollte die Person ja auch einen Standardfehler haben und da es der erst Versuch von dieser Person war, sollte es sowieso keine ability geben.

https://github.com/Wunderbyte-GmbH/moodle-local_catquiz/blob/d2ff80893f31e10975158874cd34a0b2db0b64c7/classes/teststrategy/preselect_task/firstquestionselector.php#L124

Falls das nicht zutrifft, sollte in Zeile 135 oder 146 ein Standardfehler gesetzt werden.

Ich hab mir nochmal die JSON Daten angeschaut: es ist recht eigenartig, dass playedquestions ein leeres Array ist aber lastquestion einen Wert hat. Es gibt nur 3 Stellen wo dieser Wert gesetzt wird:

  1. beim Erzeugen von einem neuen progress wird es auf null gesetzt https://github.com/Wunderbyte-GmbH/moodle-local_catquiz/blob/d2ff80893f31e10975158874cd34a0b2db0b64c7/classes/teststrategy/progress.php#L364
  2. beim Auslesen der Daten aus der Datenbank wird es auf den gespeicherten Wert gesetzt https://github.com/Wunderbyte-GmbH/moodle-local_catquiz/blob/d2ff80893f31e10975158874cd34a0b2db0b64c7/classes/teststrategy/progress.php#L300
  3. beim Hinzufügen einer Frage mittels add_playedquestions($q) Methode. Und hier wird die Frage aus dem Argument auch zum playedquestions array hinzugefügt. https://github.com/Wunderbyte-GmbH/moodle-local_catquiz/blob/d2ff80893f31e10975158874cd34a0b2db0b64c7/classes/teststrategy/progress.php#L593

Es gibt zwar noch eine Stelle in der progress Klasse, in der die playedquestions gefiltert werden, aber das sollte nicht beim Start des Versuchs ausgeführt werden: https://github.com/Wunderbyte-GmbH/moodle-local_catquiz/blob/d2ff80893f31e10975158874cd34a0b2db0b64c7/classes/teststrategy/progress.php#L227

davidszkiba commented 2 months ago

@ralferlebach Ich hab geschafft, den Fehler mit der vorherigen Version rc-7 folgendermaßen zu reproduzieren:

  1. Neuen quiz attempt starten: erste Frage wird angezeigt: nicht beantworten
  2. Caches purgen
  3. Einen page reload im Attempt machen, also die Ansicht der ersten Frage neu laden (evtl bestätigen, dass Fromular-Daten erneut gesendet werden) -> Exception

Das gleiche Szenario in rc-8 funktioniert, da hier default Standardfehler gesetzt werden

ralferlebach commented 1 week ago

Trat bislang nicht wieder auf.