日常工作中,需要為程式集提供統計分析:
1:程式集方法數;
2:開發人員數目及各自所開發或REVIEW的方法數;
3:測試中,被标注有BUG的數目;
4:直接檢視方法的IL代碼;
鑒于以上統計的需要,特開發本EXE。
"Attribute是一種可由使用者自由定義的修飾符(Modifier),可以用來修飾各種需要被修飾的目标"。它的作用是為它們的修飾目标追加上一些額外的資訊——比如"這個類是我寫的"或者"這個函數以前出過問題"等等。
它跟注釋的差別是:注釋是對程式源代碼的一種說明,主要目的是給人看的,在程式被編譯的時候會被編譯器所丢棄,是以,它絲毫不會影響到程式的執行。而Attribute是程式代碼的一部分,不但不會被編譯器丢棄,而且還會被編譯器編譯程序式集(Assembly)的中繼資料(Metadata)裡,在程式運作的時候,你随時可以從中繼資料裡提取出這些附加資訊來決策程式的運作。
本文所依據的就是特性這個特點。
根據文章開頭的要求:統計開發者、reviewer、bug資訊,需要建立一個可被用戶端項目引用的類庫項目XP.AttributeClass。該項目包含三個Attribute類:CreaterAttribute、ReviewerAttribute、BugAttribute。分别如下:
<a></a>
代碼
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false)]
public class CreaterAttribute : Attribute
{
public CreaterAttribute(string creater, string createDate)
Creater = creater;
CreateDate = createDate;
}
public string Creater { get; private set; }
public string CreateDate { get; private set; }
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)]
public class ReviewerAttribute : Attribute
public ReviewerAttribute(string reviewer, string reviewDate)
Reviewer = reviewer;
ReviewDate = reviewDate;
public string Reviewer { get; private set; }
public string ReviewDate { get; private set; }
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class BugAttribute : Attribute
public BugAttribute(bool isBug, string bugDate)
this.IsBug = isBug;
this.BugDate = bugDate;
public bool IsBug { get; private set; }
public string BugDate { get; private set; }
在我們自己的程式集中,需要為自己的類或方法加上這類特性,參考如下:
[CreaterAttribute("join", "2010年12月14日")]
class class1
[BugAttribute(true, "2010年12月14日")]
[ReviewerAttribute("hy", "2010年12月14日")]
private void Test1()
public void Test2()
public void Test3()
XP.CodeStatistics是本工具的核心子產品,包括了四個功能:擷取程式集、擷取IL代碼、統計分析。核心類如下,本文不再贅述,請直接檢視源碼。
由于對用戶端程式集添加了如上的特性資訊的,是以,通過分析程式集,我們可以很方法得到如下的報表:
備注:從項目管理的角度來說,本報表,僅僅是對工作量和代碼品質的一個輔助參考,但有此參考,會比沒有好。
細心的人,可能已經發現,上表所統計的僅僅是IL的代碼行數,而不是實際代碼行數。這是因為:
1:首先,本分析工具是對程式集進行分析。所謂程式集,就是編譯為IL代碼的托管代碼;
2:理論上,從IL代碼能反編譯為托管代碼(就像Reflactor一樣),但是,太複雜了,我們沒有去實作;
3:即使反編譯IL代碼,得到的也不是原始的代碼。如果要分析原始代碼的,可以采用其它現成工具。
是以,既然我們統計的是IL代碼,是以,本工具的一個輔助功能就是IL代碼的檢視。本工具首頁面:
本文轉自最課程陸敏技部落格園部落格,原文連結:http://www.cnblogs.com/luminji/archive/2010/12/29/1920452.html,如需轉載請自行聯系原作者