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 ![](http://www.imhoproject.org/files/allegro.gif)
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 ![](http://www.imhoproject.org/files/complice.gif)
powered by IMHO 1.3