Facebook
Twitter
Google+
Kommentare
11

Projektwerkstatt: PTI und phpDepends

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.

Über den Autor

Nils Langner

Nils Langner ist der Gründer von "the web hates me" und auch der Hauptautor. Im wahren Leben leitet er das Qualitätsmanagementteam im Gruner+Jahr-Digitalbereich und ist somit für Seiten wie stern.de, eltern.de und gala.de aus Qualitätssicht verantwortlich. Nils schreibt seit den Anfängen von phphatesme, welches er ebenfalls gegründet hat, nicht nur für diverse Blogs, sondern auch für Fachmagazine, wie das PHP Magazin, die t3n, die c't oder die iX. Nebenbei ist er noch ein gern gesehener Sprecher auf Konferenzen. Herr Langner schreibt die Texte über sich gerne in der dritten Form.
Kommentare

11 Comments

  1. @Stephan: Kannst das „Abschießen“ genauer erklären? Welche Version benutzt du, die 1.0.0 oder die 1.1.0 dev? Wird heute auch ein neues Release geben, welches ggf. deine Probleme behebt.

    Reply
  2. @Sven: ich glaube du meinst mich 🙂 ALso ich hatte die 1.0.0 einmal ausprobiert, danach ist Eclipse eingefroren undi ch musste das Tool über einen anderen Workspace deinstallieren damit ich den eigentlichen WOrkspace wieder nutzen konnte.

    Reply
  3. @Dennis: Ähm ja, da war ich etwas zu schnell mit dem schreiben 🙂 Mit dem 1.1.0 Release hat sich einiges unter der Haube getan, so dass das ganze performanter läuft. Solltest du auch mit der neuen Version Probleme haben, kannst du dich gerne direkt an mich wenden.

    Reply
  4. Ich hatte mal was zum CodeSniffer eingestellt, allerdings fehlt mir ein „Wie stell ich das richtig ein?“ Hinweis irgendwo. Jeder schreibt nur, wie toll es doch ist aber nichtm wie man es sinnvoll konfiguriert …

    Reply
  5. @ Dennis: ja, über Window -> Preferences -> PHP Tools -> PHP CodeSniffer Kannst Du unten bei „Ignore Directory and Files“ die entsprechenden Ordner eintragen. Z.B.: */ordner/* filter den Ordner „ordner“ inlusive Unterverzeichnisse und egal auf welcher Ebene er liegt.

    Reply
  6. I think you will find nWire for PHP a useful tool for analyzing dependencies as well. It does not have a reporting tool (well, not yet), but it does provide code navigation and visualization tools.

    Reply

Leave a Comment.

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen