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