UC-DOC-OEF-009 - Testoefening opruimen
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-DOC-OEF-009 |
| Naam | Testoefening opruimen |
| Domein | Docent |
| Subdomein | Oefeningen configureren en testen |
| Primaire actor | Systeem |
| Secundaire actor(en) | Scheduler, backend, database, docent als indirect betrokken actor |
| Rolcontext | Systeemcontext voor het opruimen van tijdelijke docenttestruns |
| Betrokken schermen | Niet schermgebonden; indirect zichtbaar doordat testruns niet in geschiedenis verschijnen |
| Gerelateerde usecases | UC-DOC-OEF-008, UC-LLN-OEF-007, UC-LLN-OEF-008, UC-DOC-LIVE-007 |
| Primaire entiteiten | ExerciseRuns, ExerciseRunProgress, Exercises, Users |
| Secundaire entiteiten / events | IsTestRun, StartedAtUtc, CompletedAtUtc, tijdelijke modulepayload, technische logging, TickerQ-scheduler |
| Gerelateerde popups | Niet van toepassing |
| Popupregister | Niet van toepassing |
| MoSCoW | Must |
2. Omschrijving
Deze usecase beschrijft hoe OefenHub tijdelijke testdata van docenten opruimt. Testruns mogen tijdelijk bestaan om een oefening in docentcontext te kunnen testen, maar zij zijn geen functionele leerlingresultaten en horen niet blijvend in geschiedenis, statistieken of frontpage-readmodels voor te komen.
Opruimen kan direct plaatsvinden na afronding of verlaten van een test, en daarnaast periodiek via een scheduler voor achtergebleven testruns. De scheduler vangt situaties op zoals browserafsluiting, verbindingsverlies of technische onderbreking waardoor directe opruiming niet volledig kon plaatsvinden.
De usecase verwijdert of ruimt alleen records op die ondubbelzinnig als docenttestdata herkenbaar zijn. Normale leerlingruns, afgeronde leerlinggeschiedenis, gedeelde oefeningen en live-meekijkaudit vallen buiten deze opruimactie.
3. Scope
3.1 Binnen scope
- Detecteren van testruns met IsTestRun = true.
- Direct opruimen na afronding of verlaten van een docenttest.
- Periodiek opruimen van achtergebleven testruns via scheduler.
- Verwijderen van bijbehorende tijdelijke voortgangsrecords.
- Uitsluiten van normale leerlingruns en blijvende geschiedenis.
- Technisch loggen van opruimresultaten en fouten.
- Veilig afhandelen van gedeeltelijk aanwezige of inconsistente testdata.
- Voorkomen dat testruns zichtbaar worden in geschiedenis, statistieken of frontpageblokken.
3.2 Buiten scope
- Docenttest starten of uitvoeren.
- Normale leerlingruns opschonen.
- Bewaartermijnen voor gewone geschiedenis bepalen.
- Privéberichten of systeemberichten opschonen.
- Live-meekijkaudit verwijderen.
- Oefeningconfiguraties verwijderen.
- Accountverwijdering of anonimisering uitvoeren.
- Centrale modulebeheerflows uitvoeren.
- Modulemigratie of technische moduleversies beheren.
- Leerlingautorisaties toekennen of intrekken.
- Relatie-uitnodigingen, docent-leerlingrelaties of docent-docentrelaties aanmaken.
- Leerlingresultaten aanpassen of verwijderen.
- Systeemnotificaties beheren of tonen.
- Beheerderondersteuning of centrale contentbeheerflows uitvoeren.
4. Pre-condities
| ID | Voorwaarde |
|---|---|
| PRE-001 | Er bestaat een directe opruimtrigger of geplande schedulertrigger. |
| PRE-002 | De backend kan testruns identificeren via IsTestRun = true. |
| PRE-003 | De cleanupquery kan normale leerlingruns uitsluiten. |
| PRE-004 | De databasecontext is beschikbaar voor transactionele opruiming. |
| PRE-005 | Er is een technische loggingcontext beschikbaar. |
| PRE-006 | De cleanupcriteria voor actieve, afgeronde, verlaten of achtergebleven testruns zijn in configuratie of code vastgelegd. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | Geselecteerde testruns zijn uit de functionele runopslag verwijderd of administratief opgeruimd volgens het databaseontwerp. |
| POST-002 | Bijbehorende tijdelijke voortgangsrecords zijn verwijderd of onbereikbaar gemaakt voor normale uitlezing. |
| POST-003 | Normale leerlingruns en leerlinggeschiedenis zijn niet geraakt. |
| POST-004 | De opruimactie is technisch herleidbaar via logging. |
| POST-005 | Achtergebleven testruns verschijnen niet in geschiedenis, statistieken of frontpage-readmodels. |
| POST-006 | Bij gedeeltelijke fouten blijven resterende testruns herkenbaar voor een volgende cleanup-run. |
6. Trigger
De opruimflow wordt gestart direct na afronding of verlaten van een docenttest, of periodiek door de scheduler voor achtergebleven testruns.
De scheduler zoekt testruns die volgens de cleanupcriteria niet langer als actieve testcontext nodig zijn.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | Systeem | Cleanup-trigger | Start directe of geplande opruiming | Backend opent cleanupcontext | TriggerType |
| 2 | Systeem | Backend | Bepaalt cleanupscope | Alleen IsTestRun = true wordt geselecteerd | ExerciseRuns.IsTestRun |
| 3 | Systeem | Backend | Filtert actieve testcontexten | Nog lopende geldige tests worden overgeslagen | StartedAtUtc, activity window |
| 4 | Systeem | Database | Laadt bijbehorende voortgang | Tijdelijke progressrecords worden opgehaald | ExerciseRunProgress |
| 5 | Systeem | Backend | Controleert referenties | Normale runs en niet-testdata blijven buiten scope | Safety check |
| 6 | Systeem | Database | Verwijdert tijdelijke voortgang | Progressrecords worden opgeruimd | ExerciseRunProgress |
| 7 | Systeem | Database | Verwijdert of ruimt testrun op | Testrun verdwijnt uit functionele uitlezing | ExerciseRuns |
| 8 | Systeem | Backend | Controleert resultaat | Aantal opgeruimde records wordt bepaald | Cleanup summary |
| 9 | Systeem | Logging | Logt opruimactie | Technische logging bevat scope, aantallen en fouten | Application logging |
| 10 | Systeem | Scheduler | Rondt taak af | Volgende run kan resterende data oppakken | TickerQ |
8. Alternatieve en exceptionele processtromen
| ID | Vanaf stap | Situatie | Systeemgedrag | Popup / melding | Datamutatie |
|---|---|---|---|---|---|
| ALT-001 | 2 | Geen testruns gevonden | Cleanup eindigt zonder datamutatie | Niet van toepassing | Geen |
| ALT-002 | 3 | Testrun is nog actief binnen geldige testwindow | Testrun wordt overgeslagen | Niet van toepassing | Geen |
| ALT-003 | 5 | Record lijkt geen echte testrun ondanks selectie | Record wordt niet verwijderd en fout wordt gelogd | Technische logging | Geen |
| ALT-004 | 6 | Voortgangsrecords ontbreken al | Cleanup gaat verder met testrun wanneer veilig | Technische logging | Testrun kan worden opgeruimd |
| ALT-005 | 7 | Verwijderen van testrun faalt | Rollback voor betreffende batch of record | Technische logging | Geen gedeeltelijke onveilige mutatie |
| ALT-006 | 9 | Technische logging faalt | Cleanupresultaat blijft databaseleidend; loggingfout wordt apart afgehandeld | Technische foutafhandeling | Geen domeinmutatie |
| ALT-007 | 10 | Scheduler wordt onderbroken | Volgende scheduler-run kan overgebleven IsTestRun-records opnieuw selecteren | Technische logging | Geen normale geschiedenis |
9. Business rules
| ID | Regel |
|---|---|
| BR-001 | Alleen ExerciseRuns met IsTestRun = true mogen door deze usecase worden opgeruimd. |
| BR-002 | Normale leerlingruns mogen nooit door deze testrun-cleanup worden verwijderd. |
| BR-003 | Bijbehorende tijdelijke voortgangsrecords worden samen met de testrun opgeruimd. |
| BR-004 | Testruns zijn functioneel niet zichtbaar in geschiedenis of statistieken, ook als cleanup nog niet heeft plaatsgevonden. |
| BR-005 | De cleanup moet veilig herhaalbaar zijn. |
| BR-006 | Achtergebleven testruns moeten door een periodieke scheduler worden opgeschoond. |
| BR-007 | Een nog actieve test mag niet voortijdig door de scheduler worden verwijderd binnen de geldige activiteitstermijn. |
| BR-008 | Cleanup schrijft geen systeemberichten of privéberichten. |
| BR-009 | Cleanup wijzigt geen oefeningconfiguratie en geen oefeningstatus. |
| BR-010 | Technische logging is voldoende; er ontstaat geen gebruikersgerichte historyregel. |
| BR-011 | Cleanup mag geen LiveViewAudit-records verwijderen. |
| BR-012 | Cleanup mag geen account- of profielgegevens wijzigen. |
10. Datavalidatie
| Veld / object | Validatie |
|---|---|
| ExerciseRuns.IsTestRun | Moet true zijn voordat een run door deze cleanup geraakt mag worden. |
| ExerciseRunId | Moet verwijzen naar een bestaande testrun of veilig als reeds verwijderd behandeld worden. |
| Activity window | Moet bepalen of een test nog actief genoeg is om over te slaan. |
| CompletedAtUtc / verlaten-indicatie | Kan worden gebruikt om directe cleanup te starten. |
| Batchselectie | Moet normale runs expliciet uitsluiten. |
| Foreign key volgorde | Voortgang en afhankelijke tijdelijke records worden vóór of samen met de run opgeruimd. |
| Cleanup logging | Moet aantallen en foutcontext technisch herleidbaar maken. |
| Herhaalbaarheid | Een tweede cleanup-run mag geen fout veroorzaken op al verwijderde tijdelijke data. |
| Readmodels | Geschiedenis- en frontpagequeries moeten IsTestRun altijd uitsluiten, ook vóór fysieke cleanup. |
| Schedulercontext | Moet zonder gebruikerssessie kunnen draaien. |
11. Datamutaties en events
| Stap | Type | Entiteit / event | Mutatie |
|---|---|---|---|
| 1 | Start | CleanupJob | Directe of geplande cleanup start. |
| 2 | Read | ExerciseRuns | Testruns met IsTestRun = true worden geselecteerd. |
| 3 | Filter | ExerciseRuns | Nog actieve geldige testcontexten worden overgeslagen. |
| 4 | Read | ExerciseRunProgress | Bijbehorende tijdelijke voortgang wordt geladen. |
| 6 | Delete | ExerciseRunProgress | Tijdelijke voortgangsrecords worden verwijderd. |
| 7 | Delete | ExerciseRuns | Testrun wordt verwijderd of administratief opgeruimd. |
| 9 | Log | Application/account technical logging | Cleanupresultaat wordt technisch gelogd. |
| 10 | Event | TeacherTestExerciseCleanedUp | Technisch event voor cleanupregistratie. |
12. Geen datamutaties
| Entiteit | Reden |
|---|---|
| Exercises | Oefeningconfiguratie, naam, icoon en status blijven ongewijzigd. |
| ExerciseHistory | Cleanup van testdata is geen oefeningbeheerwijziging. |
| Normale ExerciseRuns | Runs met IsTestRun = false worden niet geraakt. |
| Leerlinggeschiedenis | Bestaande afgeronde leerlingresultaten blijven behouden. |
| LiveViewAudit | Meekijkaudit wordt niet verwijderd door deze cleanup. |
| SharedExercises | Gedeelde oefeningen worden niet aangepast. |
| StudentAuthorizations | Deze usecase kent geen leerlingtoegang toe en trekt geen leerlingtoegang in. |
| SystemMessages | Deze usecase maakt geen systeembericht aan. |
| PrivateMessages | Deze usecase maakt geen privébericht aan. |
| RelationshipInvitations | Relatievorming blijft buiten scope. |
| Roles / UserRoles | Rollen en roltoekenningen worden niet gewijzigd. |
13. State diagram
Deze usecase beschrijft de tijdelijke lifecycle van testdata vanuit opruimperspectief. De belangrijkste toestand is of een test-run nog actief nodig is of veilig kan worden opgeruimd.
14. Decision flow
15. Data lifecycle diagram
16. Sequence diagrammen
Geplande cleanup
Directe cleanup na verlaten
17. Popupverwijzingen
| PopupKey | Moment | Toelichting |
|---|---|---|
| Niet van toepassing | Deze usecase gebruikt geen domeinspecifieke popup. | Routeguard-, inline validatie- of componentafhandeling volstaat. |
18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| Doeldocument | Afleiding |
|---|---|
| Functioneel Ontwerp | Beschrijft dat testruns niet permanent blijven bestaan en niet zichtbaar worden in geschiedenis of statistieken. |
| Technisch Ontwerp | Technisch Ontwerp: oefencatalogus, oefenmodulecontract, oefenruns en testuitvoering en background jobs beschrijven de technische uitwerking. Beschrijf cleanup via directe trigger en scheduler, IsTestRun-filter en veilige herhaalbaarheid. |
| Software Requirements Specification | Leg eisen vast voor testdata-opruiming, uitsluiting van normale runs en logging. |
| Database-informatie | Controleer ExerciseRuns.IsTestRun, afhankelijke voortgangsrecords en cleanupvolgorde. |
| Ontwerpbronnen | Beschrijven business rules, command-register, event-register en matrices bij. |
19. SRS-trace
Deze usecase bevat geen normatieve requirementtekst. De centrale eis en acceptatiecriteria staan in de SRS; onderstaande tabel koppelt de usecase-afleiding alleen aan centrale SRS-*- en AC-*-items.
| Usecase-afleiding | Dekt | Usecasecontext |
|---|---|---|
REQ-UC-DOC-OEF-009-001 | SRS-LRN-009 SRS-TCH-005 AC-LRN-009 AC-TCH-005 | Tijdelijke docenttestruns kunnen identificeren via IsTestRun = true |
REQ-UC-DOC-OEF-009-002 | SRS-LRN-006 SRS-TCH-005 AC-LRN-006 AC-TCH-005 | Testruns na afronding of verlaten kunnen opruimen |
REQ-UC-DOC-OEF-009-003 | SRS-LRN-009 SRS-TCH-005 SRS-ARCH-004 AC-LRN-009 AC-TCH-005 AC-ARCH-004 | Achtergebleven testruns periodiek via een scheduler kunnen opruimen |
REQ-UC-DOC-OEF-009-004 | SRS-LRN-003 SRS-TCH-005 AC-LRN-003 AC-TCH-005 | Bij testrun-cleanup de bijbehorende tijdelijke voortgangsrecords opruimen |
REQ-UC-DOC-OEF-009-005 | SRS-LRN-009 SRS-TCH-005 AC-LRN-009 AC-TCH-005 | Normale leerlingruns nooit verwijderen via de testrun-cleanup |
REQ-UC-DOC-OEF-009-006 | SRS-TCH-001 SRS-NFR-SEC-001 AC-TCH-001 AC-NFR-SEC-001 | Cleanup veilig herhaalbaar uitvoeren |
REQ-UC-DOC-OEF-009-007 | SRS-LRN-009 SRS-TCH-005 AC-LRN-009 AC-TCH-005 | Nog actieve testruns binnen een geldige activiteitstermijn kunnen overslaan |
REQ-UC-DOC-OEF-009-008 | SRS-TCH-001 AC-TCH-001 | Cleanupresultaten en fouten technisch loggen |
REQ-UC-DOC-OEF-009-009 | SRS-RDM-001 SRS-RDM-003 SRS-RDM-006 SRS-LRN-010 SRS-TCH-004 SRS-NFR-AUD-001 AC-RDM-001 AC-RDM-003 AC-RDM-006 AC-LRN-010 AC-TCH-004 AC-NFR-AUD-001 | Testruns uitsluiten uit geschiedenis, statistieken en frontpage-readmodels, ook vóór fysieke cleanup |
REQ-UC-DOC-OEF-009-010 | SRS-REL-001 SRS-MSG-001 SRS-CAT-003 SRS-LRN-009 SRS-TCH-002 AC-REL-001 AC-MSG-001 AC-CAT-003 AC-LRN-009 AC-TCH-002 | Bij cleanup geen oefeningconfiguratie, rollen, relaties of berichten wijzigen |