Größe eines Projektes bestimmen – phploc
Das Projekt an dem ich gerade sitze, hat bestimmt eine Millionen Zeilen! Oder eher 100.000? Auf jeden Fall sind es tausenden von Dateien, oder halt auch nicht.
Bis jetzt habe ich immer noch geraten oder besser geschätzt, welchen Umfang die Projekten haben, mit denen ich hantiere. Aber wie immer, gibt es hier auch ein Tool, dass einem behilflich dabei ist, wenn man genaue Zahlen an den Mann bringen will.
Das Tool von dem ich rede nennt sich phploc, was wohl so viel wie „php lines of code“ heißen soll. Und wie fast alle Tools, die wir hier vorstellen – zumindest gefühlt – stammt auch dieses Helferchen aus der Feder von Sebastian Bergmann. Das Tool kann dazu verwendet werden die Anzahl an Zeilen PHP Code zu bestimmen. Dabei unterscheidet phploc zwischen Kommentaren und richtigem Code. Zusätzlich zählt es die Interfaces, Klassen, nicht- und statische Methoden und die Funktionen. Das alles auch noch in einer relativ kurzen Zeit.
Installiert wird das Tool, wie viele andere auch, über den PEAR Installer. Ganz einfach
pear channel-discover pear.phpunit.de
pear install phpunit/phploc
eingeben und schon habt ihr das alles benötigte auf der Platte und könnt es verwenden. In meinem Screenshot seht ihr die Statistik meines WordPress phphatesme Themes. Das würde zumindest erklären, warum keine Interfaces drinnen sind, denn normalerweise bin ich der König des Interfaces.
Ihr könnt ja mal aus Spaß eure aktuellen Projekte analysieren und hier posten. Würde mich mal interssieren, wie viele Zeilen ihr so im Durchschnitt zu bieten habt.
Ich hab mich die letzte Zeit auch mit Metriken beschäftigt und bin mittlerweile sehr skeptisch was die Aussagekraft angeht. Für einen ersten Überblick finde ich solche Tools ganz gut, insgesamt muss man solche Zahlen schon für eigene Projekte validieren um hier wirklich Rückschlüsse auf das Programm folgern zu können.
Viele Grüße
Tobi
@Tobi Metriken geben ja nur einen Anhaltspunkt, wann es es ich lohnt mal genauer nachzuschauen. Ich würde niemals in einem Projekt verbieten, dass z.B. eine McCabe Metrik den Wert 4 nicht übersteigen darf. Wenn der Wert dies aber übersteigt, würde ich verlangen, dass argumentiert wird warum.
Meine aktuelle interne Webanwendung hat folgende Eckdaten:
Directories: 15
Files: 143
Lines of Code (LOC): 15867
Comment Lines of Code (CLOC): 5124
Non-Comment Lines of Code (NCLOC): 10743
Interfaces: 1
Classes: 61
Non-Static Methods: 385
Static Methods: 48
Functions: 2
Gruß
Jörg
@Jörg: Kaum Interfaces? Schade 😉 Aber danke, dass du den Anfang gemacht hast!
Das eine Interface hab ich für meine Debugger Klassen gebastelt, welche per Factory Pattern verwendet werden. Für die Datenexport Klassen wird dann noch ein weiteres Interface kommen 😉 Dann sind es wenigstens 2
In einem dir bekannten Projekt: 😉
Directories: 715
Files: 3797
Lines of Code (LOC): 713116
Comment Lines of Code (CLOC): 207252
Non-Comment Lines of Code (NCLOC): 505864
Interfaces: 76
Classes: 2360
Non-Static Methods: 14941
Static Methods: 643
Functions: 2523
Und noch ein sehr lange nicht mehr angefasstes privates Projekt:
Directories: 10
Files: 36
Lines of Code (LOC): 3834
Comment Lines of Code (CLOC): 1297
Non-Comment Lines of Code (NCLOC): 2537
Interfaces: 0
Classes: 28
Non-Static Methods: 155
Static Methods: 25
Functions: 5
Ok, auch sehr wenige interfaces.. Das meiste geht da über ein paar Abstrakte Klassen, die hätten aber auch in Interface vertragen können 😉
@Seb: Und ich wette dass 30 von den Interfaces von mir sind 😉
Dann poste ich mal auch mal meine Eckdaten vom letzten Projekt
Directories: 10
Files: 83
Lines of Code (LOC): 19937
Comment Lines of Code (CLOC): 5186
Non-Comment Lines of Code (NCLOC): 14751
Interfaces: 0
Classes: 66
Non-Static Methods: 239
Static Methods: 6
Functions: 42
Hab mal noch unser selbstentwickeltes DMS absuchen lassen:
Directories: 244
Files: 1353
Lines of Code (LOC): 375031
Comment Lines of Code (CLOC): 82827
Non-Comment Lines of Code (NCLOC): 292204
Interfaces: 0
Classes: 447
Non-Static Methods: 4131
Static Methods: 102
Functions: 1890
Leider gar kein Interface :-/
Gruß
Jörg
Ich glaube ich muss mal eine „Rettet das Interface“ Aktions ins Leben rufen.
Leider habe ich noch kein Projekt so weit, dass essich lohnt, da mal phploc drüber laufen zu lassen, daher gibt’s mal die Daten zum Zend Framework 1.8.3, dass ich für’s Projekt verwende:
Directories: 348
Files: 1689
Lines of Code (LOC): 335953
Comment Lines of Code (CLOC): 156373
Non-Comment Lines of Code (NCLOC): 179580
Interfaces: 84
Classes: 1603
Non-Static Methods: 9981
Static Methods: 669
Functions: 412
So hat man mal ne ganz andere Vorstellung vom Umfang des ZF. Was mir persönlich noch fehlt, ist neben den Interfaces die abstrakten Klassen, welche im ZF häufig verwendet werden. Ein sehr interessantes Tool 🙂
Wer sich noch andere Daten anschauen möchte, dem kann ich noch sloccount (http://www.dwheeler.com/sloccount/) empfehlen. Hier mal ein Teil des Outputs, den man beim ZF 1.8.3 kriegt:
Total Physical Source Lines of Code (SLOC) = 148,458
Development Effort Estimate, Person-Years (Person-Months) = 38.13 (457.50)
(Basic COCOMO model, Person-Months = 2.4 * (KSLOC**1.05))
Schedule Estimate, Years (Months) = 2.14 (25.64)
(Basic COCOMO model, Months = 2.5 * (person-months**0.38))
Estimated Average Number of Developers (Effort/Schedule) = 17.84
Total Estimated Cost to Develop = $ 5,150,216
(average salary = $56,286/year, overhead = 2.40).
SLOCCount, Copyright (C) 2001-2004 David A. Wheeler
SLOCCount is Open Source Software/Free Software, licensed under the GNU GPL.
SLOCCount comes with ABSOLUTELY NO WARRANTY, and you are welcome to
redistribute it under certain conditions as specified by the GNU GPL license;
see the documentation for details.
Please credit this data as „generated using David A. Wheeler’s ‚SLOCCount‘.“
Vielleicht hat ja noch jemand Spaß mit diesem Tool 🙂
Gruß Dennis
Stubbles, mit Tests:
Directories: 180
Files: 804
Lines of Code (LOC): 101309
Comment Lines of Code (CLOC): 48281
Non-Comment Lines of Code (NCLOC): 53028
Interfaces: 88
Classes: 906
Non-Static Methods: 4859
Static Methods: 216
Functions: 9
Ohne Tests:
Directories: 94
Files: 466
Lines of Code (LOC): 50038
Comment Lines of Code (CLOC): 26659
Non-Comment Lines of Code (NCLOC): 23379
Interfaces: 77
Classes: 388
Non-Static Methods: 2316
Static Methods: 170
Functions: 4
Definitiv noch zu viele statische Methoden. :-/
@Frank: Ich würde sagen Stubbles ist trotzdem mein Favorit bis jetzt 🙂 Zumindest durch die Interface-Brille betrachtet.
Hi,
Für solche Dinge verwende ich immer den „Lines of Code Wichtel“ (Java-Programm ).
Der kann zwar keine Klassen zählen, dafür aber alle Sorten von Code, also auch HTML/CSS/JS zum Beispiel, der ja bei Projekten einen nicht unerheblichen Teil ausmacht. Man kann hier auch selbst einen Haufen Einstellungen machen, z.b. was als KOmmentare gewertet werden soll und was nicht, etc etc.
BTW: Das Beispiel sieht komisch aus. 64 Files und nur 3 Funktionen? Da kann doch was nicht stimmen 😉
@Michael: Doch doch, das stimmt schon. Sind 63 Template Files und eine Datei mit Funktionen, die in den Templates gebraucht werden und noch nicht von WordPress abgedeckt sind.
Dann auch meine beiden größeren Projekte in der Firma (kleinere Webseiten, die in wenigen Manntagen erstellt wurden, lasse ich mal weg). Das erste Projekt ist ca. 1 Jahr alt, da arbeite ich allein dran:
————————————————————
Directories: 113
Files: 318
Lines of Code (LOC): 42600
Comment Lines of Code (CLOC): 10565
Non-Comment Lines of Code (NCLOC): 32035
Interfaces: 0
Classes: 317
Non-Static Methods: 1852
Static Methods: 176
Functions: 37
————————————————————
Das zweite Projekt gibt es seit ca. 2 Jahren, und es arbeiten ca. 2,5 Personen daran.
————————————————————
Directories: 159
Files: 643
Lines of Code (LOC): 213698
Comment Lines of Code (CLOC): 31037
Non-Comment Lines of Code (NCLOC): 182661
Interfaces: 3
Classes: 571
Non-Static Methods: 3448
Static Methods: 294
Functions: 69
————————————————————
Interfaces sind bei uns auch Mangelware 😉
Interessant finde ich das Verhältnis von Code zu Kommentaren bei ALLEN Beispielen hier. Es scheint immer zwischen 15% und 50% zu liegen.
@Michael: Sehr schöne Feststellung: Zwischen 15% und 50% 🙂 Aber das mit den Interfaces finde ich schon erschreckend.
Und wenn euer pear nicht mehr aktuell genug ist (da phploc mindestens 1.8.1 benötigt), müsst ihr als erstes noch „pear upgrade PEAR“ laufen lassen.
Mein größtes Projekt sieht so aus:
————————————————————
Directories: 478
Files: 1702
Lines of Code (LOC): 209632
Comment Lines of Code (CLOC): 61686
Non-Comment Lines of Code (NCLOC): 147946
Interfaces: 266
Classes: 1372
Non-Static Methods: 9755
Static Methods: 182
Functions: 168
@Ulf: Danke für den Update Hinweis. Hätte ich eigentlich hinschreiben sollen, denn ich stand vor dem Problem. Ich musste sogar den –force Parameter noch mit anhängen.
@Nils: Da lobe ich mir den altbewährten Parameter: „–force –doWhatIwant“ 🙂
Leider kommt bei mir immer folgender Fehler. Die memory_size in der php.ini habe ich auf 128MB erhöht
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate
35 bytes) in C:\xampp\php\PEAR\PHPLOC\Analyser.php on line 82
@Malf: Es kann sein, dass für die Kommandozeilenversion (CLI) eine andere php.ini verwendet wird, als du angegeben hast. Versuch doch mal über „php -i“ rauszufinden, wie groß der maximale Speicher sein darf.