2011-02-07 22 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 - 您鍵入代碼分析以提供所有開發人員遵循的「編碼標準」。這是一個非常有用的工具,可確保每個人的代碼都符合通用標準。非常好。

鮑勃