# language: de Funktionalität: Change-Risk je Klasse aus Mutation-CRAP, Kohäsion und Kopplung Als Entwickler möchte ich in einem Wert sehen, wie riskant eine Änderung an einer Klasse ist, ohne dass dieser Wert Mutation-CRAP oder das Gate verändert. @MC-CR-001 Szenario: Change-Risk rechnet Mutation-CRAP über die ganze Klasse … damit eine Klasse auffällt, deren Mutanten überleben, auch wenn keine einzelne Methode auffällt. Angenommen eine Klasse Ablauf mit LCOM4 1 und ohne Abhängigkeiten zu anderen Klassen des Projekts Und 20 bewerteten Methoden mit Komplexität 1, von denen jede 1 Mutante hat Und 10 davon werden getötet, 10 überleben Wenn der Report geschrieben wird Dann hat jede Methode einzeln Mutation-CRAP höchstens 2 Und Ablauf hat im Abschnitt "classes" die Komplexität 20 und die Mutation-Score 10/20 Und Ablauf hat changeRisk 20² · (1 − 1/2)³ + 20 = 70 @MC-CR-002 Szenario: Kohäsion und Kopplung verstärken das Risiko der Klasse … damit eine Klasse, die mehrere Dinge tut oder von vielen abhängt, bei gleicher Testqualität riskanter gilt. Angenommen eine Klasse Abrechnung mit Komplexität 10 und Mutation-Score 1 Und Abrechnung hat lcom4 3 und efferentCoupling 10 Wenn der Report geschrieben wird Dann hat Abrechnung changeRisk 10 · (1 + (3 − 1)/2) · (1 + 10/20) = 30 Und eine Klasse mit lcom4 1 und efferentCoupling 0 hat changeRisk gleich ihrer Basis Und changeRisk wird als exakter Bruch berechnet und nur für die Anzeige gerundet @MC-CR-003 Szenario: Nur bewertete Methoden zählen, verschachtelte Klassen gehören zur Top-Level-Klasse … damit jedes Gebäude der Code-City genau einen Wert hat und Methoden ohne Mutanten das Risiko nicht verdünnen. Angenommen eine Klasse Lager mit einer bewerteten Methode der Komplexität 4 Und einer verschachtelten Klasse Lager.Fach mit einer bewerteten Methode der Komplexität 2 Und einer Methode ohne Mutanten und einer durch Ausschlussregel ausgeschlossenen Methode Wenn der Report geschrieben wird Dann hat Lager die Komplexität 6, und die Mutanten beider bewerteter Methoden bilden die Mutation-Score Und es gibt keinen Eintrag Lager$Fach Und eine Klasse ohne bewertete Methode hat changeRisk null, nicht 0 Und eine Klasse mit lcom4 null zählt bei der Kohäsion wie lcom4 1 @MC-CR-004 Szenario: Eine unklar bewertete Methode sperrt das Change-Risk ihrer Klasse … damit eine Klasse nicht harmloser erscheint, nur weil ein Teil ihrer Mutanten nicht auswertbar ist. Angenommen eine Klasse Import mit zwei bewerteten Methoden Und einer Methode im Zustand INCONCLUSIVE Wenn der Report geschrieben wird Dann hat Import changeRisk null Und der Grund "method-not-scored" mit der betroffenen Methode steht beim Klasseneintrag Und lcom4, efferentCoupling und afferentCoupling von Import bleiben unverändert Und dasselbe gilt für eine Methode im Zustand COMPLEXITY_UNAVAILABLE @MC-CR-005 Szenario: Change-Risk ändert weder Mutation-CRAP noch das Gate … damit das Gate erklärbar bleibt: jede Verletzung nennt einen Einzelwert und seinen Grenzwert. Angenommen ein Projekt mit maxMutationCrap 10, maxLcom4 3 und maxEfferentCoupling 20 Und eine Klasse mit changeRisk 500, deren Einzelwerte alle Grenzwerte einhalten Wenn der Gate-Task läuft Dann besteht der Build das Gate Und die Mutation-CRAP-Werte der Methoden sind dieselben wie ohne Change-Risk Und es gibt keinen Grenzwert für changeRisk @MC-CR-006 Szenario: Der Markdown-Report nennt die Klassen mit dem höchsten Change-Risk … damit man sieht, wo eine Änderung am ehesten etwas kaputt macht, und warum. Angenommen ein Projekt mit 12 Klassen, die ein changeRisk haben, und einer mit changeRisk null Wenn der Report geschrieben wird Dann enthält der Markdown-Report einen Abschnitt "Change Risk" Und dessen Tabelle zeigt die 10 Klassen mit dem höchsten changeRisk, absteigend Und jede Zeile nennt changeRisk, Komplexität, Mutation-Score, lcom4 und efferentCoupling der Klasse Und die Klasse mit changeRisk null fehlt in der Tabelle