Facebook
Twitter
Google+
Kommentare
25

Eclipse und pdepend kombinieren

Ihr merkt schon, irgendwie habe ich an den Eclipse-Themen Blut geleckt, denn heute geht es schon wieder in die nächste Runde. Natürlich ist es auch ein Thema, das wir kurz in unserem IPC-Vortrag angesprochen haben und ich hatte ja versprochen ihn hier aufzubereiten. Eigentlich ist es ja das Thema von Sven Kiera, aber ich übernehme jetzt einfach mal. Vielleicht haben wir ja das Glück und er bekommt Lust noch ein wenig detaillierter über das Thema zu erzählen. Ach ja, kann ja sein, dass sich noch jemand dran erinnert, wir hatten vor einiger Zeit eine Projektwerkstatt, die sich genau mit dem Thema PTI und pDepend beschäftigt hat.

Fangen wir aber an. Mit pdepend (oder phpDepend) kann man ganz einfach Metriken auf seinen Quellcode anwenden. Dabei kann man dann sehen, ob der geschriebene Code potentiell zu den guten oder schlechten Kandidaten gehört. Bis jetzt war die Auswertung dieser berechneten Zahlen eher nicht visuell unterstützt. Man konnte viel aus Tabellen rausholen, aber es ging immer Hand in Hand mit „ein wenig“ Analysearbeit. Ok, ein paar kleine Grafiken gab es, die sind aber nicht der Rede wert.

Um diese Messzahlen effizient zu nutzen wäre es doch toll, wenn die IDE einem schon zeigt, dass eine Methode, an der man gerade noch programmiert zu komplex wird, da vielleicht zu viele Verzweigungen eingebaut sind. Dank PTI und Sven kann Eclipse das jetzt und zwar ohne lange Konfigurieren zu müssen. Ich zeige am besten einfach mal ein kleines Beispiel:

Der Code hat mehr als sieben Verzweigungen und ist deswegen zu komplex. Natürlich nur weil wir vorher definiert haben, das eigentlich komplex bedeutet. Egal wie jetzt die Werte sind, eigentlich wollen wir so ein Feature alle haben.

Das geht auch innerhalb von ein paar Minuten und schon haben wir Eclipse so gepimt, dass jede Installation das mitmacht. Als erstes installieren wir PTI, die Update-Site dazu lautet in der „stable“ Version: http://www.phpsrc.org/eclipse/pti/ (Wer will kann auch mit der Development Version rumspielen http://www.phpsrc.org/eclipse/pti-dev/). Einmal im System vorhanden können wir in die Einstellungen gehen (Preferences>> PHP Tools >> PHP Depend). Wie immer bei PTI die Pear Bibliothek auswählen, ich nehme immer die interne und eine lauffähige PHP-Installation angeben. Fertig. Eigentlich müsste das System jetzt schon die hohen Komplexitäten anmotzen. Jetzt ist vielleicht auch der richtige Zeitpunkt das ganze mal ein wenig zu testen und um mit dem rumpspielen anzufangen.

Um den Nicht-Eclipse-Nutzern den Mund ein wenig wässrig zu machen musste ich natürlich die Konfigurationsseite ein wenig präsentieren. Es gibt so viele wunderbare Metriken, die man alle automatisiert über seinen Code laufen lassen kann.

Bei den Zahlen, die man für die Min- und Max-Werte einträgt, muss man wohl ein wenig rumspielen, denn hier muss man nach Gefühl arbeiten. Nicht jedem ist eine zyklomatische Komplexität von 7 zu hoch. Aber dafür gibt es ja die Optionen.

Vielleicht noch ein kleines Fazit. Ich liebe dieses PTI, da hat Sven mal wieder ganze Arbeit geleistet. Ich bin ein Freund von Metriken, auch wenn man darüber denken kann was man will. Für mich ist es also die perfekte Kombination, falls man noch besseren Code schreiben will. Denn seien wir mal ehrlich, sobald der Code im SVN drinnen ist, wird er eh nicht mehr groß angefasst.

Ach ja, wenn ihr das System gut findet, dann flattrt doch bitte das Projekt (und uns auch, wenn ihr Lust habt).

Ü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

25 Comments

  1. Habe mir PTI die Tage mal installiert, aber irgendwie hat sich da bei mir garnichts getan, egal welches Tool von PTI ich nutzen wollte. Muss man da erst noch was weiß ich was alles konfigurieren?

    Reply
  2. @Arvid: Eigentlich nicht. Es macht aber Sinn, ab und zu auf die Eclipse-Konsole zu achten. Dort werden alle Fehlermeldungen von PTI angezeigt. Meistens hilft das. Wenn du da ne Ausgabe bekommen hast, kannst du sie gerne hier posten, dann schauen wir uns das mal gemeinsam an.

    Reply
  3. Schade, ich benutze Netbeans und kann mich mit Eclipse auch einfach nicht mehr anfreunden. Vielleicht wird es ja irgendwann auch eine ähnliche Erweiterung für Netbeans geben. Aber ich möchte jetzt ausdrücklich NICHT die Eclipse-Netbeans-Diskussion anfachen 😉

    Reply
  4. @Alex: geht mir genauso, wenn ich solche Plugins wie PTI sehe werde ich schon etwas neidisch. Wenigstens haben wir ein phpcs Plugin. Vielleicht wäre es ja mal eine gute Idee etwas ähnliches wie PTI für Netbeans anzugehen?

    Viele Grüße

    Reply
  5. Die Vielfalt an nützlichen Plugins für Eclipse, hält mich noch etwas davon ab, zu NetBeans zu wechseln, da es in Sachen PHP-Entwicklung noch relativ neu ist.

    @Nils: Ich schaue heute Abend mal. Aber ich glaube da nichts gesehen zu haben, denn in die Konsole schaue ich bei sowas schon. Ich werde es heute Abend einfach nochmal probieren und dann werden wir mal sehen.

    Reply
  6. @Nils: Habe kein Problem damit, dass du mir mein Arbeit abnimmst, hab genug mit der Dokumentation zu tun 🙂

    @Arvid: Wie genau sieht dein Problem aus? Bräuchte ein paar mehr Informationen um helfen zu können 🙂

    Gruß,
    Sven

    Reply
  7. Man man man, ich hab endlic hrausgefunden, dass es ne spezielle Ansicht für pDepend gibt … Warum steht das nirgends? Allerdings seh ich keine Grafik dazu, nur ne Auflistung der Metriken und auch nur zu einer einzelnen Datei und nicht über das Projekt verteilt.

    Reply
  8. Hallo Dennis,

    die Generierung der Graphen ist aktuell prototypisch (steht auch nur per Development Update Site zur Verfügung) integriert und muss aktiviert werden. In der Toolbar befindet sich ein PHP_Depend Icon mit Pulldown, wo pro Graph ein Haken gesetzt werden kann.

    Bezüglich der fehlenden Informationen bin ich aktuell dabei die Dokumentation zu ergänzen. Wer Lust hat, kann mich natürlich gerne unterstützen 🙂

    Gruß,
    Sven

    Reply
  9. @Sven: Na das hört sich doch mal gut an 😉

    Ich hab das Tool schon mehrfach installiert gehabt und erst in den letzten Wochen mal rausgefunden, wo man die Trigger dafür findet, denn so offensichtlich war das für mich nicht mit den Icons 😉

    Wäre es möglich, bei PHP Depend direkt mit einzubauen, dass sich die entsprechende View öffnet? Das würde es schon wesentlich komfortabler machen!

    Reply
  10. Bei mir funktioniert der ganze PTI-Kram gar nicht. Nur wenn ich auf den PhpDepend-Button klicke, poppt eine neue Konsole auf, in der er mir sagt:

    „Parsing source files:
    . 1

    The parser doesn’t detect package informations within the analyzed project, please check the documentation blocks for @package-annotations or use the –bad-documentation option.“

    Anscheinend will er unbedingt @package-Annodation im Code, weil es sonst nicht funktioniert. Oder sehe ich da was falsch? Die „bad-documentation option“ ist aktiviert, scheint ihn aber nicht sonderlich zu interessieren.
    Eine extra View/Perspective für die PTI Tools gibt es bei mir auch nicht.

    Beim PHP CodeSniffer passiert rein gar nichts. Das gleiche gilt für den Copy/Paste Detector.

    Ich tippe mal auf Konfigurationsfehler. Leider fehlen an vielen Stellen in den Preferences Informationen wie Beispiele, was, wie, in den einzelnen Feldern eingetragen werden soll.

    Leider fehlt mir die Zeit mich näher mit der Konfiguration zu befassen. Wenn so etwas nicht out-of-the-box funktioniert, dann muss ich leider in der Regel darauf verzichen, bis ich Zeit finde, mich damit zu beschäftigen oder ich ein Howto finde, in dem alles Schritt für Schritt zum Nachklicken erklärt wird.

    Reply
  11. Das fand ich übrigens an dem Artikel zu den Validatoren für Eclipse toll: einfach nachklicken und es funktionierte. Leider ist das Ausdenken und Verfassen sinnvoller Validatoren wieder recht zeitintensiv, sodass ich auch hier wieder keinen produktiv verwendbaren Vorteil draus erhalten konnte. 🙂 Immer diese verdammte Zeit…

    Reply
  12. hat schon jemand mit pti auf dem mac herumgespielt?

    ich bekomme da so einige fehler mit dem setting zend studio 7.2 und zend server ce 5.1 (php5.3).
    Irgendwie hat er Probleme mit den PHP Executables. Die vorkonfigurierten Plugin Pakete liefern alle Fehler ala: „Unable to execute program – Reason: Exception occured executing the command line“.

    Bei einem großen Projekt hat das dann ne nette Bandlatte von Fehlermeldungen zur Folge.

    Kann gerne bei Fehlersuche behilflich sein.

    Reply
  13. Die Einbindung von Plugins wie CodeSniffer und PHPUnit für Eclipse ist wesentlich. Bei der pDepend Einbindung stellt sich mir die Frage, was ein Live-Monitoring wirklich bringt. Das ist doch eher was für Statistikfreaks.
    Ich halte derzeit ein nachträgliches, also in den Buildprozess integriertes pDepend Monitoring für sinnvoller. Ist aber wohl Ansichtssache.

    Zur Netbeans Integration von pDepend:
    @Alex @Nobert @Benjamin
    Es gibt bereits die „Netbeans PHP Enhancements“ von Benjamin Eberlei (aka beberlei). Diese zeigen bereits die Arbeitsweise für CodeSniffer auf.
    Für die Ergänzung von pDepend kann man sich daran orientieren. Sicherlich macht der umfangreiche Optionsdialog (siehe schon Eclispse Screen oben) die meiste Arbeit. @link http://github.com/beberlei/netbeans-php-enhancements

    Reply
  14. @Christian: Benutzt du Zend Studio 7?

    Ich musste explizit die PHP Runtime vom System nehmen, da im Zend Studio 7.2 ein paar PEAR Packages fehlen und deshalb das ganzue nicht ausgeführt werden kann 🙁

    Reply
  15. @Dennis Nein, ich verwende PDT 1.2.10.20100216-1730 in Eclipse 3.5.2.M20100211-1343.

    Ich bekomme ja auch nicht wirklich Fehler angezeigt. Rein theoretisch sollte es funktionieren. Korrekt eingebunden ist bei mir alles. Jedoch habe ich entweder etwas falsch konfiguriert, oder ich benutze es falsch.

    Reply
  16. OK, PhpDepend funktioniert jetzt bei mir anscheinend. Zumindest passiert gerade was: Ich habe einfach im Navigator ein einzelnes Verzeichnis statt einer einzelnen Datei Markiert und in den Einstellungen statt *.php ein php bei den File-Extensions eingetragen.

    Jetzt rödelt Eclipse noch rum und ich warte auf den Konsolenoutput…
    Zeit für eine Zigarette ^^

    Reply
  17. @Nils Ne, scheint damit zu funktionieren:

    Parsing source files:
    …………………………………………………… 60
    …………………………………………………… 120
    …………………………………………………… 180
    …………………………………………………… 240
    …………………………………………………… 300
    …………………………………………………… 360
    …………………………………………………..
    Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 1048454 bytes) in D:\PDT\plugins\org.phpsrc.eclipse.pti.library.pear_1.2.0.R20100228000000\php\library\PEAR\PHP\Depend\Storage\FileEngine.php on line 110

    Waren wohl zu viele Dateien in dem Verzeichnis bzw. das Memory Limit zu niedrig.

    Reply
  18. Hm, mit dem Output kann ich irgendwie nicht viel anfangen :-/ PhpDepend meint:
    „Generating pdepend log files, this may take a moment.“

    Wäre schön, wenn es mir noch sagen würde, wo es die Datei hingeschrieben hat.

    Reply
  19. Ich hab grad mal mein PEAR (PHP Tools > Library > PEAR) eingetragen. Danach wollte ich es bei den einzelenen Tools setzen, aber irgendwie vergisst Eclipse die Auswahl immer wieder. Mal ist die Auswahl vorhanden, mal ists auf zurückgesetzt, mal ist das Dropdown komplett leer. Ich

    Für PHPUnit habe ich gerade keine Tests zur Hand, da ich PTI in Eclipse 4 (Herlios) installiert habe, und diese Installation noch nicht produktiv nutze. CodeSniffer funktioniert super 🙂 Wenigstens ein Glückgefühl.

    Bei pDepend habe ich zumindest schonmal hinbekommen, dass mir son Log geschrieben wird unten in der Konsole. Dass es vorher nicht lief, lag glaub nur daran, dass ich keine PHP Executables konfiguriert hatte. Ich habe oben die Haken bei „Generate jDepend Chart“ und „Generate Summary Pyramid“ gesetzt, aber im Reiter „PHP Depend Charts“ ist nichts zu sehen. Oder übersehe ich die irgendwo?

    Reply
  20. Also ich hab in Eclipse in der Toolbar oben das phpdepend Icon. Wenn ich da drafu klicke passiert bei mir gar nichts.

    Wie schaff ich es dass mir die onsole mal was ausgibt.

    @ Arvid: Wo hast du „oben“ Haken für Generate jdepend Chart udn Generate Summary pyramide. Sowas hab ich nicht

    Reply
  21. Ich habe mir gestern PHP_Depend in mein Eclipse installiert und wundere mich jetzt auch ein bisschen.
    Zum Einen wundere ich mich, dass ich die Datei nicht finde.
    Es wird ja gesagt „Generating pdepend log files, this may take a moment.“, aber ich finde nirgendwo eine Datei.
    Und unter „Preferences >> PHP Tools >> PHP Depend“ gibt es keine Einstellung, wo eine Datei erzeugt werden soll…nur, dass man die Ausgabe auf der Konsole angezeigt bekommen haben möchte, das habe ich archiviert.
    Zum Anderen wundere ich mich, dass der Test der Cyclomatischen Komplexität bei mir 4 ausgibt, obwohl ich die gleiche if(true){…}-Verschachtelung benutzt habe, die Nils oben in seinem Beispiel benutzt (8fache Verschachtelung).
    Was mache ich denn nur falsch? 😀
    Hat jemand von euch eben solche oder wenigstens ähnliche Probleme (gehabt)?

    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