2011-02-07 112 views
0

我认为能够生成一个量化我的ASP.NET MVC项目的几个方面的非正式报告会很有用。目的是帮助我确定我应该把重点放在测试/重构上。ASP.NET MVC - 代码分析/审计

一些指标,可能是开发商有用...

  • 列表操作方法和单元测试每个
  • 列表操作方法的数量和代码行的每个
  • 不使用“授权”属性的列表操作方法

我可以使用反射生成控制器/方法的列表。

var controllers = System.Reflection.Assembly.GetExecutingAssembly().GetTypes() 
    .Where(t => typeof(IController).IsAssignableFrom(t)).ToList(); 

foreach (var controller in controllers) 
{  
    var methods = controller.GetMethods() 
    .Where(m => m.IsAControllerNotDefinedHere()).ToList(); 

    foreach (var method in methods) 
    // do something 
} 

不幸的是,我担心,如果我继续这样我可能会倾倒了大量的时间到这一点,并用东西是难以维系/重用结束。

有没有人有任何建议可以帮助我实现这一目标的现有解决方案(代码片段,开源或商业)?

UPDATE: 我还在寻找输入希望有一个负担得起的(或免费)的解决方案在那里,但我想我也有同感,可用于这一目的一些有用的反射技术。

GetCustomAttributes

var controllers = ...; 
var controllersWithAuthorizeAttribute = controllers 
    .Where(c => c.GetCustomAttributes(typeof(System.Web.Mvc.AuthorizeAttribute), false).Count() > 0).ToList(); 

var methods = ...; 
var methodsWithHttpPostAttribute = methods 
    .Where(m => m.GetCustomAttributes(typeof(System.Web.Mvc.HttpPostAttribute), false).Count() > 0).ToList(); 

单元测试计数

// get all types in your unit test project 
var types = Assembly.GetAssembly(typeof(A.UnitTest.Class)).GetTypes(); 
// get the test class specific to the current controller (arbitrary) 
var testClass = types.Where(t => t.Name == controller.Name + "Tests").SingleOrDefault(); 
// get unit tests from that test class (specific to NUnit) 
var unitTests = testClass.GetMethods().Where(m => m.GetCustomAttributes(typeof(NUnit.Framework.TestAttribute), false).Count() > 0); 
// count tests (relying on consistent naming scheme - again arbitrary) 
var num = unitTests.Where(t => t.Name.StartsWith(...).Count(); 

量的代码

我不能指望使用反射的代码行,但我可以确定Intermed的数量iate语言字节允许我对那些具有更多IL字节的方法给予更严格的审查。

var method = ...; 
var numBytes = method.GetMethodBody().GetILAsByteArray().Length; 

总而言之,甚至没有接近完美。但是,我可以反复获取所需的数据,而不必说服某人在商业产品上花钱。

回答

2

有一些标准的OTS产品(有些可能是免费的)可以按照你的意思行事。这里有一些我用过的:

  1. NCover - 提供测试覆盖率。这些指标有助于阐明应加强测试的领域。我绝不建议100%的测试覆盖率......但百分比应该很高。

  2. NDepend - 提供代码分析/指标,以阐明可能需要重构的类。

  3. ReSharper - 您键入代码分析以提供所有开发人员遵循的“编码标准”。这是一个非常有用的工具,可确保每个人的代码都符合通用标准。非常好。

鲍勃