Grundsätzlich möchte es ein Prädiktor für das Änderungsrisiko einer Methode sein.
Es hat zwei Faktoren:
- Codekomplexität der Methode (
cyclomatic complexity
), auch bekannt als wie viele Entscheidungspfade in dieser Methode vorhanden sind : comp(m)
.
- Wie testbar ist diese Methode (über automatisierte Tests, die von einem Tool zur Codeabdeckung bereitgestellt werden)? Grundsätzlich misst dies, wie viele Entscheidungen in diesem Code automatisch testbar sind.
Wenn die Methode zu 100% abgedeckt ist, wird das Änderungsrisiko nur mit der Komplexität der Methode als gleichwertig angesehen : C.R.A.P.(m) = comp(m)
.
Wenn die Methode eine Abdeckung von 0% aufweist, wird das Änderungsrisiko als Polinom zweiten Grades im Komplexitätsmaß betrachtet (wenn Sie eine Änderung des Codepfads nicht testen können, erhöht dies das Bruchrisiko): C.R.A.P.(m) = comp(m)^2 + comp(m)
Hoffentlich hilft dir das.
Mir ist gerade aufgefallen, dass ich nur die halbe Antwort (den gelesenen Teil) gebe. Wie Sie es verbessern können, sollte ziemlich klar sein, wenn Sie die Argumentation des Index verstehen. Eine viel klarere Erklärung findet sich in der Antwort von @ edorian .
Die Kurzgeschichte lautet: Schreiben Sie Tests, bis Sie eine nahezu 100% ige Abdeckung haben, und überarbeiten Sie anschließend die Methoden, um die zyklomatische Komplexität zu verringern. Sie können versuchen, vor dem Ausführen von Tests eine Umgestaltung vorzunehmen. Abhängig von der tatsächlichen Komplexität der Methode besteht jedoch die Gefahr, dass ein Bruch auftritt, wenn Sie (aufgrund der Komplexität) nicht alle Konsequenzen der von Ihnen vorgenommenen Änderung begründen können.