本節書摘來自異步社群《軟體測試技術實戰:設計、工具及管理》一書中的第2章,第2.1節運用等價類/邊界值設計測試用例,作者顧翔,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
第2章 傳統的軟體測試的設計方法
軟體測試技術實戰:設計、工具及管理
從本章開始介紹軟體測試的各種設計方法,這是學習軟體測試的重要内容。
一般來說,軟體測試設計方法分為5類:傳統的黑盒測試方法、基于品質的測試方法、基于風險的測試方法、基于經驗的測試方法以及白盒測試方法。本章主要介紹傳統的黑盒測試方法和白盒測試方法,共分7節。
5種黑盒測試方法如下。
等價類/邊界值。
決策表。
狀态轉換圖。
決策樹。
正交法。
7種白盒測試的方法如下:。
語句覆寫。
分支覆寫。
條件覆寫。
判定/條件覆寫。
mc/dc覆寫。
路徑覆寫。
控制流測試。
最後分析測試用例設計中幾個錯誤觀點。
基于品質的測試方法請參看1.1.9軟體測試類型,本書中量的測試方法參看第1.1.9節軟體測試類型,本書不再進行深入的介紹行深入介紹;基于風險的測試方法将在第四章進行介紹在第4章介紹;基于經驗的測試方法将在第三章進行介紹。另外關于軟體測試在第3章介紹。另外,關于軟體測試的設計,讀者可以參考參考文獻【5】、【13】進行深入的學習行深入學習。
2.1 運用等價類/邊界值設計測試用例
通過等價類/邊界值法設計軟體測試用例是測試用例設計的最基本的方法。這兩種方法密不可分。下面先介紹“等價類分析法”。
2.1.1 等價類
等價類是指軟體測試對象的某個參數輸入域的子集合。在該子集合中,各個輸入資料對于識别軟體測試對象中的缺陷是等價的。隻要測試等價類的某一個代表值,就可以認為覆寫了該等價類所有其他值的軟體測試。
等價類的劃分
是把軟體測試對象的輸入域劃分成若幹部分,然後從每一部分中選取少數具有代表性的資料,作為測試用例輸入資料的測試用例設計技術。
等價類的兩個假設
(1)軟體測試對象等價類中任意一個代表值沒有發現缺陷,則認為等價類内其他值也不能發現缺陷。比如等價類為【0~5】,如果測試資料4沒有發現缺陷,那麼測試資料1也不可能發現缺陷。
(2)軟體測試對象等價類中任意一個代表值可以發現缺陷,則認為等價類内其他值也都可以發現缺陷。比如等價類為【0~5】,如果測試資料4發現缺陷,那麼測試資料1也肯定能發現缺陷。
有效等價類與無效等價類
(1)有效等價類:對于軟體測試對象而言,有效等價類指的是合理的、有意義的資料構成的集合。
(2)無效等價類:對于軟體測試對象而言,無效等價類指的是不合理的、沒有意義的資料構成的集合。
案例2-1:等價類的分類。
通過表2-1來看各種類型的資料是如何通過等價類進行分類的。
下面再介紹一下“邊界值分析法”。
2.1.2 邊界值
邊界值分析是對輸入或輸出的邊界值進行軟體測試的一種測試方法。通常,邊界值分析法作為對等價類劃分法技術的補充。這種情況下,其測試用例來自等價類的邊界。由于程式員在開發時在邊界區域比較容易犯錯誤(如原本應該為a<100,卻寫成a≤100),是以邊界值測試法就顯得非常重要。由于邊界值是随着等價類出現的,是以邊界值可以分為有效等價類的邊界值和無效等價類的邊界值。
邊界值分析的步驟如下:
(1)識别軟體測試對象中的參數等價類;
(2)識别每個等價類的邊界值;
(3)建立邊界值的相關測試用例;
(4)定義邊界值分析技術的覆寫率。
案例2-2:邊界值的設計法。
基于表2-1,來看各種情況的邊界值如何劃定,見表2-2。
2.1.3 基于輸出的等價類/邊界值劃分
等價類/邊界值除了可以以輸入進行分類,也可以以輸出進行分類,如案例2-3所示。
案例2-3:公園門票規定:
身高1.2m以下的兒童免票;
身高1.2~1.4m的兒童半票(含1.2m);
年齡在60~69歲之間的老人半票(含60歲);
年齡在70歲以上的老人免票(含70歲);
在校學生半票(不含在職學生、電大學生);
革命烈士家屬、現役軍人免票。
我們可以劃分等價類為全票、半票和免票,見表2-3。
2.1.4 測試用例的設計
如果系統中有多處需要使用等價類設計的測試用例,對于有效等價資料類,可以在一個測試用例中使用;而對于無效等價類資料,在一個測試用例中隻能出現一個。
案例2-4:等價類測試。
圖2-1是使用者資訊輸入的部分界面,針對這個界面設計測試用例。
這裡性别也需要輸入,隻允許輸入“男”和“女”。
對于有效等價資料類,設計測試用例如下。
(1)姓名:小明,年齡:0歲,性别:男。
(2)姓名:阿拉克拉姆,年齡:130歲,性别:女。
而對于無效等價類,如果設計的測試用例如下。
姓名:明,年齡:200歲,性别:男。
那麼系統如果隻報告了姓名有誤,而沒有報告年齡有誤的資訊,就無法知道年齡是否在程式中進行了有效性檢驗。也就是說,出現“缺陷屏蔽”,是以,對于無效等價類,測試用例應該細化如下。
(1)姓名:克,年齡:13,性别:男。
(2)姓名:阿拉克拉姆薩,年齡:13,性别:男。
(3)姓名:@ @,年齡:13,性别:男。
(4)姓名:小明,年齡:134,性别:男。
(5)姓名:小明,年齡:13,性别:中。
這樣就可以看出:有效等價類的總個數為每個用例有效等價類個數的笛卡兒積(1×1×2=2);而無效等價類的總個數為每個用例有效等價類個數的和(1+1+3=5)。
另外,如果隻要求測試等價類,而對邊界值測試要求不高,在測試用例的設計中盡可能多地用到邊界值。
案例2-5:由于邊界值測試不完善帶來的bug。
這是我親自遇到的一個案例。有一天我去上海某醫院看病,由于手頭現金沒有帶夠,需要在醫院的門口一台atm機上取款,取款機上有一個提示,“一次取款不得多于¥2000,每天最多取5次”,于是我用我的借記卡準備取¥2000,系統卻告訴我“已經超過一次取款的最大金額”,我感到很納悶,于是改為¥1900,取款成功;作為測試工程師,我馬上就意識到該系統中的邊界值測試沒有做好或者根本沒有進行邊界值的測試。
2.1.5 案例
案例2-6:月曆等價類/邊界值測試。
最後以一個案例作為本節的結束,如圖2-2所示。
等價類/邊界值測試法是最基本的測試用例設計方法,不管是函數級别的軟體測試,還是系統級别的軟體測試都可以使用。