werkator build succeeded after 00:34
Step 3 of 8 from section 8.3 of the specification. - Classes are read only from PIT's code roots (PIT's own code-path rule, never dependency JARs); differing copies are ambiguous, a missing class makes the scope incomplete. - JaCoCo's analysis is matched against the methods the class file declares (ASM): methods JaCoCo filtered are EXCLUDED with proof (`jacoco-filtered:bridge|synthetic|generated-annotation|other`), abstract/native methods get no complexity. - PIT's `excludedMethods` → EXCLUDED with `pit-excluded-method:<glob>`. - Every method of the selected classes appears in the provisional report (schemaVersion 0) with a score or a reason. - ADR 0002, feature 03, MC-008 to MC-012 mapped; MC-013 open. CI on werkator.javagil.de: green (52 s), 66 unit and 8 functional tests. PR-doc: `docs/prs/2026-10-01-PR#4-method-inventory.md` 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: mhoennig <michael@hoennig.de> Reviewed-on: #4
59 lines
3.1 KiB
Gherkin
59 lines
3.1 KiB
Gherkin
# language: de
|
|
Funktionalität: Komplexität und Mutanten derselben Methode verbinden
|
|
Als Entwickler möchte ich verlässliche Methodenwerte,
|
|
auch bei Überladungen oder fehlenden Quelltextinformationen.
|
|
|
|
@MC-008
|
|
Szenario: Komplexität ohne zusätzlichen Coverage-Lauf ermitteln
|
|
Angenommen ein Java-Fixture enthält eine Methode mit einer einfachen if-Verzweigung
|
|
Und die originale Class-Datei liegt vor
|
|
Und es gibt weder eine JaCoCo-exec-Datei noch einen für diese Auswertung aktiven JaCoCo-Agenten
|
|
Wenn das Plugin die Klasse statisch analysiert
|
|
Dann wird für diese Methode die JaCoCo-Gesamtkomplexität 2 ermittelt
|
|
Und dafür wird kein Test gestartet
|
|
Und es wird nicht versehentlich die abgedeckte Komplexität 0 verwendet
|
|
|
|
@MC-009
|
|
Szenario: Fehlende Debuginformationen verhindern den Join nicht
|
|
Angenommen dasselbe kleine Java-Fixture wird mit und ohne Debuginformationen kompiliert
|
|
Und für beide Varianten liegen passende Mutationsergebnisse vor
|
|
Wenn beide Varianten jeweils ausgewertet werden
|
|
Dann werden die Mutanten jeweils der korrekten JVM-Methode zugeordnet
|
|
Und die Methode hat in beiden Varianten dieselbe Gesamtkomplexität
|
|
Und fehlende Quelltextzeilen werden als nicht verfügbar dargestellt
|
|
|
|
@MC-010
|
|
Szenario: Überladene Methoden bleiben getrennt
|
|
Angenommen eine Klasse besitzt die Methoden "calculate(I)I" und "calculate(Ljava/lang/String;)I"
|
|
Und für beide Methoden liegen verschiedene Komplexitäten und Mutationsergebnisse vor
|
|
Wenn der Report erstellt wird
|
|
Dann enthält er zwei getrennte Methodenidentitäten
|
|
Und jede Methode verwendet nur ihre eigene Komplexität und ihre eigenen Mutanten
|
|
|
|
@MC-011
|
|
Szenario: Fehlender Originalbytecode wird nicht durch einen Fantasiewert ersetzt
|
|
Angenommen ein Mutationsergebnis verweist auf eine Methode
|
|
Und deren Originalklasse kann nicht zuverlässig gelesen werden
|
|
Wenn die Analyse abgeschlossen wird
|
|
Dann wird der betroffene Eintrag als "COMPLEXITY_UNAVAILABLE" ausgewiesen
|
|
Und kein Komplexitätswert wird aus Namen oder Mutantenzahl geschätzt
|
|
Und ein aktiviertes striktes Gate scheitert mit einem Analysefehler
|
|
|
|
@MC-012
|
|
Szenario: Eine Klasse ohne Ergebnis-Callback bleibt im Inventar sichtbar
|
|
Angenommen eine Produktionsklasse gehört zum ausdrücklich ausgewählten Analysescope
|
|
Und ihre ausführbaren Methoden können statisch analysiert werden
|
|
Und PIT liefert für diese Klasse keine Mutationsergebnisse
|
|
Wenn das Plugin den ausgewählten Scope vollständig inventarisiert
|
|
Dann erscheinen ihre Methoden mit Zustand "NO_MUTATION_RESULTS"
|
|
Und sie werden nicht als erfolgreich mutationsgetestet gezählt
|
|
|
|
@MC-013
|
|
Szenario: Reporting-Ausschlüsse verändern PIT nicht
|
|
Angenommen eine Methode ist durch eine ausdrückliche Reporting-Regel ausgeschlossen
|
|
Und PIT hat für diese Methode Mutationsergebnisse erzeugt
|
|
Wenn das Plugin den Report erstellt
|
|
Dann sind Ausschluss und angewendete Regel nachvollziehbar
|
|
Und diese Methode nimmt nicht am Score-Gate teil
|
|
Und die ursprünglichen PIT-Ergebnisse werden weder verändert noch entfernt
|