qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          單元測試等價于白箱測試嗎?

            單元測試 = 白箱測試? 這是很多人的想法. 一聽到白箱測試, 就認為他就是單元測試. 或者認為單元測試時, 就是要用白箱測試的方法來進行.
            事情是這樣嗎? 讓我們繼續看下去:
            當我們要測試這個程序時
            Stack push(Stack s, int key)
            你會怎么測試呢? 你可能會考慮以下幾種狀況
            (1) 空的 stack, 第一次 push
            (2) 不是空的 stack, 然后 push 東西
            (3) stack 是滿的, push 個東西看會不會有問題
            (4) 不是空的 stack, 然后 push 一個字符
            (5) 不是空的 stack, 然后 push 一個指標
            你所做的大多是根據程序思考邏輯, 或者是根據輸入的值域來做參考, 來建立測試個案.
            這些方式其實都是黑箱測試(用到了 use case testing 和 Equivalence Class Testing等方法, 可自行去網絡上找詳細介紹), 也就是不管程序內部如何被實作. 只根據行為和輸入值域來開立測試.
            那真正的白箱測試會是怎么進行呢?
            基本上, 可以測試的狀況有無限多種. 而白箱測試是要根據程序內容來決定要怎樣挑最小可測試的集合.
            那程序內有甚么東西, 可以讓我們來做挑選的判斷呢? 一般常見的是根據程控邏輯. 例如: 是否經過所有的敘述(statement); 是否經過程序所有分支等等.
            如果以經過所有的敘述為例, 對于下面的程序
            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: }
          你會找出這組路徑, 來當作最小需要測試的集合, 然后對它建立其相對應的測試個案
            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)
            (當然你可以只用test case 2, 因為它涵蓋了 test case 1 的狀況)
            一般人通常不會先分析執行路徑, 再找測試個案. 大多是根據一些準則, 找出測試個案就開始測試了. 所以一般單元測試是用黑箱測試方式在進行, 而非白箱測試.
            那為何大家會有錯覺單元測試 = 白箱測試呢?
            那 是因為在進行白箱測試時, 對于一個大的系統要找出可執行路徑, 會是一件很復雜的事情. 但是對于每個單元時, 這件事情變得比較容易, 比較有可能不藉由工具的輔助, 就能自己進行. 也就是說在單元測試時, 比較容易進行白箱測試. 可是不知怎么傳的, 很多人就把這兩個視為同義.

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

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

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 麻江县| 福鼎市| 鄂托克前旗| 重庆市| 会宁县| 嫩江县| 临夏县| 宁安市| 什邡市| 出国| 敦煌市| 宁国市| 丰县| 昌乐县| 云梦县| 龙口市| 宜兴市| 大田县| 新乐市| 荣昌县| 文昌市| 五河县| 星座| 临高县| 宣城市| 福海县| 保康县| 呼图壁县| 浦江县| 万盛区| 凌源市| 中江县| 泸西县| 杭锦后旗| 新津县| 明星| 固原市| 天津市| 彭水| 浑源县| 平谷区|