Code Metrics [1]

Come annunciato qualche giorno fa, ho iniziato la scrittura di una libreria estendibile per calcolare "code metrics". Se qualcuno fosse interessato alle motivazioni le trova qui. Sono arrivato al punto in cui il motore comincia a produrre qualche numero

Analyzer az = new Analyzer();
az.AddAssemblyFile(root + @"A\bin\Debug\A.dll");
az.AddAssemblyFile(root + @"B\bin\Debug\B.dll");

Analysis a = az.Generate(
new InstabilityAssemblyDependenciesWalker());

AssemblyDescriptor ad = a.Scan.FindAssemblyDescriptor("[A]");
Assert.IsNotNull(ad);
double i = ad.DescriptorCounters["Instability"];
Assert.AreEqual(0.75, i);

ad = a.Scan.FindAssemblyDescriptor("[B]");
Assert.IsNotNull(ad);
i = ad.DescriptorCounters["Instability"];
Assert.AreEqual(1, i);

E' possibile scrivere dei "visitor" esterni che navigano i grafi generati dall'analisi ed effettuano i loro calcoli. Nell'esempietto il "walker" InstabilityAssemblyDependenciesWalker utilizza un paio di visitor per il calcolo della metrica afferent coupling (Ca) e di quella efferent coupling (Ce), da cui poi ricava la metrica instability. Le definizioni delle suddette metriche si possono trovare per esempio qui.

Quando avrò un paio di metriche sensate cercherò di scrivere un modulo consumatore in grado di generare reportistica xml, e poi metterò il tutto su Codeplex. Il nome non l'ho ancora deciso, ho qualche idea ma non sono ancora convinto

powered by IMHO 1.3

posted @ Thursday, January 18, 2007 11:12 PM

Print

Comments on this entry:

# re: Code Metrics [1]

Left by Gian Maria at 1/19/2007 10:04 AM
Gravatar
Mi piace, indubbiamente bisognerà poi trovare il modo di far mangiare il tuo risultato dal cruise control .net, sarebbe decisamente carino :P

Facci sapere quando hosterai il progetto su codeplex.

Gian Maria

# re: Code Metrics [1]

Left by Wasp at 1/19/2007 10:09 AM
Gravatar
Assolutamente d'accordo, il mio obiettivo è usarlo in continuous integration, vorrei arrivare a costruire dei task NAnt in grado di pilotarlo. Vi faccio sapere :)
Comments have been closed on this topic.