qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問 http://qaseven.github.io/

          單元測(cè)試等價(jià)于白箱測(cè)試嗎?

            單元測(cè)試 = 白箱測(cè)試? 這是很多人的想法. 一聽到白箱測(cè)試, 就認(rèn)為他就是單元測(cè)試. 或者認(rèn)為單元測(cè)試時(shí), 就是要用白箱測(cè)試的方法來進(jìn)行.
            事情是這樣嗎? 讓我們繼續(xù)看下去:
            當(dāng)我們要測(cè)試這個(gè)程序時(shí)
            Stack push(Stack s, int key)
            你會(huì)怎么測(cè)試呢? 你可能會(huì)考慮以下幾種狀況
            (1) 空的 stack, 第一次 push
            (2) 不是空的 stack, 然后 push 東西
            (3) stack 是滿的, push 個(gè)東西看會(huì)不會(huì)有問題
            (4) 不是空的 stack, 然后 push 一個(gè)字符
            (5) 不是空的 stack, 然后 push 一個(gè)指標(biāo)
            你所做的大多是根據(jù)程序思考邏輯, 或者是根據(jù)輸入的值域來做參考, 來建立測(cè)試個(gè)案.
            這些方式其實(shí)都是黑箱測(cè)試(用到了 use case testing 和 Equivalence Class Testing等方法, 可自行去網(wǎng)絡(luò)上找詳細(xì)介紹), 也就是不管程序內(nèi)部如何被實(shí)作. 只根據(jù)行為和輸入值域來開立測(cè)試.
            那真正的白箱測(cè)試會(huì)是怎么進(jìn)行呢?
            基本上, 可以測(cè)試的狀況有無限多種. 而白箱測(cè)試是要根據(jù)程序內(nèi)容來決定要怎樣挑最小可測(cè)試的集合.
            那程序內(nèi)有甚么東西, 可以讓我們來做挑選的判斷呢? 一般常見的是根據(jù)程控邏輯. 例如: 是否經(jīng)過所有的敘述(statement); 是否經(jīng)過程序所有分支等等.
            如果以經(jīng)過所有的敘述為例, 對(duì)于下面的程序
            01: Stack push(Stack s, int key)
            02: {
            03:     if(isFull(s)){
            04:        printf("Stack is full !!\n");
            05:     }else{
            06:         s.top = s.top + 1;
            07:         s.element[s.top] = key;
            08:         printf("Success push %d in the Stack\n", key);
            09:     }
            10:     return s;
            11: }
          你會(huì)找出這組路徑, 來當(dāng)作最小需要測(cè)試的集合, 然后對(duì)它建立其相對(duì)應(yīng)的測(cè)試個(gè)案
            path1: 01-02-03-05-06-07-08-09-10-11
            test case 1:
            push (s, 3)
            path2: 01-02-03-04-10-11
            test case 2:
            push (s, 3) (repeat 10 times, 如果 stack 大小是10 的話)
            push (s, 3)
            (當(dāng)然你可以只用test case 2, 因?yàn)樗w了 test case 1 的狀況)
            一般人通常不會(huì)先分析執(zhí)行路徑, 再找測(cè)試個(gè)案. 大多是根據(jù)一些準(zhǔn)則, 找出測(cè)試個(gè)案就開始測(cè)試了. 所以一般單元測(cè)試是用黑箱測(cè)試方式在進(jìn)行, 而非白箱測(cè)試.
            那為何大家會(huì)有錯(cuò)覺單元測(cè)試 = 白箱測(cè)試呢?
            那 是因?yàn)樵谶M(jìn)行白箱測(cè)試時(shí), 對(duì)于一個(gè)大的系統(tǒng)要找出可執(zhí)行路徑, 會(huì)是一件很復(fù)雜的事情. 但是對(duì)于每個(gè)單元時(shí), 這件事情變得比較容易, 比較有可能不藉由工具的輔助, 就能自己進(jìn)行. 也就是說在單元測(cè)試時(shí), 比較容易進(jìn)行白箱測(cè)試. 可是不知怎么傳的, 很多人就把這兩個(gè)視為同義.

          posted on 2014-07-23 09:36 順其自然EVO 閱讀(167) 評(píng)論(0)  編輯  收藏 所屬分類: 測(cè)試學(xué)習(xí)專欄

          <2014年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 沙湾县| 巨鹿县| 进贤县| 巴林右旗| 东乌珠穆沁旗| 小金县| 锡林郭勒盟| 观塘区| 德庆县| 巫溪县| 晴隆县| 景宁| 阿坝| 琼结县| 乌海市| 包头市| 阿瓦提县| 抚远县| 隆化县| 泸州市| 麻城市| 密山市| 佳木斯市| 娱乐| 柯坪县| 蓬溪县| 彰武县| 屏山县| 乌兰察布市| 南涧| 保靖县| 河东区| 岑巩县| 安平县| 扬州市| 和平县| 台东市| 新河县| 巴彦淖尔市| 长葛市| 凯里市|