<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 134,comments - 22,trackbacks - 0
    轉(zhuǎ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ù):int i_count ,  
                                int i_flag
            輸出參數(shù): int  i_return; 
            代碼:

    1 int Test(int i_count, int i_flag)
    2         {
    3 int i_temp = 0;
    4 while (i_count>0)
    5             {
    6 if (0 == i_flag)
    7                 {
    8                     i_temp = i_count + 100;
    9 break;
    10                 }
    11 else
    12                 {
    13 if (1 == i_flag)
    14                     {
    15                         i_temp = i_temp + 10;
    16                     }
    17 else
    18                     {
    19                         i_temp = i_temp + 20;
    20                     }
    21                 }
    22                 i_count--;
    23             }
    24 return i_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有幾條路徑呢?
                 1 B(4,24)
                 2 C,E,J(4,6,8,24)
                 3 C,D,F(xiàn),H,A,B(4,6,13,15,22,4,24)
                 4 C,D,G,I,A,B(4,6,13,19,22,4,24)
                 還有嗎??
                 5 C,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è)計測試用例。
                1 B(4,24)
                輸入數(shù)據(jù):i_flag=0,或者是i_flag<0的某一個值。
                預(yù)期結(jié)果:i_temp=0.
                 2 C,E,J(4,6,8,24)
                輸入數(shù)據(jù): i_count =1;i_flag=0 
                預(yù)期結(jié)果:i_temp=101.
                 3 C,D,F(xiàn),H,A,B(4,6,13,15,22,4,24)
                輸入數(shù)據(jù): i_count =1;i_flag=1 
                預(yù)期結(jié)果:i_temp=10.
                 4 C,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行。
                int i_temp=0;假如開發(fā)人員一不小心寫錯了,變成了int i_temp=1;根據(jù)程序?qū)С龅念A(yù)期結(jié)果就會是一個錯誤的值,但是單元測試不出來問題。
                那單元測試就失去了意義。
                有人也許會問這么簡單的函數(shù)就有4個測試用例,如果還復(fù)雜一些的怎么辦?上面的測試用例還可以簡化嗎?答案是可以。
                我們來看 路徑    1 B(4,24)和   4 C,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)上一大把,每個公司的格式也不一樣就不說了。(來自cnblogs)

     

    本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/Joe_wang/archive/2009/11/23/4857371.aspx

    posted on 2009-12-05 12:50 何克勤 閱讀(428) 評論(0)  編輯  收藏 所屬分類: 其他
    主站蜘蛛池模板: 97在线视频免费| 最近更新免费中文字幕大全| 免费观看无遮挡www的小视频| 亚洲精品国产精品乱码不卞 | 亚洲国产综合人成综合网站| 亚洲精品无码中文久久字幕| 韩国欧洲一级毛片免费| 国产成人亚洲综合a∨| 亚洲国产一区二区视频网站| 中文字幕在线免费视频| 亚洲精品一品区二品区三品区| 色www永久免费网站| 亚洲v高清理论电影| 三年片在线观看免费观看高清电影 | 亚洲一线产品二线产品| 日本免费人成视频播放| 日日摸夜夜添夜夜免费视频| 中文字幕亚洲第一| 免费A级毛片在线播放| 亚洲成AV人综合在线观看| 永久免费的网站在线观看| 成人婷婷网色偷偷亚洲男人的天堂| 亚洲Av无码国产情品久久| GOGOGO免费观看国语| 亚洲色欲www综合网| 天天摸天天碰成人免费视频| 日韩大片免费观看视频播放| 亚洲AV无码第一区二区三区| 久久精品国产免费观看| 国产成人高清亚洲一区91| 亚洲国产三级在线观看| 丁香花在线观看免费观看| 日韩精品无码永久免费网站| 亚洲国产精品自在在线观看| 成人免费视频小说| 国色精品va在线观看免费视频| 亚洲一区二区三区高清视频| 亚洲精品视频在线观看你懂的| 久久国产乱子伦精品免费不卡| 亚洲熟妇无码av另类vr影视| 久久精品国产亚洲Aⅴ蜜臀色欲 |