Slide 1

Slide 1 text

GROUP

Slide 2

Slide 2 text

Statische Code-Analyse

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

Warum statische
 Code-Analyse?

Slide 6

Slide 6 text

Es geht ums Geschäft

Slide 7

Slide 7 text

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.

Slide 8

Slide 8 text

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.

Slide 9

Slide 9 text

Womit beginnen?

Slide 10

Slide 10 text

Standards

Slide 11

Slide 11 text

Einheitliche Formatierung Coding-Standards

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

Coding-Standards Einarbeitung minimieren: Wiedererkennbarer und 
 leserlicher Quellcode. Warum Coding-Standards verwenden? Wartbarkeit erhöhen: Gut leserlicher Quellcode ist in der
 Regel auch wartbarer.

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

Prüfung auf definierte Regeln Mess Detection

Slide 17

Slide 17 text

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.

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

Analyse

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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?

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

PHPCPD Duplizierten Code finden: Wo wurde Code 1:1 oder anteilig in Prozent
 kopiert und nicht ausgelagert. Was kann ich damit tun?

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

Auswertung

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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?


Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

No content

Slide 36

Slide 36 text

No content

Slide 37

Slide 37 text

Pro Tipps

Slide 38

Slide 38 text

Nützliche Werkzeuge

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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.

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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.

Slide 43

Slide 43 text

Unsere Erfahrungen

Slide 44

Slide 44 text

Macht Individualisierungen

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

No content

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

No content

Slide 49

Slide 49 text

Macht Ausnahmen

Slide 50

Slide 50 text

$ rm -f phpmd phpcs

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

Vermeidet Komplexität

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

Wertet die Daten regelmäßig aus

Slide 56

Slide 56 text

Ausblick

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

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.

Slide 59

Slide 59 text

Deptrac

Slide 60

Slide 60 text

Paradies

Slide 61

Slide 61 text

Vielen Dank für eure
 Aufmerksamkeit!

Slide 62

Slide 62 text

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

Slide 63

Slide 63 text

Fragen? Ja Nein Vielleicht

Slide 64

Slide 64 text

Quellen Bilder / Fotos Erläuterungen / Informationen / Statistiken https://en.wikipedia.org/wiki/Software_bug
 https://phpmd.org/documentation/suppress-warnings.html