Modultestplan ausgegliedert

main
Lucas Strubel 2026-06-15 15:28:17 +02:00
parent 6aaa409f49
commit 511ea7ed4d
6 changed files with 149 additions and 74 deletions

View File

@ -0,0 +1,137 @@
---
title: "Modultestplan"
subtitle: "Desktop-Fakturierungsanwendung — Gruppe A: Prozess / Dokumentenzyklus"
author:
- Team 1 Gruppe A
version: "1.0"
lang: de-DE
toc: true
toc-depth: 3
numbersections: false
papersize: a4
geometry: "margin=3cm"
fontsize: 12pt
linestretch: 1.5
mainfont: "Times New Roman"
sansfont: "Arial"
monofont: "DejaVu Sans Mono"
header-includes: |
\usepackage{fancyhdr}
\usepackage{lastpage}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[L]{Team 1 Gruppe A}
\fancyhead[C]{Modultestplan}
\fancyhead[R]{Version 1.0}
\fancyfoot[C]{\thepage\ /\ \pageref{LastPage}}
\renewcommand{\headrulewidth}{0.4pt}
\renewcommand{\footrulewidth}{0pt}
---
\newpage
+-------------------------+-------------------------+-------------------------+
| Autor | Prüfer | Freigebender |
+=========================+=========================+=========================+
| Strubel, Lucas | Prof. Dr. Marmitt, Gerd | Prof. Dr. Marmitt, Gerd |
+-------------------------+-------------------------+-------------------------+
| Gruppe A (Prozess) | Modulverantwortlicher | Modulverantwortlicher |
+-------------------------+-------------------------+-------------------------+
| 15.06.2026 | 15.06.2026 | 15.06.2026 |
+-------------------------+-------------------------+-------------------------+
**Freigabevermerk:** Dieses Dokument ist nach Prüfung und Freigabe durch den
Modulverantwortlichen verbindliche Grundlage für den Modultest der Komponente
*Prozess / Dokumentenzyklus*.
## Dokumentenhistorie
| Version | Datum | Autor | Grund der Änderung |
|---------|------------|-----------------------------|---------------------|
| 1.0 | 15.06.2026 | Lucas Strubel | Initiale Erstellung (ausgegliedert aus Pflichtenheft Gruppe A v1.2) |
\newpage
## 1. Einleitung
### 1.1 Zweck des Dokuments
Dieser Modultestplan spezifiziert die Modul-/Komponententests der Komponente
*Prozess / Dokumentenzyklus* (Gruppe A). Er leitet sich direkt aus dem Pflichtenheft
Gruppe A (ab Version 1.2) ab — insbesondere aus den funktionalen Anforderungen (Kapitel 4),
den Daten und Schnittstellen (Kapitel 6) sowie den testbaren Abnahmekriterien (Kapitel 8) —
und überführt diese in deterministische, mit JUnit umsetzbare Testfälle.
### 1.2 Rahmenbedingungen
Die folgenden Testfälle sind deterministisch (feste Ein-/Ausgaben) und mit JUnit 5
umsetzbar. Geldbeträge werden als `BigDecimal` mit Scale 2 erwartet
(`assertEquals(new BigDecimal("119.00"), …)` bzw. `compareTo`). Die Schnittstellen der
Gruppen B (Produkte) und C (Kunden) sowie der PDF-Export werden in den Tests durch Stubs
ersetzt.
## 2. Testfälle
+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
| TC | Abgedeckte PH-Anf. | Vorbedingung | Eingabe | Erwartetes Ergebnis |
+=======+====================+=============================+===========================+=============================+
| TC-01 | F-23, F-03 | Position mit Netto 100.00 | `berechne()` | Steuer = 19.00, Brutto = |
| | | €, Steuersatz 0.19 | | 119.00 (Scale 2) |
+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
| TC-02 | F-23 | Einzelpreis 50.00 €, | Positionssumme | positionssummeNetto = |
| | | Menge 3 | berechnen | 150.00 |
+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
| TC-03 | F-03, F-13 | Beleg mit 2 Positionen | Summen berechnen | summeNetto = 200.00, |
| | | (150.00 € @ 0.19; | | summeSteuer = 32.00, |
| | | 50.00 € @ 0.07) | | summeBrutto = 232.00 |
+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
| TC-04 | F-12, GR-01 | Letzte Rechnungsnummer | `naechsteNummer` | liefert `R-2026-000124` |
| | | `R-2026-000123` | `(RECHNUNG, 2026)` | (lückenlos) |
+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
| TC-05 | F-12 (Format) | Zähler = 7, Jahr 2026 | `naechsteNummer` | liefert `R-2026-000007` |
| | | | `(RECHNUNG, 2026)` | (führende Nullen, `String`) |
+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
| TC-06 | F-14, GR-06 | Rechnungsdatum 2026-06-09, | Rechnung erstellen | zahlungsziel = |
| | | kein Zahlungsziel | | 2026-06-23 (+14 Tage) |
+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
| TC-07 | F-14 | Rechnungsdatum 2026-06-09, | Rechnung erstellen | zahlungsziel = 2026-07-31 |
| | | Zahlungsziel 2026-07-31 | | (übernommen) |
+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
| TC-08 | F-24, NF-INT-01 | Rechnung im Status | `setzePosition(...)` / | wirft |
| | | `VERSENDET` | Änderung | `IllegalStateException` |
+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
| TC-09 | F-19, F-20 | Rechnung im Status `OFFEN` | `storniere()` | Status = `STORNIERT`; |
| | | | | nicht in |
| | | | | `offeneRechnungen()`; |
| | | | | `storniertAm` gesetzt |
+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
| TC-10 | F-22, GR-05 | Angebot `AN-2026-000001` | `ausAngebot(angebot)` | AB übernimmt Kunde/ |
| | | mit Kunde + 2 Positionen | (AB erzeugen) | Positionen/Mengen; |
| | | | | `vorgaengerNr` = |
| | | | | `"AN-2026-000001"` |
+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
| TC-11 | F-23, F-24 | Rechnung mit Produkt @ | erste Rechnung erneut | einzelpreisNetto bleibt |
| | | 50.00 €; danach | lesen | 50.00 (Snapshot |
| | | Produktpreis → 80.00 € | | unverändert) |
+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
| TC-12 | F-18, NF-USE-02 | Rechnung ohne Kunde | `speichere()` | Speichern abgelehnt; |
| | | **oder** ohne Position | | Validierungsfehler benennt |
| | | | | fehlendes Pflichtfeld |
+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
| TC-13 | F-11, F-12, F-13 | Kunde + 1 Position | vollständige Rechnung | Rechnung gespeichert, |
| | | vorhanden | erstellen | Nummer vergeben, alle |
| | | | | § 14 UStG-Pflichtangaben |
| | | | | gesetzt |
+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
Damit sind 13 Testfälle (> 10) spezifiziert, die alle funktionalen Kernregeln (F-12, F-14,
F-18, F-22, F-23, F-24) sowie die zentralen Geschäftsregeln (GR-01, GR-02, GR-03, GR-05,
GR-06) abdecken.
## 3. Abkürzungen
| Abkürzung | Bedeutung |
|-----------|-----------|
| TC | Testfall (Test Case) |
| F | Funktionale Anforderung (Pflichtenheft) |
| NF | Nicht-funktionale Anforderung (Pflichtenheft) |
| GR | Geschäftsregel (Lastenheft) |
| Q | Qualitätsanforderung (Lastenheft) |
| PH | Pflichtenheft |

Binary file not shown.

View File

@ -3,7 +3,7 @@ title: "Pflichtenheft"
subtitle: "Desktop-Fakturierungsanwendung — Gruppe A: Prozess / Dokumentenzyklus"
author:
- Team 1 Gruppe A
version: "1.1"
version: "1.2"
lang: de-DE
toc: true
toc-depth: 3
@ -22,7 +22,7 @@ header-includes: |
\fancyhf{}
\fancyhead[L]{Team 1 Gruppe A}
\fancyhead[C]{Pflichtenheft}
\fancyhead[R]{Version 1.1}
\fancyhead[R]{Version 1.2}
\fancyfoot[C]{\thepage\ /\ \pageref{LastPage}}
\renewcommand{\headrulewidth}{0.4pt}
\renewcommand{\footrulewidth}{0pt}
@ -50,6 +50,7 @@ und den Modultest der Komponente *Prozess / Dokumentenzyklus*.
|---------|------------|-----------------------------|---------------------|
| 1.0 | 09.06.2026 | Lucas Strubel | Initiale Erstellung |
| 1.1 | 13.06.2026 | Lucas Strubel | Einfügen der UML-Diagramme (Klassen- und Sequenzdiagramm) |
| 1.2 | 15.06.2026 | Lucas Strubel | Modultestplan in eigenständiges Dokument (Modultestplan_GruppeA.md) ausgegliedert |
\newpage
@ -61,7 +62,7 @@ Auftragnehmers, **wie** die Komponente *Prozess / Dokumentenzyklus* der
Desktop-Fakturierungsanwendung die Anforderungen des Lastenhefts (v1.3) erfüllt. Es
konkretisiert die fachlichen Anforderungen in testbare Systemanforderungen und dient als
direkte Grundlage für Design, Implementierung sowie den Komponenten- bzw. Modultestplan
(Kapitel 10).
(eigenständiges Dokument *Modultestplan_GruppeA.md*).
### 1.2 Ziel
Ziel dieses Pflichtenhefts ist die vollständige und testbare Spezifikation der Erzeugung,
@ -285,7 +286,7 @@ erfolgt (Nachweis durch Netzwerk-Monitoring während eines repräsentativen Nutz
## 6. Daten und Schnittstellen
Dieses Kapitel ist direkter Input für den Modultestplan (Kapitel 10). Datentypen werden
Dieses Kapitel ist direkter Input für den Modultestplan (eigenständiges Dokument *Modultestplan_GruppeA.md*). Datentypen werden
bereits als Java-Typen angegeben.
### 6.1 Datenobjekte und Datentypen
@ -368,7 +369,7 @@ exportieren (Q-08).
**Interne Schnittstellen:** Die Schnittstellen werden hier **fachlich** beschrieben
(Zweck, ausgetauschte Daten, Richtung); konkrete Methodensignaturen
und Datentypen sind dem Komponentenentwurf bzw. dem Modultestplan (Kapitel 10) vorbehalten.
und Datentypen sind dem Komponentenentwurf bzw. dem Modultestplan (eigenständiges Dokument *Modultestplan_GruppeA.md*) vorbehalten.
*Genutzte Schnittstellen (Komponente A ruft auf):*
@ -529,85 +530,22 @@ Pflichtenheft-Anforderung zugeordnet.
> Beide werden von Komponente A nicht spezifiziert; der Gesamtnachweis erfolgt im team-weiten
> Anforderungsabgleich.
## 10. Modultestplan
## 10. Anhänge
Die folgenden Testfälle sind deterministisch (feste Ein-/Ausgaben) und mit JUnit 5
umsetzbar. Geldbeträge werden als `BigDecimal` mit Scale 2 erwartet
(`assertEquals(new BigDecimal("119.00"), …)` bzw. `compareTo`).
+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
| TC | Abgedeckte PH-Anf. | Vorbedingung | Eingabe | Erwartetes Ergebnis |
+=======+====================+=============================+===========================+=============================+
| TC-01 | F-23, F-03 | Position mit Netto 100.00 | `berechne()` | Steuer = 19.00, Brutto = |
| | | €, Steuersatz 0.19 | | 119.00 (Scale 2) |
+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
| TC-02 | F-23 | Einzelpreis 50.00 €, | Positionssumme | positionssummeNetto = |
| | | Menge 3 | berechnen | 150.00 |
+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
| TC-03 | F-03, F-13 | Beleg mit 2 Positionen | Summen berechnen | summeNetto = 200.00, |
| | | (150.00 € @ 0.19; | | summeSteuer = 32.00, |
| | | 50.00 € @ 0.07) | | summeBrutto = 232.00 |
+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
| TC-04 | F-12, GR-01 | Letzte Rechnungsnummer | `naechsteNummer` | liefert `R-2026-000124` |
| | | `R-2026-000123` | `(RECHNUNG, 2026)` | (lückenlos) |
+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
| TC-05 | F-12 (Format) | Zähler = 7, Jahr 2026 | `naechsteNummer` | liefert `R-2026-000007` |
| | | | `(RECHNUNG, 2026)` | (führende Nullen, `String`) |
+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
| TC-06 | F-14, GR-06 | Rechnungsdatum 2026-06-09, | Rechnung erstellen | zahlungsziel = |
| | | kein Zahlungsziel | | 2026-06-23 (+14 Tage) |
+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
| TC-07 | F-14 | Rechnungsdatum 2026-06-09, | Rechnung erstellen | zahlungsziel = 2026-07-31 |
| | | Zahlungsziel 2026-07-31 | | (übernommen) |
+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
| TC-08 | F-24, NF-INT-01 | Rechnung im Status | `setzePosition(...)` / | wirft |
| | | `VERSENDET` | Änderung | `IllegalStateException` |
+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
| TC-09 | F-19, F-20 | Rechnung im Status `OFFEN` | `storniere()` | Status = `STORNIERT`; |
| | | | | nicht in |
| | | | | `offeneRechnungen()`; |
| | | | | `storniertAm` gesetzt |
+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
| TC-10 | F-22, GR-05 | Angebot `AN-2026-000001` | `ausAngebot(angebot)` | AB übernimmt Kunde/ |
| | | mit Kunde + 2 Positionen | (AB erzeugen) | Positionen/Mengen; |
| | | | | `vorgaengerNr` = |
| | | | | `"AN-2026-000001"` |
+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
| TC-11 | F-23, F-24 | Rechnung mit Produkt @ | erste Rechnung erneut | einzelpreisNetto bleibt |
| | | 50.00 €; danach | lesen | 50.00 (Snapshot |
| | | Produktpreis → 80.00 € | | unverändert) |
+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
| TC-12 | F-18, NF-USE-02 | Rechnung ohne Kunde | `speichere()` | Speichern abgelehnt; |
| | | **oder** ohne Position | | Validierungsfehler benennt |
| | | | | fehlendes Pflichtfeld |
+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
| TC-13 | F-11, F-12, F-13 | Kunde + 1 Position | vollständige Rechnung | Rechnung gespeichert, |
| | | vorhanden | erstellen | Nummer vergeben, alle |
| | | | | § 14 UStG-Pflichtangaben |
| | | | | gesetzt |
+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
Damit sind 13 Testfälle (> 10) spezifiziert, die alle funktionalen Kernregeln (F-12, F-14,
F-18, F-22, F-23, F-24) sowie die zentralen Geschäftsregeln (GR-01, GR-02, GR-03, GR-05,
GR-06) abdecken.
## 11. Anhänge
### 11.1 Abkürzungen
### 10.1 Abkürzungen
| Abkürzung | Bedeutung |
|-----------|-----------|
| F | Funktionale Anforderung (Pflichtenheft) |
| NF | Nicht-funktionale Anforderung (Pflichtenheft) |
| IF | Schnittstelle (Interface) |
| AC | Abnahmekriterium |
| TC | Testfall (Test Case) |
| BA | Benutzeranforderung (Lastenheft) |
| GR | Geschäftsregel (Lastenheft) |
| Q | Qualitätsanforderung (Lastenheft) |
| SRS | System Requirements Specification (Pflichtenheft) |
### 11.2 Glossar
### 10.2 Glossar
Es gilt das Glossar des Lastenhefts (§ 8.1) unverändert.
### 11.3 Referenzen
### 10.3 Referenzen
Siehe Kapitel 1.5.

Binary file not shown.

View File

@ -51,7 +51,7 @@
<version>3.6</version>
</dependency>
<!-- Modultests (JUnit 5, Kapitel 10 der Pflichtenhefte) -->
<!-- Modultests (JUnit 5; Modultestplan_GruppeA.md bzw. Kapitel 10 der Pflichtenhefte BD) -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>

View File

@ -24,7 +24,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
/**
* Modultestplan Gruppe A (Pflichtenheft A, Kapitel 10): TC-01 bis TC-13.
* Modultestplan Gruppe A (separates Dokument Modultestplan_GruppeA.md): TC-01 bis TC-13.
* Die Schnittstellen der Gruppen B und C werden durch Stubs ersetzt,
* der PDF-Export durch einen No-Op-Stub.
*/