SlideShare una empresa de Scribd logo
1 de 28
Descargar para leer sin conexión
Die Macht der Zahlen



Software-Metriken mit Open Source Werkzeugen




             Gerrit Beine
            mail@gerritbeine.com


                                               1
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
Wie alles begann...




                      3
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
Und dann geschah Folgendes...


 1   // ...
 2
 3   /**
 4     * Delegates to privateMethod
 5     */
 6   public void doSomething() {
 7        this.doSomethingReally();
 8   }
 9
10   private void doSomethingReally() {
11
12   }
13
14   // ...




                                               5
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
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
Was lernen wir daraus?




Wer nur 80% anstrebt erreicht davon auch nur 80%!
         (Insgesamt sind das dann 64%)




                                                8
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
Warum nur Open Source Werkzeuge?




                                   10
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
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
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
Tools & Tipps




                14
Tools & Tipps


●   Vergesst die LOC – Lines of Code interpretiert jeder anders!
●   Stattdessen besser: NCSS – Non Commenting Source Statements als Meßgrundlage

●   Interessante Fakten
     ●   avg NCSS / Klasse
     ●   avg NCSS / Methode
     ●   avg Complexity / Methode
     ●   avg Warnings / NCSS
     ●   avg Errors / NCSS
     ●   Abdeckungsgrad der API-Dokumentation
●   Wichtig dabei sind die Trends!

●   Metriken immer mit Code Reviews verbinden




                                                                                   15
Wie ermittelt man diese Werte?


●   Unter Java
     ●   PMD (http://pmd.sourceforge.net/)
         Source Code Analyse, Regelbasiert, Komplexität und Fehlersuche
     ●   FindBugs (http://findbugs.sourceforge.net/)
         Byte Code Analyse, Musterbasiert, Fehlersuche
     ●   JavaNCSS (http://www.kclee.de/clemens/java/javancss/)
         Source Code Analyse, Fakten sammeln
     ●   CheckStyle (http://checkstyle.sourceforge.net/)
         Source Code Analyse, Regelbasiert, Komplexität und Konventionen
     ●   JDepend (http://clarkware.com/software/JDepend.html)
         Byte Code Analyse, Abhängigkeiten, Martin-Metriken
     ●   OOMetrics & DependencyFinder (http://depfind.sourceforge.net/)
         Byte Code Analyse, Abhängigkeiten, Martin-Metriken, Chidamber & Kemerer
     ●   Sonar (http://www.sonarsource.org/)
         Qualitäts-Management, integriert etliche der genannten Werkzeuge




                                                                                   16
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
Beispiel einer PMD-Regel




                           18
new DateTime() mit PMD verbieten


 1   <rule name="DontUseNewDateTime"
 2     message="Use of new DateTime() is not allowed"
 3     class="net.sourceforge.pmd.rules.XPathRule">
 4     <description>
 5     New DateTime object should be created using DateTimeFactory
 6     </description>
 7     <properties>
 8       <property name="xpath">
 9       <value>
10   <![CDATA[
11   //VariableDeclarator[../Type[@Array='false']]
12   //AllocationExpression/ClassOrInterfaceType[@Image='DateTime'] |
13   //Statement//AllocationExpression/ClassOrInterfaceType[@Image='DateTime']
14   ]]>
15       </value>
16       </property>
17     </properties>
18     <priority>3</priority>
19     <example>
20   <![CDATA[
21     /* example code */
22   ]]>
23     </example>
24   </rule>




                                                                                 19
Beispiel Martin-Metriken




                           20
Verteilung der Abstraktheit




                              21
Verteilung der Instabilität




                              22
Martin-Distanz




                 23
Auswählen von Metriken




                         24
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
Kommunikation & Anwendung von Metriken




                                         26
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
Viel Spaß noch!




            Gerrit Beine
            Stadtparking 18
            08523 Plauen
            http://www.gerritbeine.com/



                                          28

Más contenido relacionado

Similar a Die Macht der Zahlen

Qualitätssicherung in Webprojekten
Qualitätssicherung in WebprojektenQualitätssicherung in Webprojekten
Qualitätssicherung in Webprojekten
Sebastian Springer
 
96% macoun 2013
96% macoun 201396% macoun 2013
96% macoun 2013
Maxim Zaks
 

Similar a Die Macht der Zahlen (20)

Next Level Unit Testing
Next Level Unit TestingNext Level Unit Testing
Next Level Unit Testing
 
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017
 
Prince2 - Wissen kompakt
Prince2 - Wissen kompaktPrince2 - Wissen kompakt
Prince2 - Wissen kompakt
 
Softwaremonitoring mit prometheus
Softwaremonitoring mit prometheusSoftwaremonitoring mit prometheus
Softwaremonitoring mit prometheus
 
Metrics we can gain from our (Kanban) system and what we can learn from ..
Metrics we can gain from our (Kanban) system and what we can learn from .. Metrics we can gain from our (Kanban) system and what we can learn from ..
Metrics we can gain from our (Kanban) system and what we can learn from ..
 
Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...
Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...
Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...
 
Autonomic Computing - Diagnosis - Pinpoint Summary
Autonomic Computing - Diagnosis - Pinpoint SummaryAutonomic Computing - Diagnosis - Pinpoint Summary
Autonomic Computing - Diagnosis - Pinpoint Summary
 
Open source business apps
Open source business appsOpen source business apps
Open source business apps
 
Qualitätssicherung in Webprojekten
Qualitätssicherung in WebprojektenQualitätssicherung in Webprojekten
Qualitätssicherung in Webprojekten
 
Softwarequalität - Einführung in eine neue Vorlesung
Softwarequalität - Einführung in eine neue VorlesungSoftwarequalität - Einführung in eine neue Vorlesung
Softwarequalität - Einführung in eine neue Vorlesung
 
Agile Teamarbeit - wie Startups Projekte managen und die Zusammenarbeit fördern
Agile Teamarbeit - wie Startups Projekte managen und die Zusammenarbeit fördernAgile Teamarbeit - wie Startups Projekte managen und die Zusammenarbeit fördern
Agile Teamarbeit - wie Startups Projekte managen und die Zusammenarbeit fördern
 
Swarovski Wie mobile-optimierte Websites Umsatz und das neue Google Rating st...
Swarovski Wie mobile-optimierte Websites Umsatz und das neue Google Rating st...Swarovski Wie mobile-optimierte Websites Umsatz und das neue Google Rating st...
Swarovski Wie mobile-optimierte Websites Umsatz und das neue Google Rating st...
 
Bewertung von Qualitätsschulden mit dynamischen Daten aus Test und Betrieb - ...
Bewertung von Qualitätsschulden mit dynamischen Daten aus Test und Betrieb - ...Bewertung von Qualitätsschulden mit dynamischen Daten aus Test und Betrieb - ...
Bewertung von Qualitätsschulden mit dynamischen Daten aus Test und Betrieb - ...
 
Xidra 2016 DevOps
Xidra 2016 DevOpsXidra 2016 DevOps
Xidra 2016 DevOps
 
Cloud Migration mit KI: der Turbo
Cloud Migration mit KI: der Turbo Cloud Migration mit KI: der Turbo
Cloud Migration mit KI: der Turbo
 
distributionslogistik kuhlang_handout
distributionslogistik kuhlang_handoutdistributionslogistik kuhlang_handout
distributionslogistik kuhlang_handout
 
R für Data Science und Machine Learning
R für Data Science und Machine LearningR für Data Science und Machine Learning
R für Data Science und Machine Learning
 
"Es rechnet sich!" - Argumente für den Einsatz von PHPUnit
"Es rechnet sich!" - Argumente für den Einsatz von PHPUnit"Es rechnet sich!" - Argumente für den Einsatz von PHPUnit
"Es rechnet sich!" - Argumente für den Einsatz von PHPUnit
 
Continuous Integration für PHP
Continuous Integration für PHPContinuous Integration für PHP
Continuous Integration für PHP
 
96% macoun 2013
96% macoun 201396% macoun 2013
96% macoun 2013
 

Más de Gerrit Beine

Backlog Priorisierung mit Cost of Delay & Monte Carlo Simulationen
Backlog Priorisierung mit Cost of Delay & Monte Carlo SimulationenBacklog Priorisierung mit Cost of Delay & Monte Carlo Simulationen
Backlog Priorisierung mit Cost of Delay & Monte Carlo Simulationen
Gerrit Beine
 

Más de Gerrit Beine (20)

Auf Lesereise mit Frit und Fred
Auf Lesereise mit Frit und FredAuf Lesereise mit Frit und Fred
Auf Lesereise mit Frit und Fred
 
Mastering Cargo Cult
Mastering Cargo CultMastering Cargo Cult
Mastering Cargo Cult
 
Conway’s Law & Soziologie in der Software-Architektur
Conway’s Law & Soziologie in der Software-ArchitekturConway’s Law & Soziologie in der Software-Architektur
Conway’s Law & Soziologie in der Software-Architektur
 
Beyond User Stories - Backlogs priorisieren, wenn es anspruchsvoll wird
Beyond User Stories - Backlogs priorisieren, wenn es anspruchsvoll wirdBeyond User Stories - Backlogs priorisieren, wenn es anspruchsvoll wird
Beyond User Stories - Backlogs priorisieren, wenn es anspruchsvoll wird
 
Mastering Cargo Cult - Dunning, Kruger & die Agile Bias Curve
Mastering Cargo Cult - Dunning, Kruger & die Agile Bias CurveMastering Cargo Cult - Dunning, Kruger & die Agile Bias Curve
Mastering Cargo Cult - Dunning, Kruger & die Agile Bias Curve
 
Gut genug - Rahmenbedingungen für agile Architekturen
Gut genug - Rahmenbedingungen für agile ArchitekturenGut genug - Rahmenbedingungen für agile Architekturen
Gut genug - Rahmenbedingungen für agile Architekturen
 
Beyond Agile – Ungewissheit mit der Real Option Theory meistern
Beyond Agile – Ungewissheit mit der Real Option Theory meisternBeyond Agile – Ungewissheit mit der Real Option Theory meistern
Beyond Agile – Ungewissheit mit der Real Option Theory meistern
 
Backlog Priorisierung 2020: Wertmodelle & Simulationen von Intangibles zur Pr...
Backlog Priorisierung 2020: Wertmodelle & Simulationen von Intangibles zur Pr...Backlog Priorisierung 2020: Wertmodelle & Simulationen von Intangibles zur Pr...
Backlog Priorisierung 2020: Wertmodelle & Simulationen von Intangibles zur Pr...
 
Backlog Priorisierung mit Cost of Delay & Monte Carlo Simulationen
Backlog Priorisierung mit Cost of Delay & Monte Carlo SimulationenBacklog Priorisierung mit Cost of Delay & Monte Carlo Simulationen
Backlog Priorisierung mit Cost of Delay & Monte Carlo Simulationen
 
Der hyperbolische Thread-Koeffizient
Der hyperbolische Thread-KoeffizientDer hyperbolische Thread-Koeffizient
Der hyperbolische Thread-Koeffizient
 
Broken by Design
Broken by DesignBroken by Design
Broken by Design
 
Vom Projektleiter zum Product Owner
Vom Projektleiter zum Product OwnerVom Projektleiter zum Product Owner
Vom Projektleiter zum Product Owner
 
Die Testedimaryp - Über die Antimonie des agilen Testens in der Praxis
Die Testedimaryp - Über die Antimonie des agilen Testens in der PraxisDie Testedimaryp - Über die Antimonie des agilen Testens in der Praxis
Die Testedimaryp - Über die Antimonie des agilen Testens in der Praxis
 
Vom Projektleiter zum Product Owner
Vom Projektleiter zum Product OwnerVom Projektleiter zum Product Owner
Vom Projektleiter zum Product Owner
 
Antifragilität
AntifragilitätAntifragilität
Antifragilität
 
Technische Schulden - mit Notizen
Technische Schulden - mit NotizenTechnische Schulden - mit Notizen
Technische Schulden - mit Notizen
 
Technische Schulden
Technische SchuldenTechnische Schulden
Technische Schulden
 
Die Product Owner Toolbox
Die Product Owner ToolboxDie Product Owner Toolbox
Die Product Owner Toolbox
 
Agile Coach zu werden ist nicht schwer... - mit Notizen
Agile Coach zu werden ist nicht schwer... - mit NotizenAgile Coach zu werden ist nicht schwer... - mit Notizen
Agile Coach zu werden ist nicht schwer... - mit Notizen
 
Agile Coach zu werden ist nicht schwer...
Agile Coach zu werden ist nicht schwer...Agile Coach zu werden ist nicht schwer...
Agile Coach zu werden ist nicht schwer...
 

Die Macht der Zahlen

  • 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
  • 5. Und dann geschah Folgendes... 1 // ... 2 3 /** 4 * Delegates to privateMethod 5 */ 6 public void doSomething() { 7 this.doSomethingReally(); 8 } 9 10 private void doSomethingReally() { 11 12 } 13 14 // ... 5
  • 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
  • 10. Warum nur Open Source Werkzeuge? 10
  • 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
  • 15. Tools & Tipps ● Vergesst die LOC – Lines of Code interpretiert jeder anders! ● Stattdessen besser: NCSS – Non Commenting Source Statements als Meßgrundlage ● Interessante Fakten ● avg NCSS / Klasse ● avg NCSS / Methode ● avg Complexity / Methode ● avg Warnings / NCSS ● avg Errors / NCSS ● Abdeckungsgrad der API-Dokumentation ● Wichtig dabei sind die Trends! ● Metriken immer mit Code Reviews verbinden 15
  • 16. Wie ermittelt man diese Werte? ● Unter Java ● PMD (http://pmd.sourceforge.net/) Source Code Analyse, Regelbasiert, Komplexität und Fehlersuche ● FindBugs (http://findbugs.sourceforge.net/) Byte Code Analyse, Musterbasiert, Fehlersuche ● JavaNCSS (http://www.kclee.de/clemens/java/javancss/) Source Code Analyse, Fakten sammeln ● CheckStyle (http://checkstyle.sourceforge.net/) Source Code Analyse, Regelbasiert, Komplexität und Konventionen ● JDepend (http://clarkware.com/software/JDepend.html) Byte Code Analyse, Abhängigkeiten, Martin-Metriken ● OOMetrics & DependencyFinder (http://depfind.sourceforge.net/) Byte Code Analyse, Abhängigkeiten, Martin-Metriken, Chidamber & Kemerer ● Sonar (http://www.sonarsource.org/) Qualitäts-Management, integriert etliche der genannten Werkzeuge 16
  • 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
  • 19. new DateTime() mit PMD verbieten 1 <rule name="DontUseNewDateTime" 2 message="Use of new DateTime() is not allowed" 3 class="net.sourceforge.pmd.rules.XPathRule"> 4 <description> 5 New DateTime object should be created using DateTimeFactory 6 </description> 7 <properties> 8 <property name="xpath"> 9 <value> 10 <![CDATA[ 11 //VariableDeclarator[../Type[@Array='false']] 12 //AllocationExpression/ClassOrInterfaceType[@Image='DateTime'] | 13 //Statement//AllocationExpression/ClassOrInterfaceType[@Image='DateTime'] 14 ]]> 15 </value> 16 </property> 17 </properties> 18 <priority>3</priority> 19 <example> 20 <![CDATA[ 21 /* example code */ 22 ]]> 23 </example> 24 </rule> 19
  • 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
  • 26. Kommunikation & Anwendung von Metriken 26
  • 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
  • 28. Viel Spaß noch! Gerrit Beine Stadtparking 18 08523 Plauen http://www.gerritbeine.com/ 28