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 Number of Derived Classes (durchschnittliche Anzahl der direkt abgeleiteten Klassen: Breite des Vererbungsbaums)

  • ANDC: Average Hierarchy Height (Tiefe 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:

Kommentar schreiben

KML-Dateien mit europäischen Jugendherbergen

Letztes Jahr mussten die KML-Dateien noch selber erstellt werden, mittlerweile bietet Hosting International auch Karten an, wobei die einzelnen Jugendherbergen über KML-Dateien eingeblendet werden.

Alle Jugendherbergen in Deutschland werden auf dieser Karte angezeigt, dies ist die passende KML-Datei dazu.

Für alle anderen Länder sind die URL’s ähnlich aufgebaut. Es muss einfach das Länderkürzel ersetzt werden.

Zum Beispiel für Frankreich (FR):
URL zur Karte: http://www.hihostels.com/dba/cmap-FR.de.htm?himap=Y
URL zur KML-Datei: http://www.hihostels.com/mapcoord/FR.de.kml

Oder auch für Luxemburg (LU):
URL zur Karte: http://www.hihostels.com/dba/cmap-LU.de.htm?himap=Y
URL zur KML-Datei: http://www.hihostels.com/mapcoord/LU.de.kml

Kommentare (1)

typeof() in C++

Wie findet man in C++ zur Laufzeit heraus, von welchem Typ eine Variable ist?

int* a, b;

Ist b jetzt vom Typ „Zeiger auf Integer“ oder vom Typ „Integer“?

Mit folgendem Aufruf hat man dies schnell geklärt:

int* a, b;
std::cout << (typeid(b) == typeid(int*)) << std::endl;
//Ausgabe: 0

Siehe auch: typeid()

Kommentar schreiben

Nautilus-Scripts: Geo-Referenzierte Photos in Google Maps/Earth anzeigen

Um „mal eben“ eine Auswahl an geo-referenzierten Photos aus dem Dateimanager Nautilus auf einer Karte in Google Maps/Earth anzeigen zu lassen, habe ich mir 2 kleine Bash-Skripte für Nautilus-Scripts geschrieben, die mir dabei behilflich sind.

Nun selektiere ich einfach ein paar Photos, mache einen Rechtsklick und wähle „Skripte > Open in Google Maps“ aus.

Im Hintergrund werden jetzt die EXIF-Header der ausgewählten Photos mit Hilfe von exiftool auf Koordinaten untersucht. Es wird dann eine temporäre HTML-Seite in Firefox geöffnet, die eine Google Maps-Karte mit allen Photos enthält.

Alternativ können die Photos auch in Google Earth angezeigt werden. Hierfür wird dann eine temporäre KML-Datei erstellt.

Und so lassen sich die Skripte einrichten:

Den Rest des Beitrags lesen »

Kommentar schreiben

Geocoding mit Google Earth: Karte mit allen Jugendherbergen in Deutschland

Update:

Mittlerweile bietet Hosting International auch direkt Karten an, siehe KML-Dateien mit europäischen Jugendherbergen.

Beim Planen einer Tour in die Provence mit GoogleMaps ist mir aufgefallen, dass dafür gar keine Layer/Karten mit allen Jugendherbergen zu finden sind.

Deshalb habe ich mir heute auf die Schnelle ein kleines Java-Programm geschrieben, dass alle Jugendherbergen von Hostelling International heraussucht und die Adressen in eine KML-Datei schreibt. Über GoogleEarth habe ich diese Adressen dann geokodieren lassen.

Hochgeladen in GoogleMaps kann diese Karte nun frei verwendet werden:

Karte mit allen Jugendherbergen in Deutschland (KML)

Und dies ist die Karte für Frankreich:

Karte mit allen Jugendherbergen in Frankreich (KML)

Da in GoogleMaps nur die Jugendherbergen auf der Karte angezeigt werden, die links auf der im Inhaltsverzeichnis ausgewählten Seite aufgelistet sind, schaut man sich es besser in GoogleEarth über die KML-Dateien an.

Kommentare (3)