1. Die Macht der Zahlen
Software-Metriken mit Open Source Werkzeugen
Gerrit Beine
mail@gerritbeine.com
1
2. Ziel des Vortrags
● Pro und Contra von Softwaremessungen abwägen
● Vorstellungen vermitteln, darüber
● was Metriken im positiven Sinne bewirken können und
● was Metriken in Projekten anrichten können
● Einige Tools vorstellen, die sich gut zur Erstellung von Metriken eignen
● Einen Überblick schaffen und zum Einsatz von Metriken motivieren
● Was nicht im Vortrag behandelt wird
● Laufzeitmetriken, Testmetriken und Anforderungsmetriken
● Details zu den vorgestellten Metriken
● Details zu den vorgestellten Tools
2
4. Wie alles begann...
● Gegeben sei ein Projekt mit relativ hoher Mitarbeiterfluktuation
● Neue Mitarbeiter benötigen lange, um sich einzuarbeiten
● Die erste Frage: Warum?
● Die Antwort: Weil alles so kompliziert ist!
● Die Lösung: Wir dokumentieren!
● Aber Moment...
● Dokumentieren ist aufwändig und kostet Zeit
● Niemand macht es gerne
● Die bessere Lösung: Wir dokumentieren nur die Public API!
4
6. Wir geben nicht auf
● Die Erkenntnis: So wird das nix!
● Der nächste Schritt: alle Methoden müssen dokumentiert werden!
● Aber Moment...
● Die 80/20 Regel sagt, dass wir eh nur 80% schaffen!
● Die bessere Lösung: 80% aller Methoden müssen dokumentiert werden!
6
7. Jetzt passierte dies:
1 // ...
2
3 /**
4 * Return X
5 */
6 public int getX() {
7 return this.x;
8 }
9
10 /**
11 * Return Y
12 */
13 public int getY() {
14 return this.Y;
15 }
16
17 // ...
18
19 public void doSomethingExtremeComplex() {
20
21 }
22
23 // ...
7
8. Was lernen wir daraus?
Wer nur 80% anstrebt erreicht davon auch nur 80%!
(Insgesamt sind das dann 64%)
8
9. Wie es weiter ging...
● Beschluss, dass alle Klassen, Schnittstellen, Methoden und Attribute zu 100%
dokumentiert werden müssen.
● Aber Moment...
● Auf den Inhalt kommt es an!
● Was eine Methode macht, kann ein Entwickler selbst sehen.
● Das Warum ist entscheidend
● Also statt Prosa-Text einen Link auf die User Story oder das Requirement, die die Methode,
Klasse... begründen
● Erreicht: 93% Dokumentation (gemessen)
● Neue Entwickler waren nach zwei Wochen fit
9
11. Warum nur Open Source Werkzeuge?
● Der wichtigste Grund: Transparenz
● Außerdem: Verfügbarkeit
● Metriken, die nicht verstanden werden (können), werden in Frage gestellt
● Metriken, die nicht jeder selbst anwenden kann, sind zu schwerfällig
● Open Source Werkzeuge sind frei verfügbar und machen transparent was sie tun
11
12. Der Maintainability Index
Die Formel ● MI < 65: sehr schlechte Qualität
● 65 < MI < 85: mittlere Qualität
● 85 < MI: sehr gute Qualität
MI=
171 − 5, 2 × ln(aveV ) ● Für ein Projekt ermittelter Wert (mit
− 0, 23 × aveVG2 proprietärem Tool): 165
− 16, 2 × ln(aveLOC)
● Das muss ein gutes Projekt sein!
● Von Hand berechnet: 28
12
13. Maintainability Index
● Die Anwendung enthält nur 35 Entitäten
● Die Sicht links ist die Package-Ebene
● Die durchschnittliche Anzahl von
Abhängigkeiten pro Package ist 35
● Was ist der Maintainability-Index in dem
Fall wert?
● Das Bild versteht jeder, die 165 nicht!
13
17. Wie ermittelt man diese Werte?
● Unter PHP
● PHP Depend (http://pdepend.org/)
Pendant zu JDepend
● PHP Mess Detector (http://phpmd.org/)
Pendant zu PMD bzw. CheckStyle, haupsächlich an PMD angelehnt
● PHP_CodeSniffer (http://pear.php.net/package/PHP_CodeSniffer)
Pendant zu CheckStyle
● Unter Perl
● use strict; use warnings;
● Perl::Critic (siehe Vortrag von Renée Bäcker aus dem letzten Jahr)
● Perl::Metrics, Perl::Metrics::Lite, Perl::Metrics::Simple
17
25. Auswählen von Metriken
● Auswahl ist im Allgemeinen nicht trivial
● Nicht jede Metriken passt zu jedem Projekt oder Entwickler
● Gute Strategie ist GQM (Goal – Question – Metric)
● Zuerst Ziel festlegen
● Dann konkrete Frage(n) formulieren
● Schließlich Metrik(en) auswählen, die diese formale Antwort gibt
● Eine gute Einführung liefert Wikipedia:
http://de.wikipedia.org/wiki/Goal_Question_Metric
25
27. Kommunikation & Anwendung von Metriken
● Metriken bieten Chancen und bergen Gefahren
● Metriken müssen abgestimmt und verstanden sein
● Metriken liefern immer nur Indizien
● Metriken, die mit absoluten Zahlen arbeiten, sollten immer im Trend betrachtet werden
● Abweichungen identifizieren und begründen – oder eliminieren
● Es gibt nur drei Arten von Problemen
● Bedrohende – für die gilt Null-Toleranz
● Unschönheiten – für die gilt eine Obergrenze, z.B. 8% der NCSS
● Egales – das sollte unbedingt ignoriert werden
● Tools sollten in den Entwicklungsprozess integriert werden
● Continuous Integration z.B. in Jenkins & Co.
● Ins Source Code Repository, z.B. über den pre-commit Hook von Subversion
27