risorse | pyramid/cccc

Overview Pyramid con CCCC

Introduzione

Poiché l'Overview Pyramid generata a partire dalle metriche prodotte da SourceMonitor manca di alcuni parametri (cfr. Overview Pyramid con SourceMonitor), ho provato a verificare cosa si riesce ad ottenere con CCCC.

esempio di overview pyramid ottenuta da CCCC

Implementazione

L'implementazione è simile a quella realizzata per SourceMonitor: uno script da linea di comando si occupa di prima di lanciare CCCC, quindi di avviare uno script Python che produce esattamente lo stesso file XML prodotto a partire dai file CSV di SourceMonitor, così da riutilizzare la trasformazione XSLT e il foglio di stile già disponibili.

Difformità

Salta subito agli occhi una notevole discrepanza delle stime delle metriche estratte dai due strumenti, in particolare nei valori attribuiti a LOC e CYCLO:

MetricaSourceMonitorCCCCdifferenza (%)
ANDCn/a.6n/a
AHHn/a1.1n/a
NOP49474,1
NOC150013808,0
NOM721569783,3
LOC1864658429454,8
CYCLO14007812442,0
CALLS34708n/an/a
FANOUTn/a5028n/a

LOC

Confrontando i conteggi dei due strumenti con un terzo (CLOC, nella fattispecie), si conclude che il LOC di SourceMonitor è il Physical SLOC[1], mentre la stima di CCCC è più prossima al numero di linee non vuote, tenendo conto che CCCC ignora quelle contenenti delle direttive per il preprocessore:

ToolVersioneVuoteCommentiCodiceIstruzioniNon VuoteTotale
CLOC1.604869511198126572n/a137770186465
CCCC3.1.4n/a15194101529n/an/a116723
SourceMonitor3.4.6.301n/an/a18646533669n/a186465

SourceMonitor:

Lines Metric: the number of physical lines in a source file, or for a checkpoint the total number of lines in all files in the checkpoint.

CCCC:

[...] Preprocessor lines are treated as blank.

È possibile inibire il conteggio delle linee vuote in SourceMonitor aggiungendo il seguente comando nel file batch di progetto:

 <modified_complexity>true</modified_complexity>
 <ignore_blank_lines>true</ignore_blank_lines>
 <source_directory>...</source_directory>

Il conteggio in questo caso scende da 186465 a 137768, valore molto prossimo quello fornito da CLOC (137770), ma comunque piuttosto distante dalla stima di CCCC (116723, pari a uno scostamento del 37,4%).

CYCLO

Le discrepanze su questa metrica si spiega per la differente metodologia di calcolo: SourceMonitor, rispetto a CCCC, conta anche le uscite anticipate dai blocchi switch, oltre alle istruzioni catch.

SourceMonitor:

Each function or method has a complexity of one plus one for each branch statement such as if, else, for, foreach, or while. Arithmetic if statements (MyBoolean ? ValueIfTrue : ValueIfFalse) each add one count to the complexity total. A complexity count is added for each '&&' and '||' in the logic within if, for, while or similar logic statements. Switch statements add complexity counts for each exit from a case (due to a break, goto, return, throw, continue, or similar statement), and one count is added for a default case even if one is not present. (Note: when a project's Modified Complexity option is selected, switch statements add a count of one to the complexity and the internal case statements do not contribute to the complexity metric.) Each catch or except statement in a try block (but not the try or finally statements) each add one count to the complexity as well.

CCCC:

In the case of C++, the count is incremented for each of the following tokens: 'if','while','for','switch','break','&&','||'.

Aggiornamento [02/12/2013]

Lo script di creazione del prospetto ora vuole anche il nome e il numero di versione del progetto software da inserire nel titolo del prospetto:

Usage: pyramid.cmd <project-name> <project-version> <output-dir> <source-dir>+

Oltre all'indicazione dello strumento utilizzato per raccogliere le metriche, in testata ora viene riportata anche la data di creazione del prospetto stesso.

Riferimenti

  1. "Source lines of code". Wikipedia. <http://en.wikipedia.org/wiki/Source_lines_of_code>. Visitato il 28 Novembre 2013.
  2. Littlefair, T. "CCCC". sourceforge.net. <http://cccc.sourceforge.net/>
  3. Danial, A. "CLOC". sourceforge.net. <http://cloc.sourceforge.net/>

Pagina modificata il 28/11/2013