Was bringt TDD wirklich? Wissensspritze vom 6..2009, Christian Federspiel Catalysts GmbH
McCabe Metrik CCN Die Cyclomatic Complexity Number, misst die Anzahl der möglichen Pfade durch einen Code. Die Metrik wurde vor mehr als 30 Jahren nämlich 976 veröffentlicht. Genug Zeit und Code, um eindlich ein Aussage über die Anwendbarkeit der Metrik zu treffen! Was bringt TDD wirklich? www.catalysts.cc, 2009 2
CCN über Bugs Viele Untersuchungen ermitteln die CCN pro Datei (und nicht pro Methode). Bug Tracking Programme speichern den Dateinamen pro gefundenen Fehler. Fehlerwahrscheinlichkeit CCN pro Datei Tester Augen auf! Dateien mit einem CCN von haben eine 28%ige 38 haben eine 50%ige 74 haben eine 98%ige Fehler-Wahrscheinlichkeit. Quelle: An Objective Measure of Code Quality Mark Dixon Was bringt TDD wirklich? www.catalysts.cc, 2009 3
Zipf Verteilung Was folgt der Zipf Verteilung? Verteilung von Worten in Texten die, und kommen sehr häufig vor Zipf und doppel-logarithmisch kommen sehr selten vor Weitere Beispiele: Größenverteilung von Firmen Einige wenige Firmen haben sehr viele Mitarbeiter Die meisten Firmen haben keine Mitarbeiter Verzehnfacht man die Anzahl der Angestellten, dann sinkt die Anzahl der Firmen, die so viele Angestellte haben, auf ein Zehntel. Verteilung der Zugriffe auf Internet Seiten Google.com, apple.com haben Millionen Zugriffe pro Tag Die meisten Seiten im Internet haben 0 oder Zugriff pro Tag Quelle: http://en.wikipedia.org/wiki/zipf%27s_law Was bringt TDD wirklich? www.catalysts.cc, 2009 4
Einfaches Gesamtmaß für Komplexität Steigung der Regressionsgeraden = 2,7 Graph: Anzahl der Methoden mit gleichen CNN über CNN Logarithmieren beide Achsen des Graphen Ermitteln der Regressionsgeraden Berechnung Absolutwert der Steigung der Geraden Was bringt TDD wirklich? www.catalysts.cc, 2009 5
TDD und Steigungen Codebase Steigung Nach TDD entwickelt Spring 2.0. 2.78 JA Junit 3.8. 2.49 JA Log4J 2.43 JA MarsProject 2.79 2.33 JA Ant.7.0 2.25 JA Xcool.93 Nein Itext.88 Nein Syncbuilder,84 Nein Es scheint als ob Code nach TDD entwickelt immer Steigungen über 2 aufweist, während der restliche Code die Grenze von 2 nicht überschreiten kann. Das heißt: herkömmliche Vorgehensweise in der Entwicklung von Software überschreitet unweigerlich eine Komplexitätsgrenze. Dadurch verursachte Fehler treiben die Kosten überdurchschnittlich stark in die Höhe! Was bringt TDD wirklich? www.catalysts.cc, 2009 6
Komplexitätsmauer Durch TDD kann der Code die Komplexitätsmauer durchbrechen. Das kann ein wesentlicher Beitrag zur Senkung Ihrer Entwicklungskosten sein. Steigen Sie ein in die F8 Hornet und durchbrechen Sie die Schallmauer! Was bringt TDD wirklich? www.catalysts.cc, 2009 7
CCD Cumulative Component Dependency CCD ist die Summe aller Objekte die benötigt werden, um ein Objekt zu testen. 5 4 3 2 N = 5 CCD(N) = 5 3 7 N = 7 CCD(N) = 7 3 7 N = CCD(N) = 39 7 4 3 2 4 9 2 2 3 N = 9 CCD(N) = 28 5 Was bringt TDD wirklich? www.catalysts.cc, 2009 8
Number of classes with a CCD within the range Anaylsieren eines Systems Eine fiktive Software (Komponente) hat Klassen. Für jede Klasse berechnen wir den CCD. Wir zeichnen ein Diagramm: Wie oft gibt es bestimmte CCD Werte in der Software? Der höchste CCD Wert ist. Wir teilen die CCD Werte.. in Bereiche ein:..2, 3..4, 5..6, 7..8, 9..0,..2. Wir zählen für jeden CCD-Wertebereich die Anzahl an Klassen 4 7 6 5 4 3 3 7 7 2 2 0..2 3..4 5..6 7..8 9..0..2 Range of CCD Was bringt TDD wirklich? www.catalysts.cc, 2009 9
Eclipse 3.0 CCD Verteilung 4500 4000 3500 ASTParser.java 3000 2500 2000 500 000 500 0 0-499 500-999 000-499 500-999 2000-2499 2500-2999 3000-3499 3500-3999 4000-4499 4500-4999 5000-5499 5500-5999 6000-6499 6500-6999 Eclipse hat im Wesentlichen eine gute Abhängigkeits Struktur. Aber:Wenn man die nützliche ASTParser Klasse wiederverwenden will, dann ist man von 572 zusätzlichen Eclipse Klassen abhängig. Wollen Sie das? Was bringt TDD wirklich? www.catalysts.cc, 2009 0
Gewünschte CCD Verteilung 800 700 600 500 400 300 200 00 0 0-49 50-99 Tame vs. Wicked Dependency Structures for a virtual 000 classes SW-System 00-49 50-99 200-249 250-299 300-349 Tame Wicked 350-399 400-449 450-499 500-549 550-599 600-649 650-699 Tame Zahme Komponent/Objekt Abhängigkeitsgraphen fallen schnell ab, bleiben flach! Subsysteme sollen stand alone sein. D.h. Es soll keine Kompilations-Abhängigkeiten zwischen Subsystemen geben! Was bringt TDD wirklich? www.catalysts.cc, 2009
Zusammenfassung. Je besser die Code Qualität, desto steiler die Steigung der linearisierten Zipf-Verteilung Refactorings damit steuern 2. Gutes Design drückt sich in schnell abfallende CCD Verteilungen aus. Diese bleiben flach. 3. Keine Code Duplikate automatische Überprüfung geben darüber Auskunft Was bringt TDD wirklich? www.catalysts.cc, 2009 2