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. GROUP

    View Slide

  2. Statische Code-Analyse

    View Slide

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

    View Slide

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

    View Slide

  5. Warum statische

    Code-Analyse?

    View Slide

  6. Es geht ums Geschäft

    View Slide

  7. 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 Slide

  8. 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 Slide

  9. Womit beginnen?

    View Slide

  10. Standards

    View Slide

  11. Einheitliche Formatierung
    Coding-Standards

    View Slide

  12. View Slide

  13. 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 Slide

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

    View Slide

  15. View Slide

  16. Prüfung auf definierte Regeln
    Mess Detection

    View Slide

  17. 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 Slide

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

    View Slide

  19. View Slide

  20. Analyse

    View Slide

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

    View Slide

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

    und Code erhalten.

    View Slide

  23. View Slide

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

    View Slide

  25. 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 Slide

  26. View Slide

  27. View Slide

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

    View Slide

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

    kopiert und nicht ausgelagert.
    Was kann ich damit tun?

    View Slide

  30. View Slide

  31. Auswertung

    View Slide

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

    View Slide

  33. 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 Slide

  34. View Slide

  35. View Slide

  36. View Slide

  37. Pro Tipps

    View Slide

  38. Nützliche Werkzeuge

    View Slide

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

    View Slide

  40. 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 Slide

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

    checker

    View Slide

  42. 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 Slide

  43. Unsere Erfahrungen

    View Slide

  44. Macht
    Individualisierungen

    View Slide

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

    View Slide

  46. View Slide

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

    View Slide

  48. View Slide

  49. Macht Ausnahmen

    View Slide

  50. $ rm -f phpmd phpcs

    View Slide

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

    View Slide

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

    View Slide

  53. Vermeidet
    Komplexität

    View Slide

  54. 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 Slide

  55. Wertet die Daten
    regelmäßig aus

    View Slide

  56. Ausblick

    View Slide

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

    View Slide

  58. 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 Slide

  59. Deptrac

    View Slide

  60. Paradies

    View Slide

  61. Vielen Dank für eure

    Aufmerksamkeit!

    View Slide

  62. Bitte bewerten

    https://joind.in/talk/e5d44

    View Slide

  63. Fragen?
    Ja
    Nein
    Vielleicht

    View Slide

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

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


    View Slide