Feature Wiki

Information about planned and released features

Tabs

Test & Assessment

1 General

Authorities and Tester

 

Additional

Roadmap

Priorities for the development of the Test & Assessment and the Test Question Pool depend on developer resources provided by a handfull of organizations. Thus no promises are made on timeframes.

Prioritized in the long run

  • Reducing the number of reported issues in Test & Assessment
  • Defining a concise interface for questions.
  • Separating the Test-Player from the Questions and the Question-Pool.
  • Refactoring ilTestParticipantList: This Class has a lot of very expensive loops in it Mantis 33596, but we can not remove them right now as it is used in very different contexts for all kind of lists. Sometimes users don't have $active_ids (participant list in test with access limited to selected participants), sometimes they don't have $usr_ids (anonymous tests in public section).

Roadmap in 2024

Among other challenges, we are planning to use the given developing budget from the ILIAS Community Members for the following tasks:

  1. Main Goal: Fixing Issues and further cleaning up the code.
  2. Further roll out of Repository Pattern
  3. Continue of Abandon of settings and features in Test & Assessment to focus on main aspects and reduce the work on major refactorings
  4. Fundamental work
    • Work on the project to abandon legacy ui.
    • Clarification CTRL-flow
    • Feasibility study/ Research project: Replacement of TinyMCE in creation of questions
      • Infrastructure setup for the replacement
      • Conversion of the Long-Menu-Question to UI-Forms as pilot
    • Use of IRSS in T&A
    • Further reduction of access and use of request variables (GPCR)
  5. Research possible successor for TinyMCE
  6. Feasibility study Test in Learning sequence - Could the LS uses the actual Exam View (since ILIAS9 - General Kiosk Mode)
  7. KS Improvements / Exchange of single elements' trough existing KS elements independently of the Legacy-UI-Project

Depending on development ressources, funding and approval, some new features are conceivable in 2023 (e.g. option for a failing attempt).

Others

  • Fixing access to Learning Status when access to test results is limited (see: Mantis 25064)
  • Restructuring Import/Export, removing dependency on ilContObjParser, and clarifying support of QTI
  • UI Forms: Length of text fields not shorter than answer text. (see: Mantis 35243)
  • Grading: Use of Short Form / Offical Form. Conceptual changes only with the introduction of new UI forms. (see Mantis)
  • Streamlining of trimming and removal of white spaces in answer-options (see: Mantis 35091)
  • Auto-save messages should use UI components (e.g. toast), so a consistent UI/UX is used and easier to maintain throughout the entire system.
  • Avoid creating question-fragments on incomplete question creation, remove questions fully on deletion of tests and questionpools and provide update/objective to clean database of disjunct leftover of questions

Open Warnings / Issues without Tickets

These are open findings from the PHP8 Project which couldn't be solved in the scope of the project itself. They are documented here for transparency. Remarks on the individual items are marked with "@PHP8-CR"

Test

  • \ilTestPlayerAbstractGUI::autosaveCmd / This looks like another issue in the autosaving. Left for review/analysis by TechSquad
  • \ilAssLacCompositeValidator::validateSubTree / Incompatible type. Left for review/analysis by TechSquad

TestQuestionPool

  • \ilObjQuestionPoolGUI::exportQuestionObject / Void result used. Left for review/analysis by TechSquad
  • \assMatchingQuestionGUI::writeAnswerSpecificPostData / Incompatible type. Left for review/analysis by TechSquad
  • \assMatchingQuestionGUI::populateAnswerSpecificFormPart / Incompatible type. Left for review/analysis by TechSquad
  • \assMatchingQuestionImport::fromXML / Incompatible type. Left for review/analysis by TechSquad
  • \ilTestSkillEvaluation::determineReachedSkillPointsWithSolutionCompare / Incompatible type. Left for review/analysis by TechSquad
  • \ilAssLacCompositeValidator::validateSubTree / Incompatible type. Left for review/analysis by TechSquad
  • \assOrderingHorizontalGUI::saveFeedback / Undefined method. Left for review/analysis by TechSquad
  • \ilObjQuestionPoolGUI::questionObject / Undefined method. Left for review/analysis by TechSquad
  • \ilObjTestGUI::executeCommand / Undefined method. Left for review/analysis by TechSquad
  • \ilObjTestGUI::questionsObject / Undefined method. Left for review/analysis by TechSquad
  • \ilAssLacCompositeEvaluator::evaluateSubTree / Undefined method. Left for review/analysis by TechSquad

A RepoPattern Approach to reduce complexity

A lot of the current pain in the T&A is due to the ruthless mixing of Logic and GUI, making decisions very late based on variables transported a long way and - in general - having properties set and evaluated in a quite obscured way by several components. There are some aspects I'd like to focus upon to ease the situation without rebuilding the whole lot at once and disabling functionality in the process. In the following, I'll talk about questions mainly, but answers are implicitly included, since they work almost the same.

current entanglements

Currently, loading a question means: lookup type, load specific question GUI, load base and specific values from DB, write back to question object, use in base- and specific gui. Goal of the process is to configure a question object that has all the required props and features. This is due to mainly two concepts, that look outdated to me:

obese classes and hip-hop-loading

Specific Questions extend a baseclass, both in object and GUI. While this is fine in general, the T&A implementation is somewhat obscure with loading and modifying object properties. Both, architectural structure and unclear program-flows make it quite easy to miss out on a setting or certain property on the one hand, while on the other, it is somewhat painful to alter a GUI. All eventualities have to be treated over the entirety of a "common question object". When saving questions/answers, it works the same way - the entire object is stored, additional features, answertexts and all. Additionally, there are "satellite" properties like suggested solutions, that actually live completely in parallel structures with rather a reference by id than a "real" intersection.

assTextQuestionGUI with its question-obj extends assQuestionGUI working on it while this is actually a constant in the baseclass of all questions. Here is the [specific TextQuestion] (https://github.com/ILIAS-eLearning/ILIAS/blob/393027e6d5258f0a2d67ce87e5a4061b8385521f/Modules/TestQuestionPool/classes/class.assTextQuestion.php#L145) loading base-props.

setters

Assumingly for the purpose described above, there are a lot of (public!) direct property setters: - Separator property in assOrderingHorizontal - some setter in assAnswerMatching - same property, different setter - the according getter

From my point of view, this should be disentangled in a way that a question is used by 1. loading generic data 2. loading specific data 3. handing over the well-configured object(s) to the guis - but only those, that are actually needed. 4. (modifying data and then repeating from 1)

why/how repo-pattern will help

In order to limit and isolate changes, we should use repo-pattern to cluster settings into immutable objects. Doing so - will only add one additional layer around the properties, the getters might even remain - will separate question-type specific data - will separate additional functionality, like suggested solution or hints - will make construction/manipulation way more decisive - will give us specific and distinct elements to talk about

A "question" will thus be a collection of otherwise isolated things, while those things should still be treated in a tendentiously isolated way.

Here is an example for a repo on options of OrderingQuestions, used in the question class to read and store Elements

separation and clustering properties

There are only a few base_settings common to questions. Those are to describe a question. Then, there are answers, metadata, suggested solutions, etc. They are more or less connected to the question, but they are not necessary an integral part of it in a way that a question cannot exist without them. This can and should be reflected by wrapping those "property clusters" into immutable objects with little or none logic, which will also result in a number of repositories - one for each cluster.

construction and getters might look like this:

public function __construct(assQuestionBaseSettings $base_settings) {
    $this->base_settings = $base_settings;
    //.....
}
public function getId() : int {
    return $this->base_settings->getId();
}

Dependency Injection, proper constructors

With smaller, immutable properties, construction is way more explicit than handing over "a question". If the GUI, e.g., behaves differently based on a flag in properties, calculate before and split up GUI classes, or calculate early and only once.

Use factories to instantiate things

What we need to instantiate a question is not "the question" itself, but information about it, namely the type. After reading those shared information, we can instantiate a specific question directly and hand over the common properties. This is usually done by a factory, which will need not much more information than the question's id - just like before.

Consider something like this:

class factory {

    public function question(int $question_id) : assQuestion
    {
        $base_settings = $this->base_repo->select($question_id);
        $page_object = $this->page_repo->select($question_id);
        //....

        $classname = $this->getSpecificQuestionClassname($base_settings->getTypeTag());

        $question = (
            new $classname(
                $base_settings,
                $page_object
                //,....
            )
        );
        return $question;
    }
}

Consequences/Candidates

I'd consider these the most valuable and in the same way feasible steps to improve T&A-structures: - separate "satellites", like suggested solutions in PR #4587 - isolate base_settings (with type/repo/injection/getters, delete setters) - clear out loading from GUIs, use a factory (might probably be done successively) - get rid of "additionalTable" in favor of specific types and repos.

 

2 Projects

The following projects are planned or have been realised for this component:

3 Suggested Features

Please contact Strassner, Denis [dstrassner] if you plan to suggest a feature. Either a feature that fixes problems of Test & Assessment and keeps the Test & Assessment running or new features, that improve the Test & Assessment.

Ready for Jour fixe

Suggested for Future ILIAS Releases

4 Accepted Features

The following features have been accepted for trunk but are not yet scheduled for a specific ILIAS version.

5 Scheduled Features

Features scheduled for / published in ILIAS 12

Features scheduled for / published in ILIAS 11

Features scheduled for / published in ILIAS 10

Abandoned Features from ILIAS 10

Features scheduled for / published in ILIAS 9:

Features scheduled for / published in ILIAS 8:

Features scheduled for / published in ILIAS 7:

Features scheduled for / published in ILIAS 6:

Features scheduled for / published in ILIAS 5.4:

Features scheduled for / published in ILIAS 5.3:

Features scheduled for / published in ILIAS 5.2:

Features developed and published in ILIAS 5.1:

The editorial team of the help has refurbished the 'Settings'-tab of the Test.
Please check the respective page: Mapping of 'Settings'-tab in the Test Object of ILIAS 5.0 and ILIAS 4.4

The following features have already been developed and published in ILIAS ILIAS 4.1:
  • none
The following features have already been developed and published in ILIAS ILIAS 4.0:
  1. New type Essay with predefined content
  2. New type Fileupload
  3. New type Flash-Applet
  4. New type Horizontal Ordering
  5. Question overview on the left side
  6. Short name of your feature

The following features are in preparation to be migrated from the EA-branch into the trunk.

 
Administration
  1. Improving PDF Generation
  2. PDF Storage of e-Exams
  3. PDF Elektronische Signatur
  4. Extending Test Export  (Rohdatenexport)
    1. Export von zufallsgenerierten Tests
    2. XLSX
  5. [[Administrationsskripten zur Verwaltung von Prüfungen und Prüflingen (Perl)] ** obsolet **]
Fragen Objekt :: Freitext Frage (Essay Question)
  1. Begrenzung der Texteingaben
Test Objekt :: Einstellungen
  1. Erweiterung Präsentation Testergebnisse
  2. KIOSK Modus
  3. Display Options For E-Exams
  4. Erweiterte Protokollierung
Test-Objekt :: Administration
  1. Neue Registerkarte "Administration" im Test-Objekt
    1. Erweiterung der Auswertungsmöglichkeiten für Fragen
    2. Nachkorrekturmodus
    3. Individuelle Zeitzugabe
Test-Objekt :: Manuelle Bewertung
  1. Bewertung nach Fragen
Test-Objekt :: Erweiterung - Item Management System Schnittstelle
  1. IMS-M Schnittstelle
Anpassungen an E-Prüfungssystem
  1. Prüfungsskins
  2. Sonderzeichen-Editor in Textfeldern
 
Revision GUI Question Pool Test
 
Revision GUI Test

6 Redundant, Outdated and Rejected Feature Requests

Requests that are outdated or redundant (already implemented in other requests)

  1. (Project) Centralising Online/Offline Status
  2. (Project) Revision of Test Question Creation
  3. Abandon Access Codes in Tests
  4. Add “no entry” node to taxonomy tree to show questions without taxonomy entries in questions pools
  5. Administration of Tests: Log Data Export Improvements
  6. Allow QTI import and export of tests
  7. Big Start Button
  8. Clarification of Log Data for Tests
  9. Cloze Question: Separately configured gap lengths
  10. Clozed question: seperatly feedback from multiple questions
  11. Competence Results in Tests: Adaptation of Object Reporting Panels
  12. Continuous Testing Mode Usability Improvement
  13. Detailed feedback (text and hyperlinks) after test is finished
  14. Excel export: Show answers of all test passes
  15. Extending Continuous Testing Mode: Consider Processing Time
  16. Extending Continuous Testing Mode: Purgatory Status of Question
  17. Extending Continuous Testing Mode: Threshold to Overcome Question
  18. Extending Test Export
  19. Fragen aus Survey oder Test in Pool kopieren und verlinken
  20. highlighted text
  21. Highlighting Words in Question Text
  22. Improve feedback setup in self assessment questions of ILIAS LM
  23. Improve Start Button in Tests and Surveys
  24. Improved navigation at end of initial test in course with learning objectives
  25. Improved Test Logging
  26. Improving e-exam countdown
  27. Info page for pool
  28. Interface to get assessment related user data
  29. Introduce New Permission *View to User Data in Selected Components*
  30. Introducing Assessment Question Service
  31. Introduction of Test Parts
  32. Is-dirty Mode for Tests
  33. Lifecycle and Versioning Support in Test Questions
  34. Manual Scoring for STACK Question Type
  35. MC-Questions with empty solution = correct solution
  36. Multiple pass scoring: change default setting to scoring the best pass
  37. Pie chart in Question Queue
  38. preview of all questions
  39. Questions (Test, Testpool, ILIAS-LM) - Show Javascript-Code as Text
  40. Random Response Selection in Questions
  41. Randomly Seeded Shuffling of Answer Options for Formative Assessments
  42. Rearrange Elements of Test-Question-Page
  43. Redo Question Rendering
  44. Remove Corrections tab
  45. Remove horizontal  Ordering Question
  46. Revise Prepopulation of Content for Recapitulation of Type Text
  47. Revision of MCQ: Alternative points specification for multiple choice question
  48. Revision of Test Question Corrections
  49. Revision of the precision in the formula question
  50. Show points in preview
  51. Support metadata for individual questions in pools and tests
  52. Taxonomy Support when copying test questions to different question pool
  53. Test Question Interface
  54. Test Question Pool as Independent Object
  55. Traceable connection between tests and ILIAS-learning module

Rejected Feature Requests

  1. Abandon Feedback in Test Results
  2. Abandon Test Export File (incl. Participants Results)
  3. Amend Personal Default Settings
  4. Automatische Nachricht über neu hochgeladenen (oder kopierten) Test erzeugen
  5. Change Setting to show users their results in ILIAS Test
  6. Container object to cluster questions (improved display)
  7. Display of Time Limit per Question
  8. Don’t show Feedback button when there is no feedback
  9. DR 5.1: Issue 15: Presentation problems when running test
  10. Edit Questions of Test which already contains datasets
  11. Eingabefelder für Zahlen und Datumswerte
  12. Extend ASQ: Page Content for Questions
  13. Extending ASQ: Competence Assignment for Questions
  14. Extending ASQ: Taxonomy Assignment for Questions
  15. Grading, Marking and Evaluating in Tests
  16. Green Mark when test time is passed
  17. Images for Tests
  18. Impartial Manual Scoring
  19. Implement Kiosk-Mode for Test
  20. Import of Tests Without Questions
  21. Improved look of page Test Results
  22. KS Tree Select Input
  23. KS: Presentation Table for Test Statistics
  24. Mark schema: change marks when Access to Test Results is set to never
  25. Migration path for question types to ASQ
  26. Multiple Choice Question (Kprim Answers) - Allow up to 6 Answers
  27. Question pool: make text size configurable in cloze question
  28. Remove the import of random tests into pools
  29. Remove the option to let anonymous take tests in public area
  30. Revamp Information about Hints and Deduction in Tests
  31. Separate Options for Show ‘List of Questions’ and Dashboard
  32. Simple Drag and Drop
  33. STACK questions in ILIAS LM
  34. Statistics: Evaluation for all questions
  35. Status-Sensitive Button Label
  36. Straightforward Configuration of Result Presentation
  37. Streamlining Answer Input Fields
  38. Streamlining Participants and Statistics View
  39. Test Player: Kiosk-Mode (Exam View) for Page Layout Revision
  40. Test: Revise Hints and their visibility in manual scoring
  41. Usability Improvement of Random Tests

Last edited: 15. Oct 2025, 15:17, Kerbaum, Leonie [LeKer]