CQL in NDepend e cppdepend per vedere cambiamenti nel metriche attraverso revisioni
Domanda
CQL rende facile trovare metodi in cui CodeWasChanged ma ho anche bisogno di confrontare il metriche - Chi vorrei trovare codice modificato e vedere se è migliorata o no
.NDepend e cppdepend per una base di codice misto. Sono molto impressionato con entrambi, soprattutto quanto bene cppdepend sembra di far fronte con la nostra eredità e moderna c ++.
Se riesco a capire come fare questo, allora posso fare tutto quello che ho bisogno all'interno CQL ma per il resto hanno a che fare qualcosa di simile a combinare report esternamente. Così mi farebbe piacere consigli su automatizzando e confrontando la generazione di report da CQL come ripiego. Ovviamente sarei più felice utilizzando CQL all'interno VisualCppDepend o VisualNDepend così posso vedere i risultati delle query nella vista metrico. L'esplorazione diretta dei risultati è il grosso problema con questi strumenti, rispetto ad altri.
I commenti su CodeWasChanged e altre clausole come IsInOlderBuild dicono forze CQL a essere eseguito contro la vecchia costruzione che suggerisce non si può avere un lavoro di query attraverso revisioni.
Il tipo di domanda che vorrei è qualcosa di simile, la sintassi immaginare:
SELECT METHODS WHERE CodeWasChanged and MethodCe > 10
generalizzato al lavoro tra versioni
SELECT METHODS WHERE CodeWasChanged and MethodCe > 10 and BaseMethodCe < 10
o forse
SELECT METHODS WHERE CodeWasChanged and MethodCe > 10 and Older(MethodCe < 10)
Soluzione
Andy, con CQLinq (codice di query e Regna su LINQ) vedere trend nel codice metriche è possibile e, auspicabilmente, facile da raggiungere. Si veda ad esempio la regola di codice predefinito Evitare di fare metodi complessi ancora più complesso ( fonte CC) :
// <Name>Avoid making complex methods even more complex (Source CC)</Name>
// To visualize changes in code, right-click a matched method and select:
// - Compare older and newer versions of source file
// - Compare older and newer versions disassembled with Reflector
warnif count > 0
from m in JustMyCode.Methods where
!m.IsAbstract &&
m.IsPresentInBothBuilds() &&
m.CodeWasChanged()
let oldCC = m.OlderVersion().CyclomaticComplexity
where oldCC > 6 && m.CyclomaticComplexity > oldCC
select new { m,
oldCC ,
newCC = m.CyclomaticComplexity ,
oldLoc = m.OlderVersion().NbLinesOfCode,
newLoc = m.NbLinesOfCode,
}
Ci piacerebbe consigliamo di sfogliare le regole del codice di default relative al gruppo di default: Quality Code Regressione