Tag 1 abgeschlossen
This commit is contained in:
+7
@@ -101,6 +101,8 @@ zurückgenommen; zum weiteren Weg der Codebasis siehe Anmerkung 9.
|
||||
|
||||
Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`.
|
||||
|
||||
Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt.
|
||||
|
||||
### Verteilung über die Ebenen
|
||||
|
||||
| Ebene | Anzahl | Anteil |
|
||||
@@ -131,6 +133,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| Belege je Anforderung (Median) | 1,0 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 96 (100,0 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`.
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
@@ -148,6 +154,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) |
|
||||
| **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (49 risikorelevante Anforderungen, alle gedeckt) |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 96 von 96 mit Tracelinks (100,0 %) |
|
||||
|
||||
## Anmerkungen/Auffälligkeiten
|
||||
|
||||
+192
-96
@@ -15,7 +15,8 @@
|
||||
"tracelinks": "SyRS-001, SyRS-002",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Ein Angebot mit n Positionen wird zu einem Auftrag weitergeführt; Kunde und Positionsdaten müssen identisch übernommen werden (Stichprobe über UI oder Integrationstest).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-002",
|
||||
@@ -33,7 +34,8 @@
|
||||
"tracelinks": "SyRS-003, SyRS-004",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Signaturprozess mit gültigem Token durchlaufen; danach Prüfen, dass `WebReceiptState` gesetzt ist und ein erneuter Aufruf desselben Tokens als \"bereits signiert\" abgelehnt wird.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-003",
|
||||
@@ -51,7 +53,8 @@
|
||||
"tracelinks": "SyRS-005",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Rechnung festschreiben, danach Änderungsversuch an Position/Kopf durchführen → muss abgelehnt werden; erneutes Festschreiben → muss abgelehnt werden (\"Die Rechnung ist festgeschrieben...\").",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-004",
|
||||
@@ -68,7 +71,8 @@
|
||||
"tracelinks": "SyRS-006",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Für Netto=100, Steuersatz=19 → Steuerbetrag=19.00, Brutto=119.00 (kaufmännisch gerundet); Test mit Rabatt und Fremdwährungsfaktor.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-005",
|
||||
@@ -85,7 +89,8 @@
|
||||
"tracelinks": "SyRS-001, SyRS-002",
|
||||
"konsolidierung": "Kandidat: StRS-001 (Teil derselben Belegketten-Logik)",
|
||||
"pruefidee": "Beleg mit 2 Positionen anlegen, eine Position vollständig weiterverarbeiten (Beleg bleibt Active), zweite Position vollständig weiterverarbeiten (Beleg wechselt zu Completed).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-006",
|
||||
@@ -102,7 +107,8 @@
|
||||
"tracelinks": "SyRS-007, SyRS-008",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Ticket ohne Pflichtfeld anlegen → muss abgelehnt werden; Ticket mit allen Pflichtfeldern anlegen → muss erfolgreich sein und Historieneintrag erzeugen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-007",
|
||||
@@ -119,7 +125,8 @@
|
||||
"tracelinks": "SyRS-008",
|
||||
"konsolidierung": "Kandidat: StRS-018 (allgemeines Rechtesystem, hier domänenspezifische Ausprägung)",
|
||||
"pruefidee": "Benutzer mit `SHOW_HELPDESK_ONLY_OWN_BRANCH` darf Ticket anderer Filiale nicht in der Liste sehen (Integrationstest mit zwei Filialen).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-008",
|
||||
@@ -135,7 +142,8 @@
|
||||
"tracelinks": "SyRS-009",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "RMA ohne HelpdeskI3D anlegen → muss mit DependencyCheckFailed-Fehler abgelehnt werden.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-009",
|
||||
@@ -152,7 +160,8 @@
|
||||
"tracelinks": "SyRS-007, SyRS-010",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zwei parallele Ausführungsversuche derselben fälligen Aufgabe → nur ein Ticket darf entstehen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-010",
|
||||
@@ -168,7 +177,8 @@
|
||||
"tracelinks": "SyRS-011",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer ohne `CHANGE_ARTICLE_PRICE` versucht Preisänderung zu speichern → Preis bleibt auf altem DB-Wert.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-011",
|
||||
@@ -185,7 +195,8 @@
|
||||
"tracelinks": "SyRS-012",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Inventurposition mit abweichender Zählmenge anlegen → `CloseState` muss \"Risk\" oder \"problem\" ergeben, nicht \"Ok\".",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-012",
|
||||
@@ -202,7 +213,8 @@
|
||||
"tracelinks": "SyRS-013",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer ohne `CREATE_PARTIAL_COMMISSION_FOR_ORDER` versucht Teilkommission anzulegen → Ablehnung.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-013",
|
||||
@@ -218,7 +230,8 @@
|
||||
"tracelinks": "SyRS-014",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Artikel mit Mindestbestand 10, aktuellem Bestand 3, offenem Auftragsbedarf 5 → Vorschlagsmenge muss ≥ 12 ergeben (rechnerische Nachvollziehung, exakte Formel im Quellcode zu verifizieren).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-014",
|
||||
@@ -235,7 +248,8 @@
|
||||
"tracelinks": "SyRS-015",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "EDI-Konfiguration mit Distributor \"EGIS\" → erzeugtes Dokument muss dem EGIS-spezifischen Format entsprechen (Format-Validierung).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-015",
|
||||
@@ -251,7 +265,8 @@
|
||||
"tracelinks": "SyRS-016, SyRS-017",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zwei identische Transaktionsimporte (gleiche IBAN/Datum/Betrag/Beschreibung) → zweiter Import muss als Duplikat markiert werden, nicht doppelt verbucht werden.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-016",
|
||||
@@ -267,7 +282,8 @@
|
||||
"tracelinks": "SyRS-016",
|
||||
"konsolidierung": "Kandidat: StRS-015 (beide betreffen Zahlungsbuchung auf Rechnungen)",
|
||||
"pruefidee": "Benutzer ohne Recht versucht Zahlung zu löschen → Ablehnung mit definierter Fehlermeldung; Rechnungsbetrag bleibt unverändert.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-017",
|
||||
@@ -284,7 +300,8 @@
|
||||
"tracelinks": "SyRS-018",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer ohne `CAN_CHANGE_DATE`-Recht öffnet Timer-Billing-Einstellungen → Datumsfeld ist deaktiviert; direkter Web-Service-Aufruf mit geänderten Datum ohne Recht muss serverseitig abgelehnt werden (nicht nur UI-Test!).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-018",
|
||||
@@ -301,7 +318,8 @@
|
||||
"tracelinks": "SyRS-019, SyRS-020",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Für eine Stichprobe von 10 unterschiedlichen Modulaktionen: Benutzer ohne jeweiliges Recht → serverseitige Ablehnung (nicht nur UI-Ausblendung).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-019",
|
||||
@@ -318,7 +336,8 @@
|
||||
"tracelinks": "SyRS-021, SyRS-022",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Anmeldung über jedes der vier Verfahren mit gültigen Testdaten → gültiges Ticket wird ausgestellt; ungültige Zugangsdaten → Ablehnung.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-020",
|
||||
@@ -334,7 +353,8 @@
|
||||
"tracelinks": "SyRS-021",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Anmeldung mit korrektem ersten Faktor, aber ohne/mit falschem zweiten Faktor → Anmeldung muss abgelehnt werden.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-021",
|
||||
@@ -350,7 +370,8 @@
|
||||
"tracelinks": "SyRS-023",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Gespeichertes Passwort einsehen → Protokolleintrag mit ActionType \"Zugriff\" muss entstehen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-022",
|
||||
@@ -367,7 +388,8 @@
|
||||
"tracelinks": "SyRS-024, SyRS-021",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Kunde A meldet sich an und darf keine Tickets von Kunde B sehen (Mandanten-/Kundentrennungstest).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-023",
|
||||
@@ -384,7 +406,8 @@
|
||||
"tracelinks": "SyRS-024, SyRS-025",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Web-Account ohne WebCart2-Lizenz ruft `/webcart/shop` auf → Zugriff muss verweigert werden.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-024",
|
||||
@@ -401,7 +424,8 @@
|
||||
"tracelinks": "SyRS-026, SyRS-027",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "CI-Pipeline-Lauf erzeugt alle drei signierten Artefakte (MSI ×2, Container-Image) ohne manuellen Eingriff.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-025",
|
||||
@@ -418,7 +442,8 @@
|
||||
"tracelinks": "SyRS-028",
|
||||
"konsolidierung": "Kandidat: strukturell ähnliches Client-Pattern wie StRS-026 (Versanddienstleister)",
|
||||
"pruefidee": "Ein Dienst liefert HTTP 401 → nur dieser Dienst wird als fehlgeschlagen markiert, übrige Anreicherungsquellen bleiben nutzbar.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-026",
|
||||
@@ -435,7 +460,8 @@
|
||||
"tracelinks": "SyRS-028",
|
||||
"konsolidierung": "Kandidat: GLS und Shipcloud bilden dieselbe fachliche Funktion \"Versandauftrag erstellen\" redundant ab.",
|
||||
"pruefidee": "Versandauftrag mit gültigen Empfängerdaten auslösen → Tracking-ID und Label müssen im System hinterlegt sein.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-027",
|
||||
@@ -452,7 +478,8 @@
|
||||
"tracelinks": "SyRS-028",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "ebInterface-Export einer Testrechnung gegen offizielles XSD-Schema validieren.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-028",
|
||||
@@ -469,7 +496,8 @@
|
||||
"tracelinks": "SyRS-028",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Abruf von `GetDeviceCounters` für ein Testgerät liefert plausible Zählerwerte zurück.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-001",
|
||||
@@ -486,7 +514,8 @@
|
||||
"tracelinks": "StRS-001; SwRS-001, SwRS-002",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Code-Review: Suche nach belegartspezifischer if/else- oder switch-Verzweigung innerhalb `ReceiptBL` außerhalb der `IReceiptSpecificLogic`-Aufrufe (sollte nicht signifikant vorkommen).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-002",
|
||||
@@ -503,7 +532,8 @@
|
||||
"tracelinks": "StRS-001, StRS-005; SwRS-003",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Datenbankabfrage über alle Belegtabellen mit `ReceiptState`-Spalte liefert konsistente Wertemenge {1,2,3}.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-003",
|
||||
@@ -519,7 +549,8 @@
|
||||
"tracelinks": "StRS-002; SwRS-004",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zweiten Signiervorgang für denselben Beleg anstoßen, während erster aktiv ist → Ablehnung mit definierter Fehlermeldung.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-004",
|
||||
@@ -535,7 +566,8 @@
|
||||
"tracelinks": "StRS-002; SwRS-005, SwRS-006",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Abgelaufenen Token direkt per HTTP-Request aufrufen (ohne UI) → Server muss ablehnen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-005",
|
||||
@@ -551,7 +583,8 @@
|
||||
"tracelinks": "StRS-003; SwRS-007, SwRS-008",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Direkter INSERT ohne Angabe von `IsFixed` gegen Testdatenbank → DB muss Default 0 setzen, NULL darf nicht möglich sein.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-006",
|
||||
@@ -567,7 +600,8 @@
|
||||
"tracelinks": "StRS-004; SwRS-009, SwRS-010",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Gleiche Testwerte über WPF-Client und Nexus-Web-Client eingeben → identisches Ergebnis.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-007",
|
||||
@@ -583,7 +617,8 @@
|
||||
"tracelinks": "StRS-006, StRS-009; SwRS-011, SwRS-012",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Direkter API-Aufruf zum Schließen eines Tickets ohne `CLOSE_REQUEST`-Recht → serverseitige Ablehnung.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-008",
|
||||
@@ -599,7 +634,8 @@
|
||||
"tracelinks": "StRS-006, StRS-007; SwRS-013",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Netzwerk-Mitschnitt einer Listenabfrage eines eingeschränkten Benutzers → Antwortdaten dürfen keine unzulässigen Datensätze enthalten (nicht nur UI-Ausblendung).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-009",
|
||||
@@ -615,7 +651,8 @@
|
||||
"tracelinks": "StRS-008; SwRS-014, SwRS-015",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Speicherversuch eines RMA mit `HelpdeskI3D = 0` → `ResultException` mit Code `DependencyCheckFailed`.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-010",
|
||||
@@ -631,7 +668,8 @@
|
||||
"tracelinks": "StRS-009; SwRS-016, SwRS-017",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Simultane Ausführung derselben Aufgabe aus zwei Prozessen → nur eine Ausführung erfolgreich, zweite erhält Lock-Timeout.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-011",
|
||||
@@ -647,7 +685,8 @@
|
||||
"tracelinks": "StRS-010; SwRS-018",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer mit Recht \"Artikel bearbeiten\", aber ohne `CHANGE_ARTICLE_PRICE`, ändert Preis und Beschreibung gleichzeitig → Beschreibung wird gespeichert, Preis bleibt unverändert.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-012",
|
||||
@@ -664,7 +703,8 @@
|
||||
"tracelinks": "StRS-011; SwRS-019, SwRS-020",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Position mit Zählmenge ≠ Sollmenge und ohne Barcode-Konflikt → `CloseState = Risk`, keine Freigabe als \"Ok\".",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-013",
|
||||
@@ -680,7 +720,8 @@
|
||||
"tracelinks": "StRS-012; SwRS-021",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer mit nur Anlage-Recht versucht Löschung → Ablehnung.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-014",
|
||||
@@ -696,7 +737,8 @@
|
||||
"tracelinks": "StRS-013; SwRS-022",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Lasttest: Bestellvorschlagsberechnung während gleichzeitiger Bestandsbuchung → Ergebnis muss nachvollziehbar einem Zeitpunkt zuordenbar sein (Konsistenzprüfung, ggf. [HYPOTHESE] bzgl. Transaktionsisolationsstufe, siehe Hypothesen.md).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-015",
|
||||
@@ -712,7 +754,8 @@
|
||||
"tracelinks": "StRS-014; SwRS-023",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Konfiguration auf \"ITScope\" umstellen → erzeugtes Dokument muss ITScope-spezifisches Format aufweisen, ohne Codeänderung.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-016",
|
||||
@@ -729,7 +772,8 @@
|
||||
"tracelinks": "StRS-015, StRS-016; SwRS-024, SwRS-025, SwRS-026",
|
||||
"konsolidierung": "Kandidat: SyRS-017 (beide betreffen Zahlungsverbuchung)",
|
||||
"pruefidee": "Duplikat-Importtest sowie Lösch-Test ohne Recht (siehe StRS-015/016 für Details).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-017",
|
||||
@@ -745,7 +789,8 @@
|
||||
"tracelinks": "StRS-015; SwRS-025",
|
||||
"konsolidierung": "Kandidat: SyRS-016",
|
||||
"pruefidee": "Zahlung mit Differenz 0,05 zur Forderung → Rechnung wird als bezahlt markiert; Differenz 0,20 → nicht.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-018",
|
||||
@@ -761,7 +806,8 @@
|
||||
"tracelinks": "StRS-017; SwRS-027",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Direkter Web-Service-Aufruf zur Datumsänderung ohne Recht (unter Umgehung der UI) → muss serverseitig abgelehnt werden. [HYPOTHESE]: Ob der eigentliche Schreibpfad (nicht nur die Anzeige-Flags) diese Prüfung ebenfalls erzwingt, wurde im Rahmen dieser Iteration nicht bis zur konkreten Save-Methode zurückverfolgt — siehe Hypothesen.md.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-019",
|
||||
@@ -778,7 +824,8 @@
|
||||
"tracelinks": "StRS-018; SwRS-028",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Rechteprüfung während simuliertem DB-Verbindungsfehler auslösen → Ergebnis muss `false` (verweigert) sein, nicht Exception nach oben durchreichen oder `true` liefern.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-020",
|
||||
@@ -794,7 +841,8 @@
|
||||
"tracelinks": "StRS-018; SwRS-029",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Code-Review-Test: zwei parallele Branches fügen ein neues Recht mit dem \"nächsten\" ID-Wert hinzu → Merge-Konflikt wird nicht automatisch, sondern nur durch Textgleichheit des Kommentars erkannt (Risiko einer stillen ID-Kollision, falls nicht rechtzeitig bemerkt).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-021",
|
||||
@@ -810,7 +858,8 @@
|
||||
"tracelinks": "StRS-019, StRS-020, StRS-022; SwRS-030, SwRS-031, SwRS-032, SwRS-033",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Anmeldung über Basic-Auth und über OIDC vergleichen → resultierendes Ticket hat identische Struktur/Felder.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-022",
|
||||
@@ -826,7 +875,8 @@
|
||||
"tracelinks": "StRS-019; SwRS-032",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Ticket erzeugen, künstlich Systemzeit über Ablaufgrenze vorstellen (Testsystem) → Ticket wird abgelehnt.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-023",
|
||||
@@ -842,7 +892,8 @@
|
||||
"tracelinks": "StRS-021; SwRS-034",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zugriff auf gespeichertes Passwort → Protokolleintrag muss unmittelbar entstehen, unabhängig vom Ergebnis des Zugriffs.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-024",
|
||||
@@ -859,7 +910,8 @@
|
||||
"tracelinks": "StRS-022, StRS-023; SwRS-035",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Als Web-Account-Kunde angemeldet, direkten API-Aufruf auf einen internen/administrativen Endpunkt oder auf Daten eines anderen Kunden versuchen → muss abgelehnt werden. [HYPOTHESE]: Die konkrete serverseitige Scoping-Prüfung pro Kundenportal-Endpunkt wurde nicht für jeden einzelnen Controller einzeln verifiziert — siehe Hypothesen.md.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-025",
|
||||
@@ -875,7 +927,8 @@
|
||||
"tracelinks": "StRS-023; SwRS-036",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Web-Account ohne Lizenz ruft `/webcart/shop` direkt per URL auf → Zugriff wird verweigert. [HYPOTHESE]: Das genaue Verhalten des `AuthorizeLicense`-Attributs (Redirect vs. Fehlerseite vs. Exception) wurde nicht im Detail nachvollzogen — siehe Hypothesen.md.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-026",
|
||||
@@ -891,7 +944,8 @@
|
||||
"tracelinks": "StRS-024; SwRS-038",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "CI-Lauf beobachten: alle drei Artefakte müssen mit gültiger Authenticode-Signatur vorliegen, Pipeline darf bei Signaturfehler nicht grün werden.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-027",
|
||||
@@ -908,7 +962,8 @@
|
||||
"tracelinks": "StRS-024; SwRS-038",
|
||||
"konsolidierung": "Kandidat: SyRS-026 (beide betreffen Auslieferung/Deployment)",
|
||||
"pruefidee": "Dasselbe Image mit zwei unterschiedlichen `appsettings`-Overrides starten → unterschiedliches Zielsystem wird angesprochen, ohne Image-Neubau.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-028",
|
||||
@@ -925,7 +980,8 @@
|
||||
"tracelinks": "StRS-025, StRS-026, StRS-027, StRS-028; SwRS-039, SwRS-040",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Simulierter Ausfall eines externen Dienstes (z. B. Timeout) → übrige Integrationen und Kernfunktionen bleiben funktionsfähig; Antwortzeitverhalten bei Ausfall ist [HYPOTHESE] (kein Timeout-Override gefunden, Default-`HttpClient`-Timeout vermutlich wirksam — siehe Hypothesen.md).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-001",
|
||||
@@ -942,7 +998,8 @@
|
||||
"tracelinks": "SyRS-001",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Statische Codeanalyse: keine belegartspezifische Fallunterscheidung außerhalb der `*SpecificLogic`-Klassen in `ReceiptBL`.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-002",
|
||||
@@ -959,7 +1016,8 @@
|
||||
"tracelinks": "SyRS-001",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Reflection-Test: alle Belegart-Entitäten erben von derselben Basisklasse.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-003",
|
||||
@@ -975,7 +1033,8 @@
|
||||
"tracelinks": "SyRS-002",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Letzte offene Position eines Belegs vollständig verarbeiten → `ReceiptState` wechselt automatisch zu `Completed`.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-004",
|
||||
@@ -991,7 +1050,8 @@
|
||||
"tracelinks": "SyRS-003",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zweiten `GenerateTokenForDocument`-Aufruf für denselben `receiptI3D` bei aktivem Vorgang → `Result.AsError`.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-005",
|
||||
@@ -1007,7 +1067,8 @@
|
||||
"tracelinks": "SyRS-004",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Abgelaufenen Token per direktem Methodenaufruf/HTTP-Request verwenden → definierter Fehlercode, keine Nutzdaten.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-006",
|
||||
@@ -1024,7 +1085,8 @@
|
||||
"tracelinks": "SyRS-004",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Annahme mit Signatur → `WebOfferSign`; Annahme ohne Signatur → `WebOfferSignedWithoutSignature`.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-007",
|
||||
@@ -1040,7 +1102,8 @@
|
||||
"tracelinks": "SyRS-005",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Bereits fixierte Rechnung erneut festschreiben → Ablehnung mit definierter Meldung.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-008",
|
||||
@@ -1057,7 +1120,8 @@
|
||||
"tracelinks": "SyRS-005",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "INSERT ohne explizite Angabe von `IsFixed` → DB setzt automatisch 0, NULL wird von der DB abgelehnt.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-009",
|
||||
@@ -1073,7 +1137,8 @@
|
||||
"tracelinks": "SyRS-006",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Netto=100,005, Steuersatz=19 → erwarteter, kaufmännisch gerundeter Wert (Unit-Test mit Grenzwerten wie x,xx5).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-010",
|
||||
@@ -1089,7 +1154,8 @@
|
||||
"tracelinks": "SyRS-006",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Auftrag mit Steuersatz X zu Rechnung mit späterem Datum (nach Steuersatzänderung) weiterführen → Ergebnis muss mit `TakeoverVatMode.Yes`-Regel übereinstimmen (Übernahme statt Neuberechnung).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-011",
|
||||
@@ -1105,7 +1171,8 @@
|
||||
"tracelinks": "SyRS-007",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Ticket ohne Pflichtfeld \"Kunde\" speichern → Ablehnung vor Persistierung.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-012",
|
||||
@@ -1121,7 +1188,8 @@
|
||||
"tracelinks": "SyRS-007",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer mit `EDIT_HELPDESK` ohne `CLOSE_REQUEST` versucht `ClosedAt` zu setzen → Feld wird serverseitig zurückgesetzt.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-013",
|
||||
@@ -1138,7 +1206,8 @@
|
||||
"tracelinks": "SyRS-008",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "SQL-Profiling der Abfrage eines eingeschränkten Benutzers → WHERE-Klausel enthält bereits die Scope-Bedingung.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-014",
|
||||
@@ -1154,7 +1223,8 @@
|
||||
"tracelinks": "SyRS-009",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "RMA mit `HelpdeskI3D = 0` speichern → `ResultException` vor jeder Nebenwirkung, keine Teilverarbeitung.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-015",
|
||||
@@ -1170,7 +1240,8 @@
|
||||
"tracelinks": "SyRS-009",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Artikel von `SendForth` zu `Invoice` überführen → Historieneintrag mit korrektem Alt-/Neu-Zustand entsteht.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-016",
|
||||
@@ -1186,7 +1257,8 @@
|
||||
"tracelinks": "SyRS-010",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zwei parallele Prozessaufrufe für dieselbe Aufgaben-ID → nur ein Prozess erhält das Lock (LockTimeout=0 lässt zweiten sofort fehlschlagen).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-017",
|
||||
@@ -1202,7 +1274,8 @@
|
||||
"tracelinks": "SyRS-010",
|
||||
"konsolidierung": "Kandidat: SwRS-012 (gleiche zugrundeliegende Rechteklasse ADD_NEW_HELPDESK)",
|
||||
"pruefidee": "Aufgabe mit Ausführungskontext ohne `ADD_NEW_HELPDESK`-Recht fällig werden lassen → Ticketerstellung schlägt fehl statt das Recht zu ignorieren.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-018",
|
||||
@@ -1218,7 +1291,8 @@
|
||||
"tracelinks": "SyRS-011",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Speichervorgang mit geänderter Warengruppe (ohne Recht) und geändertem Namen (mit Recht) → Name wird gespeichert, Warengruppe bleibt auf DB-Wert.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-019",
|
||||
@@ -1234,7 +1308,8 @@
|
||||
"tracelinks": "SyRS-012",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zählmenge = Sollmenge, kein Barcode-Konflikt → `CloseState = Ok`; Zählmenge ≠ Sollmenge → `Risk`/`problem`.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-020",
|
||||
@@ -1250,7 +1325,8 @@
|
||||
"tracelinks": "SyRS-012",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer ohne Recht versucht gelöschte Inventur wiederherzustellen → Ablehnung.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-021",
|
||||
@@ -1266,7 +1342,8 @@
|
||||
"tracelinks": "SyRS-013",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer mit nur Anlage-Recht versucht Löschung → Ablehnung; umgekehrter Test analog.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-022",
|
||||
@@ -1282,7 +1359,8 @@
|
||||
"tracelinks": "SyRS-014",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Vergleich der berechneten Vorschlagsmenge gegen manuell nachgerechneten Erwartungswert für einen Testartikel.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-023",
|
||||
@@ -1298,7 +1376,8 @@
|
||||
"tracelinks": "SyRS-015",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Konfigurationswechsel auf anderen Distributor → anderer Dokumentersteller wird aufgerufen (Unit-Test mit Mock).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-024",
|
||||
@@ -1314,7 +1393,8 @@
|
||||
"tracelinks": "SyRS-016",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Identischen Transaktionsdatensatz zweimal importieren → zweiter Import löst Warnung aus; [HYPOTHESE]: ob der Anwender den Doppelimport trotzdem bestätigen kann, wurde nicht bis zur UI-Ebene zurückverfolgt — siehe Hypothesen.md.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-025",
|
||||
@@ -1330,7 +1410,8 @@
|
||||
"tracelinks": "SyRS-016, SyRS-017",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Verbuchungsversuch auf eine bereits `Canceled`-Rechnung mit positivem Betrag → muss abgelehnt werden.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-026",
|
||||
@@ -1346,7 +1427,8 @@
|
||||
"tracelinks": "SyRS-016",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer ohne Recht versucht Löschung → Rechnung/`PaidFC` bleibt exakt unverändert (nicht nur Fehlermeldung prüfen, sondern Datenzustand).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-027",
|
||||
@@ -1362,7 +1444,8 @@
|
||||
"tracelinks": "SyRS-018",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Vergleich der von zwei unterschiedlich berechtigten Testbenutzern gelieferten Flag-Werte.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-028",
|
||||
@@ -1379,7 +1462,8 @@
|
||||
"tracelinks": "SyRS-019",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Rechteprüfung mit simuliertem DB-Fehler → Rückgabewert `false`.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-029",
|
||||
@@ -1395,7 +1479,8 @@
|
||||
"tracelinks": "SyRS-020",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Code-Review-Historie prüfen: gab es je einen ID-Kollisionsfall bei parallelen Pull-Requests? (retrospektive Prüfidee)",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-030",
|
||||
@@ -1411,7 +1496,8 @@
|
||||
"tracelinks": "SyRS-021",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Konfigurationswechsel AD → OIDC → Verhalten der Factory ändert sich entsprechend (Unit-Test).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-031",
|
||||
@@ -1429,7 +1515,8 @@
|
||||
"tracelinks": "SyRS-021",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Sicherheitsreview/Penetrationstest: identische Testpasswörter zweier Benutzer erzeugen identischen gespeicherten Hash (Nachweis fehlenden Salts).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-032",
|
||||
@@ -1445,7 +1532,8 @@
|
||||
"tracelinks": "SyRS-021, SyRS-022",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Ticket auf simuliertem Fremdgerät verwenden → Ablehnung; Ticket nach Ablaufzeit verwenden → Ablehnung.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-033",
|
||||
@@ -1461,7 +1549,8 @@
|
||||
"tracelinks": "SyRS-021",
|
||||
"konsolidierung": "Kandidat: Verhältnis zu separatem Modul `TwoFactorAuthenticator\\TwoFactorAuthenticationBL.cs` ungeklärt — siehe Hypothesen.md.",
|
||||
"pruefidee": "2FA aktiv, korrekter erster Faktor, falscher zweiter Faktor → Anmeldung wird verweigert.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-034",
|
||||
@@ -1477,7 +1566,8 @@
|
||||
"tracelinks": "SyRS-023",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zugriff auf Testpasswort → Protokolleintrag mit korrektem `EmployeeI3D` und aktuellem Zeitstempel.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-035",
|
||||
@@ -1494,7 +1584,8 @@
|
||||
"tracelinks": "SyRS-024",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Versuch, sich als Kunde über den internen Login-Pfad anzumelden → muss fehlschlagen bzw. ist technisch nicht vorgesehen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-036",
|
||||
@@ -1510,7 +1601,8 @@
|
||||
"tracelinks": "SyRS-025",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Direkter URL-Aufruf `/webcart/shop` ohne Lizenz → keine Artikel-/Preisdaten werden übertragen (Netzwerk-Mitschnitt).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-037",
|
||||
@@ -1526,7 +1618,8 @@
|
||||
"tracelinks": "SyRS-025",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Erster Aufruf ohne bestehenden Warenkorb → neuer Warenkorb wird automatisch angelegt und zurückgegeben.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-038",
|
||||
@@ -1543,7 +1636,8 @@
|
||||
"tracelinks": "SyRS-026, SyRS-027",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Pipeline-Lauf beobachten: Signaturverifikation muss für alle drei Artefakte grün sein, sonst Pipeline-Abbruch.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-039",
|
||||
@@ -1559,7 +1653,8 @@
|
||||
"tracelinks": "SyRS-028",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Simulierter 401-Response → `ITscopeException` mit definierter Meldung; simulierter 404 → leere Liste statt Exception.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-040",
|
||||
@@ -1575,6 +1670,7 @@
|
||||
"tracelinks": "SyRS-028",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Abruf mit abgelaufenem Token → automatische Erneuerung vor erneutem Versuch (bzw. [HYPOTHESE], falls kein automatischer Retry gefunden — siehe Hypothesen.md).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
}
|
||||
]
|
||||
+7
@@ -2,6 +2,8 @@
|
||||
|
||||
Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`.
|
||||
|
||||
Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt.
|
||||
|
||||
### Verteilung über die Ebenen
|
||||
|
||||
| Ebene | Anzahl | Anteil |
|
||||
@@ -32,6 +34,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| Belege je Anforderung (Median) | 1,0 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 96 (100,0 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`.
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
@@ -49,5 +55,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) |
|
||||
| **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (49 risikorelevante Anforderungen, alle gedeckt) |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 96 von 96 mit Tracelinks (100,0 %) |
|
||||
|
||||
|
||||
+7
@@ -101,6 +101,8 @@
|
||||
|
||||
Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`.
|
||||
|
||||
Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt.
|
||||
|
||||
### Verteilung über die Ebenen
|
||||
|
||||
| Ebene | Anzahl | Anteil |
|
||||
@@ -137,6 +139,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| Belege je Anforderung (Median) | 1 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 89 (100,0 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`.
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
@@ -154,6 +160,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) |
|
||||
| **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (34 risikorelevante Anforderungen, alle gedeckt) |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 89 von 89 mit Tracelinks (100,0 %) |
|
||||
|
||||
## Anmerkungen/Auffälligkeiten
|
||||
|
||||
+178
-89
@@ -15,7 +15,8 @@
|
||||
"tracelinks": "SyRS-001, SyRS-002",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Für jeden der sieben Belegtypen erzeugen, in jeden der drei Zustände überführen und prüfen, dass kein vierter Zustand erreichbar ist.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-002",
|
||||
@@ -33,7 +34,8 @@
|
||||
"tracelinks": "SyRS-003",
|
||||
"konsolidierung": "Kandidat: Zwei parallele Implementierungen (Legacy \"Asset\"-System `Sales/CustomerAssets/*` und modernes \"Receipt\"-System `Sales/Receipts/*`) bilden denselben Belegzyklus und dieselbe Weiterleitungslogik redundant ab (siehe SwRS-Abschnitt \"Datenmodell\").",
|
||||
"pruefidee": "Versuch, einen Lieferschein direkt in ein Angebot umzuwandeln, muss vom System zurückgewiesen werden; Angebot→Auftrag muss gelingen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-003",
|
||||
@@ -51,7 +53,8 @@
|
||||
"tracelinks": "SyRS-004, SyRS-005",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Rechnung stornieren und prüfen, dass eine neue Version erzeugt wird und die ursprünglichen Werte in der Versionstabelle erhalten bleiben.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-004",
|
||||
@@ -69,7 +72,8 @@
|
||||
"tracelinks": "SyRS-006",
|
||||
"konsolidierung": "Kandidat: Zwei redundante Mechanismen (pessimistische Sperre + optimistisches Concurrency-Guid) lösen dieselbe fachliche Anforderung; im Zielsystem auf einen Mechanismus konsolidieren.",
|
||||
"pruefidee": "Beleg durch Benutzer A öffnen (sperren), Speicherversuch durch Benutzer B muss abgelehnt bzw. mit Hinweis versehen werden.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-005",
|
||||
@@ -87,7 +91,8 @@
|
||||
"tracelinks": "SyRS-007, SyRS-008",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Vertrag mit monatlichem Intervall und fälligem Abrechnungsdatum anlegen, Abrechnungslauf ausführen, Rechnung sowie fortgeschriebenes `LastSubsequentBillingDate` prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-006",
|
||||
@@ -104,7 +109,8 @@
|
||||
"tracelinks": "SyRS-009",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Rechnungslauf für einen RMM-Vertrag bei simuliert nicht erreichbarem RMM-Dienst ausführen; erwartetes Ergebnis: Abbruch mit definierter Fehlermeldung, keine Rechnung erzeugt.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-007",
|
||||
@@ -121,7 +127,8 @@
|
||||
"tracelinks": "SyRS-008",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Vertrag mit Stundenkontingent anlegen, Verbrauch über das Kontingent hinaus buchen, Monitoring-Warnung/Restbestand prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-008",
|
||||
@@ -139,7 +146,8 @@
|
||||
"tracelinks": "SyRS-010, SyRS-011",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Angebot über den Web-Kanal versenden, interne Freigabe erteilen, Kundenannahme simulieren, resultierenden Auftrag und Statuskette prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-009",
|
||||
@@ -155,7 +163,8 @@
|
||||
"tracelinks": "SyRS-011",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Dokument mit gültigem Zertifikat signieren und die Signatur mit einem PDF-Prüfwerkzeug verifizieren.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-010",
|
||||
@@ -172,7 +181,8 @@
|
||||
"tracelinks": "SyRS-012",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Kunde mit Kreditlimit 1.000 € anlegen, offene Aufträge über 1.000 € erfassen, weiteren Auftrag anlegen und Bestätigungsdialog verifizieren.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-011",
|
||||
@@ -190,7 +200,8 @@
|
||||
"tracelinks": "SyRS-013, SyRS-014",
|
||||
"konsolidierung": "Kandidat: `ProductMatrix`-Mechanismus (kundenindividuelle Katalogkategorien/Produkte) deckt fachlich ähnliches Ziel ab (Steuerung der für einen Kunden sichtbaren Artikel) — Verhältnis zu Sonderpreisen ungeklärt, siehe Hypothesen.md.",
|
||||
"pruefidee": "Kunde mit Sonderpreisen für Artikel X anlegen, per Web-Account im WebCart einloggen, Sichtbarkeit von Artikel X prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-012",
|
||||
@@ -206,7 +217,8 @@
|
||||
"tracelinks": "SwRS (siehe SwRS-Abschnitt Datenmodell)",
|
||||
"konsolidierung": "Kandidat: Es existiert daneben ein neuerer Begriff \"Account\" (`Centron.BL/Accounts/*`) als mögliche Nachfolgeabstraktion zu `Customer` — Verhältnis ungeklärt, [HYPOTHESE] siehe Hypothesen.md H-02.",
|
||||
"pruefidee": "Adressobjekt für einen Lieferanten anlegen und prüfen, dass dieselbe Tabellenstruktur wie bei Kundenadressen verwendet wird.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-013",
|
||||
@@ -223,7 +235,8 @@
|
||||
"tracelinks": "SyRS-015",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Vorlage anlegen, als Standard markieren, neues Ticket-Erstellungsformular öffnen und automatisches Vorbefüllen mit Standardvorlage prüfen; Löschversuch der Standardvorlage muss abgelehnt werden.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-014",
|
||||
@@ -239,7 +252,8 @@
|
||||
"tracelinks": "SyRS-015",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Ticket mit offenem RMA-Vorgang schließen und prüfen, ob (aktuell) keine Blockade erfolgt — Regressionsbasis für spätere Vervollständigung der Prüfung.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-015",
|
||||
@@ -257,7 +271,8 @@
|
||||
"tracelinks": "SyRS-016, SyRS-017",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer aus allen Rechtegruppen entfernen und prüfen, dass sämtliche geschützten Funktionen gesperrt sind; nach Gruppenzuordnung Freischaltung prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-016",
|
||||
@@ -276,7 +291,8 @@
|
||||
"tracelinks": "SyRS-017",
|
||||
"konsolidierung": "Kandidat: identisches Muster ist in mind. 4 Fachmodulen (Helpdesk, Kalender, Mitarbeiterauslastung, Rechteverwaltung) separat implementiert statt zentral wiederverwendet.",
|
||||
"pruefidee": "Benutzer mit Grundrecht + \"nur eigene Filiale\" anlegen, Datensätze anderer Filialen anlegen, Sichtbarkeit/Zugriff verifizieren.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-017",
|
||||
@@ -293,7 +309,8 @@
|
||||
"tracelinks": "SyRS-016",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Web-Account-Recht vergeben/entziehen und prüfen, dass dies keine Auswirkung auf interne `UserRightsConst`-Prüfungen hat.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-018",
|
||||
@@ -309,7 +326,8 @@
|
||||
"tracelinks": "SyRS-017",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Recht einer Gruppe hinzufügen und Vorhandensein eines Protokolleintrags mit Benutzer/Zeitstempel prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-019",
|
||||
@@ -326,7 +344,8 @@
|
||||
"tracelinks": "SyRS-018, SyRS-019",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Anmeldung über jede der drei Methoden in einer Testumgebung durchführen und erfolgreichen Login sowie Ticket-Erstellung prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-020",
|
||||
@@ -343,7 +362,8 @@
|
||||
"tracelinks": "SyRS-020",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Ticket erzeugen, 31 Minuten warten (bzw. Ablaufzeit simulieren), nachfolgenden API-Aufruf auf Ablehnung prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-021",
|
||||
@@ -360,7 +380,8 @@
|
||||
"tracelinks": "SyRS-018",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "2FA für einen Benutzer aktivieren, Login ohne bzw. mit korrektem/falschem TOTP-Code testen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-022",
|
||||
@@ -377,7 +398,8 @@
|
||||
"tracelinks": "SyRS-021",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Feature ohne zugehörige Lizenz aufrufen und Sperrung/Ausblendung prüfen; Mengenlizenz mit `count=3` testen (4. Nutzung muss abgelehnt werden).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-023",
|
||||
@@ -394,7 +416,8 @@
|
||||
"tracelinks": "SyRS-022",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zwei gleichzeitige Rechnungserstellungen (parallelisiert) simulieren und prüfen, dass keine doppelte Nummer vergeben wird.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-024",
|
||||
@@ -410,7 +433,8 @@
|
||||
"tracelinks": "SyRS-023",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Rechnung festschreiben, Änderungsversuch durchführen und Ablehnung mit definierter Fehlermeldung prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-025",
|
||||
@@ -426,7 +450,8 @@
|
||||
"tracelinks": "SyRS-023",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Stornierung einer bereits exportierten Rechnung versuchen (muss abgelehnt werden); Stornierung einer offenen, nicht exportierten Rechnung durchführen (muss gelingen und neue Version erzeugen).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-026",
|
||||
@@ -442,7 +467,8 @@
|
||||
"tracelinks": "SyRS-023",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zahlung erfassen (Beleg wird \"bezahlt\"), Zahlung löschen und Rückkehr des Belegs in den unbezahlten Zustand inkl. korrekten Betrags prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-027",
|
||||
@@ -458,7 +484,8 @@
|
||||
"tracelinks": "SyRS-023",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Bankverbindung löschen, die von einem aktiven Vertrag mit SEPA-Mandat referenziert wird; Ablehnung mit Belegliste prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-028",
|
||||
@@ -476,7 +503,8 @@
|
||||
"tracelinks": "SyRS-024",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Rechnung mit aktivierter ZUGFeRD-Einstellung erzeugen und die PDF-eingebettete XML mit einem Validator (z. B. KOSIT-Tool) prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-029",
|
||||
@@ -494,7 +522,8 @@
|
||||
"tracelinks": "SyRS-025, SyRS-026",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Testbestellung an einen konfigurierten EDI-Distributor senden und Empfang/Verarbeitung einer simulierten Auftragsbestätigung prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-030",
|
||||
@@ -510,7 +539,8 @@
|
||||
"tracelinks": "SyRS-027",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Artikel unter Mindestbestand setzen und Erscheinen in der Bestellvorschlagsliste mit korrekter Menge prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-031",
|
||||
@@ -526,7 +556,8 @@
|
||||
"tracelinks": "SyRS-028",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Bestellung mit 100 Stück anlegen, zwei Teillieferungen von je 40 und 60 Stück buchen, kumulierten Status nach jeder Teillieferung prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-032",
|
||||
@@ -543,7 +574,8 @@
|
||||
"tracelinks": "SyRS-029",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Warenausgang ohne Negativbuchungsrecht über den verfügbaren Bestand hinaus buchen; Ablehnung und Kollegen-Anmeldedialog prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-033",
|
||||
@@ -560,7 +592,8 @@
|
||||
"tracelinks": "SyRS-029",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Bestandsänderung durchführen und Vorhandensein eines zugehörigen Protokolleintrags mit Benutzer/Zeitstempel/Mengenänderung prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-034",
|
||||
@@ -578,7 +611,8 @@
|
||||
"tracelinks": "SyRS-030",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Artikel mit hinterlegtem Aktionspreis und aktivierten externen Quellen öffnen; alle Quellen müssen parallel mit Anbieterkennzeichnung angezeigt werden.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-035",
|
||||
@@ -595,7 +629,8 @@
|
||||
"tracelinks": "SyRS-013, SyRS-031",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Als Web-Account anmelden, Artikel im Shop auswählen, Bestellung auslösen, im Belegverlauf wiederfinden.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-036",
|
||||
@@ -612,7 +647,8 @@
|
||||
"tracelinks": "SyRS-032",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "TradePool-Zugang für einen Testkunden einrichten, Artikelsuche über mehrere importierte Distributoren durchführen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-037",
|
||||
@@ -630,7 +666,8 @@
|
||||
"tracelinks": "SyRS-033, SyRS-034",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Web-Service-Container unter Linux gemäß Dokumentation starten und Basisfunktionalität (Login, einfacher API-Aufruf) verifizieren.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-038",
|
||||
@@ -646,7 +683,8 @@
|
||||
"tracelinks": "SyRS-035",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Pull Request mit \"Ticket 12345\" im Titel mergen und automatischen Eintrag der Versionsnummer im Ticketsystem prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-039",
|
||||
@@ -662,7 +700,8 @@
|
||||
"tracelinks": "SyRS-041",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Denselben Anwendungsfall (z. B. Kundenanlage) einmal über Direktverbindung und einmal über Web-Service ausführen; identisches fachliches Ergebnis prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-040",
|
||||
@@ -679,7 +718,8 @@
|
||||
"tracelinks": "SyRS-042",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Anzeigesprache auf Englisch umstellen und Vorhandensein englischer Übersetzung für eine Stichprobe von UI-Elementen prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-041",
|
||||
@@ -695,7 +735,8 @@
|
||||
"tracelinks": "SyRS-036",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Bekannte Dateninkonsistenz (z. B. fehlende AccountI3D in einem Todo) erzeugen und nach einem Ausführungszyklus die automatische Korrektur prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-042",
|
||||
@@ -713,7 +754,8 @@
|
||||
"tracelinks": "SyRS-037, SyRS-038",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "API-Aufruf ohne gültiges Recht (403), ohne gültige Authentifizierung (401) und mit beidem (Erfolg) gegen einen v1-Endpunkt prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-043",
|
||||
@@ -729,7 +771,8 @@
|
||||
"tracelinks": "SyRS-039",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "API-Aufruf durchführen und Vorhandensein eines entsprechenden Telemetrie-Eintrags nach dem nächsten Bucket-Zyklus prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-044",
|
||||
@@ -746,7 +789,8 @@
|
||||
"tracelinks": "SyRS-040",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zwei Filialen unter einem Mandanten anlegen, Auftrag je Filiale erfassen und filialbezogene Auswertung/Berechtigungsfilterung prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-045",
|
||||
@@ -762,7 +806,8 @@
|
||||
"tracelinks": "SyRS-044",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zwei Benutzer mit identischem Passwort anlegen und prüfen, ob die gespeicherten Hash-Werte identisch sind (Indiz für fehlendes Salt); Ergebnis mit Sicherheitsverantwortlichen bewerten.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-001",
|
||||
@@ -778,7 +823,8 @@
|
||||
"tracelinks": "StRS-001; SwRS-001",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Versuch, einen ungültigen Integer-Wert außerhalb {1,2,3} in `State` zu schreiben, muss durch Typsystem/DB verhindert werden.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-002",
|
||||
@@ -795,7 +841,8 @@
|
||||
"tracelinks": "StRS-001; SwRS-002",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Struktur eines neu hinzugefügten Belegtyps (z. B. anhand der Dokumentation) gegen die Basisklassen validieren.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-003",
|
||||
@@ -811,7 +858,8 @@
|
||||
"tracelinks": "StRS-002; SwRS-003",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Direkter API-/BL-Aufruf zur Weiterleitung eines nicht erlaubten Übergangs muss mit definiertem Fehler abgelehnt werden (nicht nur UI-seitig ausgeblendet).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-004",
|
||||
@@ -827,7 +875,8 @@
|
||||
"tracelinks": "StRS-003; SwRS-004",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Neue Spalte nur an der Basistabelle ergänzen (Versionstabelle bewusst auslassen) und Auftreten des dokumentierten Laufzeitfehlers bei Versionierung verifizieren.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-005",
|
||||
@@ -843,7 +892,8 @@
|
||||
"tracelinks": "StRS-003; SwRS-004",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Ereignis für zwei unterschiedliche Belegtypen auslösen und Vorhandensein je eines `AnlageLog`-Eintrags mit korrektem `AnlageArt` prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-006",
|
||||
@@ -860,7 +910,8 @@
|
||||
"tracelinks": "StRS-004; SwRS-005",
|
||||
"konsolidierung": "Kandidat: siehe StRS-004 (zwei parallele Mechanismen).",
|
||||
"pruefidee": "Siehe StRS-004.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-007",
|
||||
@@ -876,7 +927,8 @@
|
||||
"tracelinks": "StRS-005; SwRS-006",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Vertrag mit Quartalsintervall (Monthly×3) anlegen und Fälligkeitsberechnung über mehrere Zyklen prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-008",
|
||||
@@ -892,7 +944,8 @@
|
||||
"tracelinks": "StRS-005, StRS-007; SwRS-006",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Kontingent bis knapp unter, dann über die Überwachungsschwelle buchen und Statusänderung prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-009",
|
||||
@@ -908,7 +961,8 @@
|
||||
"tracelinks": "StRS-006; SwRS-007",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "RMM-Dienst-Endpunkt für einen Testlauf deaktivieren und Abbruch der Rechnungserstellung mit definierter Fehlermeldung prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-010",
|
||||
@@ -925,7 +979,8 @@
|
||||
"tracelinks": "StRS-008; SwRS-008",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Web-Angebot durch alle Hauptpfade (Annahme ohne Signatur / mit Signatur / Ablehnung / Änderungswunsch) führen und Zustandsfolge protokollieren.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-011",
|
||||
@@ -942,7 +997,8 @@
|
||||
"tracelinks": "StRS-008, StRS-009; SwRS-008",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Dokument ohne interne Freigabe darf nicht an den Kunden-Signaturlink gelangen; nach Freigabe muss der Versand erfolgen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-012",
|
||||
@@ -958,7 +1014,8 @@
|
||||
"tracelinks": "StRS-010; SwRS-009",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Siehe StRS-010.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-013",
|
||||
@@ -974,7 +1031,8 @@
|
||||
"tracelinks": "StRS-011, StRS-035; SwRS-010",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Endpunkt für einen Testkunden mit Sonderpreisen aufrufen und korrekte Artikelliste inkl. Preis prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-014",
|
||||
@@ -990,7 +1048,8 @@
|
||||
"tracelinks": "StRS-011; SwRS-010",
|
||||
"konsolidierung": "Kandidat: Verhältnis zu Sonderpreis-Mechanismus (SyRS-013) ungeklärt — möglicherweise zwei Mechanismen für dasselbe fachliche Ziel \"Artikelsichtbarkeit je Kunde steuern\" (siehe Hypothesen.md).",
|
||||
"pruefidee": "Kundenindividuelle Produktmatrix konfigurieren und Filterwirkung im Katalog/WebCart prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-015",
|
||||
@@ -1006,7 +1065,8 @@
|
||||
"tracelinks": "StRS-013, StRS-014; SwRS-011",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zweite Vorlage als Standard setzen und Aberkennung des Standard-Flags der ersten Vorlage prüfen; Löschversuch der aktuellen Standardvorlage muss scheitern.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-016",
|
||||
@@ -1022,7 +1082,8 @@
|
||||
"tracelinks": "StRS-015, StRS-017; SwRS-012",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Mehrere Rechteprüfungen innerhalb derselben Sitzung ausführen und (via Profiling) genau einen SQL-Zugriff für die Rechteliste nachweisen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-017",
|
||||
@@ -1038,7 +1099,8 @@
|
||||
"tracelinks": "StRS-015, StRS-016, StRS-018; SwRS-012, SwRS-013",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Versuch, einem Benutzer ohne Gruppenzuordnung ein Einzelrecht zuzuweisen — es muss kein entsprechender Mechanismus im System existieren.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-018",
|
||||
@@ -1054,7 +1116,8 @@
|
||||
"tracelinks": "StRS-019, StRS-021; SwRS-014",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Systemeinstellung zwischen den drei Methoden umschalten und erfolgreichen Login je Methode prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-019",
|
||||
@@ -1071,7 +1134,8 @@
|
||||
"tracelinks": "StRS-019; SwRS-014",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Manipuliertes/abgelaufenes Token gegen `jwt/login` senden und Ablehnung (401) prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-020",
|
||||
@@ -1088,7 +1152,8 @@
|
||||
"tracelinks": "StRS-020; SwRS-015",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Ticket serverseitig invalidieren und Zeit bis zur client-seitigen Erkennung (Abmeldung/Hinweis) messen; muss innerhalb des konfigurierten Revalidierungsintervalls liegen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-021",
|
||||
@@ -1104,7 +1169,8 @@
|
||||
"tracelinks": "StRS-022, StRS-042; SwRS-016",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Lizenz `CentronInternal` deaktivieren und Zugriff auf entsprechend geschützten Endpunkt trotz gültiger Benutzerrechte prüfen (muss abgelehnt werden).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-022",
|
||||
@@ -1120,7 +1186,8 @@
|
||||
"tracelinks": "StRS-023; SwRS-017",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Lasttest mit ≥10 parallelen Rechnungserstellungen gegen denselben Nummernkreis; Eindeutigkeit aller vergebenen Nummern prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-023",
|
||||
@@ -1138,7 +1205,8 @@
|
||||
"tracelinks": "StRS-024, StRS-025, StRS-026, StRS-027; SwRS-018",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Je Guard einen gezielten Verletzungsversuch durchführen und Ablehnung mit spezifischer Fehlermeldung prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-024",
|
||||
@@ -1155,7 +1223,8 @@
|
||||
"tracelinks": "StRS-028; SwRS-019",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Einstellung aktivieren, Rechnung finalisieren, PDF auf eingebettete ZUGFeRD-XML prüfen (z. B. mit KOSIT-Validator).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-025",
|
||||
@@ -1171,7 +1240,8 @@
|
||||
"tracelinks": "StRS-029; SwRS-020",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Bestellung an einen nicht speziell konfigurierten Distributor auslösen und Erzeugung eines validen openTRANS-2.1-Dokuments prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-026",
|
||||
@@ -1188,7 +1258,8 @@
|
||||
"tracelinks": "StRS-029; SwRS-020",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Testdatei je unterstütztem Format einspielen und korrekte Delegation an die jeweilige Partial-Class (per Log/Trace) prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-027",
|
||||
@@ -1204,7 +1275,8 @@
|
||||
"tracelinks": "StRS-030; SwRS-021",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Artikel mit offenem Zulauf und Unterschreitung des Mindestbestands prüfen; Bestellvorschlagsmenge muss den Zulauf berücksichtigen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-028",
|
||||
@@ -1220,7 +1292,8 @@
|
||||
"tracelinks": "StRS-031; SwRS-022",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Siehe StRS-031.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-029",
|
||||
@@ -1237,7 +1310,8 @@
|
||||
"tracelinks": "StRS-032, StRS-033; SwRS-023",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Siehe StRS-032/033.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-030",
|
||||
@@ -1253,7 +1327,8 @@
|
||||
"tracelinks": "StRS-034; SwRS-024",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Aktionspreis außerhalb des Gültigkeitszeitraums anlegen und Nichterscheinen in der Preismatrix prüfen; Preismatrix-Ladezeit mit und ohne Cache messen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-031",
|
||||
@@ -1269,7 +1344,8 @@
|
||||
"tracelinks": "StRS-035; SwRS-025",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Login über Nexus durchführen, Cookie-Setzung prüfen, Ticket serverseitig invalidieren und erzwungene Abmeldung gemäß SyRS-020 prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-032",
|
||||
@@ -1285,7 +1361,8 @@
|
||||
"tracelinks": "StRS-036; SwRS-025",
|
||||
"konsolidierung": "Kandidat: dritter, unabhängiger Authentifizierungsmechanismus neben Haupt-Auth (SyRS-018) und Web-Account-Rechten (StRS-017) — Konsolidierungspotenzial für Zielsystem.",
|
||||
"pruefidee": "TradePool-Login mit korrektem/falschem Passwort testen; Nichtverfügbarkeit einer TradePool-Sitzung für reguläre c-entron-Endpunkte prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-033",
|
||||
@@ -1302,7 +1379,8 @@
|
||||
"tracelinks": "StRS-037; SwRS-026",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "`docker compose up` gemäß Konfiguration ausführen und Erreichbarkeit aller vier Dienste prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-034",
|
||||
@@ -1318,7 +1396,8 @@
|
||||
"tracelinks": "StRS-037; SwRS-026",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Linux-Installation gemäß Dokumentation aufsetzen und Nichtverfügbarkeit der Sub-Web-Services sowie Klartext-Zertifikatspasswort in der Konfigurationsdatei verifizieren.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-035",
|
||||
@@ -1334,7 +1413,8 @@
|
||||
"tracelinks": "StRS-038; SwRS-026",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Test-Pull-Request mit Ticketreferenz mergen, Build auslösen und automatischen Ticket-Eintrag verifizieren.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-036",
|
||||
@@ -1350,7 +1430,8 @@
|
||||
"tracelinks": "StRS-041; SwRS-027",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Eine Wartungsaufgabe gezielt zum Fehlschlagen bringen (z. B. durch inkonsistente Testdaten) und Fortsetzung der übrigen Aufgaben im selben Zyklus prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-037",
|
||||
@@ -1367,7 +1448,8 @@
|
||||
"tracelinks": "StRS-042; SwRS-028",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Neuen Controller im Namensraum `Controllers.v2.*` anlegen und automatische Zuordnung zur API-Version 2 ohne weitere Konfiguration prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-038",
|
||||
@@ -1383,7 +1465,8 @@
|
||||
"tracelinks": "StRS-042; SwRS-028",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Cross-Origin-Testanfrage von einer nicht autorisierten Domain senden und erfolgreiche CORS-Freigabe (statt Ablehnung) verifizieren; im Rahmen der Validierung mit Sicherheitsverantwortlichen klären, ob dies beabsichtigt ist.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-039",
|
||||
@@ -1399,7 +1482,8 @@
|
||||
"tracelinks": "StRS-043; SwRS-029",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Parallele API-Aufrufe (≥20 gleichzeitig) simulieren und korrekte, verlustfreie Bucket-Aggregation prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-040",
|
||||
@@ -1416,7 +1500,8 @@
|
||||
"tracelinks": "StRS-044; SwRS-030",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Siehe StRS-044.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-041",
|
||||
@@ -1432,7 +1517,8 @@
|
||||
"tracelinks": "StRS-039; SwRS-031",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Neues Modul ohne eine der beiden Implementierungen registrieren und Fehlverhalten/Registrierungsfehler beim Start prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-042",
|
||||
@@ -1448,7 +1534,8 @@
|
||||
"tracelinks": "StRS-040; SwRS-032",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Web-Service-Aufruf mit `Accept-Language: en-US` senden und englische statt deutsche Fehlermeldung prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-043",
|
||||
@@ -1465,7 +1552,8 @@
|
||||
"tracelinks": "StRS-042; SwRS-033",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Lasttest mit sehr vielen parallelen/wiederholten Anfragen eines einzelnen Clients durchführen und Verhalten (Drosselung ja/nein) beobachten.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-044",
|
||||
@@ -1481,6 +1569,7 @@
|
||||
"tracelinks": "StRS-045; SwRS-034",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Siehe StRS-045.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
}
|
||||
]
|
||||
+7
@@ -2,6 +2,8 @@
|
||||
|
||||
Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`.
|
||||
|
||||
Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt.
|
||||
|
||||
### Verteilung über die Ebenen
|
||||
|
||||
| Ebene | Anzahl | Anteil |
|
||||
@@ -38,6 +40,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| Belege je Anforderung (Median) | 1 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 89 (100,0 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`.
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
@@ -55,5 +61,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) |
|
||||
| **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (34 risikorelevante Anforderungen, alle gedeckt) |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 89 von 89 mit Tracelinks (100,0 %) |
|
||||
|
||||
|
||||
+7
@@ -97,6 +97,8 @@
|
||||
|
||||
Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`.
|
||||
|
||||
Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt.
|
||||
|
||||
### Verteilung über die Ebenen
|
||||
|
||||
| Ebene | Anzahl | Anteil |
|
||||
@@ -133,6 +135,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| Belege je Anforderung (Median) | 1,0 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 89 (84,0 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`.
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
@@ -150,6 +156,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) |
|
||||
| **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **verletzt** – 1 von 43 ungedeckt: SyRS-035 |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 97 von 106 mit Tracelinks (91,5 %) |
|
||||
|
||||
## Vergleich der drei Läufe (identischer Prompt)
|
||||
|
||||
+212
-106
@@ -14,7 +14,8 @@
|
||||
"tracelinks": "SyRS-013, SyRS-014, SwRS-001, SwRS-002, SwRS-003, SwRS-004",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "End-to-End-Test: Angebot anlegen → in Auftrag wandeln → in Rechnung wandeln; prüfen, dass Kundendaten, Positionen und Preise unverändert übernommen werden.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-002",
|
||||
@@ -31,7 +32,8 @@
|
||||
"tracelinks": "SyRS-001, SyRS-003",
|
||||
"konsolidierung": "Kandidat: CRM-Kundendaten (`Kunden`-Tabelle) und Webaccount-Kundenportalzugang (StRS-018) könnten im Zielsystem als ein Identitätsmodell konsolidiert werden.",
|
||||
"pruefidee": "Neuen Kunden anlegen, Adresse/Kontaktperson hinzufügen, anschließend in einem Angebot referenzieren und Übernahme der Stammdaten prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-003",
|
||||
@@ -48,7 +50,8 @@
|
||||
"tracelinks": "SyRS-013, SwRS-001, SwRS-009",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Vertrag mit monatlichem Abrechnungsintervall anlegen, automatisierte Abrechnung aktivieren, Fälligkeitsdatum erreichen lassen (Testlauf) und Rechnungserzeugung prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-004",
|
||||
@@ -64,7 +67,8 @@
|
||||
"tracelinks": "SyRS-013, SwRS-009, SwRS-010, SwRS-011",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "RMM-Dienst simuliert nicht erreichbar → Rechnungserstellung für RMM-Vertrag muss mit Fehlermeldung abbrechen, keine Teil-Rechnung darf erzeugt werden.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-005",
|
||||
@@ -81,7 +85,8 @@
|
||||
"tracelinks": "SyRS-013, SyRS-014, SwRS-002",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Bestellvorschlag erzeugen, in Lieferantenbestellung wandeln, Lieferschein und Lieferantenrechnung erfassen; Mengen-/Preisübernahme prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-006",
|
||||
@@ -98,7 +103,8 @@
|
||||
"tracelinks": "SyRS-021, SyRS-022, SyRS-026, SwRS-026, SwRS-027, SwRS-028",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "EDI-Testdatei eines unterstützten Lieferantenformats bereitstellen, Download-Zyklus abwarten, Übernahme in c-entron-Beleg prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-007",
|
||||
@@ -115,7 +121,8 @@
|
||||
"tracelinks": "SyRS-013, SwRS-001",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Artikel anlegen, Lieferschein mit diesem Artikel buchen, Bestandsfortschreibung im Lagerbestand prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-008",
|
||||
@@ -132,7 +139,8 @@
|
||||
"tracelinks": "SyRS-013, SwRS-007",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Artikel mit gültigem Aktionspreis und externem API-Preis öffnen; Preismatrix muss beide Quellen gleichzeitig mit korrekter Kennzeichnung anzeigen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-009",
|
||||
@@ -149,7 +157,8 @@
|
||||
"tracelinks": "SyRS-013",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "RMA-Fall für retournierten Artikel anlegen, Status bis Abschluss verfolgen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-010",
|
||||
@@ -167,7 +176,8 @@
|
||||
"tracelinks": "SyRS-003, SyRS-037, SwRS-034",
|
||||
"konsolidierung": "Kandidat: WPF-Helpdesk-Modul und Nexus-ServiceBoard bilden zwei parallele UI-Implementierungen derselben fachlichen Funktion – im Zielsystem konsolidierungsbedürftig.",
|
||||
"pruefidee": "Ticket im WPF-Client anlegen, im Webportal auffindbar und bearbeitbar prüfen, Status bis \"geschlossen\" verfolgen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-011",
|
||||
@@ -183,7 +193,8 @@
|
||||
"tracelinks": "SyRS-013, SwRS-034",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Vorlage mit Modus \"Group\" anlegen, als Standard setzen, aus Auftrag Tickets erzeugen lassen; genau ein Sammelticket mit Vorlagenwerten muss entstehen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-012",
|
||||
@@ -200,7 +211,8 @@
|
||||
"tracelinks": "SyRS-011, SwRS-014",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer ohne das entsprechende Recht öffnet Timer-Billing-Einstellungen; Datumseingabe für Rechnungs-/Lieferscheindatum muss gesperrt sein und ein Hinweisfeld anzeigen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-013",
|
||||
@@ -217,7 +229,8 @@
|
||||
"tracelinks": "SyRS-011, SwRS-012, SwRS-013, SwRS-014",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Mahnlauf mit Benutzer ohne Mahnungsrecht auslösen → Abbruch mit Fehlermeldung; mit berechtigtem Benutzer → korrekte Mahnstufenzuordnung je Kunde.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-014",
|
||||
@@ -233,7 +246,8 @@
|
||||
"tracelinks": "SyRS-011, SwRS-013, SwRS-014",
|
||||
"konsolidierung": "Kandidat: OPOS und Mahnwesen (StRS-013) teilen dieselbe Rechteschutz-Idiom (`ThrowIfUserHasInsufficentRights`) und denselben fachlichen Kontext (Zahlungsüberwachung) – ggf. im Zielsystem als ein \"Forderungsmanagement\"-Baustein konsolidierbar.",
|
||||
"pruefidee": "OPOS-Lauf durch nicht berechtigten Benutzer auslösen → Abbruch; Saldenkontrolle einer Testrechnung mit Teilzahlung.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-015",
|
||||
@@ -250,7 +264,8 @@
|
||||
"tracelinks": "SyRS-023, SyRS-024, SwRS-029, SwRS-030",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Rechnung mit mehreren Steuersätzen erzeugen, ZUGFeRD-Export prüfen (KOSIT-Validator), Summenabgleich innerhalb der Toleranz verifizieren.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-016",
|
||||
@@ -267,7 +282,8 @@
|
||||
"tracelinks": "SyRS-011, SyRS-012, SwRS-014, SwRS-015, SwRS-016",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer ohne Recht \"Kunde anlegen\" versucht, einen Kunden anzulegen → UI-Funktion ist deaktiviert und BL-Aufruf liefert Fehlermeldung \"Fehlende Rechte...\".",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-017",
|
||||
@@ -284,7 +300,8 @@
|
||||
"tracelinks": "SyRS-018, SwRS-021",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Kunde ohne Lizenz für Modul X öffnet c-entron → Modul ist nicht im Modul-Menü sichtbar (`ModuleRegistration.IsModuleAvailable`).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-018",
|
||||
@@ -301,7 +318,8 @@
|
||||
"tracelinks": "SyRS-003, SyRS-037, SwRS-001",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Als Webaccount-Nutzer Artikel in Warenkorb legen, Freigabe anfordern, als Freigebender genehmigen, Status \"bestellbereit\" prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-019",
|
||||
@@ -317,7 +335,8 @@
|
||||
"tracelinks": "SyRS-011, SyRS-012",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zwei Webaccount-Nutzer desselben Kunden mit unterschiedlicher Ticket-Sichtbarkeitskonfiguration anlegen; prüfen, dass jeder nur die für ihn freigegebenen Tickets sieht.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-020",
|
||||
@@ -333,7 +352,8 @@
|
||||
"tracelinks": "SyRS-038",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "E-Mail in Outlook öffnen, Add-in nutzen, um ein neues Ticket zu erstellen; Ticket muss im c-entron-System mit E-Mail-Bezug erscheinen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-021",
|
||||
@@ -349,7 +369,8 @@
|
||||
"tracelinks": "SyRS-027, SwRS-031, SwRS-032",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Helpdesk-Zeit in c-entron anlegen (Datum X), Sync abwarten, Termin in Outlook manuell auf Datum Y ändern, erneut synchronisieren → c-entron-Datensatz muss weiterhin Datum X zeigen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-022",
|
||||
@@ -366,7 +387,8 @@
|
||||
"tracelinks": "SyRS-003",
|
||||
"konsolidierung": "Kandidat: GLS-Direktanbindung und Shipcloud-Aggregator decken teils überlappende Funktionalität ab – im Zielsystem auf einen Versand-Abstraktionsdienst konsolidierbar.",
|
||||
"pruefidee": "Lieferschein abschließen, Versandlabel über GLS/Shipcloud erzeugen, Tracking-Nummer im Beleg prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-023",
|
||||
@@ -382,7 +404,8 @@
|
||||
"tracelinks": "SyRS-013",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Artikel mit bekanntem Herstellercode über Icecat-Abgleich anreichern lassen, Ergebnis (Beschreibung/Bild) im Artikelstamm prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-024",
|
||||
@@ -399,7 +422,8 @@
|
||||
"tracelinks": "SyRS-013, StRS-014",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Testkonto über finAPI-Sandbox verbinden, Transaktionsimport auslösen, Zuordnung zu offener Rechnung prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-025",
|
||||
@@ -415,7 +439,8 @@
|
||||
"tracelinks": "SyRS-013, StRS-004",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Gerät mit docuFORM verknüpfen, Zählerstand-Abfrage auslösen, Übernahme in Vertragskontingent-Verbrauch (StRS-004) prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-026",
|
||||
@@ -431,7 +456,8 @@
|
||||
"tracelinks": "SyRS-013",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Verkaufsstatistik für definierten Zeitraum abrufen und Summenkontrolle gegen manuell aggregierte Belegdaten durchführen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-027",
|
||||
@@ -448,7 +474,8 @@
|
||||
"tracelinks": "SyRS-012",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer mit \"nur eigene Filiale\"-Recht sucht Belege → nur Belege der eigenen Filiale werden zurückgegeben.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-028",
|
||||
@@ -464,7 +491,8 @@
|
||||
"tracelinks": "-",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Modul öffnen und konkrete Funktionen (Auskunft/Löschung/Anonymisierung) inventarisieren; mit Datenschutzbeauftragtem abgleichen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-029",
|
||||
@@ -481,7 +509,8 @@
|
||||
"tracelinks": "SyRS-013",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Chat-Assistenten mit Testanfrage aufrufen, Antwortverhalten und Rechteschutz (Mandanten-/Filial-/Mitarbeiterebene) prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-030",
|
||||
@@ -497,7 +526,8 @@
|
||||
"tracelinks": "SyRS-001",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Gleiche fachliche Aktion (z. B. Kunde anlegen) einmal über Direktverbindung, einmal über Webservice-Verbindung ausführen; Ergebnis muss identisch sein.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-001",
|
||||
@@ -513,7 +543,8 @@
|
||||
"tracelinks": "StRS-030",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Statische Codeprüfung: Für ein Stichprobenmodul existieren `I*Logic`, `BL*Logic`, `WS*Logic` mit identischer Methodensignatur.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-002",
|
||||
@@ -529,7 +560,8 @@
|
||||
"tracelinks": "StRS-030",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "BL-Methode mit provoziertem Fehler aufrufen; Response muss `StatusCode.Failed` mit aussagekräftiger `Message` liefern, kein unbehandelter Exception-Durchschlag zum Client.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-003",
|
||||
@@ -545,7 +577,8 @@
|
||||
"tracelinks": "StRS-002, StRS-010, StRS-018, StRS-022",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Gleichen Endpunkt von WPF-Client und einer unabhängigen HTTP-Anfrage (z. B. curl) mit gültigem Ticket aufrufen; identisches Ergebnis erwarten.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-004",
|
||||
@@ -561,7 +594,8 @@
|
||||
"tracelinks": "SyRS-003",
|
||||
"konsolidierung": "Kandidat: Legacy-WCF-Bridge (SyRS-004) und moderne v1-Controller (SyRS-005) bilden zwei parallele API-Generationen für teils gleiche fachliche Funktionen (z. B. Kunden/Aufträge existieren in beiden) – zentraler Konsolidierungskandidat für die Web-/SaaS-Neuimplementierung.",
|
||||
"pruefidee": "Bestandsmethode aus `ICentronRestService` über `/REST/<Name>` aufrufen und Antwortformat/-inhalt gegen Erwartung prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-005",
|
||||
@@ -577,7 +611,8 @@
|
||||
"tracelinks": "SyRS-004",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "`GET v1/customers/{id}` mit gültigem Token aufrufen und Response-Schema gegen DTO-Definition prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-006",
|
||||
@@ -593,7 +628,8 @@
|
||||
"tracelinks": "StRS-010",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zwei Clients verbinden, Chat-Nachricht von Client A senden, Zustellzeit/-inhalt bei Client B prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-007",
|
||||
@@ -610,7 +646,8 @@
|
||||
"tracelinks": "StRS-016",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Mit abgelaufenem Ticket einen geschützten Endpunkt aufrufen → Antwort 401.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-008",
|
||||
@@ -626,7 +663,8 @@
|
||||
"tracelinks": "StRS-016",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Anmeldung mit verknüpftem Microsoft-Testkonto durchführen, gültiges Ticket erhalten; Anmeldung mit nicht verknüpftem Konto → Fehler.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-009",
|
||||
@@ -642,7 +680,8 @@
|
||||
"tracelinks": "StRS-016",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Access Token erstellen, damit Aufruf durchführen (Erfolg), Token deaktivieren, gleichen Aufruf wiederholen (Ablehnung).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-010",
|
||||
@@ -659,7 +698,8 @@
|
||||
"tracelinks": "StRS-016",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "2FA aktivieren, Anmeldung ohne zweiten Faktor → Ablehnung; mit korrektem RADIUS-Code → Erfolg.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-011",
|
||||
@@ -676,7 +716,8 @@
|
||||
"tracelinks": "StRS-016, StRS-013, StRS-014",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Endpunkt mit `[AuthorizeUserRight(X)]` durch Benutzer ohne Recht X aufrufen → 401/403; mit Recht X → Erfolg.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-012",
|
||||
@@ -692,7 +733,8 @@
|
||||
"tracelinks": "StRS-027, SyRS-011",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Filialbeschränkter Benutzer sucht Belege anderer Filialen über direkten API-Aufruf (nicht UI) → Ergebnis darf keine fremden Filialbelege enthalten.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-013",
|
||||
@@ -709,7 +751,8 @@
|
||||
"tracelinks": "StRS-001, StRS-003, StRS-005, StRS-007, StRS-008, StRS-010, StRS-011, StRS-018, StRS-023, StRS-024, StRS-025, StRS-026, StRS-029, SwRS-004",
|
||||
"konsolidierung": "Kandidat: Die Legacy-Spiegeltabellen (`Entities/DbEntities/AufKopf.cs` u. a.) führen ein rein numerisches `Status`-Feld (kein Enum) parallel zum modernen `ReceiptState`-Enum – im Zielsystem auf ein einziges Statusmodell konsolidierungsbedürftig.",
|
||||
"pruefidee": "Beleg stornieren, danach Versuch, ihn in einen Folgebeleg zu wandeln → muss vom System verhindert werden.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-014",
|
||||
@@ -725,7 +768,8 @@
|
||||
"tracelinks": "StRS-001, StRS-005, SwRS-002, SwRS-003",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Testweise inkonsistente `CanBeForwardedFrom`/`CanBeForwardedInto`-Konfiguration einspielen → Systemstart muss mit `ApplicationException` fehlschlagen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-015",
|
||||
@@ -741,7 +785,8 @@
|
||||
"tracelinks": "StRS-001, SwRS-005",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Beleg mehrfach ändern und speichern; Anzahl und Inhalt der Einträge in `<Typ>KopfVersions` gegen die Änderungshistorie prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-016",
|
||||
@@ -758,7 +803,8 @@
|
||||
"tracelinks": "-",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Stichprobenprüfung mehrerer neuerer Tabellen (z. B. `HelpdeskCreationTemplate`) auf Einhaltung aller Konventionspunkte.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-017",
|
||||
@@ -775,7 +821,8 @@
|
||||
"tracelinks": "-",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Anwendung mit älterer DB-Version starten und Ausführung aller ausstehenden Skripte in der Konsolenausgabe verifizieren (vgl. Testvorgehen in `docs/guides/database/create-scripts.md`).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-018",
|
||||
@@ -791,7 +838,8 @@
|
||||
"tracelinks": "StRS-017",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Lizenz mit `count=0` bzw. abgelaufenem Datum simulieren → betroffene Funktion muss verweigert werden.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-019",
|
||||
@@ -807,7 +855,8 @@
|
||||
"tracelinks": "-",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "UI-Kultur auf Englisch umstellen, Stichprobe von Dialogen auf vollständige Übersetzung prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-020",
|
||||
@@ -823,7 +872,8 @@
|
||||
"tracelinks": "-",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Stichprobenprüfung der Byte-Order-Mark in neu committeten `.cs`-Dateien.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-021",
|
||||
@@ -839,7 +889,8 @@
|
||||
"tracelinks": "StRS-006",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Testdatei auf konfiguriertem SFTP-Server ablegen, 30-Minuten-Zyklus abwarten, Verarbeitung im `EDIManagementLog` prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-022",
|
||||
@@ -855,7 +906,8 @@
|
||||
"tracelinks": "StRS-006, SyRS-021",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Datei erzeugen, die 4-mal hintereinander einen Parsing-Fehler auslöst; fünfter Verarbeitungsversuch darf nicht mehr erfolgen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-023",
|
||||
@@ -871,7 +923,8 @@
|
||||
"tracelinks": "StRS-015",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Rechnung mit Reverse-Charge-Position erzeugen; generierte XML muss Tax-Category \"AE\" und den vorgeschriebenen Befreiungstext enthalten.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-024",
|
||||
@@ -887,7 +940,8 @@
|
||||
"tracelinks": "StRS-015, SyRS-023",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Testrechnung mit künstlicher Summenabweichung von 5,00 erzeugen → ZUGFeRD-Export muss mit Fehler abbrechen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-025",
|
||||
@@ -903,7 +957,8 @@
|
||||
"tracelinks": "-",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Eine Wartungsaufgabe künstlich zum Fehlschlagen bringen; nachfolgende Aufgaben im selben Zyklus müssen dennoch ausgeführt werden (Log-Analyse).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-026",
|
||||
@@ -919,7 +974,8 @@
|
||||
"tracelinks": "StRS-006, SyRS-021",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Webservice ohne verbundenen WPF-Client betreiben; EDI-Abruf muss dennoch planmäßig laufen (Log-Zeitstempel prüfen).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-027",
|
||||
@@ -935,7 +991,8 @@
|
||||
"tracelinks": "StRS-021",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Termin in Outlook (Exchange Online) ändern, 60s abwarten, Änderung in Nexus/c-entron prüfen; gleichen Test für On-Premise-Exchange wiederholen und Einschränkungen verifizieren.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-028",
|
||||
@@ -951,7 +1008,8 @@
|
||||
"tracelinks": "-",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "In DEBUG-Build Mailversand an externe Testadresse auslösen → tatsächlicher Empfänger muss `test@nexoware.com` sein.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-029",
|
||||
@@ -968,7 +1026,8 @@
|
||||
"tracelinks": "SyRS-003",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Lasttest mit hoher Anfragefrequenz gegen einen ungeschützten Webservice-Endpunkt durchführen und Systemverhalten (Verfügbarkeit, Ressourcenverbrauch) beobachten.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-030",
|
||||
@@ -984,7 +1043,8 @@
|
||||
"tracelinks": "SyRS-003",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Cross-Origin-Testanfrage von einer Fremd-Domain mit gültigem Ticket absetzen und Antwortverhalten (CORS-Header) prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-031",
|
||||
@@ -1002,7 +1062,8 @@
|
||||
"tracelinks": "SyRS-033",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Repository-Historie auf enthaltene Zugangsdaten scannen (z. B. mit Secret-Scanning-Tool); Empfehlung: Rotation aller im Repository sichtbaren Geheimnisse.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-032",
|
||||
@@ -1018,7 +1079,8 @@
|
||||
"tracelinks": "-",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Vollständige Neuinstallation aller drei Komponenten in einer sauberen Testumgebung durchführen und Aufwand/Abhängigkeiten dokumentieren.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-033",
|
||||
@@ -1035,7 +1097,8 @@
|
||||
"tracelinks": "SyRS-031, SyRS-032",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Web-Service unter Ubuntu/Debian gemäß Anleitung installieren und Funktionsumfang gegen Windows-Betrieb vergleichen (insbesondere Sub-Web-Services).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-034",
|
||||
@@ -1052,7 +1115,8 @@
|
||||
"tracelinks": "-",
|
||||
"konsolidierung": "Kandidat: Parallel gepflegte Azure-DevOps-Pipelines (`azure/*`, `azure-blazor/*`) und neuere GitHub-Actions-Workflows decken teils dieselben Build-/Test-Schritte ab – Konsolidierungskandidat.",
|
||||
"pruefidee": "Pull Request mit Ticketreferenz mergen; Build-Version muss automatisch im referenzierten Ticket hinterlegt werden.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-035",
|
||||
@@ -1068,7 +1132,8 @@
|
||||
"tracelinks": "SyRS-034",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Bekannte, absichtlich eingefügte Testschwachstelle in einem Feature-Branch committen und CodeQL-Erkennung im nächsten Lauf prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-036",
|
||||
@@ -1085,7 +1150,8 @@
|
||||
"tracelinks": "SyRS-034",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Denselben EndToEnd-Test zweimal hintereinander ausführen und Ergebnisidentität prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-037",
|
||||
@@ -1102,7 +1168,8 @@
|
||||
"tracelinks": "StRS-010, StRS-018, StRS-019, StRS-020, StRS-021",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Nexus ohne installierten WPF-Client betreiben und vollständigen Kundenportal-Workflow (StRS-018) end-to-end durchführen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-038",
|
||||
@@ -1118,7 +1185,8 @@
|
||||
"tracelinks": "StRS-020",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Add-in gemäß Manifest in Outlook (Desktop und Web) installieren und Grundfunktion (Ticket aus E-Mail erstellen) prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-001",
|
||||
@@ -1134,7 +1202,8 @@
|
||||
"tracelinks": "SyRS-013, SyRS-015",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Neues gemeinsames Kopf-Feld in `ReceiptBase` hinzufügen und Sichtbarkeit in allen sieben abgeleiteten Belegtypen ohne Zusatzaufwand prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-002",
|
||||
@@ -1150,7 +1219,8 @@
|
||||
"tracelinks": "SyRS-013, SyRS-014, SwRS-001",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Für Belegtyp \"Rechnung\" prüfen, dass `CanBeForwardedInto` ausschließlich `CreditVoucherClass` erlaubt; Versuch, eine Rechnung in einen Auftrag zu wandeln, muss abgelehnt werden.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-003",
|
||||
@@ -1166,7 +1236,8 @@
|
||||
"tracelinks": "SyRS-014, SwRS-002",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Unit-Test: `ValidateConsistency()` mit absichtlich asymmetrischer Testkonfiguration aufrufen → `ApplicationException` erwarten.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-004",
|
||||
@@ -1183,7 +1254,8 @@
|
||||
"tracelinks": "SyRS-013",
|
||||
"konsolidierung": "Kandidat: Konsolidierung von `ReceiptState`-Enum und Legacy-`Status`/`FreigabeStatus`-Feldern zu einem einzigen Statusmodell im Zielsystem.",
|
||||
"pruefidee": "Beleg-Statuswechsel auslösen und beide Felder (`ReceiptState` auf modernem Entity, `Status` in Legacy-Tabelle `AufKopf`) per SQL-Abfrage vergleichen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-005",
|
||||
@@ -1199,7 +1271,8 @@
|
||||
"tracelinks": "SyRS-015, SyRS-016",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Neue Spalte nur in Basistabelle und modernem Entity hinzufügen (bewusst unvollständig) → Speichern über `SaveReceipt*Repository` muss den Wert NICHT persistieren (Nachweis des dokumentierten Fehlerbilds).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-006",
|
||||
@@ -1215,7 +1288,8 @@
|
||||
"tracelinks": "SyRS-015, SwRS-005",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "End-to-End-Test gemäß Empfehlung der Dokumentation: Feld setzen, speichern, Beleg neu laden, Rohwert in Legacy-Tabelle per SQL prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-007",
|
||||
@@ -1231,7 +1305,8 @@
|
||||
"tracelinks": "StRS-008, SyRS-013",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Beleg mit gemischten Steuersätzen (7 %/19 %) anlegen; Summenberechnung je Steuersatzgruppe manuell nachrechnen und mit Systemergebnis vergleichen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-008",
|
||||
@@ -1247,7 +1322,8 @@
|
||||
"tracelinks": "StRS-008, SyRS-013, SwRS-007",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Steuersatzänderung zu einem Stichtag anlegen; Beleg mit Datum vor und nach dem Stichtag erzeugen und jeweils angewandten Steuersatz prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-009",
|
||||
@@ -1263,7 +1339,8 @@
|
||||
"tracelinks": "StRS-003, StRS-004",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Vertrag mit Kontingent 10h anlegen, 4h verbrauchen, Position nachträglich auf 6h Verbrauch ändern; Kontingentsaldo muss korrekt auf 4h Rest aktualisiert werden.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-010",
|
||||
@@ -1279,7 +1356,8 @@
|
||||
"tracelinks": "StRS-004, SwRS-011",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Rechnung für RMM-Vertrag mit Platzhalter `@@RMMArtikel@@` im Textbaustein erzeugen; RMM-Position muss exakt an der Platzhalterstelle erscheinen und der Platzhaltertext entfernt sein.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-011",
|
||||
@@ -1295,7 +1373,8 @@
|
||||
"tracelinks": "StRS-004, SwRS-010",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "RMM-Dienst in Testumgebung deaktivieren, Rechnungserstellung für Vertrag mit RMM-Artikelreferenz auslösen → Erstellung muss mit definierter Fehlermeldung abbrechen, keine Rechnung darf im System entstehen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-012",
|
||||
@@ -1311,7 +1390,8 @@
|
||||
"tracelinks": "StRS-013, SwRS-014",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Kunde mit Rechnungen unterschiedlicher Überfälligkeit anlegen, Mahnlauf ausführen, korrekte Mahnstufenzuordnung und Textvariablen prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-013",
|
||||
@@ -1327,7 +1407,8 @@
|
||||
"tracelinks": "StRS-013, StRS-014, SyRS-011",
|
||||
"konsolidierung": "Kandidat: identisches Rechteschutz-Idiom in Dunning und Opos – im Zielsystem als gemeinsamer Decorator/Cross-Cutting-Concern (z. B. Attribut) statt Code-Duplikation umsetzbar.",
|
||||
"pruefidee": "BL-Methode `RunDunning`/`RunOpos` direkt (unter Umgehung der UI) mit einem Benutzer ohne Recht aufrufen → Exception muss geworfen werden, kein Lauf darf erzeugt werden.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-014",
|
||||
@@ -1344,7 +1425,8 @@
|
||||
"tracelinks": "StRS-016, SyRS-011",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Statische Codeprüfung: Keine direkte numerische Rechte-ID (Literal) in einem `HasUserRight`-Aufruf ohne `UserRightsConst`-Referenz.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-015",
|
||||
@@ -1360,7 +1442,8 @@
|
||||
"tracelinks": "StRS-016, SwRS-014, SwRS-016",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer zwei Gruppen mit unterschiedlichen Rechten zuordnen; `GetRightsFromCurrentUser` muss die Vereinigungsmenge beider Gruppenrechte liefern.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-016",
|
||||
@@ -1376,7 +1459,8 @@
|
||||
"tracelinks": "StRS-016, SwRS-015, SyRS-017",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Neues Recht per `AddRightIfNotExists` unterhalb eines bestehenden Elternrechts anlegen; `NumChildren` des Elternrechts muss automatisch um 1 erhöht sein.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-017",
|
||||
@@ -1392,7 +1476,8 @@
|
||||
"tracelinks": "SyRS-007",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Anfrage mit manipuliertem/gefälschtem Ticket senden → 401; erfolgreiche Anfrage im Audit-Log mit korrekter IP/Methode wiederfinden.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-018",
|
||||
@@ -1408,7 +1493,8 @@
|
||||
"tracelinks": "SyRS-008",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "E-Mail-Adresse des verknüpften Microsoft-Kontos ändern; Anmeldung muss weiterhin denselben c-entron-Benutzer zuordnen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-019",
|
||||
@@ -1424,7 +1510,8 @@
|
||||
"tracelinks": "SyRS-008",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Manipuliertes JWT (falsche Signatur, abgelaufen, wiederverwendet) gegen `POST /jwt/login` senden → Ablehnung in allen drei Fällen, mit Log-Eintrag.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-020",
|
||||
@@ -1440,7 +1527,8 @@
|
||||
"tracelinks": "SyRS-009",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Access Token erstellen, erfolgreichen API-Aufruf durchführen, Token per `PUT {id}/deactivate` deaktivieren, identischen Aufruf wiederholen → Ablehnung.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-021",
|
||||
@@ -1456,7 +1544,8 @@
|
||||
"tracelinks": "StRS-017, SyRS-018",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Lizenz-GUID, die nur in `LicenseGuids.cs`, nicht aber in `ApplicationKind.cs` gelistet ist, für einen Login-Versuch verwenden → Ablehnung.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-022",
|
||||
@@ -1472,7 +1561,8 @@
|
||||
"tracelinks": "SyRS-016",
|
||||
"konsolidierung": "Kandidat: Doppelte Konfigurationsablage (`Stammdat` vs. `ApplicationSettings`) ist ein expliziter Migrationskandidat für das Zielsystem.",
|
||||
"pruefidee": "Neue Einstellung mit nächster freier ID gemäß Kommentar in `ApplicationSettingID.cs` anlegen, Lese-/Schreibzugriff über `AppSettingsBL` prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-023",
|
||||
@@ -1488,7 +1578,8 @@
|
||||
"tracelinks": "SyRS-017",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Anwendung zweimal hintereinander gegen dieselbe (bereits migrierte) Datenbank starten; zweiter Start darf keine SQL-Fehler und keine erneuten Schemaänderungen erzeugen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-024",
|
||||
@@ -1505,7 +1596,8 @@
|
||||
"tracelinks": "SyRS-016",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Neue Entität ohne explizite Längenangabe in einem Mapping anlegen und Abweichung vom tatsächlichen DB-Schema als Codereview-Fehler identifizieren.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-025",
|
||||
@@ -1522,7 +1614,8 @@
|
||||
"tracelinks": "SyRS-016",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Alle Verwendungsstellen von `RawSqlAccessDAO`/`GenericStoredProcedureDAO` auf konsequente Parametrisierung prüfen (keine Stringverkettung von Benutzereingaben).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-026",
|
||||
@@ -1538,7 +1631,8 @@
|
||||
"tracelinks": "StRS-006, SyRS-021",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "EDI-Datei im ALSO-CH-Format mit Swiss-ESR-Code verarbeiten und prüfen, dass andere Lieferantenformate (z. B. Herweck) unverändert funktionieren (Regressionstest).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-027",
|
||||
@@ -1554,7 +1648,8 @@
|
||||
"tracelinks": "SwRS-026",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Lieferantenkonfiguration mit zwei unterschiedlichen `EdiDataType`/`ObjectKind`-Kombinationen anlegen und getrennte, korrekte Verarbeitung beider Dokumentarten prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-028",
|
||||
@@ -1570,7 +1665,8 @@
|
||||
"tracelinks": "SyRS-022",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Testdatei erzeugen, die 4-mal hintereinander eine Exception auslöst; Datei darf beim 5. Downloadzyklus nicht mehr verarbeitet werden, bleibt aber im Log sichtbar.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-029",
|
||||
@@ -1586,7 +1682,8 @@
|
||||
"tracelinks": "StRS-015, SyRS-023, SyRS-024",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Rechnung mit Skonto-Zahlungsbedingung erzeugen; generierte XML muss BR-DE-18-konforme Skonto-Beschreibung inkl. korrekter Zeilenumbrüche (`
`) enthalten.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-030",
|
||||
@@ -1602,7 +1699,8 @@
|
||||
"tracelinks": "StRS-015",
|
||||
"konsolidierung": "Kandidat: ZUGFeRD- (SwRS-029) und ebInterface-Export (SwRS-030) bilden zwei unabhängige Implementierungen für die fachlich verwandte Aufgabe \"elektronische Rechnung erzeugen\" – im Zielsystem auf eine gemeinsame E-Invoicing-Abstraktion mit länderspezifischen Profilen konsolidierbar.",
|
||||
"pruefidee": "Rechnung exportieren und resultierende XML gegen das ebInterface-4.3-XSD-Schema validieren.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-031",
|
||||
@@ -1618,7 +1716,8 @@
|
||||
"tracelinks": "StRS-021, SyRS-027",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Einzelnen Termin in Outlook ändern und Netzwerkverkehr/Log des nächsten Sync-Zyklus prüfen: nur der geänderte Termin darf übertragen werden, nicht der gesamte Kalender.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-032",
|
||||
@@ -1634,7 +1733,8 @@
|
||||
"tracelinks": "StRS-021, SwRS-031",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Helpdesk-Zeittermin in c-entron anlegen, Sync abwarten, Termin in Outlook manuell auf anderes Datum ändern, erneut synchronisieren → c-entron-Datensatz muss unverändert bleiben (siehe StRS-021 Prüfidee).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-033",
|
||||
@@ -1650,7 +1750,8 @@
|
||||
"tracelinks": "SyRS-025",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Fehlende `AccountI3D`-Zuordnung in einem Todo-Eintrag künstlich erzeugen; nach einem Ausführungszyklus muss `ToDoBL.DataQualityFillAccountI3D()` den Wert korrigiert haben.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-034",
|
||||
@@ -1666,7 +1767,8 @@
|
||||
"tracelinks": "StRS-016, StRS-017, SyRS-011, SwRS-021",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Modul mit Recht X und Lizenz Y konfigurieren; Benutzer mit Recht, aber ohne Lizenz → Modul nicht sichtbar; Benutzer mit Lizenz, aber ohne Recht → Modul nicht sichtbar.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-035",
|
||||
@@ -1682,7 +1784,8 @@
|
||||
"tracelinks": "SyRS-028",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "In DEBUG-Konfiguration Mailversand an fiktive externe Adresse `kunde@fremdefirma.de` auslösen; tatsächlicher SMTP-Empfänger muss `test@nexoware.com` sein.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-036",
|
||||
@@ -1698,7 +1801,8 @@
|
||||
"tracelinks": "SyRS-004",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Neue Testmethode mit `[WebInvoke(UriTemplate=\"TestPing\")]` hinzufügen, Neustart des Hosts, Aufruf von `/REST/TestPing` ohne weitere Codeänderung muss funktionieren.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-037",
|
||||
@@ -1714,7 +1818,8 @@
|
||||
"tracelinks": "SyRS-002",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Endpunkt mit provozierter NullReferenceException aufrufen (Produktionsmodus) → Antwort darf keinen Stacktrace enthalten, Fehler muss im Log erscheinen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-038",
|
||||
@@ -1730,6 +1835,7 @@
|
||||
"tracelinks": "SyRS-016",
|
||||
"konsolidierung": "Kandidat: Doppelte Soft-Delete-Modellierung – generisches `DBEntity.State` (StateEnum, ältere Entitäten) versus das in `docs/guides/database/database-conventions.md` beschriebene, neuere `IsDeleted`/`DeletedByI3D`/`DeletedDate`-Spaltenmuster (neue Tabellen). Im Zielsystem auf ein einheitliches Muster konsolidierbar.",
|
||||
"pruefidee": "Entität löschen (Soft Delete), per SQL prüfen, dass der Datensatz weiterhin existiert mit `State=1`; reguläre fachliche Abfrage darf den Datensatz nicht mehr zurückliefern.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
}
|
||||
]
|
||||
+7
@@ -2,6 +2,8 @@
|
||||
|
||||
Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`.
|
||||
|
||||
Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt.
|
||||
|
||||
### Verteilung über die Ebenen
|
||||
|
||||
| Ebene | Anzahl | Anteil |
|
||||
@@ -38,6 +40,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| Belege je Anforderung (Median) | 1,0 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 89 (84,0 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`.
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
@@ -55,5 +61,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) |
|
||||
| **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **verletzt** – 1 von 43 ungedeckt: SyRS-035 |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 97 von 106 mit Tracelinks (91,5 %) |
|
||||
|
||||
|
||||
+7
@@ -94,6 +94,8 @@ in allen Vorläufen klafften sie deutlich auseinander.
|
||||
|
||||
Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`.
|
||||
|
||||
Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt.
|
||||
|
||||
### Verteilung über die Ebenen
|
||||
|
||||
| Ebene | Anzahl | Anteil |
|
||||
@@ -126,6 +128,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| Belege je Anforderung (Median) | 1 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 54 (98,2 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`.
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
@@ -143,6 +149,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) |
|
||||
| **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (37 risikorelevante Anforderungen, alle gedeckt) |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 55 von 55 mit Tracelinks (100,0 %) |
|
||||
|
||||
## Vergleich aller Läufe (identischer Prompt)
|
||||
|
||||
+110
-55
@@ -14,7 +14,8 @@
|
||||
"tracelinks": "SyRS-1, SyRS-4, SwRS-1, SwRS-2",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Einem Benutzer wird ein Recht ausschließlich über Gruppenmitgliedschaft zugewiesen; Entfernen",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-2",
|
||||
@@ -30,7 +31,8 @@
|
||||
"tracelinks": "SyRS-1, SwRS-3",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer mit MANAGE_RIGHTS_ONLY_OWN_BRANCH versucht Gruppe einer fremden Filiale zu löschen;",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-3",
|
||||
@@ -46,7 +48,8 @@
|
||||
"tracelinks": "SyRS-4, SwRS-3",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Nach AddRightToRightGroup existiert ein neuer AppRightLog-Eintrag mit Kind=AddRightToGroup.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-4",
|
||||
@@ -62,7 +65,8 @@
|
||||
"tracelinks": "SyRS-2, SwRS-6",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Kunde ohne Lizenz für Modul X: LicenseManager.HasLicense(X) liefert false, UI blendet Modul X aus.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-5",
|
||||
@@ -79,7 +83,8 @@
|
||||
"tracelinks": "SyRS-7, SyRS-8, SwRS-8",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Für jeden der sieben Belegtypen existiert eine Entity-Klasse, die von ReceiptBase erbt und",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-6",
|
||||
@@ -96,7 +101,8 @@
|
||||
"tracelinks": "SyRS-10, SwRS-11, SwRS-12",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Beleg wird zweimal gespeichert (Version 1 → 2); GetReceiptVersionByI3D(..., version:1) liefert",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-7",
|
||||
@@ -112,7 +118,8 @@
|
||||
"tracelinks": "SyRS-8, SwRS-9",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer A lädt Beleg (Guid=X), Benutzer B speichert denselben Beleg zuerst (Guid ändert",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-8",
|
||||
@@ -128,7 +135,8 @@
|
||||
"tracelinks": "SyRS-9, SyRS-11, SwRS-8, SwRS-10",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Setzen von isPaid=true auf einem aktiven Beleg ändert dessen State auf Completed; erneutes",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-9",
|
||||
@@ -145,7 +153,8 @@
|
||||
"tracelinks": "SyRS-12, SyRS-13, SwRS-13, SwRS-14",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Vertrag mit CalculationKind=Auto, State=aktiv, fälligem Intervall und mind. einer abrechenbaren",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-10",
|
||||
@@ -161,7 +170,8 @@
|
||||
"tracelinks": "SyRS-12, SwRS-13",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zwei sonst identische Verträge mit CalculationKind=Auto bzw. =Need: nur der Auto-Vertrag wird",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-11",
|
||||
@@ -177,7 +187,8 @@
|
||||
"tracelinks": "SyRS-14, SwRS-15",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Rechnung mit DunningLevel=Level1 und Restbetrag > 0 erscheint in",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-12",
|
||||
@@ -193,7 +204,8 @@
|
||||
"tracelinks": "SyRS-15, SwRS-16",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Belegposition mit Belegdatum vor einer historischen Steuersatzänderung liefert den alten",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-13",
|
||||
@@ -209,7 +221,8 @@
|
||||
"tracelinks": "SyRS-16, SwRS-17",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Ein Account-Datensatz mit gesetzter CustomerNumber UND SupplierNumber lässt sich anlegen und",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-14",
|
||||
@@ -226,7 +239,8 @@
|
||||
"tracelinks": "SyRS-17, SwRS-18",
|
||||
"konsolidierung": "Kandidat: StRS-1 (gleiches zugrundeliegendes Rechtesystem, hier auf ein einzelnes Feld",
|
||||
"pruefidee": "Benutzer ohne CAN_CHANGE_DATE-Recht öffnet Timer-Billing-Einstellungen: Datumsfeld ist",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-15",
|
||||
@@ -242,7 +256,8 @@
|
||||
"tracelinks": "SyRS-18, SwRS-19",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Anlegen eines neuen HelpdeskState-Datensatzes mit IsInternalCompanyBillingActive=false; Tickets",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-16",
|
||||
@@ -258,7 +273,8 @@
|
||||
"tracelinks": "SyRS-19, SwRS-20",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "`docker compose up` im Verzeichnis docker/compose startet alle vier Dienste; der Webservice",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-1",
|
||||
@@ -275,7 +291,8 @@
|
||||
"tracelinks": "StRS-1, SwRS-1, SwRS-2",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Direkter (simulierter) Aufruf einer BL-Methode ohne vorherige UI-Prüfung mit einem Benutzer",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-2",
|
||||
@@ -291,7 +308,8 @@
|
||||
"tracelinks": "StRS-1, SwRS-1",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Web-Account mit Recht X, aber ohne entsprechendes internes Sichtrus-Recht, wird bei HasWebAccountRight(X)",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-3",
|
||||
@@ -307,7 +325,8 @@
|
||||
"tracelinks": "StRS-2, SwRS-3",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Löschversuch der Gruppe I3D=6 liefert Result.Error \"Die Adminstratoren Gruppe darf nicht",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-4",
|
||||
@@ -323,7 +342,8 @@
|
||||
"tracelinks": "StRS-3, SwRS-3",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Für jede der acht Schreibmethoden existiert im Code ein zugehöriger, unbedingter WriteXxxLog-Aufruf",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-5",
|
||||
@@ -339,7 +359,8 @@
|
||||
"tracelinks": "StRS-4, SwRS-6",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Login mit abgelaufener Lizenzversion liefert Result.Error; Login, der die maximale",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-6",
|
||||
@@ -356,7 +377,8 @@
|
||||
"tracelinks": "StRS-4, SwRS-6",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Webservice-Start ohne gültige Centron-Lizenz: Startvorgang bricht ab, bevor Migrationsskripte",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-7",
|
||||
@@ -372,7 +394,8 @@
|
||||
"tracelinks": "StRS-5, StRS-7, SwRS-9",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer ohne Bearbeitungsrecht für Rechnungen versucht, eine Rechnung zu speichern; Result",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-8",
|
||||
@@ -388,7 +411,8 @@
|
||||
"tracelinks": "StRS-7, SwRS-9",
|
||||
"konsolidierung": "Kandidat: SyRS-9 (verwandter Zustands-Schutzmechanismus)",
|
||||
"pruefidee": "Zwei parallele Ladevorgänge desselben Belegs, sequentielle Speicherversuche: der zweite",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-9",
|
||||
@@ -404,7 +428,8 @@
|
||||
"tracelinks": "StRS-5, SwRS-8, SwRS-10",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "UpdateReceiptIsPaid auf einem Beleg mit State=Canceled liefert Result.Error unabhängig vom",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-10",
|
||||
@@ -420,7 +445,8 @@
|
||||
"tracelinks": "StRS-6, SwRS-11, SwRS-12",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Für jeden der sieben Belegtypen: Speichern einer Änderung erzeugt einen neuen Versionsdatensatz",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-11",
|
||||
@@ -436,7 +462,8 @@
|
||||
"tracelinks": "StRS-8",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer mit ausschließlich INCOMING_PAYMENT_TRANSACTIONS (kein allgemeines Bearbeitungsrecht):",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-12",
|
||||
@@ -452,7 +479,8 @@
|
||||
"tracelinks": "StRS-9, SwRS-13, SwRS-14",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Aktiver Vertrag ohne Vertragspositionen wird trotz fälligem Intervall NICHT in die finale",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-13",
|
||||
@@ -468,7 +496,8 @@
|
||||
"tracelinks": "StRS-9, StRS-10",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Dynamischer Bedarfsvertrag ohne Sonderartikel-Stichtag im Abrechnungszeitraum wird aus der",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-14",
|
||||
@@ -484,7 +513,8 @@
|
||||
"tracelinks": "StRS-11, SwRS-15",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Setzen einer Mahnsperre mit dunningStopEnd in der Zukunft: das Objekt wird im nächsten",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-15",
|
||||
@@ -500,7 +530,8 @@
|
||||
"tracelinks": "StRS-12, SwRS-16",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Kette mit Steuersatz A (gültig bis 30.06.), Nachfolger B (ab 01.07.): receiptDate=15.06.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-16",
|
||||
@@ -517,7 +548,8 @@
|
||||
"tracelinks": "StRS-13, SwRS-17",
|
||||
"konsolidierung": "Kandidat: SyRS-1 (gleiches zugrundeliegendes Rechteprüfungsmuster CheckRightsFromUser,",
|
||||
"pruefidee": "Benutzer mit ausschließlich EDIT_CUSTOMER: Bearbeiten eines bestehenden Kunden gelingt,",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-17",
|
||||
@@ -533,7 +565,8 @@
|
||||
"tracelinks": "StRS-14, SwRS-18",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer mit DeliveryList.CAN_CHANGE_DATE, aber ohne Invoice.CAN_CHANGE_DATE:",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-18",
|
||||
@@ -549,7 +582,8 @@
|
||||
"tracelinks": "StRS-15, SwRS-19",
|
||||
"konsolidierung": "Kandidat: SwRS-8 (gegensätzliches Muster: Belegstatus fest vs. Ticketstatus konfigurierbar –",
|
||||
"pruefidee": "Ein neuer HelpdeskState-Datensatz ist über die Rechteverwaltungs-/Admin-UI anlegbar und",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-19",
|
||||
@@ -566,7 +600,8 @@
|
||||
"tracelinks": "StRS-16, SwRS-20",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Webservice-Container basierend auf einem Linux-Basisimage startet erfolgreich und beantwortet",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-1",
|
||||
@@ -582,7 +617,8 @@
|
||||
"tracelinks": "SyRS-1",
|
||||
"konsolidierung": "Kandidat: SwRS-2 (ähnlicher Cache-Mechanismus für Web-Account-Rechte, HasWebAccountRight)",
|
||||
"pruefidee": "Zwei aufeinanderfolgende HasUserRight-Aufrufe für denselben Benutzer in derselben Session:",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-2",
|
||||
@@ -599,7 +635,8 @@
|
||||
"tracelinks": "SyRS-1",
|
||||
"konsolidierung": "Kandidat: SwRS-1",
|
||||
"pruefidee": "Aufruf mit 5 Recht-IDs, von denen der Benutzer 3 besitzt, liefert eine Liste mit genau",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-3",
|
||||
@@ -615,7 +652,8 @@
|
||||
"tracelinks": "SyRS-3, SyRS-4",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zuweisungsversuch eines Rechts mit I3D, das nicht in der Liste enthalten ist, an die",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-4",
|
||||
@@ -632,7 +670,8 @@
|
||||
"tracelinks": "SyRS-1",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Ausführen eines Migrationsskripts mit AddRightIfNotExists erzeugt einen neuen Sichrech-Datensatz",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-5",
|
||||
@@ -648,7 +687,8 @@
|
||||
"tracelinks": "(kein direkter StRS/SyRS-Bezug – reine Entwicklungssicherheitsmaßnahme, kein Fachprozess)",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Debug-Build, Versand an \"kunde@fremdefirma.de\": tatsächlicher SMTP-Empfänger ist",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-6",
|
||||
@@ -664,7 +704,8 @@
|
||||
"tracelinks": "SyRS-5, SyRS-6",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zweiter Aufruf von Initialize() in derselben Prozessinstanz löst eine Exception aus;",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-7",
|
||||
@@ -680,7 +721,8 @@
|
||||
"tracelinks": "SyRS-5",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Login mit Version \"9.3.40.2\" und Centron-Lizenz-GUID wird nicht wegen Versionsüberschreitung",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-8",
|
||||
@@ -696,7 +738,8 @@
|
||||
"tracelinks": "StRS-5, SyRS-9",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Kompilierzeitprüfung/Reflection: ReceiptState besitzt genau die drei genannten Werte.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-9",
|
||||
@@ -712,7 +755,8 @@
|
||||
"tracelinks": "SyRS-7, StRS-7",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Für zwei verschiedene Belegtypen mit unterschiedlichen HasRightToEditReceipt-Implementierungen",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-10",
|
||||
@@ -728,7 +772,8 @@
|
||||
"tracelinks": "StRS-8, SyRS-9",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "isPaid=true auf einem Active-Beleg: State wird Completed; isPaid=false auf einem",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-11",
|
||||
@@ -744,7 +789,8 @@
|
||||
"tracelinks": "StRS-6, SyRS-10",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Versuch, aus einer historischen Version mit aktiven Barcodes eine neue Version zu erzeugen,",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-12",
|
||||
@@ -761,7 +807,8 @@
|
||||
"tracelinks": "StRS-6, SyRS-10",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Neues Feld wird nur der modernen Entity/Mapping hinzugefügt, nicht dem Repository: Wert wird",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-13",
|
||||
@@ -777,7 +824,8 @@
|
||||
"tracelinks": "SyRS-12, StRS-10",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Vertrag mit LastPaidDate >= ContractEnd und CalculationKind=Auto wird NICHT selektiert",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-14",
|
||||
@@ -793,7 +841,8 @@
|
||||
"tracelinks": "SyRS-12",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Abrechnungslauf mit > 2000 abrechnungsfähigen Verträgen schlägt nicht mit einem",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-15",
|
||||
@@ -809,7 +858,8 @@
|
||||
"tracelinks": "StRS-11, SyRS-14",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Rechnung mit GrossPriceComplete=1000, PayedGrossAmount=300, CreditVoucherGrossAmount=100:",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-16",
|
||||
@@ -825,7 +875,8 @@
|
||||
"tracelinks": "StRS-12, SyRS-15",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Aufruf mit einer nicht existierenden taxRateI3D liefert nicht null, sondern den",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-17",
|
||||
@@ -841,7 +892,8 @@
|
||||
"tracelinks": "StRS-13, SyRS-16",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Mit aktivierter Einstellung: neu angelegter Kunde mit Nummer 4711 erhält BookKeepingNumber",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-18",
|
||||
@@ -857,7 +909,8 @@
|
||||
"tracelinks": "StRS-14, SyRS-17",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "ReceiptKind=InvoiceClass, CanChangeDateInInvoices=false: BillingDateIsEnabled=false,",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-19",
|
||||
@@ -873,7 +926,8 @@
|
||||
"tracelinks": "StRS-15, SyRS-18",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zwei HelpdeskState-Datensätze mit unterschiedlichem ServiceBoardWebColor erscheinen im",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-20",
|
||||
@@ -889,6 +943,7 @@
|
||||
"tracelinks": "StRS-16, SyRS-19",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Manuelles Beenden des webservice-Containers: Compose startet ihn automatisch neu, ohne dass",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
}
|
||||
]
|
||||
+7
@@ -2,6 +2,8 @@
|
||||
|
||||
Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`.
|
||||
|
||||
Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt.
|
||||
|
||||
### Verteilung über die Ebenen
|
||||
|
||||
| Ebene | Anzahl | Anteil |
|
||||
@@ -34,6 +36,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| Belege je Anforderung (Median) | 1 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 54 (98,2 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`.
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
@@ -51,5 +57,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) |
|
||||
| **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (37 risikorelevante Anforderungen, alle gedeckt) |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 55 von 55 mit Tracelinks (100,0 %) |
|
||||
|
||||
|
||||
+7
@@ -102,6 +102,8 @@ Faktor 21,6 die größte aller Läufe – nahezu die gesamte Arbeit fand in den
|
||||
|
||||
Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`.
|
||||
|
||||
Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt.
|
||||
|
||||
### Verteilung über die Ebenen
|
||||
|
||||
| Ebene | Anzahl | Anteil |
|
||||
@@ -138,6 +140,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| Belege je Anforderung (Median) | 1 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 311 (95,7 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`.
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
@@ -155,6 +161,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) |
|
||||
| **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (100 risikorelevante Anforderungen, alle gedeckt) |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 325 von 325 mit Tracelinks (100,0 %) |
|
||||
|
||||
## Vergleich aller Läufe (identischer Prompt, SHA-256 unverändert)
|
||||
|
||||
+650
-325
File diff suppressed because it is too large
Load Diff
+7
@@ -2,6 +2,8 @@
|
||||
|
||||
Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`.
|
||||
|
||||
Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt.
|
||||
|
||||
### Verteilung über die Ebenen
|
||||
|
||||
| Ebene | Anzahl | Anteil |
|
||||
@@ -38,6 +40,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| Belege je Anforderung (Median) | 1 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 311 (95,7 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`.
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
@@ -55,5 +61,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) |
|
||||
| **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (100 risikorelevante Anforderungen, alle gedeckt) |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 325 von 325 mit Tracelinks (100,0 %) |
|
||||
|
||||
|
||||
+7
@@ -93,6 +93,8 @@
|
||||
|
||||
Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`.
|
||||
|
||||
Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt.
|
||||
|
||||
### Verteilung über die Ebenen
|
||||
|
||||
| Ebene | Anzahl | Anteil |
|
||||
@@ -129,6 +131,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| Belege je Anforderung (Median) | 1 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 175 (92,6 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`.
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
@@ -146,6 +152,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) |
|
||||
| **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (62 risikorelevante Anforderungen, alle gedeckt) |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 189 von 189 mit Tracelinks (100,0 %) |
|
||||
|
||||
## Vergleich aller Läufe (identischer Prompt, SHA-256 unverändert)
|
||||
|
||||
+378
-189
File diff suppressed because it is too large
Load Diff
+7
@@ -2,6 +2,8 @@
|
||||
|
||||
Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`.
|
||||
|
||||
Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt.
|
||||
|
||||
### Verteilung über die Ebenen
|
||||
|
||||
| Ebene | Anzahl | Anteil |
|
||||
@@ -38,6 +40,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| Belege je Anforderung (Median) | 1 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 175 (92,6 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`.
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
@@ -55,5 +61,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) |
|
||||
| **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (62 risikorelevante Anforderungen, alle gedeckt) |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 189 von 189 mit Tracelinks (100,0 %) |
|
||||
|
||||
|
||||
+7
@@ -97,6 +97,8 @@
|
||||
|
||||
Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`.
|
||||
|
||||
Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt.
|
||||
|
||||
### Verteilung über die Ebenen
|
||||
|
||||
| Ebene | Anzahl | Anteil |
|
||||
@@ -127,6 +129,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| Belege je Anforderung (Median) | 2,0 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 234 (95,1 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`.
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
@@ -144,6 +150,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) |
|
||||
| **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **verletzt** – 1 von 85 ungedeckt: SyRS-SYS-02 |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 246 von 246 mit Tracelinks (100,0 %) |
|
||||
|
||||
## V1b-Block F–J, fünf Messpunkte
|
||||
|
||||
+492
-246
File diff suppressed because it is too large
Load Diff
+7
@@ -2,6 +2,8 @@
|
||||
|
||||
Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`.
|
||||
|
||||
Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt.
|
||||
|
||||
### Verteilung über die Ebenen
|
||||
|
||||
| Ebene | Anzahl | Anteil |
|
||||
@@ -32,6 +34,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| Belege je Anforderung (Median) | 2,0 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 234 (95,1 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`.
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
@@ -49,5 +55,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) |
|
||||
| **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **verletzt** – 1 von 85 ungedeckt: SyRS-SYS-02 |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 246 von 246 mit Tracelinks (100,0 %) |
|
||||
|
||||
|
||||
+7
@@ -97,6 +97,8 @@
|
||||
|
||||
Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`.
|
||||
|
||||
Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt.
|
||||
|
||||
### Verteilung über die Ebenen
|
||||
|
||||
| Ebene | Anzahl | Anteil |
|
||||
@@ -127,6 +129,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| Belege je Anforderung (Median) | 1,0 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 215 (90,3 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`.
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
@@ -144,6 +150,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) |
|
||||
| **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (112 risikorelevante Anforderungen, alle gedeckt) |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 238 von 238 mit Tracelinks (100,0 %) |
|
||||
|
||||
## V1b-Block F–J, fünf Messpunkte
|
||||
|
||||
+476
-238
File diff suppressed because it is too large
Load Diff
+7
@@ -2,6 +2,8 @@
|
||||
|
||||
Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`.
|
||||
|
||||
Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt.
|
||||
|
||||
### Verteilung über die Ebenen
|
||||
|
||||
| Ebene | Anzahl | Anteil |
|
||||
@@ -32,6 +34,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| Belege je Anforderung (Median) | 1,0 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 215 (90,3 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`.
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
@@ -49,5 +55,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) |
|
||||
| **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (112 risikorelevante Anforderungen, alle gedeckt) |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 238 von 238 mit Tracelinks (100,0 %) |
|
||||
|
||||
|
||||
+7
@@ -97,6 +97,8 @@
|
||||
|
||||
Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`.
|
||||
|
||||
Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt.
|
||||
|
||||
### Verteilung über die Ebenen
|
||||
|
||||
| Ebene | Anzahl | Anteil |
|
||||
@@ -133,6 +135,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| Belege je Anforderung (Median) | 2 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 109 (96,5 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`.
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
@@ -150,6 +156,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) |
|
||||
| **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (43 risikorelevante Anforderungen, alle gedeckt) |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 110 von 113 mit Tracelinks (97,3 %) |
|
||||
|
||||
## V1b-Block F–J, fünf Messpunkte
|
||||
|
||||
+226
-113
File diff suppressed because it is too large
Load Diff
+7
@@ -2,6 +2,8 @@
|
||||
|
||||
Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`.
|
||||
|
||||
Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt.
|
||||
|
||||
### Verteilung über die Ebenen
|
||||
|
||||
| Ebene | Anzahl | Anteil |
|
||||
@@ -38,6 +40,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| Belege je Anforderung (Median) | 2 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 109 (96,5 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`.
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
@@ -55,5 +61,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) |
|
||||
| **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (43 risikorelevante Anforderungen, alle gedeckt) |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 110 von 113 mit Tracelinks (97,3 %) |
|
||||
|
||||
|
||||
+7
@@ -97,6 +97,8 @@
|
||||
|
||||
Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`.
|
||||
|
||||
Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt.
|
||||
|
||||
### Verteilung über die Ebenen
|
||||
|
||||
| Ebene | Anzahl | Anteil |
|
||||
@@ -133,6 +135,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| Belege je Anforderung (Median) | 2 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 145 (100,0 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`.
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
@@ -150,6 +156,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) |
|
||||
| **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (73 risikorelevante Anforderungen, alle gedeckt) |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 145 von 145 mit Tracelinks (100,0 %) |
|
||||
|
||||
## V1b-Block F–J, fünf Messpunkte
|
||||
|
||||
+290
-145
File diff suppressed because it is too large
Load Diff
+7
@@ -2,6 +2,8 @@
|
||||
|
||||
Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`.
|
||||
|
||||
Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt.
|
||||
|
||||
### Verteilung über die Ebenen
|
||||
|
||||
| Ebene | Anzahl | Anteil |
|
||||
@@ -38,6 +40,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| Belege je Anforderung (Median) | 2 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 145 (100,0 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`.
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
@@ -55,5 +61,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) |
|
||||
| **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (73 risikorelevante Anforderungen, alle gedeckt) |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 145 von 145 mit Tracelinks (100,0 %) |
|
||||
|
||||
|
||||
+7
@@ -97,6 +97,8 @@
|
||||
|
||||
Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`.
|
||||
|
||||
Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt.
|
||||
|
||||
### Verteilung über die Ebenen
|
||||
|
||||
| Ebene | Anzahl | Anteil |
|
||||
@@ -127,6 +129,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| Belege je Anforderung (Median) | 1 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 238 (99,6 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`.
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
@@ -144,6 +150,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **verletzt** – 1 ohne Beleg: SwRS-012 |
|
||||
| **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (84 risikorelevante Anforderungen, alle gedeckt) |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 239 von 239 mit Tracelinks (100,0 %) |
|
||||
|
||||
## V1b-Block F–J, fünf Messpunkte
|
||||
|
||||
+478
-239
File diff suppressed because it is too large
Load Diff
+7
@@ -2,6 +2,8 @@
|
||||
|
||||
Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`.
|
||||
|
||||
Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt.
|
||||
|
||||
### Verteilung über die Ebenen
|
||||
|
||||
| Ebene | Anzahl | Anteil |
|
||||
@@ -32,6 +34,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| Belege je Anforderung (Median) | 1 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 238 (99,6 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`.
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
@@ -49,5 +55,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **verletzt** – 1 ohne Beleg: SwRS-012 |
|
||||
| **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (84 risikorelevante Anforderungen, alle gedeckt) |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 239 von 239 mit Tracelinks (100,0 %) |
|
||||
|
||||
|
||||
+7
@@ -96,6 +96,8 @@ allen V1b-Laeufen, wo sie um bis zu Faktor 21,6 auseinanderlagen.
|
||||
|
||||
Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`.
|
||||
|
||||
Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt.
|
||||
|
||||
### Verteilung über die Ebenen
|
||||
|
||||
| Ebene | Anzahl | Anteil |
|
||||
@@ -130,6 +132,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| Belege je Anforderung (Median) | 1,0 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 38 (90,5 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`.
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
@@ -147,6 +153,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) |
|
||||
| **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (20 risikorelevante Anforderungen, alle gedeckt) |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 42 von 42 mit Tracelinks (100,0 %) |
|
||||
|
||||
## Vergleich V1 (solo) gegen V1b (builtin)
|
||||
|
||||
+84
-42
@@ -15,7 +15,8 @@
|
||||
"tracelinks": "SyRS-001, SwRS-001, SwRS-002",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Einem Testbenutzer wird eine Gruppe ohne ein bestimmtes Recht zugewiesen; die zugehörige Funktion darf im Client nicht sichtbar/ausführbar sein.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-002",
|
||||
@@ -32,7 +33,8 @@
|
||||
"tracelinks": "SyRS-002, SwRS-003",
|
||||
"konsolidierung": "Kandidat: Gleiches Muster wiederkehrend bei Kalender (RIGHT_KALENDERANZEIGENEIGENE) und Mitarbeiterauslastung (RIGHT_MITARBEITERAUSLASTUNGNUREIGENEFILIALE) — im Zielsystem als generisches \"Sichtbarkeits-Scoping\" konsolidierbar.",
|
||||
"pruefidee": "Zwei Testbenutzer unterschiedlicher Filialen mit \"nur eigene Filiale\"-Recht dürfen jeweils nur Tickets ihrer eigenen Filiale in der Liste sehen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-003",
|
||||
@@ -49,7 +51,8 @@
|
||||
"tracelinks": "SyRS-003, SyRS-004, SwRS-004, SwRS-005",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Aus einem Auftrag wird ein Lieferschein und daraus eine Rechnung erzeugt; `GetRelatedItemsForObject` für die Rechnung muss Auftrag und Lieferschein als Ursprungsbelege zurückliefern.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-004",
|
||||
@@ -65,7 +68,8 @@
|
||||
"tracelinks": "SyRS-004, SwRS-005",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Für einen Auftrag mit einer Anzahlungsrechnung liefert `GetRelatedItemsForObject(Auftrag)` die Anzahlungsrechnung als verknüpftes Objekt.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-005",
|
||||
@@ -81,7 +85,8 @@
|
||||
"tracelinks": "SyRS-005, SwRS-006",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Ein neu angelegter Beleg hat Status \"offen\"; nach Stornierung liefert eine Statusabfrage \"storniert\".",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-006",
|
||||
@@ -97,7 +102,8 @@
|
||||
"tracelinks": "SyRS-006, SwRS-007",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zwei parallele Aufrufe von `GetNextNumber(updateDatabase:true)` für denselben Nummernkreis dürfen keine identische Nummer liefern (Lasttest mit paralleler Ausführung).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-007",
|
||||
@@ -114,7 +120,8 @@
|
||||
"tracelinks": "SyRS-007, SyRS-008, SwRS-008, SwRS-009",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Ein Ticket wird angelegt, bearbeitet, Zeit erfasst und abgeschlossen; jeder Schritt ist im Änderungsprotokoll nachvollziehbar.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-008",
|
||||
@@ -130,7 +137,8 @@
|
||||
"tracelinks": "SyRS-002, SwRS-009",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Testbenutzer mit EDIT_HELPDESK aber ohne CLOSE_REQUEST versucht, Status auf \"geschlossen\" zu setzen → erwartet: Fehler-Result, kein Speichern.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-009",
|
||||
@@ -146,7 +154,8 @@
|
||||
"tracelinks": "SyRS-009, SwRS-010",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Wareneingang über einen Lieferschein erhöht den Bestand des betroffenen Artikels am betroffenen Lagerort um die Liefermenge.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-010",
|
||||
@@ -164,7 +173,8 @@
|
||||
"tracelinks": "SyRS-010",
|
||||
"konsolidierung": "Kandidat: Partnerspezifische EDI-Module folgen strukturell ähnlichem Muster (Import/Connector-Klassen) — im Zielsystem als generisches EDI-Adapter-Framework konsolidierbar. [HYPOTHESE: nicht im Detail verglichen, ob die Partner-Implementierungen tatsächlich strukturell identisch sind — Bestätigung erfordert Tiefenanalyse je Partnermodul.]",
|
||||
"pruefidee": "Eine Testdatei im jeweiligen Partnerformat wird importiert; Ergebnis ist ein systemseitig referenzierbarer Beleg/Belegstatus.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-011",
|
||||
@@ -181,7 +191,8 @@
|
||||
"tracelinks": "SyRS-011, SyRS-002",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Ein Web-Account meldet sich in CentronNexus an und sieht ausschließlich für ihn freigegebene Artikel (Sonderpreise) im WebCart.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-012",
|
||||
@@ -197,7 +208,8 @@
|
||||
"tracelinks": "SyRS-012, SwRS-011",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Für ein beliebiges Modul existieren sowohl eine `BL{Modul}Logic`- als auch eine `WS{Modul}Logic`-Klasse, die dasselbe `I{Modul}Logic`-Interface implementieren.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-013",
|
||||
@@ -214,7 +226,8 @@
|
||||
"tracelinks": "SyRS-013",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Stichprobe von 20 zufälligen benutzersichtbaren Strings im WPF-Client: alle sind auf Deutsch vorhanden (Basis-resx).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-014",
|
||||
@@ -231,7 +244,8 @@
|
||||
"tracelinks": "SyRS-007, SwRS-008",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Eine bereits abgerechnete Zeitbuchung eines Tickets kann über EDIT_TIME nicht mehr gelöscht werden (erwarteter Fehler).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-001",
|
||||
@@ -247,7 +261,8 @@
|
||||
"tracelinks": "StRS-001; SwRS-001",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Direkter Aufruf von `CheckRightsFromUser` mit der I3D eines Rechts, das keiner Gruppe des Benutzers zugewiesen ist, liefert eine leere Liste.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-002",
|
||||
@@ -263,7 +278,8 @@
|
||||
"tracelinks": "StRS-002; SwRS-003",
|
||||
"konsolidierung": "Kandidat: identisches Scoping-Muster (All/OnlyOwn/OnlyOwnBranch) potenziell in weiteren Modulen (Kalender, Mitarbeiterauslastung) — nur für Helpdesk verifiziert, für andere Module [HYPOTHESE].",
|
||||
"pruefidee": "Benutzer mit SHOW_HELPDESK_ONLY_OWN_BRANCH erhält bei Ticketsuche ausschließlich Tickets seiner Filiale, auch bei explizitem Filterversuch auf andere Filialen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-003",
|
||||
@@ -279,7 +295,8 @@
|
||||
"tracelinks": "StRS-003; SwRS-004",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Für einen Lieferschein mit bekanntem Ursprungsauftrag und bekannter Folgerechnung liefert `GetRelatedItemsForObject` genau diese zwei Objekte mit korrektem IsOrigin-Wert.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-004",
|
||||
@@ -295,7 +312,8 @@
|
||||
"tracelinks": "StRS-003, StRS-004; SwRS-005",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Ein Datensatz in `ObjectExternalReferences` mit bekannter ExternalReferenceID liefert bei Abfrage den verknüpften internen Auftrag/Lieferschein.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-005",
|
||||
@@ -311,7 +329,8 @@
|
||||
"tracelinks": "StRS-005; SwRS-006",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Statischer Test: Serialisierung/Deserialisierung eines Belegs erlaubt keinen anderen Enum-Wert als die drei definierten.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-006",
|
||||
@@ -327,7 +346,8 @@
|
||||
"tracelinks": "StRS-006; SwRS-007",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Lasttest mit N parallelen Threads, die `GetNextNumber(updateDatabase:true)` für denselben Nummernkreis aufrufen: alle N Ergebnisse müssen paarweise verschieden sein.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-007",
|
||||
@@ -344,7 +364,8 @@
|
||||
"tracelinks": "StRS-003; SwRS-004",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Nach Änderung eines Belegs existiert ein neuer `ReceiptLog`-Eintrag mit korrektem Employee- und Zeitstempel-Wert.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-008",
|
||||
@@ -360,7 +381,8 @@
|
||||
"tracelinks": "StRS-008; SwRS-009",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Statuswechsel eines Tickets vom konfigurierten Abschlussstatus zurück auf \"in Bearbeitung\" führt zu `ClosedAt == null` nach dem Speichern.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-009",
|
||||
@@ -376,7 +398,8 @@
|
||||
"tracelinks": "StRS-009; SwRS-010",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Buchung eines Lieferscheinpostens mit abweichendem Einkaufspreis führt zu aktualisiertem `SecondaryStockArticle`-Preis für den betroffenen Artikel/Lagerort.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-010",
|
||||
@@ -392,7 +415,8 @@
|
||||
"tracelinks": "StRS-010; SwRS-004",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Für jeden Partnerordner existiert mindestens eine BL-Klasse mit Importmethode; Testnachricht des Partnerformats erzeugt einen validen internen Beleg.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-011",
|
||||
@@ -408,7 +432,8 @@
|
||||
"tracelinks": "StRS-011; SwRS-012",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Ein WebAccount ohne explizite WebAccountsRights-Zuweisung erhält bei `CheckWebRightsFromUser` eine leere Ergebnisliste, selbst wenn ein gleichnamiges internes Recht existiert.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-012",
|
||||
@@ -424,7 +449,8 @@
|
||||
"tracelinks": "StRS-012; SwRS-011",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Ein Modul mit `SupportsConnectionTypes = [SqlServer, CentronWebServices]` liefert bei beiden Verbindungsarten dieselben Testdaten für dieselbe Anfrage.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-013",
|
||||
@@ -440,7 +466,8 @@
|
||||
"tracelinks": "StRS-013",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Für eine resx-Datei ohne .en.resx-Pendant liefert die Lokalisierung zur Laufzeit den deutschen Text statt eines Fehlers/leeren Strings.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-014",
|
||||
@@ -457,7 +484,8 @@
|
||||
"tracelinks": "StRS-001; SwRS-013",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Nach Passwortänderung enthält die Datenbankspalte `Password` einen 40-stelligen Hex-String, kein Klartext.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-015",
|
||||
@@ -473,7 +501,8 @@
|
||||
"tracelinks": "SyRS-014; SwRS-013",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Setzen eines Passworts mit Länge < PasswordMinLength liefert Result mit Status Error und der genannten Fehlermeldung.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-001",
|
||||
@@ -490,7 +519,8 @@
|
||||
"tracelinks": "SyRS-001",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Unit-Test ruft CheckRightsFromUser mit einer Mischung aus zugewiesenen/nicht zugewiesenen Recht-IDs auf; Ergebnisliste enthält exakt die zugewiesene Teilmenge.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-002",
|
||||
@@ -506,7 +536,8 @@
|
||||
"tracelinks": "SyRS-001",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Simulation einer Exception innerhalb der Session-Erzeugung während `HasUserRight`-Aufruf: Rückgabewert ist `false`, keine Exception propagiert zum Aufrufer.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-003",
|
||||
@@ -522,7 +553,8 @@
|
||||
"tracelinks": "SyRS-002",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Für alle 2^3 Kombinationen der drei Basisrechte liefert die Methode den in der Tabelle der Fallunterscheidung dokumentierten Modus.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-004",
|
||||
@@ -539,7 +571,8 @@
|
||||
"tracelinks": "SyRS-003, SyRS-004, SyRS-010",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Für jeden in ReceiptProgressionBL verwendeten numerischen Code existiert ein korrespondierender, namentlich passender Enum-Wert in `CentronObjectKindNumeric` (Konsistenzprüfung Enum vs. SQL-Literale).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-005",
|
||||
@@ -555,7 +588,8 @@
|
||||
"tracelinks": "SyRS-003, SyRS-004",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Rechnung mit gesetztem `DownPaymentForOrderI3D` erscheint bei Abfrage der verknüpften Objekte des referenzierten Auftrags.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-006",
|
||||
@@ -571,7 +605,8 @@
|
||||
"tracelinks": "SyRS-005",
|
||||
"konsolidierung": "Kandidat: Zwei redundante Zuordnungen (Attribut + switch-Methode) für dieselbe Information — im Zielsystem auf eine einzige Quelle konsolidierbar.",
|
||||
"pruefidee": "Für jeden Enum-Wert liefern sowohl das Description-Attribut als auch `GetReceiptStateString()` denselben deutschen Text (Konsistenzprüfung der doppelten Definition).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-007",
|
||||
@@ -588,7 +623,8 @@
|
||||
"tracelinks": "SyRS-006",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zwei parallele Transaktionen mit demselben Ausgangswert `Current`: nur eine darf erfolgreich committen, die andere muss die Schleife erneut durchlaufen und einen anderen Wert erhalten.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-008",
|
||||
@@ -604,7 +640,8 @@
|
||||
"tracelinks": "StRS-014",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Suche nach der konkreten Prüfmethode (voraussichtlich in einer `HelpdeskTimer*BL`-Klasse) und Verifikation der Bedingung im Code als Folgeschritt.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-009",
|
||||
@@ -620,7 +657,8 @@
|
||||
"tracelinks": "SyRS-008",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Ticket im Abschlussstatus mit gesetztem ClosedAt wird auf \"in Bearbeitung\" umgestellt → nach Speichern ist ClosedAt == null.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-010",
|
||||
@@ -636,7 +674,8 @@
|
||||
"tracelinks": "SyRS-009",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zwei aufeinanderfolgende Wareneingänge mit unterschiedlichem Einkaufspreis führen zu einem im Artikel/Lagerort konsistent nachvollziehbaren, aktualisierten Preis (z. B. gleitender Durchschnitt oder letzter Preis – exakte Bewertungsmethode nicht Teil dieses Belegs).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-011",
|
||||
@@ -652,7 +691,8 @@
|
||||
"tracelinks": "SyRS-012",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Neues Test-Modul mit korrektem Namensschema wird ohne expliziten Registrierungsaufruf über `ClassContainer.Instance.WithInstance<I...Logic>()` auflösbar.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-012",
|
||||
@@ -668,7 +708,8 @@
|
||||
"tracelinks": "SyRS-011",
|
||||
"konsolidierung": "Kandidat: Zwei parallele, strukturell unterschiedliche Rechtemodelle (gruppenbasiert für AppUser, direkt für WebAccount) — im Zielsystem ggf. auf ein einheitliches RBAC-Modell konsolidierbar.",
|
||||
"pruefidee": "Datenmodellprüfung: `WebAccountsRights` besitzt keine Fremdschlüsselspalte auf eine Gruppentabelle (Strukturvergleich mit `Sichtrus`/`Sichmemb`).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-013",
|
||||
@@ -684,6 +725,7 @@
|
||||
"tracelinks": "SyRS-014",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zwei AppUser-Datensätze mit demselben Testpasswort erzeugen identische Werte in der Spalte `Password`.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
}
|
||||
]
|
||||
+7
@@ -2,6 +2,8 @@
|
||||
|
||||
Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`.
|
||||
|
||||
Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt.
|
||||
|
||||
### Verteilung über die Ebenen
|
||||
|
||||
| Ebene | Anzahl | Anteil |
|
||||
@@ -36,6 +38,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| Belege je Anforderung (Median) | 1,0 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 38 (90,5 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`.
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
@@ -53,5 +59,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) |
|
||||
| **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (20 risikorelevante Anforderungen, alle gedeckt) |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 42 von 42 mit Tracelinks (100,0 %) |
|
||||
|
||||
|
||||
+7
@@ -96,6 +96,8 @@ allen V1b-Laeufen, wo sie um bis zu Faktor 21,6 auseinanderlagen.
|
||||
|
||||
Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`.
|
||||
|
||||
Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt.
|
||||
|
||||
### Verteilung über die Ebenen
|
||||
|
||||
| Ebene | Anzahl | Anteil |
|
||||
@@ -132,6 +134,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| Belege je Anforderung (Median) | 1,0 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 80 (97,6 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`.
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
@@ -149,6 +155,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) |
|
||||
| **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (40 risikorelevante Anforderungen, alle gedeckt) |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 82 von 82 mit Tracelinks (100,0 %) |
|
||||
|
||||
## Vergleich V1 (solo) gegen V1b (builtin)
|
||||
|
||||
+164
-82
@@ -15,7 +15,8 @@
|
||||
"tracelinks": "SyRS-001, SyRS-002, SyRS-026",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer ohne die entsprechende Gruppenmitgliedschaft ruft eine rechtegeschützte Aktion auf (API und WPF) → Zugriff wird verweigert (403 bzw. Result.AsError mit RightCheckFailed).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-002",
|
||||
@@ -32,7 +33,8 @@
|
||||
"tracelinks": "SyRS-003, StRS-001",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Anmeldung als WebAccount und Aufruf einer internen Beleg-Ansichtsfunktion → Result.AsError mit RightCheckFailed und Text \"Web-Benutzer haben keine Berechtigung Belege einzusehen.\"",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-003",
|
||||
@@ -49,7 +51,8 @@
|
||||
"tracelinks": "SyRS-004, StRS-001",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer der Filiale A mit \"nur eigene Filiale\"-Recht versucht, einen Beleg der Filiale B zu bearbeiten → Fehlermeldung \"...einer anderen Filiale zu bearbeiten.\"",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-004",
|
||||
@@ -65,7 +68,8 @@
|
||||
"tracelinks": "SyRS-005, StRS-001",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Löschversuch der Gruppe \"Administratoren\" → Result.AsError; Versuch, ein nicht in der Whitelist enthaltenes Recht der Admin-Gruppe zu entziehen → Operation liefert false/keine Änderung.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-005",
|
||||
@@ -82,7 +86,8 @@
|
||||
"tracelinks": "SyRS-006",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Nach Zuweisung eines Rechts an eine Gruppe erscheint ein neuer Eintrag in GetAllAppRightLogs mit korrektem Beschreibungstext und Benutzerreferenz.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-006",
|
||||
@@ -100,7 +105,8 @@
|
||||
"tracelinks": "SyRS-007, SyRS-008",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Ein Angebot wird in einen Auftrag übernommen; GetReceiptForwardedInto(Angebot) liefert den erzeugten Auftrag als Ziel.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-007",
|
||||
@@ -117,7 +123,8 @@
|
||||
"tracelinks": "SyRS-009, StRS-006",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Ein stornierter Beleg kann nicht mehr als bezahlt markiert werden (Fehlermeldung); ein neu angelegter Beleg mit passender Zahlungsbedingung wird automatisch auf \"abgeschlossen\" gesetzt.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-008",
|
||||
@@ -134,7 +141,8 @@
|
||||
"tracelinks": "SyRS-010, SyRS-011, StRS-006",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zwei simultane Speichervorgänge im selben Nummernkreis führen zu zwei unterschiedlichen, gültigen Nummern (kein Duplikat in der Zieltabelle).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-009",
|
||||
@@ -151,7 +159,8 @@
|
||||
"tracelinks": "SyRS-012, StRS-006",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer A speichert einen Beleg; Benutzer B versucht anschließend, denselben (veralteten) Beleg mit alter ConcurrencyControlGuid zu speichern → Fehler \"was changed in the meantime\".",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-010",
|
||||
@@ -167,7 +176,8 @@
|
||||
"tracelinks": "SyRS-013, StRS-007",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer mit ausschließlich INCOMING_PAYMENT_TRANSACTIONS-Recht (ohne allgemeines Bearbeitungsrecht) kann einen Beleg als bezahlt markieren; derselbe Versuch an einem stornierten Beleg schlägt fehl.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-011",
|
||||
@@ -184,7 +194,8 @@
|
||||
"tracelinks": "SyRS-014, StRS-007",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Rechnung mit aktivierter ZUGFeRD-Einstellung erzeugen → resultierendes PDF enthält eingebettetes XML gemäß ZUGFeRD-Schema.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-012",
|
||||
@@ -202,7 +213,8 @@
|
||||
"tracelinks": "SyRS-015, StRS-001",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Signatureinstellungen (Zertifikat/TSA) werden von einem Benutzer ohne Administration.SETTINGS-Recht abgelehnt gespeichert; ein signiertes PDF weist eine gültige, prüfbare Signatur auf.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-013",
|
||||
@@ -219,7 +231,8 @@
|
||||
"tracelinks": "SyRS-016, StRS-012, StRS-020",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Aufruf der URL .../weboffer/{gültigesToken} ohne vorherige Anmeldung zeigt das zugehörige Angebot inklusive Mandantenbranding an; ein ungültiges/abgelaufenes Token verweigert den Zugriff (Detail-Mechanismus nicht verifiziert, siehe Hypothesen.md).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-014",
|
||||
@@ -236,7 +249,8 @@
|
||||
"tracelinks": "SyRS-017, SyRS-018",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Aufruf von DataSecurityExecuteCleanUp mit gültigen Rechten führt zu keiner beobachtbaren Datenänderung (Abgleich Datenbestand vor/nach Aufruf) → bestätigt Stub-Charakter.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-015",
|
||||
@@ -253,7 +267,8 @@
|
||||
"tracelinks": "SyRS-019, SyRS-020",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Ein Ticket mit IsOnlyInternalVisible=true zeigt den betreffenden Inhalt im Kundenportal nicht an; ein gesperrtes Ticket (LockUserName gesetzt) kann von einem zweiten Bearbeiter nicht gleichzeitig verändert werden (UI-seitige Prüfung, Detailmechanismus nicht vollständig verifiziert).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-016",
|
||||
@@ -270,7 +285,8 @@
|
||||
"tracelinks": "SyRS-021, StRS-015",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer ohne CanChangeDateInInvoices-Einstellung öffnet die Timer-Fakturierungs-Einstellungen für eine Rechnung → BillingDate-Feld ist deaktiviert, Hinweistext \"Sie besitzen nicht das Recht ... Datum der Rechnung nach neuer Version / bei Neuanlage ändern\" wird angezeigt.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-017",
|
||||
@@ -286,7 +302,8 @@
|
||||
"tracelinks": "SyRS-022",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zwei aufeinanderfolgende Wareneingangsbuchungen mit unterschiedlichem Preis auf denselben Artikel → RawEk2 entspricht nach der zweiten Buchung dem Preis der ersten Buchung.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-018",
|
||||
@@ -303,7 +320,8 @@
|
||||
"tracelinks": "SyRS-023",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Ein Mandant ohne Lizenz \"CentronInternal\" erhält bei Aufruf eines mit der Policy \"CentronHosted\" geschützten Endpunkts keinen Zugriff, unabhängig von individuellen Benutzerrechten.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-019",
|
||||
@@ -319,7 +337,8 @@
|
||||
"tracelinks": "SyRS-024, SyRS-025, StRS-001",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Aufruf eines geschützten Endpunkts ohne jegliches Authentifizierungsmerkmal → HTTP 401; Aufruf mit abgelaufenem JWT → 401 (ValidateLifetime=true).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-020",
|
||||
@@ -335,7 +354,8 @@
|
||||
"tracelinks": "SyRS-027, StRS-013",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zwei Mandanten mit unterschiedlich konfiguriertem Logo erzeugen sichtbar unterschiedliche Web-Angebots-Seiten.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-001",
|
||||
@@ -351,7 +371,8 @@
|
||||
"tracelinks": "StRS-001; SwRS-001, SwRS-002",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Unit-/Integrationstest: Benutzer mit Gruppenmitgliedschaft X, Gruppe X besitzt Recht Y → HasUserRight(User, Y)==true; Entzug des Rechts → false nach Cache-Invalidierung.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-002",
|
||||
@@ -368,7 +389,8 @@
|
||||
"tracelinks": "StRS-001; SwRS-003",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Integrationstest: Aufruf eines annotierten Endpunkts ohne Login → 401; mit Login aber ohne Recht → 403; mit Recht → 200.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-003",
|
||||
@@ -384,7 +406,8 @@
|
||||
"tracelinks": "StRS-002; SwRS-004",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "WebAccount-Login mit (fehlerhaft) hinterlegtem internen AppRight versucht Belegeinsicht → dennoch RightCheckFailed.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-004",
|
||||
@@ -400,7 +423,8 @@
|
||||
"tracelinks": "StRS-003; SwRS-005",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer ohne jegliches Bearbeitungsrecht → Meldung \"nicht das Recht ... zu bearbeiten\"; Benutzer mit Recht, aber falscher Filiale → Meldung \"... einer anderen Filiale zu bearbeiten\".",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-005",
|
||||
@@ -416,7 +440,8 @@
|
||||
"tracelinks": "StRS-004; SwRS-006",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Versuch, ein nicht in der Whitelist enthaltenes Recht (z. B. Rechteverwaltung selbst) von der Administratorengruppe zu entziehen → RemoveAssignGroupToRight liefert false.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-006",
|
||||
@@ -432,7 +457,8 @@
|
||||
"tracelinks": "StRS-005; SwRS-007",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Nach AddRightToRightGroup existiert genau ein neuer AppRightLog-Eintrag mit Kind=AddRightToGroup und korrektem Beschreibungstext.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-007",
|
||||
@@ -448,7 +474,8 @@
|
||||
"tracelinks": "StRS-006; SwRS-008",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Für jede Unterklasse von ReceiptBase existieren gültige Implementierungen der vier abstrakten Members (Compile-Time-Prüfung).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-008",
|
||||
@@ -464,7 +491,8 @@
|
||||
"tracelinks": "StRS-006; SwRS-009",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Position P eines Angebots wurde in einen aktiven Auftrag übernommen → Versuch, P aus dem Angebot zu entfernen, wird als \"removedPositionsThatCouldNotBeRemoved\" erkannt.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-009",
|
||||
@@ -480,7 +508,8 @@
|
||||
"tracelinks": "StRS-007; SwRS-010",
|
||||
"konsolidierung": "Kandidat: SyRS-013 (beide betreffen UpdateReceiptIsPaid, unterschiedliche Prüfaspekte derselben Methode – im Zielsystem ggf. als eine zusammengesetzte Regel modellieren)",
|
||||
"pruefidee": "UpdateReceiptIsPaid auf einem Canceled-Beleg → Result.AsError, kein Datenbank-Write.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-010",
|
||||
@@ -496,7 +525,8 @@
|
||||
"tracelinks": "StRS-008; SwRS-011, SwRS-012",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Lasttest: N parallele Aufrufe von GetNextNumber(..., updateDatabase:true) auf demselben Nummernkreis liefern N paarweise verschiedene Nummern.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-011",
|
||||
@@ -513,7 +543,8 @@
|
||||
"tracelinks": "StRS-008; SwRS-013",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zwei Filialen desselben Mandanten erzeugen unabhängig voneinander Rechnung Nr. 1000 ohne Kollision (unterschiedliche NumberGroup-Objekte).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-012",
|
||||
@@ -529,7 +560,8 @@
|
||||
"tracelinks": "StRS-009; SwRS-014",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Speichern mit veralteter ConcurrencyControlGuid → Fehler ChangedByOtherInstance; Speichern mit übersprungener Versionsnummer (z. B. v1→v3) → Fehler \"keine gültige Versionsnummer\".",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-013",
|
||||
@@ -545,7 +577,8 @@
|
||||
"tracelinks": "StRS-010; SwRS-010",
|
||||
"konsolidierung": "Kandidat: SyRS-009 (siehe dort)",
|
||||
"pruefidee": "Benutzer mit ausschließlich INCOMING_PAYMENT_TRANSACTIONS-Recht kann UpdateReceiptIsPaid erfolgreich ausführen, obwohl CanUserEditReceipt für ihn fehlschlägt.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-014",
|
||||
@@ -561,7 +594,8 @@
|
||||
"tracelinks": "StRS-011; SwRS-015",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Stornierte Rechnung mit aktivierter ZUGFeRD-Einstellung wird gedruckt → resultierendes PDF enthält KEINE ZUGFeRD-Struktur.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-015",
|
||||
@@ -577,7 +611,8 @@
|
||||
"tracelinks": "StRS-012; SwRS-016",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Auslesen der zugrunde liegenden ApplicationSettings-Datensätze außerhalb der BL zeigt Base64/verschlüsselten, nicht lesbaren Wert für Zertifikat und Passwort.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-016",
|
||||
@@ -593,7 +628,8 @@
|
||||
"tracelinks": "StRS-013; SwRS-017",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Aufruf der Route mit gültigem Token in einem Browser ohne bestehende Session zeigt den Beleg an.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-017",
|
||||
@@ -609,7 +645,8 @@
|
||||
"tracelinks": "StRS-014; SwRS-018",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer mit Recht, aber deaktiviertem Feature-Flag → \"Insufficient rights!\"; Benutzer ohne Recht, aber aktiviertem Flag → ebenfalls \"Insufficient rights!\".",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-018",
|
||||
@@ -625,7 +662,8 @@
|
||||
"tracelinks": "StRS-014; SwRS-018",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Vergleich des Datenbankinhalts (betroffene Tabellen) vor und nach Aufruf von DataSecurityExecuteCleanUp mit denselben Filterkriterien wie zuvor in GetDataSecurityCleanUpStats verwendet → keine Änderung erwartet (bestätigt Lücke).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-019",
|
||||
@@ -641,7 +679,8 @@
|
||||
"tracelinks": "StRS-015; SwRS-019",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Anlage eines neuen HelpdeskStateBase-Datensatzes über die Stammdatenverwaltung; neuer Status steht danach für Tickets zur Auswahl (Detailmechanismus der UI-Anbindung nicht vollständig verifiziert).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-020",
|
||||
@@ -657,7 +696,8 @@
|
||||
"tracelinks": "StRS-015; SwRS-020",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zwei Bearbeiter öffnen dasselbe Ticket; zweiter Bearbeiter erhält Hinweis auf Sperre durch ersten (LockUserName gesetzt).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-021",
|
||||
@@ -673,7 +713,8 @@
|
||||
"tracelinks": "StRS-016; SwRS-021",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Für ReceiptKind=InvoiceClass mit CanChangeDateInInvoices=false → BillingDateIsEnabled=false, Hinweistext enthält \"der Rechnung\"; für DeliveryListClass entsprechend \"des Lieferscheins\".",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-022",
|
||||
@@ -689,7 +730,8 @@
|
||||
"tracelinks": "StRS-017; SwRS-022",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Wareneingang mit Preis A, danach Wareneingang mit Preis B auf denselben Artikel im Hauptlager → nach zweiter Buchung: RawEk1=B, RawEk2=A.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-023",
|
||||
@@ -706,7 +748,8 @@
|
||||
"tracelinks": "StRS-018, StRS-019; SwRS-023",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Mandant ohne Lizenz CentronInternal ruft geschützten Endpunkt mit gültigem JWT eines berechtigten Benutzers auf → Zugriff dennoch verweigert.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-024",
|
||||
@@ -722,7 +765,8 @@
|
||||
"tracelinks": "StRS-019; SwRS-024",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Manuell abgelaufener JWT wird bei Aufruf eines geschützten Endpunkts mit 401 abgelehnt (ValidateLifetime).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-025",
|
||||
@@ -738,7 +782,8 @@
|
||||
"tracelinks": "StRS-019; SwRS-025",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Ein gültiger SecretKey ohne gültiges JWT erlaubt Zugriff auf ausschließlich SecretKey-geschützte Endpunkte, nicht auf JWT-geschützte Endpunkte (und umgekehrt).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-026",
|
||||
@@ -754,7 +799,8 @@
|
||||
"tracelinks": "StRS-001",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Controller mit [AuthorizeUserRight(SETTINGS)] und Action mit zusätzlichem [AuthorizeUserRight(ADVANCED_SETTINGS)]: Benutzer mit nur SETTINGS erhält 403 auf dieser Action.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-027",
|
||||
@@ -770,7 +816,8 @@
|
||||
"tracelinks": "StRS-020; SwRS-017",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Wechsel der BrandingConfig für einen Mandanten führt ohne Neubau der Anwendung zu geändertem Logo auf der Web-Angebots-Seite.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-028",
|
||||
@@ -786,7 +833,8 @@
|
||||
"tracelinks": "StRS-020",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Deployment desselben Images für einen Mandanten in einer anderen Zeitzone → Serverzeit bleibt Europe/Berlin (durch Log-Zeitstempel im Container zu verifizieren).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-029",
|
||||
@@ -802,7 +850,8 @@
|
||||
"tracelinks": "StRS-001; SwRS-001",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Performance-Test: N aufeinanderfolgende HasUserRight-Aufrufe für denselben Benutzer erzeugen genau einen SQL-Query (Query-Zähler-Messung).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-030",
|
||||
@@ -818,7 +867,8 @@
|
||||
"tracelinks": "StRS-018",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Start des gebauten Images ohne vorinstallierte .NET-Runtime auf dem Host → Anwendung startet erfolgreich (self-contained-Nachweis).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-031",
|
||||
@@ -835,7 +885,8 @@
|
||||
"tracelinks": "StRS-012",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Build ohne gültigen DevExpress-Lizenzschlüssel → Build- oder Laufzeitfehler in signatur-/reportbezogenen Funktionen (nicht im Rahmen dieser statischen Analyse ausführbar getestet).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-032",
|
||||
@@ -853,7 +904,8 @@
|
||||
"tracelinks": "StRS-018",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Migration einer einzelnen BL-Klasse mit Raw-SQL auf eine andere Datenbank ohne Anpassung der SQL-Strings schlägt fehl (z. B. IIF ist keine Standard-SQL-Funktion in PostgreSQL).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-033",
|
||||
@@ -870,7 +922,8 @@
|
||||
"tracelinks": "StRS-001, StRS-006 bis StRS-018",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Statische Codeanalyse: Anteil von BL-Methoden mit Rückgabetyp Result/Result\\<T\\> an rechteprüfenden/validierenden Methoden (Stichprobe zeigt nahezu 100 % in den analysierten Klassen).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-034",
|
||||
@@ -887,7 +940,8 @@
|
||||
"tracelinks": "StRS-018",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "n/a (dokumentierender Befund, keine funktionale Prüfidee) - relevanter Hinweis für Datenmigrationsplanung.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-001",
|
||||
@@ -903,7 +957,8 @@
|
||||
"tracelinks": "SyRS-001, SyRS-029",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Codeanalyse: keine weiteren Vorkommen von direktem SQL-Zugriff auf Sichtrus/Sichmemb außerhalb AppRightsBL im Backend-Quellcode.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-002",
|
||||
@@ -919,7 +974,8 @@
|
||||
"tracelinks": "SyRS-001",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer in zwei Gruppen mit überschneidenden Rechten → Ergebnisliste enthält jedes Recht nur gemäß SQL-JOIN-Semantik (Duplikate möglich, da kein DISTINCT im Statement).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-003",
|
||||
@@ -935,7 +991,8 @@
|
||||
"tracelinks": "SyRS-002",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Unit-Test des Filters mit gemocktem HttpContext ohne User → context.Result ist UnauthorizedResult; mit User ohne Recht → ForbidResult.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-004",
|
||||
@@ -951,7 +1008,8 @@
|
||||
"tracelinks": "SyRS-003",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Statischer Codepfad-Test: bei IsWebAccountLogin==true wird _specificLogics.Execute nicht erreicht (Branch-Coverage).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-005",
|
||||
@@ -967,7 +1025,8 @@
|
||||
"tracelinks": "SyRS-004",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Neue Testimplementierung von HasRightToEditReceipt für eine fiktive Belegart wird korrekt von CanUserEditReceipt verwendet, ohne dass die Methode selbst angepasst werden muss.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-006",
|
||||
@@ -983,7 +1042,8 @@
|
||||
"tracelinks": "SyRS-005",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Aufruf von RemoveAssignGroupToRight mit einer nicht in der Liste enthaltenen Recht-I3D und der Administratorengruppe → Rückgabewert false, keine Datenbankänderung.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-007",
|
||||
@@ -999,7 +1059,8 @@
|
||||
"tracelinks": "SyRS-006",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Für jede der sieben Operationen existiert ein Test, der nach Ausführung einen AppRightLog mit korrektem Kind-Wert erwartet.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-008",
|
||||
@@ -1015,7 +1076,8 @@
|
||||
"tracelinks": "SyRS-007",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Compile-Test: jede konkrete Receipt-Unterklasse implementiert alle vier abstrakten Members (Compiler erzwingt dies bereits strukturell).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-009",
|
||||
@@ -1031,7 +1093,8 @@
|
||||
"tracelinks": "SyRS-008",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Position in storniertem Folgebeleg → Entfernung aus Ursprungsbeleg wird nicht blockiert; Position in aktivem Folgebeleg → wird blockiert.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-010",
|
||||
@@ -1047,7 +1110,8 @@
|
||||
"tracelinks": "SyRS-009, SyRS-013",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Vier getrennte Testfälle, je einer pro Prüfschritt, der isoliert zum Fehlschlagen der Methode führt.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-011",
|
||||
@@ -1063,7 +1127,8 @@
|
||||
"tracelinks": "SyRS-010",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Manuelles Vorbelegen der Zieltabelle mit der rechnerisch nächsten Nummer → FindNextNumber überspringt diese und liefert die übernächste.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-012",
|
||||
@@ -1079,7 +1144,8 @@
|
||||
"tracelinks": "SyRS-010",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zwei simulierte parallele Aufrufe (z. B. über zwei Threads/Sessions) auf dieselbe NumberGroup → beide terminieren erfolgreich mit unterschiedlichem Ergebnis; kein Deadlock, keine Endlosschleife bei realistischer Last.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-013",
|
||||
@@ -1096,7 +1162,8 @@
|
||||
"tracelinks": "SyRS-011",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Speichern eines Belegs für den konfigurierten Vorlagen-Kunden → erzeugte Nummer stammt nachweislich nicht aus derselben Zählersequenz wie reguläre Belege desselben Typs.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-014",
|
||||
@@ -1112,7 +1179,8 @@
|
||||
"tracelinks": "SyRS-012",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Speichern eines Belegs mit Version=Vorgänger+2 → Fehlermeldung \"keine gültige Versionsnummer\"; Version=Vorgänger (Überschreiben) und Version=Vorgänger+1 → jeweils erfolgreich.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-015",
|
||||
@@ -1128,7 +1196,8 @@
|
||||
"tracelinks": "SyRS-014",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Rechnung mit global deaktiviertem, aber lokal aktiviertem ZUGFeRD → PDF enthält ZUGFeRD-Struktur (bestätigt ODER-Semantik der Aktivierungsquelle).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-016",
|
||||
@@ -1144,7 +1213,8 @@
|
||||
"tracelinks": "SyRS-015",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Direktes Auslesen der zugrunde liegenden ApplicationSettings-Zeile für PdfSigningCertificatePassword zeigt keinen erkennbaren Klartextwert.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-017",
|
||||
@@ -1160,7 +1230,8 @@
|
||||
"tracelinks": "SyRS-016, SyRS-027",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Aufruf mit syntaktisch validem, aber nicht existierendem Token → definiertes Fehlverhalten (z. B. leere Seite/Fehlermeldung; exakter Mechanismus nicht verifiziert, siehe Hypothesen.md).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-018",
|
||||
@@ -1176,7 +1247,8 @@
|
||||
"tracelinks": "SyRS-017, SyRS-018",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Aufruf von DataSecurityExecuteCleanUp mit denselben Filterkriterien wie eine zuvor als \"zu bereinigen\" ausgewiesene Statistik → betroffene Datensätze bleiben unverändert (Regressionstest zur Schließung dieser Lücke empfohlen).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-019",
|
||||
@@ -1192,7 +1264,8 @@
|
||||
"tracelinks": "SyRS-019",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Datenbankseitiges Anlegen eines neuen HelpdeskStateBase-Datensatzes wird von der Anwendung ohne Codeänderung akzeptiert (keine Enum-Validierung im Entitätscode erkennbar).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-020",
|
||||
@@ -1208,7 +1281,8 @@
|
||||
"tracelinks": "SyRS-020",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Serialisierung/Deserialisierung eines Helpdesk-Datensatzes bewahrt alle genannten Feldwerte verlustfrei (Struktur-Test).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-021",
|
||||
@@ -1224,7 +1298,8 @@
|
||||
"tracelinks": "SyRS-021",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Property-Change-Test: Setzen von ReceiptKind=InvoiceClass löst automatisch einen Aufruf von UpdateBillingDateIsEnabled aus (SetProperty-Callback, Z. 195-199 im Diff).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-022",
|
||||
@@ -1240,7 +1315,8 @@
|
||||
"tracelinks": "SyRS-022",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zwei Hauptlagerbuchungen mit identischem Preis → PurchasePrice bleibt unverändert, RawEk1/RawEk1Date werden dennoch aktualisiert (Else-Zweig Z. 3639-3651).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-023",
|
||||
@@ -1256,7 +1332,8 @@
|
||||
"tracelinks": "SyRS-023",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Unit-Test: HasLicense liefert false → context.HasSucceeded bleibt false nach Aufruf; HasLicense liefert true → context.HasSucceeded==true.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-024",
|
||||
@@ -1272,7 +1349,8 @@
|
||||
"tracelinks": "SyRS-024",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Token mit falscher Audience → Ablehnung (ValidateAudience); Token mit Claim \"sub\", DefaultMapInboundClaims=false → Claim bleibt \"sub\", nicht auf ClaimTypes.NameIdentifier gemappt.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-025",
|
||||
@@ -1289,7 +1367,8 @@
|
||||
"tracelinks": "SyRS-025",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Request mit korrektem SecretKey, aber ohne JWT/Ticket → Zugriff auf SecretKey-Policy-geschützte Endpunkte erfolgreich, auf JWT-geschützte Endpunkte weiterhin verweigert.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-026",
|
||||
@@ -1305,7 +1384,8 @@
|
||||
"tracelinks": "SyRS-033",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Stichprobenartige Codeanalyse über weitere *BL-Klassen außerhalb der explizit gelesenen Stichprobe bestätigt dasselbe Muster (Konsistenzprüfung, im Rahmen dieser Iteration nicht flächendeckend durchgeführt).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-027",
|
||||
@@ -1322,7 +1402,8 @@
|
||||
"tracelinks": "SyRS-033",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Codeanalyse: Anteil öffentlicher BL-Methoden mit Rückgabetyp Result/Result\\<T\\> in den analysierten Klassen (Stichprobe: deutlich überwiegend, exakte Quote nicht vollständig erhoben).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-028",
|
||||
@@ -1338,6 +1419,7 @@
|
||||
"tracelinks": "SyRS-007, SyRS-034",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Historische Konsistenzprüfung: keine doppelt vergebenen numerischen Werte in der Enum-Definition (Stichprobenprüfung während der Analyse ergab keine Duplikate, siehe Analysebericht Konsistenzcheck).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
}
|
||||
]
|
||||
+7
@@ -2,6 +2,8 @@
|
||||
|
||||
Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`.
|
||||
|
||||
Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt.
|
||||
|
||||
### Verteilung über die Ebenen
|
||||
|
||||
| Ebene | Anzahl | Anteil |
|
||||
@@ -38,6 +40,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| Belege je Anforderung (Median) | 1,0 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 80 (97,6 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`.
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
@@ -55,5 +61,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) |
|
||||
| **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (40 risikorelevante Anforderungen, alle gedeckt) |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 82 von 82 mit Tracelinks (100,0 %) |
|
||||
|
||||
|
||||
+7
@@ -97,6 +97,8 @@ Ohne Subagenten sind Haupt- und Gesamtwerte für `claude-sonnet-5` identisch.
|
||||
|
||||
Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`.
|
||||
|
||||
Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt.
|
||||
|
||||
### Verteilung über die Ebenen
|
||||
|
||||
| Ebene | Anzahl | Anteil |
|
||||
@@ -132,6 +134,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| Belege je Anforderung (Median) | 1,0 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 45 (75,0 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`.
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
@@ -149,6 +155,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) |
|
||||
| **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **verletzt** – 1 von 26 ungedeckt: SwRS-003 |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 59 von 60 mit Tracelinks (98,3 %) |
|
||||
|
||||
## V1-Reihe: fünf Messpunkte unter identischer Bedingung
|
||||
|
||||
+120
-60
@@ -15,7 +15,8 @@
|
||||
"tracelinks": "SyRS-001, SyRS-002",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Einem Testbenutzer wird gezielt ein Einzelrecht (z. B. ADD_NEW_HELPDESK) entzogen; Ticketanlage muss verweigert werden, während andere Helpdesk-Funktionen weiter verfügbar bleiben.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-002",
|
||||
@@ -32,7 +33,8 @@
|
||||
"tracelinks": "SyRS-001, SyRS-002",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zwei Benutzer derselben Gruppe, einer zusätzlich mit SHOW_HELPDESK_ONLY_OWN: Ersterer sieht alle Tickets der Filiale, Zweiterer nur eigene.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-003",
|
||||
@@ -49,7 +51,8 @@
|
||||
"tracelinks": "SyRS-003, SyRS-004",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Für jede Belegart existiert eine Entity-Klasse, die von ReceiptBase erbt und ReceiptKind/GetReceiptItems() implementiert (Code-Review/Reflektion).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-004",
|
||||
@@ -66,7 +69,8 @@
|
||||
"tracelinks": "SyRS-005, SwRS-005",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Nach Änderung eines Rechnungsfeldes existiert ein neuer Datensatz in RechKopfVersions mit dem vorherigen Wert und OriginalI3D-Referenz auf den aktuellen Datensatz.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-005",
|
||||
@@ -83,7 +87,8 @@
|
||||
"tracelinks": "SyRS-006, SyRS-007",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Kunde ruft Link auf, ändert Menge einer Position, klickt „Annehmen“ → Zustand AcceptWebReceiptWithChangeRequests wird gesetzt, keine automatische Auftragsanlage ohne weiteren Schritt (siehe SyRS-006).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-006",
|
||||
@@ -100,7 +105,8 @@
|
||||
"tracelinks": "SyRS-007, SyRS-008, SwRS-010",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Bei AllowAcceptReceiptWithoutSignature=false darf ReceiptBL.AcceptWebReceipt keinen Auftrag erzeugen, bevor der Signaturvorgang abgeschlossen ist (Statuscheck WebReceiptState.WebOfferSign vor Abschluss).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-007",
|
||||
@@ -118,7 +124,8 @@
|
||||
"tracelinks": "SyRS-007, SwRS-010",
|
||||
"konsolidierung": "Kandidat: StRS-006 (gleiche fachliche Funktion „Auftragserteilung“, unterschiedliche Ausprägung der Signaturpflicht – im Zielsystem als ein konfigurierbarer Ablauf statt zwei Codepfade zu modellieren)",
|
||||
"pruefidee": "Beleg mit AllowAcceptReceiptWithoutSignature=true: Nach Klick „Annehmen“ entsteht sofort ein Auftrag, WebReceiptState wird nicht auf WebOfferSign gesetzt.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-008",
|
||||
@@ -136,7 +143,8 @@
|
||||
"tracelinks": "SyRS-009, SyRS-010, SwRS-014",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Vertrag mit AutomatedBilling=true und BillingIntervalKind=Monthly erzeugt nach Ablauf des Intervalls automatisch eine neue Rechnung mit korrektem Betrag.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-009",
|
||||
@@ -152,7 +160,8 @@
|
||||
"tracelinks": "SyRS-010",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Vertrag mit ContingentLimitValue=100h und Verbrauch von 105h löst laut Konfiguration eine Zusatzberechnung/Benachrichtigung aus.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-010",
|
||||
@@ -169,7 +178,8 @@
|
||||
"tracelinks": "SyRS-011, SwRS-015, SwRS-016",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer ohne das entsprechende Recht öffnet Timer-Billing-Assistent für Rechnungen: Feld „Belegdatum“ ist deaktiviert, Info-Icon mit Tooltip „Sie besitzen nicht das Recht ... ist sichtbar.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-011",
|
||||
@@ -185,7 +195,8 @@
|
||||
"tracelinks": "SyRS-012",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Administrator legt neuen Status „Wartet auf Kunde“ an, weist ihn keinem der beiden Sondersettings zu: Status erscheint wählbar, löst aber keine Sonderlogik (Schließen/Reopen-Default) aus.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-012",
|
||||
@@ -201,7 +212,8 @@
|
||||
"tracelinks": "SyRS-012, SwRS-018",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Löschversuch eines Status, der auf 3 Tickets und 1 Task verwendet wird, liefert Fehlermeldung „... wird in 3 Tickets & 1 Task verwendet.“ und der Datensatz bleibt bestehen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-013",
|
||||
@@ -218,7 +230,8 @@
|
||||
"tracelinks": "SyRS-013, SyRS-014",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Import einer ALSO-CH-Auftragsbestätigungsdatei führt zu aktualisiertem Auftragsstatus im referenzierten c-entron-Auftrag ohne manuellen Eingriff.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-014",
|
||||
@@ -234,7 +247,8 @@
|
||||
"tracelinks": "SyRS-013",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Code-Inspektion von SupplierEdiBL.Komsa.cs bestätigt Fehlen einer Invoice-Verarbeitungsmethode.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-015",
|
||||
@@ -251,7 +265,8 @@
|
||||
"tracelinks": "SyRS-015, SyRS-016, SwRS-020, SwRS-021",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer ohne Lizenz OpenIDConnectAuthentication erhält bei OIDC-Login-Versuch den Fehler „No license for OpenIDConnectAuthentication“, unabhängig von einem gültigen Microsoft-Token.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-016",
|
||||
@@ -268,7 +283,8 @@
|
||||
"tracelinks": "SyRS-015, SyRS-017",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "LicenseManager.Instance.HasLicense(LicenseGuids.PasswordManager) liefert false für einen Kunden ohne diese Lizenz, UI-Modul „Passwort-Manager“ wird nicht angezeigt.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-017",
|
||||
@@ -285,7 +301,8 @@
|
||||
"tracelinks": "SyRS-018, SwRS-024",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Ribbon minimieren, Modul wechseln: aktiver Tab zeigt sichtbare Unterstreichung/Hervorhebung ohne Ribbon-Expansion.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-001",
|
||||
@@ -302,7 +319,8 @@
|
||||
"tracelinks": "StRS-001",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Direkter Webservice-Aufruf (unter Umgehung der UI) einer rechtebehafteten Methode ohne das erforderliche Recht muss serverseitig abgelehnt werden, auch wenn die UI die Aktion nicht anbietet.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-002",
|
||||
@@ -319,7 +337,8 @@
|
||||
"tracelinks": "StRS-002",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zwei Support-Mitarbeiter unterschiedlicher Filialen mit SHOW_HELPDESK_ONLY_OWN_BRANCH sehen bei identischer Suchanfrage jeweils nur Tickets ihrer eigenen Filiale.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-003",
|
||||
@@ -335,7 +354,8 @@
|
||||
"tracelinks": "StRS-003",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "SELECT * FROM Invoices liefert dieselben fachlichen Felder wie eine direkte Abfrage auf RechKopf, jedoch mit englischen Spaltennamen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-004",
|
||||
@@ -351,7 +371,8 @@
|
||||
"tracelinks": "StRS-003",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Ein neues Rechnungsfeld wird nur im View/Entity ergänzt (nicht im Repository): Wert lädt korrekt, geht aber nach dem nächsten Speichervorgang verloren (Regressionstest).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-005",
|
||||
@@ -367,7 +388,8 @@
|
||||
"tracelinks": "StRS-004",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Nach zwei aufeinanderfolgenden Änderungen an einem Vertrag existieren zwei Datensätze in VertragKopfVersions mit korrektem OriginalI3D-Bezug und vollständigen historischen Werten.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-006",
|
||||
@@ -383,7 +405,8 @@
|
||||
"tracelinks": "StRS-005",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zugriff auf `/weboffer/{Token}` mit geratenem/ungültigem Token liefert Fehlermeldung „Beleg konnte nicht geladen werden.“ statt Fremddaten.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-007",
|
||||
@@ -400,7 +423,8 @@
|
||||
"tracelinks": "StRS-005",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zweiter Aufruf von ChangeWebReceiptState nach bereits erfolgter Annahme wird serverseitig abgelehnt (Statuscheck), nicht nur clientseitig durch deaktivierte Buttons verhindert.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-008",
|
||||
@@ -416,7 +440,8 @@
|
||||
"tracelinks": "StRS-006",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Manipulierter API-Request, der versucht, direkt einen Auftrag ohne vorherigen Signatur-Callback zu erzeugen, wird von ReceiptBL abgelehnt, da der Beleg noch im Zustand WebOfferSign verharrt.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-009",
|
||||
@@ -432,7 +457,8 @@
|
||||
"tracelinks": "StRS-008",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Vertrag mit BillingIntervalKind=Monthly, AutomatedBilling=true: Am Fälligkeitstag entsteht ohne manuellen Eingriff eine neue Rechnung.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-010",
|
||||
@@ -448,7 +474,8 @@
|
||||
"tracelinks": "StRS-009",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Änderung der Menge eines kontingentrelevanten Beleg-Items löst Neuberechnung von ContingentBalanceUsedHours aus.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-011",
|
||||
@@ -464,7 +491,8 @@
|
||||
"tracelinks": "StRS-010",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Änderung des zugrunde liegenden Rechts wirkt sich unmittelbar (nach Cache-Refresh) sowohl im Timer-Billing als auch in anderen Belegdatums-Kontexten gleich aus.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-012",
|
||||
@@ -480,7 +508,8 @@
|
||||
"tracelinks": "StRS-011, StRS-012",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Ändern der Anwendungseinstellung HelpdeskClosedState auf einen anderen Status-I3D bewirkt sofort, dass GetClosedHelpdeskStatus() den neuen Status liefert.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-013",
|
||||
@@ -497,7 +526,8 @@
|
||||
"tracelinks": "StRS-013",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Aufruf von ApplyDistriToCentron mit EdiDataType=Alltron delegiert nachweislich an eine SupplierEdiBL.Alltron.cs-Methode (z. B. per Log-Eintrag oder Debugger).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-014",
|
||||
@@ -513,7 +543,8 @@
|
||||
"tracelinks": "StRS-013, StRS-014",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "EDI-Testdatei mit einer fehlerhaften und neun korrekten Positionszeilen: Neun Positionen werden verarbeitet, eine wird mit Fehlerprotokoll übersprungen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-015",
|
||||
@@ -529,7 +560,8 @@
|
||||
"tracelinks": "StRS-015",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Gültiges Microsoft-ID-Token, aber Mandant ohne Lizenz OpenIDConnectAuthentication → Login schlägt mit „No license for OpenIDConnectAuthentication“ fehl.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-016",
|
||||
@@ -545,7 +577,8 @@
|
||||
"tracelinks": "StRS-015",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer ändert seine Microsoft-E-Mail-Adresse (oid bleibt gleich): Login funktioniert unverändert.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-017",
|
||||
@@ -561,7 +594,8 @@
|
||||
"tracelinks": "StRS-015",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Ticket wird nach 31 Minuten Inaktivität bei nachfolgendem API-Call als abgelaufen erkannt und erfordert erneuten Login.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-018",
|
||||
@@ -577,7 +611,8 @@
|
||||
"tracelinks": "StRS-017",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Manuelle UI-Prüfung: Ribbon minimieren, mehrere Module durchklicken, aktives Modul muss stets erkennbar bleiben.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-019",
|
||||
@@ -593,7 +628,8 @@
|
||||
"tracelinks": "-",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Debug-Build sendet Testmail an externe.adresse@kunde.de: tatsächlicher Empfänger im Mailserver-Log ist test@nexoware.com.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-001",
|
||||
@@ -609,7 +645,8 @@
|
||||
"tracelinks": "SyRS-001",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Statische Code-Analyse: keine zwei Konstanten in UserRightsConst.cs besitzen denselben Integer-Wert.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-002",
|
||||
@@ -625,7 +662,8 @@
|
||||
"tracelinks": "SyRS-001",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Neue Codeverwendung einer obsoleten Konstante erzeugt eine Compiler-Warnung (CS0618), verhindert den Build aber nicht.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-003",
|
||||
@@ -641,7 +679,8 @@
|
||||
"tracelinks": "SyRS-001",
|
||||
"konsolidierung": "Kandidat: Vereinheitlichung der Rechteprüfung auf einen einzigen, schichtübergreifend wiederverwendbaren Mechanismus im Zielsystem (z. B. Policy-based Authorization statt drei paralleler APIs).",
|
||||
"pruefidee": "Code-Review: Für ein Beispielrecht wird geprüft, ob UI-Sichtbarkeitsprüfung und BL-Durchsetzungsprüfung unabhängig voneinander gepflegt werden (z. B. unterschiedliche Rechte-ID durch Copy-Paste-Fehler).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-004",
|
||||
@@ -657,7 +696,8 @@
|
||||
"tracelinks": "StRS-003",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Ein Beleg mit Number=-1 liefert IsTemplate=true; ein Beleg mit Number=0 oder positiv liefert IsTemplate=false.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-005",
|
||||
@@ -673,7 +713,8 @@
|
||||
"tracelinks": "StRS-003",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Für jeden Belegtyp lässt sich per Unit-Test verifizieren, dass State nur einen der drei Enum-Werte annehmen kann (Datenbankkonsistenzprüfung).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-006",
|
||||
@@ -689,7 +730,8 @@
|
||||
"tracelinks": "SyRS-007",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Ein Web-Angebot im Zustand WebOfferSign hat gleichzeitig ReceiptState.Active, bis die Signatur abgeschlossen ist.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-007",
|
||||
@@ -706,7 +748,8 @@
|
||||
"tracelinks": "StRS-005, SyRS-007",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Kunde ändert dieselbe Position zweimal (Menge 5 dann 3): Nach Annahme wird nur die letzte Änderung (3) im neuen Beleg übernommen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-008",
|
||||
@@ -722,7 +765,8 @@
|
||||
"tracelinks": "StRS-005",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Beleg mit AllowChangeQuantity=false, AllowChangeReceiptItemArticlePositionKind=true: Nach Annahme wird nur die Positionsart-Änderung übernommen, eine vom Kunden vorgenommene Mengenänderung wird verworfen (potenziell ohne Information an den Kunden – siehe Hypothesen.md).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-009",
|
||||
@@ -738,7 +782,8 @@
|
||||
"tracelinks": "StRS-005",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Race-Condition-Test: Change-Requests werden zwischen Klick „Annehmen“ und Serververarbeitung durch einen parallelen Prozess gelöscht → Server antwortet mit Fehler statt fälschlicher Vollannahme.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-010",
|
||||
@@ -754,7 +799,8 @@
|
||||
"tracelinks": "StRS-006, SyRS-008",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Nach Auslösung des Signaturvorgangs erhält sowohl die Kunden-E-Mail-Adresse (receiptPdfDocument.MailAddress) als auch die Mitarbeiter-E-Mail-Adresse je eine E-Mail mit unterschiedlichem Template.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-011",
|
||||
@@ -770,7 +816,8 @@
|
||||
"tracelinks": "StRS-006",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "OfferSignExpiredDateCount=7: Link ist am Tag 7 nutzbar, am Tag 8 liefert der Aufruf „Ungültiger Link“.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-012",
|
||||
@@ -786,7 +833,8 @@
|
||||
"tracelinks": "StRS-006",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Für jede der drei SignatureType-Varianten entsteht ein gültiges, im PDF sichtbares Signaturbild.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-013",
|
||||
@@ -803,7 +851,8 @@
|
||||
"tracelinks": "StRS-008",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Reflection-Test: ReceiptContract.BaseType == typeof(ReceiptBase); Properties enthalten BillingIntervalKind und MandatI3D.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-014",
|
||||
@@ -819,7 +868,8 @@
|
||||
"tracelinks": "StRS-008",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Rechnung aus Vertrag mit MandatI3D erzeugt einen SEPA-Lastschrift-Exportdatensatz mit korrekter Mandatsreferenz.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-015",
|
||||
@@ -835,7 +885,8 @@
|
||||
"tracelinks": "StRS-010, SyRS-011",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Wechsel von ReceiptKind=InvoiceClass zu DeliveryList bei fehlendem Recht: Hinweistext wechselt von „der Rechnung“ zu „des Lieferscheins“ ohne Seiten-Reload.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-016",
|
||||
@@ -851,7 +902,8 @@
|
||||
"tracelinks": "StRS-010",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "UseBillingDate=false, Benutzer ohne Recht: Kein Info-Icon sichtbar. UseBillingDate=true, gleicher Benutzer: Info-Icon erscheint.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-017",
|
||||
@@ -867,7 +919,8 @@
|
||||
"tracelinks": "StRS-011",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Upload eines 512x512-PNG-Icons resultiert in einem gespeicherten 16x16-BMP-Icon.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-018",
|
||||
@@ -883,7 +936,8 @@
|
||||
"tracelinks": "StRS-012",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Status wird nur in einer TaskManagementHelpdeskAction referenziert (0 Tickets): Löschung wird dennoch verweigert mit Meldung „... wird in 1 Task verwendet.“",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-019",
|
||||
@@ -899,7 +953,8 @@
|
||||
"tracelinks": "StRS-013",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Hinzufügen eines neuen Lieferanten erfordert laut Doku nur eine neue Datei `SupplierEdiBL.NeuerLieferant.cs` plus Erweiterung des Dispatch in ApplyDistriToCentron.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-020",
|
||||
@@ -915,7 +970,8 @@
|
||||
"tracelinks": "SyRS-016",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Unit-Test instanziiert OpenIdConnectAuthObject mit einer ClaimsIdentity, die einen \"oid\"-Claim enthält: SubjectIdentifier liefert exakt diesen Wert.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-021",
|
||||
@@ -931,7 +987,8 @@
|
||||
"tracelinks": "SyRS-015, SyRS-016",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Token ohne oid-Claim führt zu Log-Eintrag „Could not find subject identifier 'oid' in JWT claims.“ ohne DB-Zugriff (verifizierbar per SQL-Profiler/Mock).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-022",
|
||||
@@ -947,7 +1004,8 @@
|
||||
"tracelinks": "SyRS-017",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zwei aufeinanderfolgende API-Aufrufe im Abstand von 1 Minute lösen nur eine tatsächliche DB-Schreiboperation für ExpiryDate aus (per SQL-Profiler nachweisbar).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-023",
|
||||
@@ -963,7 +1021,8 @@
|
||||
"tracelinks": "SyRS-017",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Login mit ApplicationKind, der dem 24h-Fall zugeordnet ist, erzeugt ein Ticket mit ExpiryDate = jetzt + 1440 Minuten.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-024",
|
||||
@@ -979,6 +1038,7 @@
|
||||
"tracelinks": "StRS-017, SyRS-018",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Ribbon minimiert, verschiedene Module (auch mit abweichender visueller Struktur/Custom-Templates) angewählt: Unterstreichung erscheint in allen Fällen ohne Cast-Exception.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
}
|
||||
]
|
||||
+7
@@ -2,6 +2,8 @@
|
||||
|
||||
Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`.
|
||||
|
||||
Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt.
|
||||
|
||||
### Verteilung über die Ebenen
|
||||
|
||||
| Ebene | Anzahl | Anteil |
|
||||
@@ -37,6 +39,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| Belege je Anforderung (Median) | 1,0 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 45 (75,0 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`.
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
@@ -54,5 +60,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) |
|
||||
| **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **verletzt** – 1 von 26 ungedeckt: SwRS-003 |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 59 von 60 mit Tracelinks (98,3 %) |
|
||||
|
||||
|
||||
+7
@@ -97,6 +97,8 @@ Ohne Subagenten sind Haupt- und Gesamtwerte für `claude-sonnet-5` identisch.
|
||||
|
||||
Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`.
|
||||
|
||||
Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt.
|
||||
|
||||
### Verteilung über die Ebenen
|
||||
|
||||
| Ebene | Anzahl | Anteil |
|
||||
@@ -127,6 +129,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| Belege je Anforderung (Median) | 1 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 71 (97,3 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`.
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
@@ -144,6 +150,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) |
|
||||
| **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (40 risikorelevante Anforderungen, alle gedeckt) |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 73 von 73 mit Tracelinks (100,0 %) |
|
||||
|
||||
## V1-Reihe: fünf Messpunkte unter identischer Bedingung
|
||||
|
||||
+146
-73
@@ -15,7 +15,8 @@
|
||||
"tracelinks": "SyRS-01, SyRS-02",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Einen fixierten Auftrag ändern und prüfen, dass `Version` erhöht und der alte Datensatz weiterhin per `OriginalI3D`/Vorgängerversion referenzierbar ist.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-02",
|
||||
@@ -32,7 +33,8 @@
|
||||
"tracelinks": "SyRS-03, SyRS-04",
|
||||
"konsolidierung": "Kandidat: Analoge Stornoabläufe in OrderBL/OfferBL/DeliveryListBL/CreditVoucherBL wurden nicht im Detail geprüft (siehe Analysebericht.md) und sollten auf einheitliche Umsetzung verglichen werden.",
|
||||
"pruefidee": "Rechnung stornieren und prüfen: (a) neue Version wird angelegt, (b) State der neuen Version = 3, (c) Positionsmengen = 0, (d) Vorgängerversion bleibt abrufbar.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-03",
|
||||
@@ -49,7 +51,8 @@
|
||||
"tracelinks": "SyRS-05",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Für einen Kunden mit zwei offenen Lieferscheinen vor Stichtag und einem nach Stichtag prüfen, dass nur die beiden ersten in der Ergebnisliste erscheinen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-04",
|
||||
@@ -66,7 +69,8 @@
|
||||
"tracelinks": "SyRS-06",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Vertrag mit Beginn 01.01., LaufzeitArt=Monatlich, LaufzeitDauer=1 anlegen und prüfen, dass das berechnete nächste Datum der 01.02. ist.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-05",
|
||||
@@ -83,7 +87,8 @@
|
||||
"tracelinks": "SyRS-07, SyRS-08",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "TimerBilling-Einstellungsseite öffnen, `ReceiptKind` zwischen Rechnung/Lieferschein wechseln und prüfen, dass der Hinweistext bei fehlender Berechtigung/Einstellung erscheint.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-06",
|
||||
@@ -100,7 +105,8 @@
|
||||
"tracelinks": "SyRS-09, SyRS-10",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Einem Benutzer ein Recht ausschließlich über eine neue Gruppenzuordnung erteilen und prüfen, dass `HasUserRight` anschließend `true` liefert.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-07",
|
||||
@@ -118,7 +124,8 @@
|
||||
"tracelinks": "SyRS-11",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer ohne Recht „SETTINGS“, aber in Gruppe „Administratoren“, ruft geschützte Funktion auf und erhält Zugriff.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-08",
|
||||
@@ -135,7 +142,8 @@
|
||||
"tracelinks": "SyRS-12",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Einem WebAccount ein Web-Recht zuweisen und prüfen, dass dies keine Auswirkung auf interne `Sichtrus`-Rechte desselben zugrunde liegenden Kunden hat (und umgekehrt).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-09",
|
||||
@@ -152,7 +160,8 @@
|
||||
"tracelinks": "SyRS-13",
|
||||
"konsolidierung": "Kandidat: Einheitliches Cross-Cutting-Konzern-Pattern über alle sechs Beleg-BL-Klassen hinweg; im Zielsystem als zentraler Autorisierungsfilter statt Einzelprüfung je Methode konsolidierbar.",
|
||||
"pruefidee": "Als WebAccount mit `CustomerI3D=100` eine Abfrage mit `filter.CustomerI3D=200` senden und prüfen, dass die Ergebnisliste leer ist.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-10",
|
||||
@@ -169,7 +178,8 @@
|
||||
"tracelinks": "SyRS-14",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer ohne hinterlegten Schlüssel führt Validierung durch und erhält die definierte Fehlermeldung statt eines Erfolgs.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-11",
|
||||
@@ -186,7 +196,8 @@
|
||||
"tracelinks": "SyRS-15, SyRS-16, SyRS-17",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Mit gültigem Zertifikat und konfiguriertem TSA-Server ein PDF signieren und die Signatur inkl. Zeitstempel technisch verifizieren.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-12",
|
||||
@@ -202,7 +213,8 @@
|
||||
"tracelinks": "SyRS-18",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Einen neuen Ticketstatus mit eigenem Icon/Farbe anlegen und prüfen, dass er in der Statusauswahl eines Tickets erscheint, ohne dass Code geändert wurde.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-13",
|
||||
@@ -218,7 +230,8 @@
|
||||
"tracelinks": "SyRS-19",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer mit `OnlyOwnBranch` meldet sich an und prüft, dass nur Tickets der eigenen Niederlassung in der Liste erscheinen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-14",
|
||||
@@ -234,7 +247,8 @@
|
||||
"tracelinks": "SyRS-20",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Für einen Artikel mit `BarcodeScanen=1` zwei Barcodes erfassen und prüfen, dass der Bestand 2 beträgt, unabhängig vom `Bestand`-Feld in `NebenlagerArtikel`.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-15",
|
||||
@@ -250,7 +264,8 @@
|
||||
"tracelinks": "SyRS-21",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Kunde mit Rabatt=10% und Zahlungsziel „30 Tage netto“ anlegen; neuen Auftrag für diesen Kunden erstellen und prüfen, dass beide Werte im Beleg vorbelegt sind.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-16",
|
||||
@@ -266,7 +281,8 @@
|
||||
"tracelinks": "SyRS-22",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "`InvoiceReminderDays=14` konfigurieren, Rechnung anlegen und prüfen, dass `ReminderDate` = heute + 14 Tage beträgt; bei Einstellung 0/nicht gesetzt bleibt `ReminderDate` unverändert.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-17",
|
||||
@@ -283,7 +299,8 @@
|
||||
"tracelinks": "SyRS-23, SyRS-24",
|
||||
"konsolidierung": "Kandidat: Die drei Attribute teilen nahezu identische Filterlogik (Unterschied nur in Any/All/Single-Verknüpfung) und könnten im Zielsystem auf einen parametrisierten Autorisierungsfilter konsolidiert werden.",
|
||||
"pruefidee": "Endpunkt mit `[AuthorizeUserRight(X)]` ohne Session aufrufen → 401; mit Session aber ohne Recht X aufrufen → 403; mit Recht X aufrufen → 200.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-18",
|
||||
@@ -299,7 +316,8 @@
|
||||
"tracelinks": "SyRS-17",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "TSA-Passwort speichern und den Rohwert in der Einstellungstabelle prüfen — er darf nicht dem eingegebenen Klartext entsprechen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-01",
|
||||
@@ -315,7 +333,8 @@
|
||||
"tracelinks": "StRS-01",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Sequenzieller Aufruf beobachten (z. B. per Log/Debugger) und prüfen, dass alle drei Phasen in der genannten Reihenfolge durchlaufen werden.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-02",
|
||||
@@ -331,7 +350,8 @@
|
||||
"tracelinks": "StRS-01",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Beleg mit gebundenem Barcode neu versionieren und prüfen, dass ein Historieneintrag mit der alten Versionsnummer erhalten bleibt.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-03",
|
||||
@@ -347,7 +367,8 @@
|
||||
"tracelinks": "StRS-02",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "`CancelInvoice` aufrufen und Rückgabewert von `StoreAsset` sowie den persistierten Datensatz prüfen (State=3, alle Positionsmengen=0).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-04",
|
||||
@@ -363,7 +384,8 @@
|
||||
"tracelinks": "StRS-02",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "`State`-Werte 1, 2, 3 und z. B. 4 an der UI anzeigen lassen und die jeweilige Beschriftung/leere Anzeige prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-05",
|
||||
@@ -379,7 +401,8 @@
|
||||
"tracelinks": "StRS-03",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zwei Lieferscheine (vor/nach Stichtag) für denselben Kunden anlegen und prüfen, dass nur der Beleg vor dem Stichtag zurückgegeben wird.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-06",
|
||||
@@ -395,7 +418,8 @@
|
||||
"tracelinks": "StRS-04",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Vertrag mit `LaufzeitArt=null` anlegen und prüfen, dass keine Exception geworfen wird und kein Folgedatum berechnet wird.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-07",
|
||||
@@ -411,7 +435,8 @@
|
||||
"tracelinks": "StRS-05",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "`ReceiptKind` von Invoice auf DeliveryList umstellen und beobachten, dass `BillingDateIsEnabled`/`ShowBillingDateNoteEnabledInfo` neu ausgewertet werden.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-08",
|
||||
@@ -428,7 +453,8 @@
|
||||
"tracelinks": "StRS-05",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "`CanChangeDateInInvoices=false` setzen, ReceiptKind=Invoice wählen und prüfen, dass das Datumsfeld deaktiviert ist und der Hinweistext „... der Rechnung ...“ erscheint.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-09",
|
||||
@@ -444,7 +470,8 @@
|
||||
"tracelinks": "StRS-06",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer meldet sich an (Cache wird befüllt); Recht wird per Admin-Oberfläche entzogen; prüfen, ob und wann (gleiche Session/nach Neuanmeldung) `HasUserRight` das entzogene Recht noch als vorhanden meldet.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-10",
|
||||
@@ -460,7 +487,8 @@
|
||||
"tracelinks": "StRS-06",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer zwei Gruppen zuordnen, die ein gemeinsames Recht enthalten, und prüfen, dass es in der Ergebnisliste nur einmal vorkommt.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-11",
|
||||
@@ -477,7 +505,8 @@
|
||||
"tracelinks": "StRS-07",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Siehe StRS-07.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-12",
|
||||
@@ -493,7 +522,8 @@
|
||||
"tracelinks": "StRS-08",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Web-Recht für einen WebAccount setzen und prüfen, dass keine Zeile in `Sichtrus`/`Sichmemb` dafür angelegt wird.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-13",
|
||||
@@ -510,7 +540,8 @@
|
||||
"tracelinks": "StRS-09",
|
||||
"konsolidierung": "Kandidat: sechsfach dupliziertes Prüfmuster, siehe StRS-09.",
|
||||
"pruefidee": "Siehe StRS-09.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-14",
|
||||
@@ -526,7 +557,8 @@
|
||||
"tracelinks": "StRS-10",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Siehe StRS-10.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-15",
|
||||
@@ -542,7 +574,8 @@
|
||||
"tracelinks": "StRS-11",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Alle fünf Einstellungswerte setzen, Anwendung neu starten und prüfen, dass `GetPdfSigningSettings` dieselben Werte zurückliefert.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-16",
|
||||
@@ -558,7 +591,8 @@
|
||||
"tracelinks": "StRS-11",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer ohne Recht „SETTINGS“ ruft `SavePdfSigningSettings` auf und erhält `Result.AsError` mit Code `RightCheckFailed`.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-17",
|
||||
@@ -574,7 +608,8 @@
|
||||
"tracelinks": "StRS-11, StRS-18",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Siehe StRS-18.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-18",
|
||||
@@ -590,7 +625,8 @@
|
||||
"tracelinks": "StRS-12",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Siehe StRS-12.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-19",
|
||||
@@ -606,7 +642,8 @@
|
||||
"tracelinks": "StRS-13",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Siehe StRS-13.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-20",
|
||||
@@ -622,7 +659,8 @@
|
||||
"tracelinks": "StRS-14",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Siehe StRS-14.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-21",
|
||||
@@ -638,7 +676,8 @@
|
||||
"tracelinks": "StRS-15",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Siehe StRS-15.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-22",
|
||||
@@ -654,7 +693,8 @@
|
||||
"tracelinks": "StRS-16",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Siehe StRS-16.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-23",
|
||||
@@ -670,7 +710,8 @@
|
||||
"tracelinks": "StRS-17",
|
||||
"konsolidierung": "Kandidat: siehe SyRS-24 (gleiche Filterinfrastruktur, unterschiedliche Verknüpfung).",
|
||||
"pruefidee": "Siehe StRS-17.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-24",
|
||||
@@ -686,7 +727,8 @@
|
||||
"tracelinks": "StRS-17",
|
||||
"konsolidierung": "Kandidat: `AuthorizeUserRightAttribute`, `AuthorizeAnyUserRightAttribute` und `AuthorizeAllUserRightsAttribute` teilen fast identischen Aufbau (nur Any/All/Single-Verknüpfung unterscheidet sich) — im Zielsystem auf einen parametrisierten Filter konsolidierbar.",
|
||||
"pruefidee": "Attribut mit leerem Rechte-Array `[AuthorizeAnyUserRight()]` testen und prüfen, dass der Zugriff mit 403 verweigert wird (Fail-Closed-Verhalten).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-01",
|
||||
@@ -702,7 +744,8 @@
|
||||
"tracelinks": "SyRS-01",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Unit-Test: `asset.Version` vor/nach Aufruf vergleichen, Differenz muss exakt 1 sein.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-02",
|
||||
@@ -718,7 +761,8 @@
|
||||
"tracelinks": "SyRS-01",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Reflektion über eine beliebige abgeleitete Klasse (z. B. `Invoice`) prüfen, dass `State`/`OriginalI3D` vorhanden und vom Typ `int` sind.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-03",
|
||||
@@ -734,7 +778,8 @@
|
||||
"tracelinks": "SyRS-02",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Historieneintrag nach Versionswechsel abfragen und `Version`-Feld mit der tatsächlichen Belegversion zum Zeitpunkt der Erstellung vergleichen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-04",
|
||||
@@ -750,7 +795,8 @@
|
||||
"tracelinks": "SyRS-03",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Siehe SyRS-03.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-05",
|
||||
@@ -766,7 +812,8 @@
|
||||
"tracelinks": "SyRS-04",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Converter mit Werten 0,1,2,3,4 aufrufen und exakte Rückgabewerte prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-06",
|
||||
@@ -782,7 +829,8 @@
|
||||
"tracelinks": "SyRS-05",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Siehe SyRS-05.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-07",
|
||||
@@ -798,7 +846,8 @@
|
||||
"tracelinks": "SyRS-06",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Siehe SyRS-06.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-08",
|
||||
@@ -814,7 +863,8 @@
|
||||
"tracelinks": "SyRS-06",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Aufruf mit `receiptKind=Invoice` und `receiptKind=CreditVoucher` und Vergleich der jeweils ausgeführten Named Query (z. B. per SQL-Profiler).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-09",
|
||||
@@ -830,7 +880,8 @@
|
||||
"tracelinks": "SyRS-07",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "`ReceiptKind` zweimal auf denselben Wert setzen und prüfen, dass `UpdateBillingDateIsEnabled()` nur beim ersten (wertändernden) Aufruf ausgeführt wird.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-10",
|
||||
@@ -846,7 +897,8 @@
|
||||
"tracelinks": "SyRS-08",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Siehe SyRS-08.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-11",
|
||||
@@ -862,7 +914,8 @@
|
||||
"tracelinks": "SyRS-09",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zwei aufeinanderfolgende `HasUserRight`-Aufrufe für denselben Benutzer per SQL-Profiler beobachten; es darf nur eine `Sichtrus`/`Sichmemb`-Abfrage anfallen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-12",
|
||||
@@ -878,7 +931,8 @@
|
||||
"tracelinks": "SyRS-09",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "SQL direkt gegen Testdatenbestand ausführen und Ergebnis mit erwarteten Gruppenrechten abgleichen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-13",
|
||||
@@ -894,7 +948,8 @@
|
||||
"tracelinks": "SyRS-10",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Methode mit einem `AppUser`-Objekt aus einer bereits geschlossenen/fremden Session aufrufen und prüfen, dass kein `LazyInitializationException` auftritt.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-14",
|
||||
@@ -910,7 +965,8 @@
|
||||
"tracelinks": "SyRS-11",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Siehe SyRS-11.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-15",
|
||||
@@ -927,7 +983,8 @@
|
||||
"tracelinks": "SyRS-11",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Gruppe „Administratoren“ in Testsystem umbenennen und prüfen, dass `IsAdmin()` für ehemalige Mitglieder anschließend `false` liefert.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-16",
|
||||
@@ -943,7 +1000,8 @@
|
||||
"tracelinks": "SyRS-12",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Siehe SyRS-12.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-17",
|
||||
@@ -959,7 +1017,8 @@
|
||||
"tracelinks": "SyRS-12",
|
||||
"konsolidierung": "Kandidat: zwei Überladungen mit identischer Delegationslogik — im Zielsystem ggf. auf eine generische Signatur reduzierbar.",
|
||||
"pruefidee": "Beide Überladungen mit äquivalenten Werten aufrufen und identisches Ergebnis prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-18",
|
||||
@@ -975,7 +1034,8 @@
|
||||
"tracelinks": "SyRS-13",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Siehe SyRS-13.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-19",
|
||||
@@ -991,7 +1051,8 @@
|
||||
"tracelinks": "SyRS-13",
|
||||
"konsolidierung": "Kandidat: siehe SyRS-13.",
|
||||
"pruefidee": "Jede der fünf Dateien einzeln öffnen und die konkrete Bedingung mit dem Muster aus SwRS-18 vergleichen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-20",
|
||||
@@ -1007,7 +1068,8 @@
|
||||
"tracelinks": "SyRS-14",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Aufruf mit leerem Schlüssel prüft spezifische Fehlermeldung; Aufruf mit korrektem/falschem TOTP-Code prüft jeweiliges Ergebnis.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-21",
|
||||
@@ -1023,7 +1085,8 @@
|
||||
"tracelinks": "SyRS-14",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Named Queries im Mapping/Query-Katalog auffinden und deren SQL-Text auf Plausibilität (korrekte Tabelle/Spalte) prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-22",
|
||||
@@ -1039,7 +1102,8 @@
|
||||
"tracelinks": "SyRS-15",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Siehe SyRS-15.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-23",
|
||||
@@ -1055,7 +1119,8 @@
|
||||
"tracelinks": "SyRS-16",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Siehe SyRS-16.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-24",
|
||||
@@ -1071,7 +1136,8 @@
|
||||
"tracelinks": "SyRS-17",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Siehe SyRS-17.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-25",
|
||||
@@ -1087,7 +1153,8 @@
|
||||
"tracelinks": "SyRS-18",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Siehe SyRS-18.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-26",
|
||||
@@ -1103,7 +1170,8 @@
|
||||
"tracelinks": "SyRS-19",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Siehe SyRS-19.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-27",
|
||||
@@ -1119,7 +1187,8 @@
|
||||
"tracelinks": "SyRS-20",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Siehe SyRS-20.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-28",
|
||||
@@ -1135,7 +1204,8 @@
|
||||
"tracelinks": "SyRS-21",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Siehe SyRS-21.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-29",
|
||||
@@ -1151,7 +1221,8 @@
|
||||
"tracelinks": "SyRS-22",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Siehe SyRS-22.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-30",
|
||||
@@ -1167,7 +1238,8 @@
|
||||
"tracelinks": "SyRS-23",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Siehe SyRS-23.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-31",
|
||||
@@ -1183,6 +1255,7 @@
|
||||
"tracelinks": "SyRS-24",
|
||||
"konsolidierung": "Kandidat: nahezu identischer Aufbau beider Filterklassen (siehe SyRS-24).",
|
||||
"pruefidee": "Siehe SyRS-24.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
}
|
||||
]
|
||||
+7
@@ -2,6 +2,8 @@
|
||||
|
||||
Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`.
|
||||
|
||||
Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt.
|
||||
|
||||
### Verteilung über die Ebenen
|
||||
|
||||
| Ebene | Anzahl | Anteil |
|
||||
@@ -32,6 +34,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| Belege je Anforderung (Median) | 1 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 71 (97,3 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`.
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
@@ -49,5 +55,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) |
|
||||
| **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (40 risikorelevante Anforderungen, alle gedeckt) |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 73 von 73 mit Tracelinks (100,0 %) |
|
||||
|
||||
|
||||
+7
@@ -97,6 +97,8 @@ Ohne Subagenten sind Haupt- und Gesamtwerte für `claude-sonnet-5` identisch.
|
||||
|
||||
Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`.
|
||||
|
||||
Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt.
|
||||
|
||||
### Verteilung über die Ebenen
|
||||
|
||||
| Ebene | Anzahl | Anteil |
|
||||
@@ -133,6 +135,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| Belege je Anforderung (Median) | 1 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 42 (62,7 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`.
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
@@ -150,6 +156,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) |
|
||||
| **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **verletzt** – 5 von 31 ungedeckt: StRS-17, SyRS-05, SyRS-18, SwRS-10, SwRS-26 |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 67 von 67 mit Tracelinks (100,0 %) |
|
||||
|
||||
## V1-Reihe: fünf Messpunkte unter identischer Bedingung
|
||||
|
||||
+134
-67
@@ -14,7 +14,8 @@
|
||||
"tracelinks": "SyRS-01",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Für jede der sieben Belegarten prüfen, dass Kopf-Objekt Number, Date, State, BranchI3D, CurrencyI3D, Receiver konsistent befüllt und persistiert wird; Test: Angebot anlegen → in Auftrag übernehmen → Referenz auf Ursprungsangebot prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-02",
|
||||
@@ -31,7 +32,8 @@
|
||||
"tracelinks": "SyRS-02",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Beleg stornieren, danach Versuch `SetPaid` aufzurufen → erwartete Fehlermeldung mit Code `DefaultMessageCodes.ErrorMessage`.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-03",
|
||||
@@ -48,7 +50,8 @@
|
||||
"tracelinks": "SyRS-03",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Beleg zweimal ändern und speichern; prüfen, dass für jede Änderung ein neuer Datensatz mit inkrementierendem `OriginalI3D`-Bezug in der *Versions-Tabelle entsteht und alle Positionswerte identisch zum historischen Stand sind.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-04",
|
||||
@@ -65,7 +68,8 @@
|
||||
"tracelinks": "SyRS-04",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Suche mit `ReceiptKinds = [Invoice]` und einem Kunden ohne Anzeigerecht für Rechnungen ausführen → 0 Treffer für diese Belegart trotz vorhandener Datensätze.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-05",
|
||||
@@ -82,7 +86,8 @@
|
||||
"tracelinks": "SyRS-05",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Vertrag mit `BillingIntervalKind=Monthly`, `AutomatedBilling=true` anlegen, Systemdatum auf Fälligkeitstag stellen, automatisierten Lauf ausführen → genau eine neue Rechnung mit Bezug `ContractI3D` entsteht.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-06",
|
||||
@@ -99,7 +104,8 @@
|
||||
"tracelinks": "SyRS-06",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "RMM-Dienst simulieren als nicht erreichbar, Vertrag mit RMM-Artikelreferenz abrechnen lassen → Rechnungserstellung schlägt mit definierter Fehlermeldung fehl, keine Teil-Rechnung wird gespeichert.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-07",
|
||||
@@ -116,7 +122,8 @@
|
||||
"tracelinks": "SyRS-07",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Kunde mit Limit 1000€ (Netto) anlegen, offene Belege mit Summe 900€ anlegen, neuen Beleg über 200€ ohne Override speichern → Bestätigungsdialog mit korrekt berechneter Differenz (100€) erscheint; mit `SaveAlthoughCustomerLimitExceeded=true` wird gespeichert.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-08",
|
||||
@@ -133,7 +140,8 @@
|
||||
"tracelinks": "SyRS-08",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Codestellen suchen, die `LockOrderAfterDunningLevel` lesend mit dem tatsächlichen `DunningLevel` eines Kunden vergleichen (z. B. in Order-/DeliveryList-SpecificLogic oder UI-ViewModels); falls keine gefunden wird, mit Fachbereich klären, ob die Sperre nur UI-seitig/manuell umgesetzt ist.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-09",
|
||||
@@ -150,7 +158,8 @@
|
||||
"tracelinks": "SyRS-09",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer ohne Recht `CREATE_CUSTOMER` versucht Kunde anzulegen → `AccountBL` liefert `Result.AsError(\"Fehlende Rechte um Accounts zu erstellen\")`, kein Datensatz wird angelegt.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-10",
|
||||
@@ -167,7 +176,8 @@
|
||||
"tracelinks": "SyRS-10, SyRS-11",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer ohne Passwort-Manager-Lizenz ruft `GetPasswordManagerCustomersEmployeesRights` auf → Fehler \"Sie besitzen keine Lizenz für den Passwort-Manager.\"; Benutzer mit hinterlegtem 2FA-Schlüssel gibt falsche PIN ein → Fehler \"Die eingegebene PIN ist ungültig!\".",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-11",
|
||||
@@ -184,7 +194,8 @@
|
||||
"tracelinks": "SyRS-12",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Feature mit Lizenz-GUID ohne zugeordnete Lizenz beim Kunden aufrufen → `HasLicense` liefert `false`, UI blendet Funktion aus (Beispiel Passwort-Manager, siehe StRS-10).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-12",
|
||||
@@ -200,7 +211,8 @@
|
||||
"tracelinks": "SyRS-13",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Test-EDI-Datei eines unterstützten Lieferanten (z. B. Alltron-Lieferavis) einspielen → zugehöriger c-entron-Auftrag wird um Lieferinformationen (Sendungsverfolgung, Seriennummern) ergänzt, Verarbeitungsstatus wird in `EDILogBL` protokolliert.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-13",
|
||||
@@ -216,7 +228,8 @@
|
||||
"tracelinks": "SyRS-14",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Aktionspreis mit `EffectiveUntil` in der Vergangenheit anlegen → erscheint nicht im Preisspiegel; Versuch, Aktionspreis ohne Distributor zu speichern → Validierungsfehler.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-14",
|
||||
@@ -232,7 +245,8 @@
|
||||
"tracelinks": "SyRS-15",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer ohne `BOOK_ARTICLE_STOCK_INTO_NEGATIVE` versucht Abbuchung, die den Bestand unter 0 bringen würde → Aktion wird verweigert; Benutzer mit Recht kann die Buchung durchführen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-15",
|
||||
@@ -248,7 +262,8 @@
|
||||
"tracelinks": "SyRS-16",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Rechnung mit manipulierter Positionssumme (Abweichung > 3,00 vom Kopfbetrag) exportieren → Export schlägt mit Fehler fehl; Abweichung ≤ 3,00 → Export mit Warnung und korrigiertem Wert.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-16",
|
||||
@@ -265,7 +280,8 @@
|
||||
"tracelinks": "SyRS-17",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "In DEBUG-Build eine Mail an \"kunde@fremdefirma.de\" auslösen → tatsächlicher Empfänger ist \"test@nexoware.com\"; Mail an \"kollege@nexoware.com\" bleibt unverändert.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-17",
|
||||
@@ -281,7 +297,8 @@
|
||||
"tracelinks": "SyRS-18",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Ein Modul mit beiden Implementierungen identifizieren (z. B. `IAccountContractsLogic`) und prüfen, dass beide Implementierungen dieselbe Methode mit identischer Rückgabestruktur anbieten.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-18",
|
||||
@@ -298,7 +315,8 @@
|
||||
"tracelinks": "SyRS-19",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Suchfilter mit SQL-Metazeichen (`'; DROP TABLE ...`) in `SearchText` befüllen → Query wird als Parameterwert behandelt, keine strukturelle Änderung der Abfrage; Penetrationstest mit automatisiertem SQLi-Scanner auf Such-Endpunkt.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "StRS-19",
|
||||
@@ -315,7 +333,8 @@
|
||||
"tracelinks": "SyRS-20",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Stichprobenprüfung von 20 zufällig gewählten Fehlermeldungen/UI-Strings auf deutsche Sprache und Vorhandensein einer `.en.resx`-Übersetzung.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-01",
|
||||
@@ -331,7 +350,8 @@
|
||||
"tracelinks": "StRS-01",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Für alle sieben Belegarten per Reflection prüfen, dass sie von `ReceiptBase` erben und keine der Basiseigenschaften \"shadowen\"/überschreiben.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-02",
|
||||
@@ -348,7 +368,8 @@
|
||||
"tracelinks": "StRS-02",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Automatisierter Test: Beleg canceln, `SetPaid(true)` aufrufen → Fehler; Beleg mit State=Active, `SetPaid(true)` → State wird Completed und Log-Eintrag `CreateSetAsPaidEntry` wird erzeugt.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-03",
|
||||
@@ -365,7 +386,8 @@
|
||||
"tracelinks": "StRS-03",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Schema-Diff zwischen `AngKopf` und `AngKopfVersions` (bzw. `VertragPos`/`VertragPosVersions`) automatisiert prüfen: alle Spalten aus der Basistabelle (außer I3D) müssen 1:1 in der Versionstabelle vorhanden sein.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-04",
|
||||
@@ -381,7 +403,8 @@
|
||||
"tracelinks": "StRS-04",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Lasttest: Suche über alle sieben Belegarten mit großem Datenbestand (>100.000 Belege je Art) ausführen, Antwortzeit und Einhaltung des 5-Minuten-Timeouts messen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-05",
|
||||
@@ -397,7 +420,8 @@
|
||||
"tracelinks": "StRS-05",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Verträge mit unterschiedlichen Intervallkombinationen (z. B. Monthly/1, Monthly/3, Yearly/1) anlegen und den automatisierten Lauf für verschiedene Stichtage simulieren; erwartete Rechnungstermine mit tatsächlich erzeugten vergleichen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-06",
|
||||
@@ -413,7 +437,8 @@
|
||||
"tracelinks": "StRS-06",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Integrationstest mit simuliertem RMM-Dienstausfall: (a) Vertrag mit RMM-Artikelreferenzen → Exception und Log-Eintrag; (b) Vertrag ohne RMM-Bezug → Rechnung wird trotz RMM-Ausfall normal erstellt.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-07",
|
||||
@@ -429,7 +454,8 @@
|
||||
"tracelinks": "StRS-07",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Regressionstest mit mehrstufiger Belegkette (Angebot→Auftrag→Rechnung), bei dem derselbe Betrag nicht doppelt ins Limit einfließt (Prüfung `GetLimitUsedInOriginReceipts`-Abzug).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-08",
|
||||
@@ -445,7 +471,8 @@
|
||||
"tracelinks": "StRS-08",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Gezielte Codesuche nach lesendem Zugriff auf `LockOrderAfterDunningLevel` außerhalb von Zuweisung/Mapping; Rückfrage an Fachbereich, ob die Sperre ausschließlich manuell (Mitarbeiterhinweis) erfolgt.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-09",
|
||||
@@ -461,7 +488,8 @@
|
||||
"tracelinks": "StRS-09",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer mit 3 angefragten Rechten, von denen er nur 1 besitzt, aufrufen → Rückgabemenge enthält exakt dieses eine Recht.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-10",
|
||||
@@ -477,7 +505,8 @@
|
||||
"tracelinks": "StRS-10",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Direkter Webservice-Aufruf ohne UI (z. B. via Testclient) gegen einen Kunden ohne Passwort-Manager-Lizenz → Fehlerantwort mit `LicenseNotFound`, keine Daten im Response-Body.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-11",
|
||||
@@ -493,7 +522,8 @@
|
||||
"tracelinks": "StRS-10",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "PIN-Test mit korrektem TOTP-Wert (aus demselben Secret berechnet) → Erfolg; mit falschem/abgelaufenem Wert → \"Die eingegebene PIN ist ungültig!\"; Benutzer ohne Schlüssel → spezifischer Hinweistext.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-12",
|
||||
@@ -509,7 +539,8 @@
|
||||
"tracelinks": "StRS-11",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Lizenzserver offline simulieren → `HasLicense` liefert weiterhin Werte aus `FileLicenseCache`; Lizenz mit `count=3` grenzt eine vierte Nutzung ab (siehe Beispiel MyDay-Import in Dokumentation).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-13",
|
||||
@@ -525,7 +556,8 @@
|
||||
"tracelinks": "StRS-12",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Für jede in der Tabelle als \"✗\" markierte Kombination (z. B. Komsa+Invoice) prüfen, dass das System dies erkennt und keinen Verarbeitungsversuch unternimmt, statt eine Ausnahme unbehandelt zu werfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-14",
|
||||
@@ -541,7 +573,8 @@
|
||||
"tracelinks": "StRS-13",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Aktionspreis mit `EffectiveFrom > EffectiveUntil` speichern → Validierungsfehler; Aktionspreis mit `EffectiveUntil = gestern` → wird im Preisspiegel nicht angezeigt.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-15",
|
||||
@@ -557,7 +590,8 @@
|
||||
"tracelinks": "StRS-14",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Für jedes der 10 Rechte einen Benutzer ohne dieses Recht testen und sicherstellen, dass das zugehörige Flag `false` ist und die serverseitige Aktion verweigert wird (nicht nur UI-Ausblendung).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-16",
|
||||
@@ -573,7 +607,8 @@
|
||||
"tracelinks": "StRS-15",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "E-Rechnung mit Reverse-Charge-Fall exportieren → Steuerkategorie \"AE\" mit Hinweistext \"Steuerschuldnerschaft...\"; Testfall mit absichtlicher Rundungsdifferenz von 3,50 → Export schlägt fehl.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-17",
|
||||
@@ -589,7 +624,8 @@
|
||||
"tracelinks": "StRS-16",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Unit-Test: `ValidateAddress(\"kunde@fremd.de\")` in simuliertem DEBUG-Kontext → liefert `test@nexoware.com`; `ValidateAddress(\"kollege@nexoware.com\")` → liefert unverändert.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-18",
|
||||
@@ -605,7 +641,8 @@
|
||||
"tracelinks": "StRS-17",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Für ein bestehendes Modul (`IAccountContractsLogic`) beide Implementierungen gegen dieselbe Testsuite laufen lassen und identisches Verhalten (bei identischen Daten) verifizieren.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-19",
|
||||
@@ -622,7 +659,8 @@
|
||||
"tracelinks": "StRS-18",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Statische Codeanalyse (z. B. Regex-Suche nach String-Konkatenation mit `filter.` in SQL-Strings) über alle `*SearchConfiguration`- und `*BL`-Klassen; ergänzend automatisierter SQLi-Test gegen Such-Endpunkte.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SyRS-20",
|
||||
@@ -638,7 +676,8 @@
|
||||
"tracelinks": "StRS-19",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Stichprobe: für N zufällige Keys aus `LocalizedStrings.resx` prüfen, ob ein entsprechender Key in `LocalizedStrings.en.resx` existiert (Vollständigkeitsquote ermitteln).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-01",
|
||||
@@ -654,7 +693,8 @@
|
||||
"tracelinks": "SyRS-01",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Vererbungshierarchie aller Klassen mit Namensmuster `Receipt*` per Reflection prüfen: alle erben transitiv von `ReceiptBase`.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-02",
|
||||
@@ -670,7 +710,8 @@
|
||||
"tracelinks": "SyRS-01, SyRS-03",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Neues Feld nur in View + Entity ergänzen (nicht im Repository) → Wert wird nach Speichern+Neuladen NICHT persistiert; Regressionstest als Vorlage für künftige Feldänderungen einrichten.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-03",
|
||||
@@ -686,7 +727,8 @@
|
||||
"tracelinks": "SyRS-02",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Compile-Test: `default: throw new ArgumentOutOfRangeException()` in `GetReceiptStateString` deckt auf, wenn ein neuer Enum-Wert ohne Anpassung eingeführt wird.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-04",
|
||||
@@ -702,7 +744,8 @@
|
||||
"tracelinks": "SyRS-02",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Fehlermeldungstext exakt gegen Testfall abgleichen (inkl. Tippfehler-Erkennung als Regressionsschutz gegen unbeabsichtigte Textänderung); parallele Änderung mit veraltetem `ConcurrencyControlGuid` → Fehler `ChangedByOtherInstance`.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-05",
|
||||
@@ -718,7 +761,8 @@
|
||||
"tracelinks": "SyRS-03",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Automatisiertes Schema-Diff-Skript zwischen jeder `*Kopf`/`*Pos`-Tabelle und ihrer `*Versions`-Entsprechung als CI-Check.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-06",
|
||||
@@ -734,7 +778,8 @@
|
||||
"tracelinks": "SyRS-03",
|
||||
"konsolidierung": "Kandidat: SwRS-05 (gemeinsame Testbasis Schema+Kopiervorgang)",
|
||||
"pruefidee": "Beleg mit 5 Positionen zweimal ändern → 2 Kopf-Versionsdatensätze, 10 Positions-Versionsdatensätze mit korrektem `KopfVersionsI3D`-Bezug je Änderungszeitpunkt.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-07",
|
||||
@@ -750,7 +795,8 @@
|
||||
"tracelinks": "SyRS-04",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Filter setzen, der von genau einer von sieben Belegarten unterstützt wird → Ergebnis enthält ausschließlich Treffer dieser einen Belegart, keine Fehlermeldung für die anderen sechs.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-08",
|
||||
@@ -766,7 +812,8 @@
|
||||
"tracelinks": "SyRS-04, SyRS-09",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Benutzer ohne `ShowRight` für Verträge sucht mit `ReceiptKinds` leer (alle Belegarten) → Ergebnisliste enthält keine Vertragsbelege, auch wenn diese existieren.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-09",
|
||||
@@ -782,7 +829,8 @@
|
||||
"tracelinks": "SyRS-05",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Vertrag mit allen Kontingent-Feldern befüllen, Serialisierung/Deserialisierung (DTO-Mapping) auf Vollständigkeit prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-10",
|
||||
@@ -798,7 +846,8 @@
|
||||
"tracelinks": "SyRS-05",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Codereview/Komponententest: `AutomaticFacturaBL.Contracts.cs` auf Vorhandensein der beschriebenen Verantwortlichkeiten (Fälligkeitsselektion, RMM-Aufruf, Kontingent-Update) prüfen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-11",
|
||||
@@ -814,7 +863,8 @@
|
||||
"tracelinks": "SyRS-06",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Rechnungsvorlage mit Platzhalter in Position 3 von 6 → RMM-Positionen erscheinen an Position 3; Vorlage ohne Platzhalter → RMM-Positionen erscheinen bei Position (Anzahl-2).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-12",
|
||||
@@ -830,7 +880,8 @@
|
||||
"tracelinks": "SyRS-06",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Zwei Testfälle wie in SyRS-06 beschrieben, zusätzlich Prüfung der geloggten Fehlermeldung (`_logger.Error(errorMsg)`).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-13",
|
||||
@@ -846,7 +897,8 @@
|
||||
"tracelinks": "SyRS-07",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Beleg über 500€ anlegen (Limitverbrauch 500€), danach auf 600€ ändern und erneut speichern → Limitverbrauch insgesamt 600€, nicht 1100€.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-14",
|
||||
@@ -863,7 +915,8 @@
|
||||
"tracelinks": "SyRS-07, SyRS-08",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Feldweise Persistenztest: alle genannten Felder setzen, speichern, neu laden, Werte vergleichen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-15",
|
||||
@@ -879,7 +932,8 @@
|
||||
"tracelinks": "SyRS-08",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Vollständige Volltextsuche über die gesamte Codebasis (auch WPF.UI-ViewModels, Reports, gespeicherte Prozeduren) nach `LockOrderAfterDunningLevel`; falls keine Durchsetzung gefunden wird, Rückfrage an Fachbereich/Produktverantwortliche.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-16",
|
||||
@@ -895,7 +949,8 @@
|
||||
"tracelinks": "SyRS-09",
|
||||
"konsolidierung": "Kandidat: SwRS-08 (beide nutzen Rechteprüfung als Vorfilter, aber unterschiedliche Aufrufer/Mechanik — AppRightsBL arbeitet auf App-Usern, ReceiptSearcher auf konfigurierten ShowRight-Werten)",
|
||||
"pruefidee": "Unit-/Integrationstest mit bekannter Testdatenbank: Benutzer mit 2 von 5 angefragten Rechten → Rückgabe enthält exakt 2 IDs.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-17",
|
||||
@@ -912,7 +967,8 @@
|
||||
"tracelinks": "SyRS-09",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Statische Codeanalyse: Suche nach numerischen Literalen in `HasUserRight(...)`/`CheckRightsFromUser(...)`-Aufrufen als Verstoß gegen die Konvention.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-18",
|
||||
@@ -928,7 +984,8 @@
|
||||
"tracelinks": "SyRS-10",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Alle öffentlichen Methoden von `PasswordManagerBL` auflisten und prüfen, ob jede davon dieselbe Lizenzprüfung am Anfang durchführt (Konsistenzprüfung, da nur eine Methode im Detail gelesen wurde — siehe Analysebericht/Lücken).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-19",
|
||||
@@ -944,7 +1001,8 @@
|
||||
"tracelinks": "SyRS-11",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Drei Testfälle: kein Schlüssel hinterlegt, korrekte PIN, falsche PIN → jeweils erwartetes Result-Objekt.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-20",
|
||||
@@ -961,7 +1019,8 @@
|
||||
"tracelinks": "SyRS-12",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Drei Testfälle mit präparierten Lizenzdaten: keine Lizenz, unbegrenzte Lizenz, Lizenz mit count=3 → jeweils erwartetes Result-Verhalten.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-21",
|
||||
@@ -977,7 +1036,8 @@
|
||||
"tracelinks": "SyRS-13",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Neue Testlieferant-Integration nach Schema hinzufügen und prüfen, dass `ApplyDistriToCentron` sie ohne Änderung an bestehenden Partial-Classes korrekt dispatcht.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-22",
|
||||
@@ -993,7 +1053,8 @@
|
||||
"tracelinks": "SyRS-13",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Für jede der 7×4 theoretisch möglichen Kombinationen dokumentieren/testen, ob sie unterstützt wird (Abgleich mit Tabelle \"Document Types Supported\").",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-23",
|
||||
@@ -1009,7 +1070,8 @@
|
||||
"tracelinks": "SyRS-14",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Speicherversuch mit leerem Distributor → Fehler; mit `EffectiveFrom` nach `EffectiveUntil` → Fehler; gültiger Datensatz → erfolgreich gespeichert und im Preisspiegel sichtbar bei aktuellem Datum im Bereich.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-24",
|
||||
@@ -1025,7 +1087,8 @@
|
||||
"tracelinks": "SyRS-15",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Für jedes der 11 Rechte einzeln: Benutzer ohne dieses (aber mit allen anderen) Recht → nur das zugehörige Flag ist `false`.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-25",
|
||||
@@ -1041,7 +1104,8 @@
|
||||
"tracelinks": "SyRS-16",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Drei Testfälle: Abweichung 0,00 (kein Hinweis), 2,50 (Warnung + Korrektur), 5,00 (Fehler, kein Export).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-26",
|
||||
@@ -1057,7 +1121,8 @@
|
||||
"tracelinks": "SyRS-16",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Je einen Testfall pro Kategorie (Standard, steuerfrei Inland, innergemeinschaftlich, Export, Reverse Charge) mit erwartetem Code und Hinweistext abgleichen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-27",
|
||||
@@ -1073,7 +1138,8 @@
|
||||
"tracelinks": "SyRS-17",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Randfalltests: leere Adresse, Adresse \"NEXOWARE.COM\"-Großschreibung, Adresse ohne @-Zeichen.",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
},
|
||||
{
|
||||
"id": "SwRS-28",
|
||||
@@ -1089,6 +1155,7 @@
|
||||
"tracelinks": "SyRS-18",
|
||||
"konsolidierung": "nein",
|
||||
"pruefidee": "Codebase-weite Suche nach Interfaces mit Suffix `Logic`, die NICHT dem Muster `I*Logic`/`BL*Logic`/`WS*Logic` folgen, als Qualitätsindikator für Konventionsabweichungen (siehe Konsolidierungshinweis Analysebericht).",
|
||||
"qm": ""
|
||||
"qm": "",
|
||||
"uebernahme": ""
|
||||
}
|
||||
]
|
||||
+7
@@ -2,6 +2,8 @@
|
||||
|
||||
Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`.
|
||||
|
||||
Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt.
|
||||
|
||||
### Verteilung über die Ebenen
|
||||
|
||||
| Ebene | Anzahl | Anteil |
|
||||
@@ -38,6 +40,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| Belege je Anforderung (Median) | 1 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 42 (62,7 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`.
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
@@ -55,5 +61,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf
|
||||
| **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) |
|
||||
| **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **verletzt** – 5 von 31 ungedeckt: StRS-17, SyRS-05, SyRS-18, SwRS-10, SwRS-26 |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 67 von 67 mit Tracelinks (100,0 %) |
|
||||
|
||||
|
||||
Reference in New Issue
Block a user