黑盒測試首先是程序通常的功能性測試。要求:
每個軟件特性必須被一個測試用例或一個被認可的異常所覆蓋。
用數據類型和數據值的最小集測試。
用一系列真實的數據類型和數據值運行,測試超負荷、飽和及其他“最壞情況”的結果;
用假想的數據類型和數據值運行,測試排斥不規則輸入的能力;
對影響性能的關鍵模塊,如基本算法、應測試單元性能(包括精度、時間、容量等)。
不僅要考核“程序是否做了該做的?”還要考察“程序是否沒做不該做的2”同時還要考察程序在其他一些情況下是否正常。這些情況包括數據類型和數據值的異常等等。下述幾種方法:(a)等價類劃分,(b)因果圖方法,(c)邊值分析法,(d)猜錯法,(e)隨機數法,就是從更廣泛的角度來進行黑盒測試。每一個方法都力圖能涵蓋更多的“任何情況”,但又各有長處,綜合使用這些方法,會得到一個較好的測試用例集。
1.等價類劃分
等價類劃分是一種典型的黑盒測試方法。等價類是指某個輸入域的集合。它表示對揭露程序中的錯誤來說,集合中的每個輸入條件是等效的。因此我們只要在一個集合中選取一個測試數據即可。等價類劃分的辦法是把程序的輸入域劃分成若干等價類,然后從每個部分中選取少數代表性數據當作測試用例。這樣就可使用少數測試用例檢驗程序在一大類情況下的反映。
在考慮等價類時,應該注意區別以下兩種不同的情況:
有效等價類:有效等價類指的是對程序的規范是有意義的、合理的輸入數據所構成的集合。在具體問題中,有效等價類可以是一個,也可以是多個。
無效等價類:無效等價類指對程序的規范是不合理的或無意義的輸入數據所構成的集合。對于具體的問題,無效等價類至少應有一個,也可能有多個。
確定等價類有以下幾條原則:
如果輸入條件規定了取值范圍或值的個數,則可確定一個有效等價類和兩個無效等價類。例如,程序的規范中提到的輸入條包括“……項數可以從1到999……”,則可取有效等價類為“l考項數<999”,無效等價類為“項數<l,,及“項數>999”。
輸入條件規定了輸入值的集合,或是規定了“必須如何”的條件,則可確定一個有效等價類和一個無效等價類。如某程序涉及標識符,其輸入條件規定“標識符應以字母開頭……”則“以字母開頭者”作為有效等價類,“以非字母開頭”作為無效等價類。
如果我們確知,已劃分的等價類中各元素在程序中的處理方式是不同的,則應將此等價類進一步劃分成更小等價類。
輸入條件 有效等價類 無效等價類
。。。。。。
。。。。。。 。。。。。。
。。。。。。 。。。。。。
。。。。。。
根據已列出的等價類表,按以下步驟確定測試用例:
為每個等價類規定一個唯一的編號;
設計一個測試用例,使其盡可能多地覆蓋尚未覆蓋的有效等價類。重復這一步,最后使得所有有效等價類均被測試用例所覆蓋;
設計一個新的測試用例,使其只覆蓋一個無效等價類。重復這一步,使所有無效等價類均被覆蓋。這里強調每次只覆蓋一個無效等價類。這是因為一個測試用例中如果含有多個缺陷,有可能在測試中只發現其中的一個,另一些被忽視。等價類劃分法能夠全面、系統地考慮黑盒測試的測試用例設計問題,但是沒有注意選用一些“高效的”、“有針對性的”測試用例。后面介紹的邊值分析法可以彌補這一缺點。
2.因果圖
等價類劃分法并沒有考慮到輸入情況的各種組合。這樣雖然各個輸入條件單獨可能出錯的情況已經看到了,但多個輸入情況組合起來可能出錯的情況卻被忽略。采用因果圖方法能幫助我們按一定步驟選擇一組高效的測試用例,同時,還能為我們指出程序規范的描述中存在什么問題。
利用因果圖導出測試用例需要經過以下幾個步驟:
分析程序規范的描述中哪些是原因,哪些是結果。原因常常是輸入條件或是輸入條件的等價類。結果是輸出條件。
分析程序規范的描述中語義的內容,并將其表示成連接各個原因與各個結果的“因果圖”。
由于語法或環境的限制,有些原因和結果的組合情況是不可能出現的。為表明這些特定的情況,在因果圖上使用持殊的符號標明約束條件。把因果圖轉換成判定表。把判定表的每一列寫成一個測試用例。
3.邊值分析法
邊值分析法是列出單元功能、輸入、狀態及控制的合法邊界值和非法邊界值,設計測試用例,包含全部邊界值的方法。典型地包括IF語句中的判別值,定義域、值域邊界,空或畸形輸入,末受控狀態等。邊值分析法不是一類找一個例子的方法,而是以邊界情況的處理作為主要目標專門設計測試用例的方法。另外,邊值分析不僅考查輸入的邊值,也要考慮輸出的邊值。這是從人們的經驗得出的一種有效方法。人們發現許多軟件錯誤只是在下標、數據結構和標量值的邊界值及其上、下出現,運行這個區域的測試用例發現錯誤的概率很高。
用邊值分析法設計測試用例時,有以下幾條原則:
如果輸入條件規定了取值范圍,或是規定了值的個數,則應以該范圍的邊界內及剛剛超出范圍的邊界外的值,或是分別對最大、最小及稍小于最小、稍大于最大個數作為測試用例。如有規范“某文件可包含l至255”個記錄……“,則測試用例可選1和255及0和256等。
針對規范的每個輸出條件使用原則〔a〕。
如果程序規范中提到的輸入或輸出域是個有序的集合(如順序文件、表格等)就應注意選取有序集的第一個和最后一個元素作為測試用例。
分析規范,盡可能找出可能的邊界條件。一個典型的邊值分析例子是三角形分類程序。選取a,b,c構成三角形三邊,“任意兩邊之和大于第三邊”為邊界條件。邊值分析相等價類劃分側重不同,對等價類劃分是一個補充。如上述三角形問題,選取a=3,b=4,c=5,a=2,b=4,c=7則覆蓋有效和無效等價類。如果能在等價類劃分中注入邊值分析的思想。在每個等價類中不只選取一個覆蓋用例,而是進而選取該等價類的邊界值等價類劃分法將更有效,最后可以用邊值分析法再補充一些測試用例。
4.猜錯法
猜錯法在很大程度上是憑經驗進行的,是憑人們對過去所作的測試工作結果的分析,對所揭示的缺陷的規律性作直覺的推測來發現缺陷的。
一個采用兩分法的檢索程序,典型地可以列出下面幾種測試情況:
被檢索的表只有一項或為空表;
表的項數恰好是2的冪次;
表的項數比2的冪次多1等。
猜錯法充分發揮人的經驗,在一個測試小組中集思廣益,方便實用,特別在軟件測試基礎較差的情況下,很好地組織測試小組 (也可以有外來人員)進行錯誤猜測,是有效的測試方法。
5.隨機數法
即測試用例的參數是隨機數。它可以自動生成,因此自動化程度高。使用大量隨機測試用例測試通過的程序會提高用戶對程序的信心。但其關鍵在于隨機數的規律是否符合使用實際。
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/