24 KiB
Modultestplan– Fakturierungssystem
SE1 Team 2 – Hochschule Mannheim
Christopher Lampert
11.06.2026
Kundenverwaltung
Die folgenden Modultests prüfen die fachlichen Anforderungen des Moduls Kundenverwaltung. Die Testfälle sind so formuliert, dass sie ohne GUI-Abhängigkeiten als automatisierte JUnit-Tests umgesetzt werden können. Die Zuordnung zu den Anforderungen gewährleistet die Traceability zwischen Anforderungen und Tests. Die Anforderungen BA-KV-01 bis BA-KV-04 sowie GR-05 und NF-ARCH-01 werden vollständig abgedeckt.
Testfälle
| Testfall-ID | Testziel / Beschreibung | Vorbedingungen | Testschritte | Erwartetes Ergebnis | Abgedeckte Anforderungen |
|---|---|---|---|---|---|
| MT-KV-01 | Kunde mit vollständigen Pflichtattributen anlegen | Kein Kunde mit derselben ID vorhanden | Kundenobjekt mit Firmenname, Straße, PLZ und Ort anlegen und speichern | Kunde wird gespeichert und ist in der Kundenliste vorhanden | BA-KV-01 |
| MT-KV-02 | Kunde ohne Firmenname bzw. Nachname anlegen | System betriebsbereit | Kundenobjekt ohne Firmenname/Nachname speichern | Speicherung wird abgelehnt, Fehlermeldung wird erzeugt | BA-KV-01 |
| MT-KV-03 | Kunde ohne Straße anlegen | System betriebsbereit | Kundenobjekt ohne Straßenangabe speichern | Speicherung wird abgelehnt, Fehlermeldung wird erzeugt | BA-KV-01 |
| MT-KV-04 | Kunde mit ungültigem E-Mail-Format anlegen | System betriebsbereit | Kundenobjekt mit E-Mail „kunde@“ speichern | Speicherung wird abgelehnt, da das E-Mail-Format ungültig ist | BA-KV-01 |
| MT-KV-05 | Vorhandenen Kunden bearbeiten | Kunde existiert bereits im System | Telefonnummer des Kunden ändern und speichern | Geänderte Telefonnummer wird gespeichert und angezeigt | BA-KV-02 |
| MT-KV-06 | Persistenz geänderter Kundendaten prüfen | Kunde existiert bereits | Kundendaten ändern, speichern und erneut aus der Datenhaltung laden | Geänderte Daten bleiben unverändert erhalten | BA-KV-02, NF-ARCH-01 |
| MT-KV-07 | Kunde über Namen suchen | Kunde „Muster GmbH“ vorhanden | Suche mit Suchbegriff „Muster“ ausführen | Kunde wird gefunden und zurückgegeben | BA-KV-03 |
| MT-KV-08 | Kunde über Kundennummer suchen | Kunde mit bekannter Kundennummer vorhanden | Suche über Kundennummer ausführen | Passender Kunde wird gefunden | BA-KV-03 |
| MT-KV-09 | Nicht vorhandenen Kunden suchen | Gesuchter Kunde existiert nicht | Suche mit unbekanntem Namen oder unbekannter Kundennummer durchführen | Leeres Suchergebnis bzw. Hinweis „Kein Kunde gefunden“ | BA-KV-03 |
| MT-KV-10 | Nicht referenzierten Kunden löschen | Kunde existiert und wird von keinem Dokument verwendet | Löschvorgang ausführen und anschließend Suche starten | Kunde wird gelöscht und kann nicht mehr gefunden werden | BA-KV-04 |
| MT-KV-11 | Referenzierten Kunden löschen | Kunde wird in Angebot, Auftragsbestätigung, Lieferschein oder Rechnung verwendet | Löschvorgang ausführen | Löschung wird abgewiesen, Kunde bleibt erhalten | BA-KV-04, GR-05 |
Abdeckungsübersicht
| Anforderung | Abgedeckte Testfälle |
|---|---|
| BA-KV-01 Kunde anlegen | MT-KV-01 bis MT-KV-04 |
| BA-KV-02 Kunde bearbeiten | MT-KV-05, MT-KV-06 |
| BA-KV-03 Kunde suchen | MT-KV-07 bis MT-KV-09 |
| BA-KV-04 Kunde löschen | MT-KV-10, MT-KV-11 |
| GR-05 Stammdatenschutz | MT-KV-11 |
| NF-ARCH-01 Persistenz | MT-KV-06 |
Produktverwaltung
Die folgenden Modultests prüfen die fachlichen und systemtechnischen Anforderungen des Moduls Produktverwaltung. Die Testfälle sind so formuliert, dass sie ohne GUI-Abhängigkeiten als automatisierte JUnit-Tests direkt gegen die Geschäftslogik (ProductService) und Datenhaltung (ProductRepository) umgesetzt werden können. Die Zuordnung zu den Anforderungen gewährleistet die vollständige Traceability.
Testfälle
| Testfall-ID | Testziel / Beschreibung | Vorbedingungen | Testschritte | Erwartetes Ergebnis | Abgedeckte Anforderungen |
|---|---|---|---|---|---|
| MT-PV-01 | Produkt mit vollständigen Pflichtattributen anlegen | Kein Produkt mit derselben ID vorhanden | Produktobjekt mit Produkt-ID, Bezeichnung, Netto-Einzelpreis und Mehrwertsteuersatz anlegen und speichern | Produkt wird erfolgreich in der Liste erfasst und persistent gespeichert | F-SH-PV-01 |
| MT-PV-02 | Produkt ohne Bezeichnung anlegen | System betriebsbereit | Produktobjekt ohne Bezeichnung speichern | Speicherung wird abgelehnt, eine Fehlermeldung wird erzeugt | F-SH-PV-01 |
| MT-PV-03 | Produkt ohne Netto-Einzelpreis anlegen | System betriebsbereit | Produktobjekt ohne Preisangabe speichern | Speicherung wird abgelehnt, eine Fehlermeldung wird erzeugt | F-SH-PV-01 |
| MT-PV-04 | Produkt mit negativem Preis ablehnen | System betriebsbereit | Produktobjekt mit einem Preis kleiner als 0,00 Euro speichern | Speicherung wird blockiert, eine Fehlermeldung wird erzeugt | F-SH-PV-06 |
| MT-PV-05 | Produkt mit Preis von exakt Null Euro anlegen | System betriebsbereit | Produktobjekt mit einem Preis von exakt 0,00 Euro speichern | Speicherung wird akzeptiert, das Produkt wird angelegt | F-SH-PV-06 |
| MT-PV-06 | Bestehende Produktattribute bearbeiten | Produkt existiert bereits im System | Werte für Bezeichnung, Beschreibung oder Kategorie ändern und speichern | Geänderte Attribute werden übernommen und aktualisiert angezeigt | F-SH-PV-02 |
| MT-PV-07 | Validierung der maximalen Beschreibungslänge | Produkt existiert bereits im System | Beschreibung mit einer Länge von mehr als 500 Zeichen füllen und speichern | Speicherung wird wegen Überschreitung der Zeichengrenze abgewiesen | F-SH-PV-02 |
| MT-PV-08 | Produkt über die Bezeichnung suchen | Produkte „Schraube M6“ und „SCHRAUBE M8“ vorhanden | Suche mit dem Suchbegriff „schraube“ ausführen | Beide Produkte werden unabhängig von Groß-/Kleinschreibung im Suchergebnis zurückgegeben | F-SH-PV-05 |
| MT-PV-09 | Produktsuche ohne Treffer ausführen | Gesuchtes Produkt existiert nicht im System | Suche mit einem unbekannten Begriff durchführen | Ein leeres Suchergebnis wird zurückgegeben | F-SH-PV-05 |
| MT-PV-10 | Nicht referenziertes Produkt erfolgreich löschen | Produkt existiert und wird in keinem Beleg verwendet | Löschvorgang für die Produkt-ID ausführen und anschließend Suche starten | Produkt wird gelöscht und kann nicht mehr gefunden werden | F-SH-PV-03 |
| MT-PV-11 | Referenziertes Produkt gegen Löschung sperren | Produkt wird in Angebot, Auftragsbestätigung, Lieferschein oder Rechnung verwendet | Löschvorgang für die Produkt-ID ausführen | Löschung wird abgewiesen, Produkt bleibt unverändert im System erhalten | F-SH-PV-03, GR-05 |
| MT-PV-12 | Persistenz der Produktstammdaten nach Neustart prüfen | System betriebsbereit | Ein Produkt anlegen, speichern und die Daten erneut aus der Datenhaltung laden | Daten bleiben nach dem Neuladen vollständig und unverändert erhalten | NF-SH-ARCH-01 |
Abdeckungsübersicht
| Anforderung | Abgedeckte Testfälle |
|---|---|
| F-SH-PV-01 Produkt anlegen | MT-PV-01 bis MT-PV-03 |
| F-SH-PV-02 Produkt bearbeiten | MT-PV-06, MT-PV-07 |
| F-SH-PV-03 Produkt löschen | MT-PV-10, MT-PV-11 |
| F-SH-PV-04 Übersichtsliste anzeigen | MT-PV-01 |
| F-SH-PV-05 Produktsuche | MT-PV-08, MT-PV-09 |
| F-SH-PV-06 Validierung Preisbereich | MT-PV-04, MT-PV-05 |
| GR-05 Stammdatenschutz | MT-PV-11 |
| NF-SH-ARCH-01 Persistenz (JSON) | MT-PV-12 |
Dokumentenprozess
Die folgenden Modultests prüfen die fachlichen Anforderungen des Moduls Dokumentenprozess. Die Testfälle sind so formuliert, dass sie ohne GUI-Abhängigkeiten direkt als JUnit-Tests gegen DokumentService, DokumentRepository, NumberGenerator, FakeProductLookup und FakeCustomerLookup umgesetzt werden können. Dadurch wird die Traceability zwischen Pflichtenheft-Anforderungen, testbaren Abnahmekriterien und Modultests sichergestellt. Die Tests decken die Dokumentenkette Angebot -> Auftragsbestätigung -> Lieferschein -> Rechnung sowie Nummernvergabe, Statusregeln, Summenberechnung, Preis-Snapshots, PDF-Export und Stammdatenreferenzen ab.
Testfälle
Testfall-ID Testziel / Beschreibung Vorbedingungen Testschritte Erwartetes Ergebnis Abgedeckte Anforderungen MT-DP-01 Angebot mit vorhandenem Kunden und Positionen anlegen Kunde 10001 sowie Produkte 20001 und 20002 sind über FakeCustomerLookup und FakeProductLookup vorhanden erstelleAngebot(10001, Positionen mit 2x Produkt 20001 und 1x Produkt 20002) aufrufen Angebot wird gespeichert, besitzt Status OFFEN, Datum LocalDate.now(), zwei Positionen und eine Nummer im Format A-yyyy-nnnn PH-DP-01, PH-DP-14, PH-DP-16 MT-DP-02 Summenberechnung im Angebot prüfen Positionen: 2 x 100,00 EUR mit 19 % MwSt. und 1 x 50,00 EUR mit 7 % MwSt. sind im Angebot enthalten berechneSummen() bzw. die Angebotserstellung ausführen Netto-Summe beträgt 250,00 EUR, USt.-Summe beträgt 41,50 EUR und Brutto-Summe beträgt 291,50 EUR PH-DP-01, PH-DP-08, PH-DP-16 MT-DP-03 Fortlaufende Angebotsnummern vergeben Nummernkreis für das aktuelle Jahr ist leer Zwei Angebote nacheinander erzeugen Die Angebote erhalten unterschiedliche und fortlaufende Nummern, z. B. A-2026-0001 und A-2026-0002 PH-DP-02, PH-DP-16 MT-DP-04 Offenes Angebot bearbeiten und überführtes Angebot sperren Ein Angebot im Status OFFEN und ein Angebot im Status UEBERFUEHRT existieren Beim offenen Angebot Position ändern; beim überführten Angebot aktualisiereAngebot(...) aufrufen Bearbeitung bei OFFEN ist erfolgreich; bei UEBERFUEHRT wird eine IllegalStateException ausgelöst und das Angebot bleibt unverändert PH-DP-03, PH-DP-16 MT-DP-05 Auftragsbestätigung aus offenem Angebot erzeugen Ein offenes Angebot mit zwei Positionen existiert erstelleAuftragsbestaetigung(angebotsNr) aufrufen Auftragsbestätigung wird mit eigener Nummer im Format AB-yyyy-nnnn gespeichert, referenziert die Angebotsnummer und übernimmt Positionen und Summen unverändert PH-DP-04, PH-DP-16 MT-DP-06 Doppelte Auftragsbestätigung verhindern Für ein Angebot existiert bereits eine Auftragsbestätigung erstelleAuftragsbestaetigung(angebotsNr) erneut aufrufen Der zweite Erzeugungsversuch wird mit DuplicateDocumentException abgelehnt; es wird keine zweite Auftragsbestätigung gespeichert PH-DP-05, PH-DP-16 MT-DP-07 Lieferschein aus bestätigter Auftragsbestätigung erzeugen Eine Auftragsbestätigung im Status BESTAETIGT existiert erstelleLieferschein(auftragsNr, lieferdatum) aufrufen Lieferschein wird mit Nummer im Format LS-yyyy-nnnn, Lieferdatum, AB-Referenz, übernommenen Mengen und Status GELIEFERT gespeichert PH-DP-06, PH-DP-16 MT-DP-08 Lieferschein ohne Preisfelder bereitstellen Ein Lieferschein wurde aus einer Auftragsbestätigung erzeugt LieferscheinDto.from(lieferschein) oder Exportmodell erzeugen DTO bzw. Exportmodell enthält Produktbezeichnung und Menge, aber keine Einzelpreise, Netto-, USt.- oder Bruttowerte PH-DP-07, PH-DP-16 MT-DP-09 Rechnung aus geliefertem Lieferschein erzeugen Ein Lieferschein im Status GELIEFERT mit Kunde und Positionen existiert erstelleRechnung(lieferscheinNr) aufrufen Rechnung wird mit Nummer im Format R-yyyy-nnnn, Rechnungsdatum, Lieferscheinreferenz, Kunde, Leistungsdatum, Pflichtangaben, Summen und Status FESTGESCHRIEBEN gespeichert PH-DP-08, PH-DP-09, PH-DP-11, PH-DP-16 MT-DP-10 Fehlende Rechnungspflichtangaben ablehnen Kunde oder Rechnung enthält unvollständige Pflichtangaben, z. B. fehlende Rechnungsanschrift oder Steuernummer erstelleRechnung(lieferscheinNr) aufrufen Validierungsfehler bzw. ValidationException wird ausgelöst; die Rechnung wird nicht gespeichert PH-DP-09, PH-DP-16 MT-DP-11 Fortlaufende und lückenlose Rechnungsnummern vergeben Drei unterschiedliche gelieferte Lieferscheine existieren Für alle drei Lieferscheine jeweils eine Rechnung erzeugen Die Rechnungen erhalten fortlaufende Nummern ohne Lücke, z. B. R-2026-0001, R-2026-0002 und R-2026-0003 PH-DP-10, PH-DP-16 MT-DP-12 Festgeschriebene Rechnung gegen Änderungen sperren Eine gespeicherte und festgeschriebene Rechnung existiert Änderung an Positionen, Summen oder Pflichtangaben versuchen und Rechnung erneut laden Änderungsversuch wird abgelehnt; die erneut geladene Rechnung ist unverändert PH-DP-11, PH-DP-16 MT-DP-13 Preis- und MwSt.-Snapshot im Dokument sichern Ein Produkt hat beim Erstellen des Angebots den Preis 100,00 EUR und 19 % MwSt.; danach wird der Produktpreis im FakeProductLookup auf 120,00 EUR geändert Angebot erstellen, Produktpreis ändern, Angebot erneut aus dem Repository laden Die Dokumentposition enthält weiterhin den ursprünglichen Snapshot mit 100,00 EUR und 19 % MwSt.; spätere Produktänderungen beeinflussen das Dokument nicht PH-DP-14, PH-DP-16 MT-DP-14 PDF-Export erzeugt Datei Ein Angebot, Lieferschein oder eine Rechnung existiert; temporäres Testverzeichnis ist verfügbar exportiereAlsPdf(dokumentNr) ausführen Ein Path wird zurückgegeben; die PDF-Datei existiert, ist größer als 0 Byte und enthält Dokumentnummer sowie Dokumenttyp PH-DP-12, PH-DP-16 MT-DP-15 Dokumentenübersicht pro Kunde liefern Dokumente für Kunde 1 und Kunde 2 existieren im Repository findByKunde(1) aufrufen Es werden nur Dokumente von Kunde 1 zurückgegeben; fremde Kundendokumente fehlen; Sortierung nach Datum und Dokumenttyp ist nachvollziehbar PH-DP-13, PH-DP-16 MT-DP-16 Stammdatenreferenzen für Produkt- und Kundenverwaltung prüfen Produkt 20001 und Kunde 10001 werden in einem Dokument verwendet; Produkt 99999 und Kunde 99999 werden nicht verwendet isProductReferenced(20001), isProductReferenced(99999), isCustomerReferenced(10001) und isCustomerReferenced(99999) aufrufen Referenzierte Stammdaten liefern true; nicht referenzierte Stammdaten liefern false PH-DP-15, PH-DP-16
Abdeckungsübersicht
Anforderung Abgedeckte Testfälle PH-DP-01 Angebot anlegen MT-DP-01, MT-DP-02 PH-DP-02 Angebotsnummer vergeben MT-DP-03 PH-DP-03 Angebot bearbeiten MT-DP-04 PH-DP-04 Auftragsbestätigung erzeugen MT-DP-05 PH-DP-05 Doppelte Auftragsbestätigung verhindern MT-DP-06 PH-DP-06 Lieferschein erzeugen MT-DP-07 PH-DP-07 Lieferschein ohne Preise MT-DP-08 PH-DP-08 Rechnung erzeugen MT-DP-02, MT-DP-09 PH-DP-09 Pflichtangaben prüfen MT-DP-09, MT-DP-10 PH-DP-10 Rechnungsnummer fortlaufend MT-DP-11 PH-DP-11 Rechnung festschreiben MT-DP-09, MT-DP-12 PH-DP-12 PDF-Export MT-DP-14 PH-DP-13 Dokumentenübersicht pro Kunde MT-DP-15 PH-DP-14 Preis-Snapshot sichern MT-DP-01, MT-DP-13 PH-DP-15 Stammdatenreferenzen prüfbar machen MT-DP-16 PH-DP-16 Testbare Logik ohne GUI MT-DP-01 bis MT-DP-16
GUI
Die nachfolgende Abdeckungsübersicht zeigt die Zuordnung der definierten Testfälle zu den Anforderungen des Moduls GUI / Programmoberfläche (Gruppe E). Ziel ist es, die Rückverfolgbarkeit (Traceability) zwischen Anforderungen, Akzeptanztests und den geplanten JUnit-Testfällen sicherzustellen.
Jeder Testfall wurde so definiert, dass er eine oder mehrere Anforderungen des Pflichtenhefts überprüft. Dadurch kann nachvollzogen werden, welche Anforderungen bereits getestet werden und ob eine vollständige Testabdeckung erreicht wurde. Die Übersicht dient außerdem als Nachweis dafür, dass sämtliche Muss-Anforderungen sowie die zugehörigen Akzeptanztests durch geeignete Testfälle abgedeckt werden.
Testfälle
| Testfall-ID | Testziel / Beschreibung | Vorbedingungen | Testschritte | Erwartetes Ergebnis | Abgedeckte Anforderungen |
|---|---|---|---|---|---|
| TF-GUI-01 | Prüfen, ob die Angebotserfassungsmaske geöffnet werden kann | Mindestens ein Kunde und ein Produkt sind im System vorhanden | Anwendung starten, Angebotserfassung öffnen | Maske wird ohne Fehler angezeigt | BA-GUI1-01 |
| TF-GUI-02 | Prüfen, ob Produkte über ein Dropdown ausgewählt werden können | Angebotserfassungsmaske ist geöffnet | Dropdown öffnen, Produkt auswählen | Gewähltes Produkt wird dem Angebot hinzugefügt | BA-GUI-01 |
| TF-GUI-03 | Prüfen der Live-Summenaktualisierung bei Mengenänderung | Angebot enthält mindestens einen Artikel | Artikel auswählen, Menge ändern | Gesamtsumme wird sofort neu berechnet | BA-GUI-01 AT-GUI-01 |
| TF-GUI-04 | Prüfen der Summenberechnung bei mehreren Artikeln | Angebotserfassungsmaske ist geöffnet | Mehrere Artikel hinzugefügen, Menge festlegen | Gesamtsumme entspricht der Summe aller Positionen | BA-GUI-01 |
| TF-GUI-05 | Prüfen der Erfolgsmeldung nach dem Speichern eines Angebots | Angebot enthält Kunde und mindestens einen Artikel | Angebot erfassen, Speichern auswählen | Erfolgsmeldung wird angezeigt | BA-GUI-05 |
| TF-GUI-06 | Prüfen der Umwandlung eines angenommenen Angebots in eine Auftragsbestätigung | Angebot mit Status „angenommen“ vorhanden | Angebot auswählen, "In Auftragsbestätigung umwandeln" ausführen | Auftragsbestätigungsmaske wird geöffnet | BA-GUI-02, |
| TF-GUI-07 | Prüfen der vollständigen Datenübernahme in die Auftragsbestätigung | Angebot mit Status „angenommen“ vorhanden | Angebot auswählen, Umwandlung starten | Kundendaten, Positionen und Preise werden vollständig übernommen | BA-GUI-02, AT-GUI-03 |
| TF-GUI-08 | Prüfen der Markierung leerer Pflichtfelder | Auftragsbestätigungsmaske geöffnet | Liefertermin leer lassen | Pflichtfeld für Liefertermin wird farblich markiert | BA-GUI-02, AT-GUI-03 |
| TF-GUI-09 | Prüfen der Druckvorschau vor dem Speichern einer Rechnung | Abrechnungsreifer Lieferschein vorhanden | Rechnung aus Lieferschein erzeugen | Druckvorschau wird vor dem finalen Speichern angezeigt | BA-GUI-03, AT-GUI-04 |
| TF-GUI-10 | Prüfen der Statusanzeige nach erfolgreicher Rechnungslegung | Rechnung wurde erfolgreich erstellt | Rechnung speichern | Auftragsstatus wird auf „Abgeschlossen“ gesetzt und durch ein grünes Icon dargestellt | BA-GUI-03, AT-GUI-05 |
| TF-GUI-11 | Prüfen der Echtzeit-Filterung bei der Belegsuche | Mehrere Belege sind im System vorhanden | Suchbegriff eingeben | Trefferliste wird sofort gefiltert und aktualisiert | BA-GUI-04, AT-GUI-06 |
| TF-GUI-12 | Prüfen der Anzeige bei einer erfolglosen Suche | Mehrere Belege sind im System vorhanden | Ungültigen Suchbegriff eingeben | Text „Keine Treffer gefunden“ wird angezeigt | BA-GUI-04, AT-GUI-07 |
| TF-GUI-13 | Prüfen der Sichtbarkeit der PDF-Export-Schaltfläche | Beliebiger Beleg wird angezeigt | Beleg öffnen | Schaltfläche „Als PDF exportieren“ ist sichtbar | BA-GUI-05, AT-GUI-08 |
| TF-GUI-14 | Prüfen der PDF-Export-Funktion | Beleg wird angezeigt | Schaltfläche „Als PDF exportieren“ anklicken | PDF wird erstellt und Erfolgsmeldung mit Speicherpfad angezeigt | BA-GUI-05, AT-GUI-08 |
Abdeckungsübersicht
| Anforderung | Abgedeckte Testfälle |
|---|---|
| BA-GUI-01 Angebotserfassung über grafische Maske | TF-GUI-01 bis TF-GUI-05 |
| BA-GUI-02 Auftragsbestätigung über GUI | TF-GUI-06 bis TF-GUI-08 |
| BA-GUI-03 Rechnungslegung und Statusanzeige | TF-GUI-09, TF-GUI-10 |
| BA-GUI-04 Belegsuche mit Echtzeit-Filterung | TF-GUI-11, TF-GUI-12 |
| BA-GUI-05 PDF-Export aus der Belegansicht | TF-GUI-13, TF-GUI-14 |