日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何编写单元测试用例

發(fā)布時間:2024/8/1 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何编写单元测试用例 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
 一、單元測試的概念 單元通俗的說就是指一個實現(xiàn)簡單功能的函數(shù)。單元測試就是只用一組特定的輸入(測試用例)測試函數(shù)是否功能正常,并且返回了正確的輸出。 測試的覆蓋種類 1.語句覆蓋:語句覆蓋就是設(shè)計若干個測試用例,運行被測試程序,使得每一條可執(zhí)行語句至少執(zhí)行一次。 2.判定覆蓋(也叫分支覆蓋):設(shè)計若干個測試用例,運行所測程序,使程序中每個判斷的取真分支和取假分支至少執(zhí)行一次。 3.條件覆蓋:設(shè)計足夠的測試用例,運行所測程序,使程序中每個判斷的每個條件的每個可能取值至少執(zhí)行一次。 4.判定——條件覆蓋:設(shè)計足夠的測試用例,運行所測程序,使程序中每個判斷的每個條件的每個可能取值至少執(zhí)行一次,并且每個可能的判斷結(jié)果也至少執(zhí)行一次。 5.條件組合測試:設(shè)計足夠的測試用例,運行所測程序,使程序中每個判斷的所有條件取值組合至少執(zhí)行一次。 6.路徑測試:設(shè)計足夠的測試用例,運行所測程序,要覆蓋程序中所有可能的路徑。 用例的設(shè)計方案主要的有下面幾種:條件測試,基本路徑測試,循環(huán)測試。通過上面的方法可以實現(xiàn)測試用例對程序的邏輯覆蓋,和路徑覆蓋。 二、開始測試前的準(zhǔn)備 在開始測試時,要先聲明一下,無論你設(shè)計多少測試用例,無論你的測試方案多么完美,都不可能完全100%的發(fā)現(xiàn)所有BUG,我們所需要做的是用最少的資源,做最多測試檢查,尋找一個平衡點保證程序的正確性。窮舉測試是不可能的。所以現(xiàn)在進(jìn)行單元測試我選用的是現(xiàn)在一般用的比較多的基本路徑測試法。 三、開始測試 基本路徑測試法:設(shè)計出的測試用例要保證每一個基本獨立路徑至少要執(zhí)行一次。 函數(shù)說明:當(dāng)i_flag=0;返回i_count+100 當(dāng)i_flag=1;返回i_count*10 否則返回i_count*20 輸入?yún)?shù):inti_count, inti_flag 輸出參數(shù):inti_return; 代碼:
1intTest(inti_count,inti_flag)2{3inti_temp=1;4while(i_count>0)5{6if(0==i_flag)7{8i_temp=i_count+100;9break;10}11else12{13if(1==i_flag)14{15i_temp=i_temp*10;16}17else18{19i_temp=i_temp*20;20}21}22i_count--;23}24returni_temp;25}
1.畫出程序控制流程圖 圖例: 事例程序流程圖: 圈中的數(shù)字代表的是語句的行號,也許有人問為什么選4,6,13,8......作為結(jié)點,第2行,第3行為什么不是結(jié)點,因為選擇結(jié)點是有規(guī)律的。讓我們看程序中;第2行,第3行是按順序執(zhí)行下來的。直到第4行才出現(xiàn)了循環(huán)操作。而2,3行沒有什么判斷,選擇等分支操作,所以我們把2,3,4全部合并成一個結(jié)點。其他的也是照這個規(guī)則合并,然后就有了上面的流程圖。 2.計算圈復(fù)雜度 有了圖以后我們要知道到底我們有寫多少個測試用例,才能滿足基本路徑測試。 這里有有了一個新概念——圈復(fù)雜度 圈復(fù)雜度是一種為程序邏輯復(fù)雜性提供定量測試的軟件度量。將該度量用于計算程序的基本獨立路徑數(shù)目。為確保所有語句至少執(zhí)行一次的測試數(shù)量的上界。 公式圈復(fù)雜度V(G)=E-N+2,E是流圖中邊的數(shù)量,N是流圖中結(jié)點的數(shù)量。 公式圈復(fù)雜度V(G)=P+1,P是流圖G中判定結(jié)點的數(shù)量。 通俗的說圈負(fù)責(zé)度就是判斷單元是不是復(fù)雜,是不是好測試的標(biāo)準(zhǔn)。一般來說如果圈復(fù)雜度如果大于20就表示這個單元的可測試性不好,太復(fù)雜(也許有人覺得無所謂,但是如果你們公司實行了CMMI5的話,對這個是有規(guī)定的)。 從圖中我們可以看到, V(G)=10條邊-8結(jié)點+2=4 V(G)=3個判定結(jié)點+1=4 上圖的圈復(fù)雜圖是4。這個結(jié)果對我們來說有什么意義呢?它表示我們只要最多4個測試用例就可以達(dá)到基本路徑覆蓋。 3.導(dǎo)出程序基本路徑。 現(xiàn)在我們知道了起碼要寫4個測試用例,但是怎么設(shè)計這4個測試用例? 導(dǎo)出程序基本路徑,根據(jù)程序基本路徑設(shè)計測試用例子。 程序基本路徑:基本獨立路徑就是從程序的開始結(jié)點到結(jié)束可以選擇任何的路徑遍歷,但是每條路徑至少應(yīng)該包含一條已定義路徑不曾用到的邊。(看起來不好理解,讓我們看例子)。 讓我們看上面的流程圖:從結(jié)點4到24有幾條路徑呢? 1B(4,24) 2C,E,J(4,6,8,24) 3C,D,F,H,A,B(4,6,13,15,22,4,24) 4C,D,G,I,A,B(4,6,13,19,22,4,24) 還有嗎?? 5C,D,C,I,A,C,E,J(4,6,13,19,22,4,6,8,24)算嗎? 不算,為什么?因為上面的4條路徑已經(jīng)包括了所有的邊。第5條路徑已經(jīng)不包含沒有用過的邊了。所有的路徑都遍歷過了。 好了,現(xiàn)在我們有了4條基本獨立路徑根據(jù)獨立路徑我們可以設(shè)計測試用例。 1B(4,24) 輸入數(shù)據(jù):i_count=0,或者是i_count<0的某一個值。 預(yù)期結(jié)果:i_temp=0. 2C,E,J(4,6,8,24) 輸入數(shù)據(jù):i_count=1;i_flag=0 預(yù)期結(jié)果:i_temp=101. 3C,D,F,H,A,B(4,6,13,15,22,4,24) 輸入數(shù)據(jù):i_count=1;i_flag=1 預(yù)期結(jié)果:i_temp=10. 4C,D,G,I,A,B(4,6,13,19,22,4,24) 輸入數(shù)據(jù):i_count=1;i_flag=2 預(yù)期結(jié)果:i_temp=20. 這里的輸入數(shù)據(jù)是由路徑和程序推論出來的。而要注意的是預(yù)期結(jié)果是從函數(shù)說明中導(dǎo)出,不能根據(jù)程序結(jié)構(gòu)中導(dǎo)出。 為什么這么說? 讓我們看程序中的第3行。 inti_temp=1;假如開發(fā)人員一不小心寫錯了,變成了inti_temp=0;根據(jù)程序?qū)С龅念A(yù)期結(jié)果就會是一個錯誤的值,但是單元測試不出來問題。 那單元測試就失去了意義。 有人也許會問這么簡單的函數(shù)就有4個測試用例,如果還復(fù)雜一些的怎么辦?上面的測試用例還可以簡化嗎?答案是可以。 我們來看路徑1B(4,24)和4C,D,G,I,A,B(4,6,13,19,22,4,24),路徑1是路徑4的真子集,所以1是可以不必要的。上圖的圈復(fù)雜度是4。這個結(jié)果對我們來說有什么意義呢?它表示我們只要最多4個測試用例就可以達(dá)到基本路徑覆蓋。所以說圈復(fù)雜度標(biāo)示是最多的測試用例個數(shù),不是一定要4個測試用例才可以。不過有一點要申明的是測試用例越簡化代表你的測試越少,這樣程序的安全性就越低了。  四、完成測試 接下來根據(jù)測試用例使用工具測試NUNIT,VS2005都可以。 接下來根據(jù)測試結(jié)果編寫測試報告,測試人,時間,結(jié)果,用例,是否通過,格式網(wǎng)上一大把,每個公司的格式也不一樣就不說了。

總結(jié)

以上是生活随笔為你收集整理的如何编写单元测试用例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。