Moje odkazy
Obsah článku:
vydáno: 30. 9. 2015 23:10, aktualizováno: 21. 9. 2020 16:08
Když si stáhnu zdrojové kódy nějakého programu, jednou z prvních věcí, které zkoumám, je, v čem je to napsané a kolik toho je. Počet řádků kódu považuji za celkem důležitý ukazatel, ale o tom zase někdy příště… Programovací jazyk můžeme zjistit podle přípon souborů nebo nahlédnutím do nich. Řádky zase můžeme spočítat pomocí příkazu wc
z GNU coreutils. Ale pro tyto úkoly existuje daleko lepší specializovaný nástroj, který se jmenuje cloc
(Count Lines of Code).
Program máte pravděpodobně ve své distribuci, takže si ho snadno nainstalujete přes balíčkovací systém. Např. v Debianu/Ubuntu příkazem:
apt install cloc
Použití programu je jednoduché, stačí jako parametr zadat cestu ke zdrojákům a program vypíše statistiku počtu řádků pro jednotlivé jazyky. Např. pro aktuální vývojovou verzi mého programu SQL-DK vypadá statistika takto:
$ cloc sql-dk 180 text files. 143 unique files. 284 files ignored. http://cloc.sourceforge.net v 1.60 T=2.13 s (53.0 files/s, 8021.5 lines/s) ------------------------------------------------------------------------------- Language files blank comment code ------------------------------------------------------------------------------- Java 77 1463 2207 6644 XML 13 17 415 4423 JavaServer Faces 2 10 0 651 Bourne Shell 11 75 58 303 XSLT 1 28 17 164 Perl 3 46 41 136 XSD 1 14 14 74 CSS 1 5 0 49 Ant 3 46 180 22 SQL 1 0 0 8 ------------------------------------------------------------------------------- SUM: 113 1704 2932 12474 -------------------------------------------------------------------------------
Příkaz je celkem inteligentní a už ve výchozím režimu ignoruje adresáře verzovacích systémů jako .hg
, .git
, .svn
atd. Další ignorované adresáře můžeme přidat parametrem --exclude-dir=
Taky se může stát, že jsou mezi zdrojovými kódy různé nezajímavé konfigurační soubory nebo další věci – někdy se tedy hodí odfiltrovat celé jazyky volbou --exclude-lang=
.
Možnosti parametrizace jsou široké, viz man cloc
.
Základním výstupním formátem je textová tabulka vhodná pro zobrazení v terminálu. Cloc ale umí vypisovat statistiky i ve strojově čitelném formátu XML, což nám dává další možnosti.
Napsal jsem si skript a XSL šablonu, které naformátují výstup pomocí programu SQL-DK a relační databáze (ano, je to kanón na vrabce :-). Výstup pak vypadá takto:
Máme tak k dispozici i součet řádků (kód+komentáře+prázdné) a dokonce graf (verze SQL-DK podporující grafy ještě oficiálně nevyšla, ale můžete si ji stáhnout z Mercurialu).
SQL-DK samo o sobě podporuje různé formátovače výstupu, takže to můžete konverzovat i na něco dalšího než barevnou tabulku v konsoli – třeba LaTeX, XHTML nebo XML, ale to už by byl trochu trolling – už tak ta transformace vypadá takto:
cloc → XSLT → Bash+SQL → relační databáze → SQL-DK
Upozornění: XSLT generující bashový skript je v současné verzi nedokonalé a může dojít k injektování (do bashe, ne SQL) nežádoucích hodnot (záleží, co vrací cloc). Tento skript a šablonu berte tedy spíš jako zajímavost než obecně použitelný software.
Ale zpět k jednodušším postupům. Cloc umožňuje ke XML výstupu připojit odkaz na XSL šablonu a výsledek (XML soubor) si pak můžeme zobrazit ve webovém prohlížeči.
Vygenerujeme si statistiky příkazem:
$ cloc --xsl=cloc-xhtml.xsl --out=/tmp/sql-dk.xml .
Pozor, Cloc obsahuje drobnou chybu – pokud bychom nepoužili --out=
a výstup jen nasměrovali v Bashi pomocí >
do souboru nebo rourou do dalšího příkazu, bude XML obsahovat i hlášky, které měly přijít na chybový výstup, a bude nevalidní.
Výsledek v prohlížeči vypadá takto:
V XSL šabloně jsme si (podobně jako v předchozím příkladu v SQL) doplnili další sloupec obsahující celkový počet řádků (kód+komentáře+prázdné) pro každý jazyk.
Kromě XML podporuje Cloc i výstup ve formě SQL skriptu – můžeme ho tak použít třeba i na serveru pro dávkové zpracování a statistiky plnit do databáze a následně např. zobrazovat na webu nebo třeba porovnávat, jak se počty řádků mění mezi verzemi.
Cloc je užitečný nástroj, který nám pomůže s analýzou zdrojových kódů a umožní nám udělat si rychlou představu o zkoumaném softwaru. Díky podpoře XML si můžeme výstup naformátovat dle libosti – ať už jako barevnou tabulku s grafy v terminálu nebo třeba XHTML pro prohlížeč.
Témata: [softwarové inženýrství] [SQL] [XML]
Tento článek zatím nikdo nekomentoval