Files
claude-code d441b059af
werkator build succeeded after 03:23
werkator/publish build succeeded after 00:21
Example reports with every state of a method (0.26.10) (#65)
Co-authored-by: claude-code <claude-code@javagil.de>
2026-10-11 18:02:48 +02:00

283 lines
6.8 KiB
JSON

{
"schemaVersion": 3,
"run": {
"status": "FINISHED",
"diagnostics": []
},
"definition": {
"metricId": "mutation-crap",
"metricVersion": 1,
"scorePolicyId": "timeouts-killed-v1",
"formula": "C^2 * (1 - MS)^3 + C, MS = killed / eligible mutants as the score policy counts them",
"complexityProvider": {
"id": "jacoco-cyclomatic",
"version": "0.8.15"
},
"changeRiskFormula": "per top-level class: C^2 * (1 - MS)^3 + C over its scored methods, C and mutants summed, times (1 + (LCOM4 - 1) / 2) times (1 + Ce / 20)"
},
"provenance": {
"pluginVersion": "0.26.10",
"pitVersion": "1.30.0",
"analysisContext": ":pitest",
"codeRoots": [
"build/classes/java/main"
],
"classFiles": {
"demo.Classifier": {
"origin": "build/classes/java/main",
"sha256": "9f2c1e4b7a8d0c3e6f5a2b1d4c7e0f3a6b9c2d5e8f1a4b7c0d3e6f9a2b5c8e1d"
},
"demo.Grade": {
"origin": "build/classes/java/main",
"sha256": "9f2c1e4b7a8d0c3e6f5a2b1d4c7e0f3a6b9c2d5e8f1a4b7c0d3e6f9a2b5c8e1d"
}
}
},
"configuration": {
"metric": {
"analysisContext": ":pitest",
"excludeClasses": [],
"excludeMethods": []
},
"pit": {
"excludedClasses": [],
"excludedMethods": [],
"features": [],
"mutators": [],
"targetClasses": [
"demo.*"
]
},
"pitConfigurationComplete": false,
"pitConfigurationNote": "only the listed PIT options are recorded; target tests, mutation filters and test framework settings are not"
},
"scope": {
"complete": true,
"selectedClasses": [
"demo.Classifier",
"demo.Grade",
"demo.Legacy"
],
"unreadableClasses": []
},
"summary": {
"methods": 7,
"byState": {
"SCORED": 2,
"NO_MUTATION_RESULTS": 1,
"NO_ELIGIBLE_MUTANTS": 1,
"INCONCLUSIVE": 1,
"COMPLEXITY_UNAVAILABLE": 1,
"EXCLUDED": 1
},
"highestScores": [
{
"class": "demo.Classifier",
"method": "classify",
"descriptor": "(I)Ljava/lang/String;",
"mutationCrap": 22.5
},
{
"class": "demo.Classifier",
"method": "normalize",
"descriptor": "(I)I",
"mutationCrap": 1
}
]
},
"methods": [
{
"class": "demo.Classifier",
"method": "classify",
"descriptor": "(I)Ljava/lang/String;",
"state": "SCORED",
"reasons": [],
"complexity": 10,
"statusCounts": {
"KILLED": 5,
"SURVIVED": 5
},
"contradictedMutants": 0,
"excludedMutants": 0,
"denominator": 10,
"mutationScore": 0.5,
"mutationCrap": 22.5,
"mutationCrapExact": {
"numerator": "45",
"denominator": "2"
},
"sourceFile": "Classifier.java",
"firstLine": 12
},
{
"class": "demo.Classifier",
"method": "compare",
"descriptor": "(II)I",
"state": "NO_ELIGIBLE_MUTANTS",
"reasons": [
"no-eligible-mutants"
],
"complexity": 2,
"statusCounts": {
"NON_VIABLE": 2
},
"contradictedMutants": 0,
"excludedMutants": null,
"denominator": null,
"mutationScore": null,
"mutationCrap": null,
"mutationCrapExact": null,
"sourceFile": "Classifier.java",
"firstLine": 40
},
{
"class": "demo.Classifier",
"method": "describe",
"descriptor": "()Ljava/lang/String;",
"state": "NO_MUTATION_RESULTS",
"reasons": [
"no-mutation-results"
],
"complexity": 2,
"statusCounts": {},
"contradictedMutants": 0,
"excludedMutants": null,
"denominator": null,
"mutationScore": null,
"mutationCrap": null,
"mutationCrapExact": null,
"sourceFile": "Classifier.java",
"firstLine": 35
},
{
"class": "demo.Classifier",
"method": "normalize",
"descriptor": "(I)I",
"state": "SCORED",
"reasons": [],
"complexity": 1,
"statusCounts": {
"KILLED": 1
},
"contradictedMutants": 0,
"excludedMutants": 0,
"denominator": 1,
"mutationScore": 1,
"mutationCrap": 1,
"mutationCrapExact": {
"numerator": "1",
"denominator": "1"
},
"sourceFile": "Classifier.java",
"firstLine": 30
},
{
"class": "demo.Classifier",
"method": "retry",
"descriptor": "(I)I",
"state": "INCONCLUSIVE",
"reasons": [
"inconclusive-status:RUN_ERROR"
],
"complexity": 3,
"statusCounts": {
"KILLED": 2,
"RUN_ERROR": 1
},
"contradictedMutants": 0,
"excludedMutants": null,
"denominator": null,
"mutationScore": null,
"mutationCrap": null,
"mutationCrapExact": null,
"sourceFile": "Classifier.java",
"firstLine": 45
},
{
"class": "demo.Grade",
"method": "values",
"descriptor": "()[Ldemo/Grade;",
"state": "EXCLUDED",
"reasons": [
"jacoco-filtered:other"
],
"complexity": null,
"statusCounts": {},
"contradictedMutants": 0,
"excludedMutants": null,
"denominator": null,
"mutationScore": null,
"mutationCrap": null,
"mutationCrapExact": null,
"sourceFile": "Grade.java",
"firstLine": null
},
{
"class": "demo.Legacy",
"method": "run",
"descriptor": "()V",
"state": "COMPLEXITY_UNAVAILABLE",
"reasons": [
"complexity-unavailable",
"method-not-in-inventory"
],
"complexity": null,
"statusCounts": {
"SURVIVED": 1
},
"contradictedMutants": 0,
"excludedMutants": null,
"denominator": null,
"mutationScore": null,
"mutationCrap": null,
"mutationCrapExact": null,
"sourceFile": null,
"firstLine": null
}
],
"classes": [
{
"class": "demo.Classifier",
"lcom4": 2,
"methodGroups": [
[
"classify",
"normalize",
"retry"
],
[
"compare",
"describe"
]
],
"efferentCoupling": 1,
"afferentCoupling": 0,
"complexity": 11,
"killed": 6,
"denominator": 11,
"mutationScore": 0.5454545454545455,
"changeRisk": null,
"changeRiskExact": null,
"changeRiskReasons": [
"method-not-scored:retry(I)I"
]
},
{
"class": "demo.Grade",
"lcom4": null,
"methodGroups": [],
"efferentCoupling": 0,
"afferentCoupling": 1,
"complexity": null,
"killed": null,
"denominator": null,
"mutationScore": null,
"changeRisk": null,
"changeRiskExact": null,
"changeRiskReasons": [
"no-scored-methods"
]
}
]
}