Files
asv-format-validator/docs/arbeitspakete/m1/berichte/AP02-bericht.md

9.4 KiB
Raw Blame History

Abschlussbericht AP02 Build-Infrastruktur härten

Bezug: docs/arbeitspakete/m1/AP02-build-infrastruktur.md Bearbeiter: Claude Code (claude-sonnet-4-6) Datum: 2026-04-09 Commit(s): — (kein Commit in AP02; der Mensch committet nach Prüfung) Status: abgeschlossen


1. Zusammenfassung

AP02 hat die Build-Infrastruktur vollständig gehärtet: SLF4J als Logging-Fassade (Compile) und log4j-slf4j2-impl als Runtime-Bindung wurden hinzugefügt, JaCoCo und PIT (im Profil mutation) konfiguriert, das maven-jar-plugin mit Platzhalter-Main-Class eingerichtet, und Mockito als expliziter Java-Agent in maven-surefire-plugin eingehängt. Die Mockito-ByteBuddy-Warnung aus AP01 ist verschwunden. Beide Build-Ziele (mvn clean verify und mvn -P mutation test) sind grün.


2. Umgesetzte Änderungen

  • pom.xml — neue Properties: slf4j.version=2.0.7, jacoco-maven-plugin.version=0.8.10, maven-dependency-plugin.version=3.6.0, maven-jar-plugin.version=3.3.0
  • pom.xml — neue Dependency: org.slf4j:slf4j-api:2.0.7 (Scope: compile; Logging-Fassade)
  • pom.xml — neue Dependency: org.apache.logging.log4j:log4j-slf4j2-impl:2.20.0 (Scope: runtime; SLF4J→Log4j2-Bridge)
  • pom.xml — neues Plugin: maven-dependency-plugin:3.6.0 mit Goal properties (liefert Jar-Pfade für Java-Agent)
  • pom.xmlmaven-surefire-plugin erweitert: argLine mit @{argLine} -javaagent:${org.mockito:mockito-core:jar} (Mockito als expliziter Java-Agent; JaCoCo-argLine per Late-Binding)
  • pom.xml — neues Plugin: maven-jar-plugin:3.3.0 mit mainClass=de.gecheckt.asv.bootstrap.Main
  • pom.xml — neues Plugin: jacoco-maven-plugin:0.8.10 mit Goals prepare-agent und report (an verify gebunden; keine Schwellwerte)
  • pom.xml — neues Profil mutation mit pitest-maven:1.15.3 + pitest-junit5-plugin:1.2.1 (JUnit-5-Adapter), Goal mutationCoverage in Phase test
  • .editorconfig — neu angelegt (UTF-8, LF, 4 Spaces für Java/XML, trim + final newline)
  • .gitattributes — neu angelegt (* text=auto eol=lf, *.bat eol=crlf, *.java eol=lf, *.md eol=lf)

3. Scope-Treue

Scope-Punkt aus dem Arbeitspaket Erfüllt? Bemerkung
slf4j-api als Compile-Dependency Version 2.0.7 (kompatibel mit Log4j2 2.20.0 / log4j-slf4j2-impl)
log4j-slf4j2-impl als Runtime-Bindung Scope runtime
maven-jar-plugin mit Main-Class Platzhalter de.gecheckt.asv.bootstrap.Main (wird in AP06 real)
jacoco-maven-plugin an verify gebunden, ohne Schwellwerte prepare-agent + report, kein check-Goal
pitest-maven im Profil mutation, ohne Schwellwerte Profil-Name exakt mutation; kein mutationThreshold
Mockito als Java-Agent via maven-surefire-plugin argLine Warnung aus AP01 beseitigt
.editorconfig anlegen Neue Datei im Repo-Root
.gitattributes anlegen Neue Datei im Repo-Root (existierte nicht)
Keine Änderungen an .java-Dateien Keine Java-Datei angefasst
Keine Coverage-Schwellwerte Kein check-Goal, keine <rules>
Keine PIT-Schwellwerte Kein mutationThreshold, kein coverageThreshold

Wurde der Scope eingehalten? Ja, vollständig.

Wurden Dinge außerhalb des Scopes gemacht? Nein. Der einzige über den schriftlichen Scope hinausgehende Punkt ist die pitest-junit5-plugin-Dependency im PIT-Plugin, die technisch zwingend nötig ist, damit PIT JUnit-5-Tests überhaupt ausführen kann — ohne sie bricht mvn -P mutation test mit BUILD FAILURE ab. Das ist eine technische Voraussetzung des Abnahmekriteriums, nicht eine Scope-Erweiterung.


4. Abnahmekriterien

Abnahmekriterium aus dem Arbeitspaket Erfüllt? Nachweis
pom.xml enthält slf4j-api <artifactId>slf4j-api</artifactId> in <dependencies>
pom.xml enthält log4j-slf4j2-impl <artifactId>log4j-slf4j2-impl</artifactId> in <dependencies>
pom.xml enthält maven-jar-plugin maven-jar-plugin:3.3.0 mit mainClass
pom.xml enthält jacoco-maven-plugin jacoco-maven-plugin:0.8.10, zwei Executions
pom.xml enthält pitest-maven Im Profil mutation, pitest-maven:1.15.3
mvn clean verify ist grün BUILD SUCCESS, 147 Tests, 0 Failures, 0 Errors
mvn -P mutation test läuft ohne Fehler BUILD SUCCESS; 249 Mutationen, 207 getötet (83%), Laufzeit ~39 s
JaCoCo-Report unter target/site/jacoco/ target/site/jacoco/index.html und Paket-Reports vorhanden
Mockito-Warnung „self-attaching via ByteBuddy" nicht mehr im Log Grep über Build-Log: kein Treffer für „self-attach", „ByteBuddy", „dynamic loading"
.editorconfig liegt im Repo-Root D:\Dev\Projects\asv-format-validator\.editorconfig
.gitattributes liegt im Repo-Root D:\Dev\Projects\asv-format-validator\.gitattributes
Keine Änderungen an .java-Dateien git status zeigt nur pom.xml, .editorconfig, .gitattributes

5. Build- und Teststatus

5.1 mvn clean verify

  • Ergebnis: BUILD SUCCESS
  • Anzahl Tests: 147 (0 neu; AP02 ändert keinen Testcode)
  • Fehler / Skipped: 0 / 0
  • Dauer: ~22 s
  • JaCoCo: Report erzeugt unter target/site/jacoco/

Warnungen beim Build:

Warnung Quelle Bewertung
Java HotSpot VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended HotSpot / JaCoCo-Agent Unvermeidlich wenn JaCoCo-Agent den bootstrap classpath erweitert; kosmetisch, nicht blockierend. War bereits in AP01 vorhanden.
[ERROR] ... Fehler beim Lesen der Datei: File does not exist: /non/existent/file.txt Log4j2-Testausgabe in AsvValidatorApplicationTest Erwartete Test-Logausgabe, kein echter Fehler

Die Mockito-Warnungen aus AP01 (Mockito is currently self-attaching, WARNING: Dynamic loading of agents will be disallowed) sind nicht mehr vorhanden.

5.2 mvn -P mutation test

  • Ergebnis: BUILD SUCCESS
  • Generierte Mutationen: 249
  • Getötet: 207 (83%)
  • Test-Strength: 92%
  • Line Coverage (mutierte Klassen): 91%
  • Laufzeit PIT: ~29 s (Gesamt-Build ~39 s)
  • Anmerkung: Mutation-Score ist in M1 irrelevant; Schwellwerte kommen in M9.

6. Rest-Risiken und offene Punkte

  1. pitest-junit5-plugin nicht im AP-Dokument erwähnt: Das AP-Dokument nennt pitest-maven, aber nicht die erforderliche JUnit-5-Adapter-Dependency. Ohne sie bricht PIT mit BUILD FAILURE ab. Der Adapter (pitest-junit5-plugin:1.2.1) wurde als Pflicht-Ergänzung hinzugefügt und ist im Profil mutation kapselt. Kein Risiko für M1; in M9 muss beim Versions-Update beachtet werden, dass PIT-Plugin und JUnit-5-Adapter zueinander kompatibel bleiben.

  2. Main-Class-Eintrag zeigt auf nicht-existente Klasse: de.gecheckt.asv.bootstrap.Main existiert erst ab AP06. Das JAR ist bis dahin mit java -jar nicht startbar, was aber kein M1-Blockers ist. In AP06 wird die Klasse angelegt und der Eintrag damit valide.

  3. HotSpot-Sharing-Warnung bleibt: Die Warnung Sharing is only supported for boot loader classes entsteht durch den JaCoCo-Agenten und ist unvermeidlich. Sie ist kosmetisch und nicht blockierend.

  4. SLF4J-API vorhanden, aber noch kein Code nutzt sie: Erst ab AP04 werden die Log4j2-Direktimporte auf SLF4J umgestellt. Bis dahin liegt slf4j-api ungenutzt im Classpath — das ist der gewollte Zustand und erzeugt keine Fehler.

  5. mvn -P mutation test und Mockito-Agent: PIT startet einen eigenen Minion-Prozess; der Mockito-Java-Agent in argLine von Surefire hat keinen Einfluss auf den PIT-Minion. Das ist unkritisch, da PIT keine Mockito-Interaktion benötigt.


7. Empfehlungen für Folge-Arbeitspakete

  • AP03 (Paketstruktur): Keine Build-Infrastruktur-Abhängigkeiten. Kann direkt auf Basis der Klassifikationstabelle aus AP01 starten.

  • AP04 (Logging-Umstellung): slf4j-api und log4j-slf4j2-impl sind bereit. AP04 darf jetzt die Log4j2-Direktimporte in AsvValidatorApplication auf SLF4J-Logger umstellen. Kein pom.xml-Anpassungsbedarf in AP04.

  • AP06 (Bootstrap/CLI): maven-jar-plugin zeigt auf de.gecheckt.asv.bootstrap.Main. AP06 muss diese Klasse anlegen (oder den Eintrag auf die finale Klasse umbiegen) und den argLine-Kommentar in pom.xml aktualisieren, falls sich der Klassenname ändert.

  • M9 (Quality-Gates): JaCoCo und PIT sind ohne Schwellwerte eingerichtet. In M9 werden Coverage- und Mutation-Schwellwerte als <rules> in jacoco-maven-plugin bzw. als mutationThreshold/coverageThreshold in pitest-maven ergänzt. Beim Update von pitest-junit5-plugin auf die dann aktuelle Version sicherstellen, dass Kompatibilität mit pitest-maven gewahrt bleibt.


8. Reviewer-Checkliste

  • Alle im Arbeitspaket genannten Scope-IN-Punkte sind nachweislich umgesetzt (Abschnitte 2 und 3)
  • Keine Scope-OUT-Punkte wurden angefasst (keine .java-Dateien, keine Coverage-Schwellwerte, keine PIT-Schwellwerte)
  • Abnahmekriterien sind mit konkreten Nachweisen belegt (Abschnitt 4)
  • mvn clean verify ist grün (147 Tests, BUILD SUCCESS — Abschnitt 5.1)
  • Der Commit für dieses AP hat eine sprechende Message (M1-AP02: Build-Infrastruktur härten) — Commit liegt beim Menschen
  • Keine Regeln der Grunddokumente (Spec, Fachliche, Technik) wurden verletzt
  • Rest-Risiken sind ehrlich dokumentiert (Abschnitt 6)