Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Statische Code-Analyse

Statische Code-Analyse

Vortrag zum 2. Meetup 2016 der PHP USERGROUP Dresden.

move:elevator

May 20, 2016
Tweet

More Decks by move:elevator

Other Decks in Technology

Transcript

  1. Statische Code-Analyse

    View full-size slide

  2. Agenda
    Warum statische Code-Analyse betreiben
    Coding-Standards und Regeln
    Analyse und Auswertung
    Pro Tipps und Erfahrungsaustausch
    Ausblick

    View full-size slide

  3. Team-Lead Business Solutions
    seit April 2010 bei move:elevator
    https://tommy-muehle.de
    https://twitter.com/tommy_muehle

    View full-size slide

  4. Warum statische

    Code-Analyse?

    View full-size slide

  5. Es geht ums Geschäft

    View full-size slide

  6. Statische Code-Analyse
    Warum?
    Potentielle Fehler vermeiden: Komplexen und anfälligen

    Code finden.
    Wichtigen Code finden: Wissen wo die (wirtschaftlich-) kritischen 

    Stellen meiner Applikation sind.
    Design-Fehler aufzeigen : Abhängigkeiten erkennen und Verstöße

    gegen Best-Practices finden.

    View full-size slide

  7. Statische Code-Analyse
    Was kann ich damit nicht?
    Inhaltliche Fehler aufdecken: Kein Ersatz für menschliche

    Reviews und ggf. manuelle Tests.
    Sicher sein: Metriken können geschönt und auch nicht 

    aussagekräftig sein.

    View full-size slide

  8. Womit beginnen?

    View full-size slide

  9. Einheitliche Formatierung
    Coding-Standards

    View full-size slide

  10. Coding-Standards
    Einarbeitung minimieren: Wiedererkennbarer und 

    leserlicher Quellcode.
    Warum Coding-Standards verwenden?
    Wartbarkeit erhöhen: Gut leserlicher Quellcode ist in der

    Regel auch wartbarer.

    View full-size slide

  11. https://github.com/squizlabs/PHP_CodeSniffer
    PHP_CodeSniffer

    View full-size slide

  12. Prüfung auf definierte Regeln
    Mess Detection

    View full-size slide

  13. Mess Detection
    Einhaltung von Best-Practices: Bekannte Verfahren und Abläufe

    sicherstellen.
    Warum Code auf Regeln prüfen?
    Code-Qualität gewährleisten: 

    Projektübergreifend gleichbleibende Code-Qualität.

    View full-size slide

  14. https://github.com/phpmd/phpmd
    PHPMD

    View full-size slide

  15. https://github.com/sebastianbergmann/phploc
    phploc

    View full-size slide

  16. phploc
    Projektgröße analysieren: Anzeige diverser Messdaten.
    Was kann ich damit tun?
    Ersten Eindruck gewinnen: Übersicht über Struktur 

    und Code erhalten.

    View full-size slide

  17. https://github.com/pdepend/pdepend
    PDepend

    View full-size slide

  18. PDepend
    Metriken generieren: Metriken für CodeRank, Efferent Coupling

    u.a. erstellen.
    Übersicht visualisieren: Erstellung einer Overview Pyramid 

    sowie Abstraction Instability Charts möglich.
    Was kann ich damit tun?

    View full-size slide

  19. https://github.com/sebastianbergmann/phpcpd
    PHPCPD

    View full-size slide

  20. PHPCPD
    Duplizierten Code finden: Wo wurde Code 1:1 oder anteilig in Prozent

    kopiert und nicht ausgelagert.
    Was kann ich damit tun?

    View full-size slide

  21. https://github.com/Qafoo/QualityAnalyzer
    QualityAnalyzer

    View full-size slide

  22. QualityAnalyzer
    Was kann ich damit machen?
    Visualisierung: Übersichtliche Visualisierung anhand der 

    generierten Metriken.
    Schnellen Einblick gewinnen: Wo sind komplexe 

    Klassen und Methoden? Wo sind Violations?


    View full-size slide

  23. Nützliche Werkzeuge

    View full-size slide

  24. https://github.com/FriendsOfPHP/PHP-CS-Fixer
    PHP-CS-Fixer

    View full-size slide

  25. PHP-CS-Fixer
    Alternative zur manuellen Anpassung: Optimal um in 

    Legacy-Applikationen Coding-Standards einzuführen.
    Welchen Mehrwert habe ich davon?
    Extrem konfigurierbar: Mehr als 20 vordefinierte Fixer (Regel-Klassen)

    bereits vorhanden.
    Automatisierbar für CI’s: Die Konfiguration kann in einer speziellen

    .php_cs Datei hinterlegt und automatisiert geprüft werden.

    View full-size slide

  26. https://github.com/FriendsOfPHP/security-advisories
    security-advisories und

    checker

    View full-size slide

  27. security-advisories
    Sicherheitsüberprüfung: Prüfung der eingesetzten Libraries, 

    Bundles oder Components auf bekannte Sicherheitslücken.
    Was kann ich damit tun?
    Verbreitung von Schadcode verhindern: 

    Schützt eure Projekte indem ihr dies als Pflicht-Prüfung 

    bei jedem Deployment forciert.

    View full-size slide

  28. Unsere Erfahrungen

    View full-size slide

  29. Macht
    Individualisierungen

    View full-size slide

  30. https://github.com/move-elevator/symfony-coding-standard
    symfony-coding-standard

    View full-size slide

  31. https://github.com/mi-schi/phpmd-symfony2
    phpmd-symfony2

    View full-size slide

  32. Macht Ausnahmen

    View full-size slide

  33. $ rm -f phpmd phpcs

    View full-size slide

  34. /**
    * This will suppress all the PMD warnings in
    * this class.
    *
    * @SuppressWarnings(PHPMD)
    */

    View full-size slide

  35. /**
    * This will suppress UnusedLocalVariable
    * warnings in this method
    *
    * @SuppressWarnings(PHPMD.UnusedLocalVariable)
    */

    View full-size slide

  36. Vermeidet
    Komplexität

    View full-size slide

  37. Cyclomatic Complexity (CCN): Anzahl der Verzweigungen.
    NPath Complexity: Anzahl der Ausführungspfade.
    Kurz und knapp: Zählt pro Methode die 

    „Entscheidungs-Verzweigungen“ (Decision-Trees)
    • function
    • for(each)
    • while
    • if
    • case

    View full-size slide

  38. Wertet die Daten
    regelmäßig aus

    View full-size slide

  39. https://github.com/sensiolabs-de/deptrac
    Deptrac

    View full-size slide

  40. Deptrac
    Prüfung von definierten Regeln: Überprüfung von 

    Objekt-Abhängigkeiten über verschiedene Bereiche. (Layern)
    Worum geht es?
    Visualisierbar: Eine Bildgenerierung der Verbindungen 

    via graphviz ist möglich.
    Frei definier- und erweiterbar: Freie Definition von Bereichen sowie

    deren Verbindungen möglich.

    View full-size slide

  41. Vielen Dank für eure

    Aufmerksamkeit!

    View full-size slide

  42. Bitte bewerten

    https://joind.in/talk/e5d44

    View full-size slide

  43. Fragen?
    Ja
    Nein
    Vielleicht

    View full-size slide

  44. Quellen
    Bilder / Fotos
    Erläuterungen / Informationen / Statistiken
    https://en.wikipedia.org/wiki/Software_bug

    https://phpmd.org/documentation/suppress-warnings.html


    View full-size slide