Linux-Dienstprogramm zum Sammeln von Statistiken über eine Codebasis

Angenommen, ich habe ein Softwareprojekt, an dem ich arbeite, und ich möchte einige Statistiken darüber berechnen:

  • Zeilenanzahl (gesamt & pro Datei)
  • Kommentar, Abstand und andere Zeilen
  • Anzahl von Funktionen, Klassen, Methoden
  • Durchschnittliche Länge einer Datei, einer Funktion, einer Klasse, einer Methode
  • Zyklomatische Komplexität
  • Abhängigkeits-DAG-Tiefen für Dateien, Typen usw.

Ich werde mich natürlich nur mit einigen davon zufrieden geben - je mehr desto besser. Ich garantiere nicht, dass das Repository irgendeine Form der Quellcodeverwaltung hat (obwohl ich persönlich gerade mit Mercurial arbeite); und es ist kein Klon eines Online-Repositorys (also nichts wie Gitstats).

Anforderungen:

  • Frei
  • Gratis
  • Funktioniert unter Linux (AMD x86_64 CPUs)
  • Unterstützt mindestens C, C++98, C++11
  • Unterstützung für mehrere Ausgabeformate
  • Kann Ausgabe als Konsolen-ASCII-Art-Diagramme erzeugen (a-la, sagen wir, hg diff --stat)

Wünschenswerte Eigenschaft:

  • Kleines eigenständiges Dienstprogramm
  • Nicht zu viele Abhängigkeiten von anderen Programmen und Bibliotheken
  • Schnell

Antworten (2)

CLOC - Count Lines of Code - erledigt einige (nicht alle) dieser Dinge und erfüllt alle Anforderungen. Es ist auch schnell, klein und hängt nur von Perl und ein paar Perl-Bibliotheken ab.

Beispielausgabe:

http://cloc.sourceforge.net v 1.60  T=0.46 s (354.6 files/s, 64728.0 lines/s)
--------------------------------------------------------------------------------
Language                      files          blank        comment           code
--------------------------------------------------------------------------------
C/C++ Header                    108           2761           2452          10226
C++                              47           1626            772           9703
make                              1            476            193            931
Bourne Again Shell                3             50             25            346
CMake                             2             48             68            225
XML                               1              0              0             11
YAML                              1              1              6              8
Bourne Shell                      1              1              2              5
--------------------------------------------------------------------------------
SUM:                            164           4963           3518          21455
--------------------------------------------------------------------------------

Es gibt eine plattformübergreifende Python-Metrikbibliothek, die Ihnen Metriken entweder in einer einzelnen Datei liefert oder einen Verzeichnisbaum rekursieren kann. Es ist aus dem ursprünglichen Projekt verfügbar oder mein Fork fügt eine rekursive Option auf GitHub hinzu.

Laufen auf einem alten Projekt, das ich mit der Recurse-Option übergeben muss:

Files                       Language        SLOC Comment McCabe
----- ------------------------------ ----------- ------- ------
 102                            XML       10601    2415      0
   7                            VGL        4837      14     49
 588                              C      441797  135164  11715   
 302                              D        7750       0      0    
  27                           XSLT         691     313      0    
  13                         Python         881     203    141
   4                        XML+PHP       21489       0      0
  38                       Makefile        1747    3948     18
   7                      Batchfile          45       8      7
   2                           HTML           9      36      0    
  17                      Text only           0       0      0
   1                         POVRay           8      19      0
----- ------------------------------ ----------- ------- ------
1108                          Total      489855  142120  11930
  • Kostenlos Ja
  • Kostenlos Ja
  • Funktioniert unter Linux (AMD x86_64 CPUs) Ja , es ist Python
  • Unterstützt mindestens C, C++98, C++11 Ja
  • Unterstützung mehrerer Ausgabeformate Ja Kann als Text, xml oder csv ausgegeben werden
  • Kann Ausgabe als "ASCII-art"-Konsolendiagramme erzeugen (a-la, sagen wir, hg diff --stat) Ja Siehe oben
  • Kleines eigenständiges Dienstprogramm Kleine (winzige) Python-Bibliothek, die ein Befehlszeilen-Dienstprogramm hinzufügt
  • Nicht zu viele Abhängigkeiten von anderen Programmen und Bibliotheken Hängt von Python, seinen Standardbibliotheken und Pygments ab
  • Schnell Ziemlich so
Wie vergleicht es sich mit CLOC in Bezug auf die Arten von Statistiken, die es sammelt und präsentiert? Jenseits der Gesamtzeilenaufteilung in Code/Kommentare/Leerzeichen? Und was ist "McCabe"?
McCabe ist die zyklomatische Komplexität.