am 29. Oktober 2009
Ich habe ja die letzte Zeit ein paar Worte über PTI verloren. Ist übrigens immer noch mein Tool Highlight des Jahres. Beruflich durfte ich auch die letzen zwei Wochen ein wenig rumspielen und ausprobieren. Da bis jetzt “nur” eine Unterstützung für PHPUnit und den PHP_CodeSniffer integriert sind, würde ich doch gerne mal in einer Projektwerkstatt das System so erweitern, dass es fähig ist phpDepend zu nutzen.
Vielleicht noch mal kurz vorne Weg: phpDepend ist ein Tool von Manuel Pichler zur statischen Code-Analyse, das sich auf den Bereich Softwaremetriken konzentriert. Alle Metriken, die wir hier vorgestellt haben sind sogar dort abgedeckt. Ist aber auch keine große Leistung, denn es war auch nur eine. phpDepend unterstützt aber mehr, keine Sorge.
Die Idee mit der Integration ist also folgende. Sobald ich meine Datei in Eclipse speichere, läuft phpDepend los und berechnet mir meine Metriken. Eclipse nimmt sich diese Werte und markiert mir alle Methoden und Klassen, die von den berechneten Werten her, ein vorher definiertes Limit überschreiten (oder unterschreiten, je nach Metrik). Da phpDepend nur für die reine Berechnung zur Verfügung steht (und das auch gut so ist), müssen wir die Limits in einen eigenen Logger packen oder das ganze in Eclipse und damit in Java abbilden. Momentan würde ich die Java Alternative bevorzugen, denn somit habe ich alle Daten bereits in Eclipse und kann noch ein paar weitere “Schweinereien” mit machen.
Ok, also was es macht ist jetzt klar. Jetzt gehen wir noch darauf ein, wie man das Tool konfigurieren können soll. phpDepend erstellt XML Dateien. Es gibt Element, die Methoden repräsentieren. Diese Elemente besitzen Attribute, die die Werte der Metrikfunktionen wiederspiegeln.
<?xml version="1.0" encoding="UTF-8"?>
<metrics ahh="0.19444444444444" andc="0.46268656716418" calls="1406" ccn="1203" ccn2="1237" cloc="11657" clsa="7" clsc="60" eloc="6528" fanout="571" leafs="59" loc="20078" maxDIT="2" ncloc="8421" noc="67" nof="0" noi="21" nom="578" nop="11" roots="5">
<files>
<file name="/usr/local/pear/PEAR/PHP/Depend/StorageRegistry.php" cloc="81" eloc="18" loc="103" ncloc="22"/>
</files>
<package name="PHP_Depend" cr="1.3005761647303" noc="3" nof="0" noi="4" nom="51" rcr="0.50515422957667">
<class name="PHP_Depend_Parser" cis="12" cloc="250" cr="0.15" csz="113" dit="0" eloc="526" impl="1" loc="913" ncloc="663" nom="20" rcr="0.1925" vars="6" varsi="6" varsnp="0" wmc="107" wmci="107" wmcnp="12">
<file name="/usr/local/pear/PEAR/PHP/Depend/Parser.php"/>
<method name="__construct" ccn="1" ccn2="1" cloc="0" eloc="4" loc="6" ncloc="6" npath="1"/>
<method name="_consumeComments" ccn="3" ccn2="3" cloc="0" eloc="10" loc="12" ncloc="12" npath="3"/> ...
</class>
</package>
</metrics>
Hier aber einfach mal ein Beispiel. phpDepend bringt Standard Metriken mit. Diese müssen im Tool hinterlegt werde. Eine Tabelle mit Shortcut und Name mit Beschreibung müsste im Tool hinterlegt sein (sollte pflegbar sein, denn wir haben phpDepend zum Beispiel um eigene Metriken erweitert). Des Weiteren muss der Anwender die Möglichkeit haben in einem anderen Konfigurationsfenster weiche und harte Grenzen zu definieren. Bei weichen Grenzen würde eine Warning angezeigt werden, bei übertritt über die harten Grenzen kommt ein Error zu Vorschein. Die Zweite Konfiguration muss natürlich projektspezifisch verwendet werden können.
Schon hätten wir eine wunderbare Erweiterung von Eclipse, die uns hilft noch “besseren” Code zu schreiben. Ich könnte mir vorstellen, dass viel mehr Entwickler solche Metriken verwenden würden, wenn die IDE so etwas von Haus aus mitbringen würde.