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

  2. Statische Code-Analyse

  3. Agenda Warum statische Code-Analyse betreiben Coding-Standards und Regeln Analyse und

    Auswertung Pro Tipps und Erfahrungsaustausch Ausblick
  4. Team-Lead Business Solutions seit April 2010 bei move:elevator https://tommy-muehle.de https://twitter.com/tommy_muehle

  5. Warum statische
 Code-Analyse?

  6. Es geht ums Geschäft

  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.
  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.
  9. Womit beginnen?

  10. Standards

  11. Einheitliche Formatierung Coding-Standards

  12. None
  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.
  14. https://github.com/squizlabs/PHP_CodeSniffer PHP_CodeSniffer

  15. None
  16. Prüfung auf definierte Regeln Mess Detection

  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.
  18. https://github.com/phpmd/phpmd PHPMD

  19. None
  20. Analyse

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

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

    tun? Ersten Eindruck gewinnen: Übersicht über Struktur 
 und Code erhalten.
  23. None
  24. https://github.com/pdepend/pdepend PDepend

  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?
  26. None
  27. None
  28. https://github.com/sebastianbergmann/phpcpd PHPCPD

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

    in Prozent
 kopiert und nicht ausgelagert. Was kann ich damit tun?
  30. None
  31. Auswertung

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

  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?

  34. None
  35. None
  36. None
  37. Pro Tipps

  38. Nützliche Werkzeuge

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

  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.
  41. https://github.com/FriendsOfPHP/security-advisories security-advisories und
 checker

  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.
  43. Unsere Erfahrungen

  44. Macht Individualisierungen

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

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

  48. None
  49. Macht Ausnahmen

  50. $ rm -f phpmd phpcs

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

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

    method * * @SuppressWarnings(PHPMD.UnusedLocalVariable) */
  53. Vermeidet Komplexität

  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
  55. Wertet die Daten regelmäßig aus

  56. Ausblick

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

  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.
  59. Deptrac

  60. Paradies

  61. Vielen Dank für eure
 Aufmerksamkeit!

  62. Bitte bewerten
 https://joind.in/talk/e5d44

  63. Fragen? Ja Nein Vielleicht

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


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