Qualitätssicherung in PHP-Projekten

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    2 Favorites

    Qualitätssicherung in PHP-Projekten - Presentation Transcript

    1. Qualitätssicherung in PHP-Projekten Sebastian Bergmann http://sebastian-bergmann.de/
    2. Wer ich bin
      • Sebastian Bergmann
      • Diplom-Informatiker
      • Mitarbeit im PHP-Projekt seit 2000
      • Autor, Berater, Coach, Trainer
      • Entwickler bei eZ Systems AS
    3. Wer sind Sie?
      • Ihre Erfahrungen mit
        • QA in PHP-Projekten
        • Metriken für Software
        • Testen von Software
    4. Was ist „gute Software“?
      • Der kundenorientierte Programmierer sagt:
        • „Gute Software macht immer, was der Kunde möchte.“
      • Der objektorientierte Programmierer sagt:
        • „Gute Software ist objektorientierter Code.“
      • Der Design-Guru-Programmierer sagt:
        • „Gute Software entsteht aus der Anwendung erprobter Entwurfsmuster und -prinzipien. Objekte müssen lose gekoppelt und Code für Erweiterung offen, aber für Veränderung geschlossen sein.“
      Diese Seite enthält Material aus „Objektorientierte Analyse und Design von Kopf bis Fuß“, O'Reilly, 2007
    5. Softwarequalität
      • „Unter Softwarequalität versteht man die Gesamtheit der Merkmale und Merkmalswerte eines Softwareprodukts, die sich auf dessen Eignung beziehen, festgelegte oder vorausgesetzte Erfordernisse zu erfüllen.“ (Helmut Balzert)
    6. Messen von Softwarequalität
      • Eine Softwaremetrik ist eine Maßzahl für eine Eigenschaft (oder ein Qualitätsmerkmal) von Software
        • Funktion, die eine Software-Einheit in einen Zahlenwert abbildet (Wikipedia)
      • „You cannot control what you cannot measure.“ (Tom DeMarco)
    7. Messen von Softwarequalität Lines of Code
      • Textbasiertes Maß für den Programmumfang
      • Verschiedene Definitionen
        • Lines of Code (LOC)
        • Comment Lines of Code (CLOC)
        • Non-Comment Lines of Code (NCLOC)
        • Executable Lines of Code (ELOC)
      • Quotienten sind interessant
        • Verhältnis von CLOC / (E)LOC
    8. Messen von Softwarequalität Code Coverage
      • Das Maß besagt, welcher Anteil der Pfade, Zweige oder Anweisungen der Software bei Ausführung der Tests tatsächlich ausgeführt werden
        • C 0 -Coverage: Anweisungsüberdeckung
        • C 1 -Coverage: Zweigüberdeckung
        • C  -Coverage: Pfadüberdeckung
      • 100% Code Coverage sind notwendiges, aber nicht hinreichendes Kriterium für Testvollständigkeit
    9. Messen von Softwarequalität Zyklomatische Komplexität (McCabe)
      • Maß für die Komplexität einer Code-Einheit
      • Stammt aus der Graphentheorie, definiert für den Kontrollflussgraphen G des Moduls
        • z(G) = Kanten - Knoten + 2
      • Erhebung durch Zählen der Verzweigungen
        • if , for , foreach , while , case , catch , && , || , ternary operator ( ?: )
      • Intepretation
        • Anzahl der Ablaufmöglichkeiten des Moduls
          • Je mehr es sind, desto schwieriger ist das Testen
          • Höhere Komplexität führt zu mehr Fehlern
    10. Messen von Softwarequalität Zyklomatische Komplexität (McCabe) <?php function istSchaltjahr ( $jahr ) { if ( $jahr % 4 != 0 ) { return false ; } if ( $jahr % 100 != 0 ) { return true ; } if ( $jahr % 400 == 0 ) { return true ; } return false ; } 1 2 3 4
    11. Messen von Softwarequalität Zyklomatische Komplexität (McCabe) <?php function istSchaltjahr ( $jahr ) { return ((( $jahr % 4 == 0 ) && ( $jahr % 100 != 0 )) || ( $jahr % 400 == 0 )); } 1 2 3
    12. Messen von Softwarequalität Zyklomatische Komplexität (McCabe)
      • Erfahrungswerte
        • Zyklomatische Komplexität hat Recht. Immer.
        • PHP ist besser verständlich als Java.
          • Java
            • CCN > 10: Warnung
            • CCN > 20: Fehler
          • PHP
            • CCN > 20: Warnung
            • CCN > 35: Fehler
    13. Messen von Softwarequalität Change Risk Analysis and Predictions (CRAP) Index
      • Schätzt Aufwand, Schmerzen und Zeit ab, die benötigt werden, um eine Code-Einheit zu warten
      • „Verrechnet“ Code Coverage mit zyklomatischer Komplexität
        • Geringe Code Coverage ⇒ Hoher CRAP-Index
        • Hohe Code Coverage ⇒ CRAP-Index ≈ zykl. Kompl.
    14. Messen von Softwarequalität NPath Complexity
      • Maß für die Komplexität einer Code-Einheit
      • Anzahl der möglichen Ausführungspfade
        • und damit untere Schranke für die Anzahl der zur vollständigen Pfadüberdeckung benötigten Tests
      • Berücksichtigt im Gegensatz zur zyklomatischen Komplexität die Verschachtelung von Blöcken
    15. Messen von Softwarequalität NPath Complexity <?php function istSchaltjahr ( $jahr ) { if ( $jahr % 4 != 0 ) { return false ; } if ( $jahr % 100 != 0 ) { return true ; } if ( $jahr % 400 == 0 ) { return true ; } return false ; } 1 2 4 8
    16. Messen von Softwarequalität NPath Complexity <?php function istSchaltjahr ( $jahr ) { return ((( $jahr % 4 == 0 ) && ( $jahr % 100 != 0 )) || ( $jahr % 400 == 0 )); } 1
    17. Messen von Softwarequalität Objektorientierte Metriken
      • Klassenebene
        • Class Size (CSZ)
        • Class Interface Size (CIS)
        • Attribute Inheritance Factor (AIF), Attribute Hiding Factor (AHF)
        • Method Inheritance Factor (MIF), Method Hiding Factor (MHF)
        • Polymorphism Factor (PF)
        • Afferent Coupling (Ce), Efferent Coupling (Ce), Instability (I = Ce / (Ce+Ca))
        • Depth of Inheritance Tree (DIT)
        • Number of Children (NOC)
        • Number of Interfaces Implemented (IMPL)
        • Number of Variables (VARS)
        • Number of Non-Private Variables (VARSnp)
        • Number of Variables (VARSi)
        • Weighted Methods per Class (WMC)
        • Weighted Non-Private Methods per Class (WMCnp)
        • Weighted Inherited Methods per Class (WMCi)
    18. Messen von Softwarequalität Objektorientierte Metriken
      • Projektebene
        • Number of Interfaces (INTERFS)
        • Number of Abstract Classes (CLSa)
        • Number of Concrete Classes (CLSc)
        • Number of Classes (CLS)
        • Number of Root Classes (ROOTS)
        • Number of Leaf Classes (LEAFS)
        • Maximum Depth of Intheritance Tree (maxDIT)
    19. Testen von Software
      • Testen ist das Ausführen eines Programms, um Fehler zu finden
      • Ein Testfall fasst Eingabe und erwartete Ausgabe zusammen
      • Test-Frameworks wie PHPUnit erlauben die Formulierung von Testfällen als ausführbaren Code in so genannten Unit Tests
    20. Tests schreiben für PHPUnit <?php require_once 'PHPUnit/Framework.php' ; require_once 'Schaltjahr.php' ; class SchaltjahrTest extends PHPUnit_Framework_TestCase { } ?>
    21. Tests schreiben für PHPUnit <?php require_once 'PHPUnit/Framework.php'; require_once 'Schaltjahr.php'; class SchaltjahrTest extends PHPUnit_Framework_TestCase { public function testIstSchaltjahr () { $this -> assertTrue ( istSchaltjahr ( 2000 )); $this -> assertFalse ( istSchaltjahr ( 2007 )); $this -> assertTrue ( istSchaltjahr ( 2008 )); $this -> assertFalse ( istSchaltjahr ( 2100 )); } } ?>
    22. Tests mit PHPUnit ausführen [email_address] ~ % phpunit SchaltjahrTest PHPUnit 3.2.0 by Sebastian Bergmann. . Time: 0 seconds OK (1 test)
    23. Kontinuierliche Integration
      • Sobald ein Entwickler(-team) Änderungen in die Versionsverwaltung eincheckt, wird das Gesamtsystem (neu gebaut und) automatisch getestet
      • Ein Continous Integration Server stellt eine zentrale Informationsquelle dar, die unter anderem Testergebnisse und Softwaremetriken verwaltet und dem Entwicklerteam zur Verfügung stellt
    24. Kontinuierliche Integration
      • Frühe Warnungen bei nicht zusammenpassenden Bestandteilen
      • Regelmäßig ausgeführte Unit Tests entdecken Fehler schnell
      • Konstante Verfügbarkeit eines lauffähigen Standes für Demo- und Testzwecke
      • Die sofortige Reaktion des Systems auf das Einchecken fehlerhaften oder unvollständigen Codes „erzieht“ die Entwickler im positiven Sinne zu einem verantwortlicheren Umgang und kürzeren Checkin-Intervallen
    25. PHPUnit
      • Test Framework
        • xUnit
        • Mock-Objekte
        • DbUnit
      • Integration
        • Continous Integration
          • Bamboo
          • Bitten
          • CruiseControl
          • Parabuild
        • Selenium RC
      • Weitere Features
        • Code Coverage
        • Metriken
        • Project Mess Detector
        • Mutation Testing
        • Test Database
    26. Weitere Werkzeuge
      • PEAR CodeSniffer
        • Coding Style
        • Vollständigkeit (und Korrektheit) der API-Dokumentation
      • Statische Analyse
        • Zend Code Analyser
          • Unerreichbarer Code
          • Ungenutze Parameter und Variablen
        • PHP-SAT
          • Bug Patterns
          • Sicherheitsprobleme
    27. Abenteuer Softwarequalität
      • Kurt Schneider
      • ISBN-13 978-3-89864-472-3
      • dpunkt.verlag
      • Juni 2007
    28. Ende
      • Vielen Dank für Ihr Interesse!
      • Das Präsentationsmaterial wird in Kürze unter http://sebastian-bergmann.de/talks/ verfügbar sein
    29. License
      • This presentation material is published under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported license.
      • You are free:
        • to Share – to copy, distribute and transmit the work.
      • Under the following conditions:
        • Attribution. You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work).
        • Noncommercial. You may not use this work for commercial purposes.
        • No Derivative Works. You may not alter, transform, or build upon this work.
      • For any reuse or distribution, you must make clear to others the license terms of this work. The best way to do this is with a link to this web page.
      • Any of the above conditions can be waived if you get permission from the copyright holder.
      • Nothing in this license impairs or restricts the author's moral rights.

    + Sebastian BergmannSebastian Bergmann, 3 years ago

    custom

    3133 views, 2 favs, 4 embeds more stats

    Kann man Softwarequalität messen, und wie kommt ma more

    More info about this document

    CC Attribution-NonCommercial-NoDerivs LicenseCC Attribution-NonCommercial-NoDerivs LicenseCC Attribution-NonCommercial-NoDerivs License

    Go to text version

    • Total Views 3133
      • 2868 on SlideShare
      • 265 from embeds
    • Comments 0
    • Favorites 2
    • Downloads 0
    Most viewed embeds
    • 249 views on http://sebastian-bergmann.de
    • 11 views on http://skylla
    • 4 views on http://www.planet-php.net
    • 1 views on http://www.planet-php.org

    more

    All embeds
    • 249 views on http://sebastian-bergmann.de
    • 11 views on http://skylla
    • 4 views on http://www.planet-php.net
    • 1 views on http://www.planet-php.org

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories