4.0 Einführung zu Teil 4: Code- und Qualitätsmetriken
Teil 2 und Teil 3 maßen, wie sich Arbeit bewegt und wie es den Menschen geht, die sie erledigen. Dieser Teil wendet sich dem Artefakt selbst zu: dem Code, und dem, was eine Metrik über seine Qualität sagen kann und nicht sagen kann. Code-Qualitätsmetriken haben die längste Geschichte jeder Metrikfamilie in diesem Buch, zyklomatische Komplexität stammt aus dem Jahr 1976, und die längste Geschichte des Missbrauchs dazu. Dieser Teil nimmt diese Geschichte ernst: jedes Thema benennt ein echt nützliches Signal zusammen mit dem konkreten, gut dokumentierten Weg, wie dieses Signal manipuliert wird, sobald es zum Ziel wird.
Der rote Faden, der diese sechs Themen verbindet, ist, dass keine einzelne Code-Metrik Qualität für sich allein erfasst, und mehrere der beliebtesten aktiv in die Irre führen, wenn sie isoliert verfolgt werden. Ein hoher Testabdeckungs-Prozentsatz kann mit Tests koexistieren, die nichts Bedeutsames verifizieren. Ein niedriger Komplexitätswert kann mit Code koexistieren, der technisch einfach, aber konzeptionell inkohärent ist. Die Themen dieses Teils paaren jeweils ihre Hauptmetrik mit der ergänzenden Prüfung, die ihren konkreten blinden Fleck fängt: Komplexität mit Wartbarkeitskontext, Abdeckung mit Mutationstests, Fluktuation mit Hotspot-Analyse, statische Analyse mit menschlichem Urteilsvermögen, und technische Schuld mit priorisierter Behebung statt eines stetig wachsenden, ungeliebten Rückstands.
Für große Teams sind Code- und Qualitätsmetriken das, was es möglich macht, eine Codebasis zu verwalten, die zu groß ist, als dass eine einzelne Person sie im Kopf behalten könnte. Ein Fünf-Personen-Team kann sich auf geteiltes stillschweigendes Wissen darüber verlassen, welche Teile des Systems zerbrechlich sind; eine Organisation mit fünfhundert Ingenieurinnen und Ingenieuren über Dutzende Services hinweg braucht instrumentierte Signale, um diese Zerbrechlichkeit systematisch zu finden. Konzerne und Behörden, die oft Codebasen tragen, die in Jahrzehnten statt Jahren gemessen werden, verlassen sich auf die Metriken dieses Teils, um zu priorisieren, wo begrenzte Wartungsinvestition den größten Nutzen bringt.
Themen in diesem Teil
- 4.1 Code-Komplexitätsmetriken: Zyklomatische Komplexität und ihre Verwandten, was sie tatsächlich vorhersagen, und ihr gut dokumentiertes Manipulationsrisiko.
- 4.2 Testabdeckung und Testwirksamkeit: Warum ein Abdeckungs-Prozentsatz allein weniger sagt, als er zu sagen scheint, und wie Mutationstests die Lücke schließen.
- 4.3 Code-Fluktuation und Hotspot-Analyse: Den konkreten, kleinen Bruchteil einer Codebasis finden, der für einen unverhältnismäßigen Anteil an Fehlern und Wartungskosten verantwortlich ist.
- 4.4 Statische Analyse und Code-Smell-Metriken: Automatisierte Code-Qualitätssignale, ihr echter Wert, und ihre Grenzen gegenüber menschlichem Urteilsvermögen.
- 4.5 Messung technischer Schuld: Eine unsichtbare, informell besprochene Verbindlichkeit in ein sichtbares, priorisiertes, handhabbares Portfolio verwandeln.
- 4.6 Dokumentations- und Wissensmetriken: Messen, ob Dokumentation tatsächlich hilft, nicht nur, ob sie existiert.
Wie diese Themen zusammenhängen
Diese sechs Themen bauen von der kleinsten Code-Einheit nach außen auf. Thema 4.1 beginnt auf der Ebene einer einzelnen Funktion oder Methode; Thema 4.2 fragt, ob Tests tatsächlich das Verhalten dieser Einheit verifizieren; Thema 4.3 zoomt heraus, um zu finden, welche Dateien und Module über die gesamte Codebasis hinweg zuerst Aufmerksamkeit verdienen; Thema 4.4 fügt die automatisierte Tooling-Schicht hinzu, die kontinuierlich über all das hinweg scannt; Thema 4.5 verwandelt die angesammelten Erkenntnisse aller vier in einen verwalteten, priorisierten Rückstand statt einer diffusen, unadressierten Sorge; und Thema 4.6 schließt den Teil ab, indem es misst, ob das Wissen, das nötig ist, um all das sicher zu warten, tatsächlich dokumentiert und auffindbar ist.
Dieser Teil verbindet sich direkt zurück zu den Stabilitätsmetriken aus Teil 2: die Änderungsfehlerrate (Thema 2.10) ist größtenteils eine nachgelagerte Konsequenz der Code-Qualität, die dieser Teil vorgelagert misst. Er verbindet sich auch vorwärts zu den Produktmetriken aus Teil 5, da entwichene Fehler (Thema 5.1) häufig auf genau die Komplexitäts-Hotspots und Abdeckungslücken zurückführbar sind, die dieser Teil aufdecken soll, bevor sie überhaupt die Produktion erreichen.