am 9. März 2009
Mit dem heutigen Tage wollen wir eine neue Kategorie einführen. OK eigentlich ist es keine feste Kategorie, vielmehr eine neue Struktur. Ich hatte mich ja vor kurzem darüber ausgelassen, dass ich es schade finde, dass ich bei sieben Artikeln in sieben nicht die Qualität pro Artikel erreichen kann, die ich gerne hätte. Aus diesem Grund will ich mich jetzt eine ganze Woche lang nur um ein Thema kümmern. Ein paar Wochenthemen sind mir auch schon spontan eingefallen. Da wären statische Code-Analyse mit dem PHP-Code-Sniffer (mit dem wir auch anfangen wollen), Unit Testing, Software Metriken und Continuous Integration. Ich denke, dass alle vier Themen sehr spannend auf ihre Art sind und euch mit Sicherheit gefallen werden. Aber das werden wir ja sehen.
Diese Wochen wollen wir also mit der statischen Code-Analyse füllen. Dabei werden wir die fünf Tage wie folgt einteilen:
Ich hoffe, dass ich euch damit eine Woche bei der Stange halten kann, aber ich denke schon. Meistens lag ich ja richtig mit meinem Fokus. Aber fangen wir einfach mal an.
Statische Code-Analyse
Die statische Code-Analyse ist in den meisten objektorientierten Programmiersprachen gang und gebe. Sie wird verwendet um mit wenig Wartungsaufwand eine hohe Quellcode Qualität zu erreichen. Dabei wird eine Analyse auf den existierenden Code gefahren und zum Beispiel Verstöße gegen die vorher definierten Programmierrichtlinien gemeldet. Es können aber auch Metriken über das Projekt berechnet werden. Wichtig dabei ist, dass der Input immer der Code selbst ist. Hierbei geht es auch nicht Performance Messungen oder ähnlichem, denn die Analyse selbst findet auf dem Code und nicht auf der Ausführung statt.
Wir können also mit Hilfe der Statischen Code-Analyse Probleme, wie nicht initialisierte Variablen, zu lange und komplexe Methoden oder ein einfaches „Konstanten-werden-groß-geschrieben“, finden, ohne selbst aktiv Tests zu schreiben für jede neue Funktionalität.
Der Vorteil liegt also klar auf der Hand. Ich schreibe meine Regeln zum Prüfen auf Verstöße ein einzige Mal und werde diesen Fehler dann in Zukunft immer finden und das auch in frischem Code.
Diese Art zu testen ist leider in PHP die letzten Jahre ein wenig vernachlässigt worden, gewinnt aber immer mehr an Ansehen, was wir nicht zuletzt Sebastian Bergmann und Manuel Pichler zu verdanken haben, die mit phpDepends, PhpUnderControl und PHPUnit mächtige Tools entwickelt haben, die die Berechnung von Metriken und das permanente Testen bzw. Prüfen erst auf einem hohen Niveau möglich gemacht haben.
Eingehen möchte ich aber nicht unbedingt auf diese Helferchen, denn heute wollen wir uns auf ein anderes Tool konzentrieren, dem PHP-Code-Sniffer (PCS). Er hilft uns den Code strukturiert zu analysieren und eigene Regeln zu verfassen, die wir in unseren „Bauvorgang“ einbinden können.
PCS ist Teil der PEAR Komponenten Bibliothek und kann kostenlos verwendet und erweitert werden. Er wurde in und für PHP 5 Code geschrieben. Am häufigsten wird dieses Tool angesetzt, um Coding Standard Verstöße zu finden und zu tracken. Aus diesen Grund bietet der Sniffer bereits einige Standards, wie die des PEAR Projektes oder des Zend Frameworks, nativ an. Regeln wie das Großschreiben von Konstanten oder die maximal Länge einer Methode finden sich aber ebenfalls out-of-the-box wieder.
Vielleicht interessiert es ja den ein oder anderen noch, warum ich dieses kleine Tutorial verfasse. Der erste Grund ist, dass ich die statische Codeanalyse als sehr wichtiges Qualitätssicherungs-Tool betrachte. Der zweite ist noch viel einfacher. Bis jetzt hat sich niemand deutschsprachiges die Mühe gemacht, ein gutes Tutorial zu verfassen und auch im englischsprachigen Raum sieht es eher mau aus. Also habe ich mich einfach erbarmt. Was mir natürlich auch noch sehr an der Thematik gefällt, ist der hohe Kooperationsfaktor. Ich schreibe eine Regel und jeder andere PHP Entwickler weltweit kann diese verwenden, denn die meisten Regeln werden nicht in Abhängigkeit eines Projektes verfasst. Dazu ist mir auch noch eine kleine „Projektwerkstatt“ eingefallen, die ich am Ende der Woche auch noch vorstellen will.
Bevor ich es vergesse, diese einwöchige Reihe ist nur ein Versuch. Bis jetzt habe ich kaum etwas mit dem Code Sniffer selbst gemacht, außer ihn verwendet. Das schreiben von Regeln kann sehr komplex werden, aber ich traue mich trotzdem mal ran. Ich hoffe, dass ich ohne Probleme durch die Woche komme, aber ihr werdet es ja sehen.