diff --git a/Modultestplan_GruppeA.md b/Modultestplan_GruppeA.md new file mode 100644 index 0000000..dc22bc2 --- /dev/null +++ b/Modultestplan_GruppeA.md @@ -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 | diff --git a/Modultestplan_GruppeA.pdf b/Modultestplan_GruppeA.pdf new file mode 100644 index 0000000..e071a66 Binary files /dev/null and b/Modultestplan_GruppeA.pdf differ diff --git a/Pflichtenheft_GruppeA.md b/Pflichtenheft_GruppeA.md index f097431..c9f7f90 100644 --- a/Pflichtenheft_GruppeA.md +++ b/Pflichtenheft_GruppeA.md @@ -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. diff --git a/Pflichtenheft_GruppeA.pdf b/Pflichtenheft_GruppeA.pdf index f5a92e4..16316ac 100644 Binary files a/Pflichtenheft_GruppeA.pdf and b/Pflichtenheft_GruppeA.pdf differ diff --git a/pom.xml b/pom.xml index ceefd1a..1f9c053 100644 --- a/pom.xml +++ b/pom.xml @@ -51,7 +51,7 @@ 3.6 - + org.junit.jupiter junit-jupiter diff --git a/src/test/java/de/team1/faktura/dokumente/DokumentzyklusTest.java b/src/test/java/de/team1/faktura/dokumente/DokumentzyklusTest.java index 5daafaa..ca78f31 100644 --- a/src/test/java/de/team1/faktura/dokumente/DokumentzyklusTest.java +++ b/src/test/java/de/team1/faktura/dokumente/DokumentzyklusTest.java @@ -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. */