Statische Code-Analyse

Statische Code-Analyse

Vortrag zum 2. Meetup 2016 der PHP USERGROUP Dresden.

1e3f36cacc64d0a924cdbb3fdc59e8af?s=128

move:elevator

May 20, 2016
Tweet

Transcript

  1. 1.
  2. 3.
  3. 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.
  4. 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.
  5. 10.
  6. 12.
  7. 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.
  8. 15.
  9. 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.
  10. 19.
  11. 20.
  12. 22.

    phploc Projektgröße analysieren: Anzeige diverser Messdaten. Was kann ich damit

    tun? Ersten Eindruck gewinnen: Übersicht über Struktur 
 und Code erhalten.
  13. 23.
  14. 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?
  15. 26.
  16. 27.
  17. 29.

    PHPCPD Duplizierten Code finden: Wo wurde Code 1:1 oder anteilig

    in Prozent
 kopiert und nicht ausgelagert. Was kann ich damit tun?
  18. 30.
  19. 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?

  20. 34.
  21. 35.
  22. 36.
  23. 37.
  24. 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.
  25. 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.
  26. 46.
  27. 48.
  28. 51.

    /** * This will suppress all the PMD warnings in

    * this class. * * @SuppressWarnings(PHPMD) */
  29. 52.

    /** * This will suppress UnusedLocalVariable * warnings in this

    method * * @SuppressWarnings(PHPMD.UnusedLocalVariable) */
  30. 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
  31. 56.
  32. 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.
  33. 59.
  34. 60.