Codemetriken in PHP

Eine Übersicht von Tools, die zur Verbesserung der Codequalität in PHP eingesetzt werden können:

phpcpd (PHP Copy&Paste Detection)

Einzige Aufgabe dieses Tools von Sebastian Bergmann ist es, den Code auf die Verwendung des Copy&Paste-Anti-Pattern hin zu untersuchen. Ab wann eine Code-Passage als „kopiert“ gilt, lässt sich über die Anzahl der Zeichen/Zeilen, die identisch sind, einstellen.

Eine Beispiel-Ausgabe findet sich auf der Projekt-Homepage von phpcpd.

phploc (PHP Lines of Code)

Auch dieses kleine Tool ist von Sebastian Bergmann. Es erstellt einfache Codemetriken, wie die Anzahl der Zeilen, der Kommentar-Zeilen, der Klassen, und mehr.

Eine Beispiel-Ausgabe findet sich auch wieder auf der Projekt-Homepage von phploc.

PHP Depend

Komplexere Metriken, zum Beschreiben und Charakterisieren der Architektur eines Systems, erstellt PHP Depend, das Äquivalent zu JDepend.

Hauptbestandteil dieser Analyse ist die sog. „Overview Pyramid“ (weitere Informationen dazu: “The overview pyramid in detail” (PDF) oder “Software-Metriken” (PDF)), die drei wichtige Aspekte (Größe/Komplexität, Kopplung und Verwendung der Vererbung) in einem übersichtlichen Format darstellt.Overview Pyramid

Die linke, untere Seite beschreibt Größe und Komplexität des Systems. Die Maßzahlen sind im einzelnen (jeweils von unten nach oben):

  • Direkt erfassbare Kennzahlen:
    • CYCLO (zyklomatische Komplexität): Maß für die Komplexität des Kontrollflusses eines Programms
    • LOC: Lines of Code
    • NOM: Number of Methods
    • NOC: Number of Classes
    • NOP: Number of Packages
  • Abgeleitete Kennzahlen:
    • Intrinsic operation complexity (CYCLO/LOC)
    • Operation structuring (LOC/NOM)
    • Class structuring (NOM/NOC)
    • High-Level structuring (NOC/NOP)

Die abgeleiteten Kennzahlen ermöglichen Aussagen über die Granularität des Systems, zum Beispiel wieviele Methoden in einer Klasse vorkommen.

Die rechte, untere Seite der Pyramide beschreibt die Kopplung innerhalb des Systems.

  • Direkt erfassbare Kennzahlen:
    • FANOUT: Zahl der aufgerufenen Klassen
    • CALLS: Zahl der Methoden-Aufrufe
  • Abgeleitete Kennzahlen:
    • Coupling disperson (FANOUT/CALLS): Wie viele andere Operationen werden von einer Operation aus aufgerufen?
    • Coupling intensity (CALLS/NOM) : Wie stark sind die Klassen gekoppelt?

Der obere Teil der Pyramide gibt die folgenden, direkt erfassbaren Kennzahlen an, die die Verwendung von Vererbung charakterisieren:

  • AHH: Average Hierarchy Height (Tiefe des Vererbungsbaums)
  • ANDC: Average Number of Derived Classes (durchschnittliche Anzahl der direkt abgeleiteten Klassen: Breite des Vererbungsbaums)

PHP CodeSniffer

PHP CodeSniffer dient dazu, den Code auf die Einhaltung von Coding-Standards hin zu überprüfen. Dabei wird folgendes untersucht:

  • Vollständige Kommentar-Abdeckung
  • Einrückung / Groß- und Kleinschreibung
  • Namenskonventionen
  • Gestaltung von Kontrollstrukturen / Klammersetzung
  • und mehr

Vorgefertigte Coding-Standards zum Beispiel von Zend oder PEAR können verwendet werden oder es können auch eigene Coding-Standards mit neuen Regeln angelegt werden. Wie dies funktioniert, wird hier beschrieben: PHP Code Sniffer – Parameter und eigene Regelset.

PHPUnit – Code Coverage

PHPUnit beinhaltet auch eine Funktionalität zur Überprüfung der Code-Abdeckung der Unit-Tests: Code Coverage Analysis.

Als Ausgabe wird ein übersichtlicher Report erstellt, aus dem auch genau ersichtlich wird, welche Codezeilen durch welche Tests abgedeckt wurden und welche gar nicht getestet wurden.


Alle diese Tools lassen sich über den PEAR-Installer installieren. Die jeweiligen Channels finden sich auf den Projekt-Homepages.

Wer sich näher mit der Qualitätssicherung in PHP beschäftigen will/muss, dem kann ich folgende Seiten empfehlen:

Comments are closed.