假設我們現在遇到一個問題:

小明是個主管,手中的產品已經做完了,準備要開開心心的釋出你的產品。而你的上頭老闆突然問了你一句話:

[小明阿,要怎麼證明你這產品交到客戶手中不會出現問題啊...= =?] 老闆露出疑惑的表情~

[我們有很多測試案例(Test Case) !!! 都跑過了,不會出現問題!!] 小明拍著胸脯保證著。

[恩....不過這麼多測試案例,好像也不能保證什麼啊... ( ̄▽ ̄#)﹏﹏] 老闆再度的露出了疑惑的表情....

[恩....好像是耶......◢▆▅▄▃崩╰(〒皿〒)╯潰▃▄▅▇◣]

 

恩,對阿。要怎麼去證明那一堆的測試案例真的有用呢? 總不能說我列出了上千的測試案例,然後就說,我把所有的東西都測完了!!! (鬼才相信你...)

目前專案上遇到了這個問題,經由同事們之前的研究和實際測試以後,發現了VSTS自帶提供的VSPerfMon tool 可以有效的解決這個問題。

我們先來看看什麼是 Code Coverage

http://en.wikipedia.org/wiki/Code_coverage

It describes the degree to which the source code of a program has been tested. (代碼覆蓋率可以說明到底測試案例涵蓋了多少程度的代碼)

假設我們可以產生出一份報告,說明出這次的測試到底涵蓋了多少的 Code Coverage,這就可以實際的證明出:這份測試案例是很有效的!!


好的,那換我們來說說做法。

1. 首先,開啟 Visual Studio Command Prompt (2010)  http://msdn.microsoft.com/en-us/library/ms229859.aspx 

// 有的時候,你開啟IDE不見得會看到這個東西。請從 開始->所有程式->VSTS 2010 去找

2. 在 Visual Studio Command Prompt 視窗下,輸入 vsinstr "tested dll or exe" /coverage 
(vsinstr tool 是一個可以幫你在任何你指定的DLL / EXE 檔案中偷偷塞入監控資料的工具,當你執行的這個工具以後,你指定的檔案體積將會變大,並且多了一個同名稱不同附檔名的檔案:xxx.orig)
 
// 用法範例: vsinstr test.dll /coverage
// 注意事項:假設你無法確認該檔案(test.dll)是否在你系統中的path中...最好在command prompt進到該test.dll所在的folder.
 
3. 輸入 vsperfmon /coverage / output:"report.coverage" /cs /user:Everyone
(vsperfmon tool 將會收集你在vsinstr工具中有塞入監控資料的 dll/exe的Performance data。並且在你下vsperfcmd /shutdown指定以後,把他寫入report.coverage中。)
 
// 用法範例: vsperfmon /coverage/ output:report.coverage
// 注意事項,同上。
 
4. 開始跑你的測試案例in產品上
 
5. 關掉你的產品,並且在 command prompt中下 vsperfcmd/ shutdown 指令
(通常當你的產品還在跑的時候...(譬如網站),這個指令會提醒你把網站關閉他才會繼續執行)
 
6. 用VSTS IDE 打開你的.coverage檔案。

最後要注意一項, .coverage file 是可以Merge的。只要DLL都是步驟2操作的那個即可。
arrow
arrow
    文章標籤
    code coverage asp.net
    全站熱搜

    imagefish 發表在 痞客邦 留言(0) 人氣()