大量的測試實踐表明,很多錯誤是發生在輸入或輸出數據范圍的邊界上,因此針對各種邊界情況設計測試用例,有利於揭露程序中的錯誤。
邊界值分析法是對等價類分析法的補充。邊界值分析法利用各輸入等價類的最小值、略大於最小值的值、正常值、略小於最大值的值和最大值處進行取值。
1.“單故障”假設
邊界值分析的另外一個要點基於一個十分重要的假設“單故障”假設,即失效問題通常不會由兩個(或多個)故障同時引發。因此,構造邊界值測試用例的方法是,盡讓一個變量取邊界值,其余變量取正常值。
例如有函數F(x1,x2) a ≤x1≤ b,c ≤x2≤ d,那么邊界值取值情況應如下圖:
因此,對於一個n個變量的函數,將會吃產生4n+1個不同的測試用例。
2.健壯性測試
健壯性測試是對邊界值分析的一種簡單擴展,在對變量的5個邊界值進行分析之外,近一步考慮略大最大值和略小於最小值的情況。那么函數F(x1,x2)邊界值取值情況應如下圖:
邊界值分析的大部分屬性都直接適用於健壯性測試,對健壯性測試來說,最重要的不是輸入而是期望輸出。
3.最壞情況測試
如前所述,邊界值分析是基於可靠性理論中的單故障假設的。如果拋開這個假設,就意味着要考察多個變量同時取極值的情況。這在電路分析中叫“最壞情況分析”,這里也利用這種思想來構造最壞情況測試用例。對於每個變量先構造最小值、略大於最小值的值、正常值、略小於最大值的值和最大值5個邊界值的集合,然后計算這些集合的笛卡爾積。對於有n個變量的函數來說,最壞情況測試將會構造出5n個測試用例。
那么函數F(x1,x2)邊界值取值情況應如下圖:
最壞情況測試適用於各個物理量之間存在大量的相互作用,而且函數失效代價極高的情況。
在對測試有特別極端的要求時應采用健壯性最壞情況測試,這就是要用健壯性測試的7個值的集合做笛卡爾積,得到7n個測試用例。函數F(x1,x2)邊界值取值情況應如下圖:
4.特殊值測試
特殊值測試可能是采用最廣泛的一種功能測試方法,也是最直觀、最難統一的。在特殊值測試這種,測試人員利用其背景知識、在類似程序方面積累的經驗以及對軟件“軟肋”的了解來設計測試用例。
5.邊界值分析法設計測試用例應遵循的原則
1)如果輸入條件規定了值的范圍,則應取剛達到這個范圍的邊界的值,以及剛剛超越這個范圍邊界的值作為測試輸入數據。
2)如果輸入條件規定了值的個數,則用最大個數,最小個數,比最小個數少一,比最大個數多一的數作為測試數據。
3)將規則1)和2)應用於輸出條件,即設計測試用例使輸出值達到邊界值及其左右的值。
例如,某程序的規格說明要求計算出"每月保險金扣除額為0至1165.25元",其測試用例可取0.00及1165.24、還可取一0.01及1165.26等。
再如一程序屬於情報檢索系統,要求每次"最少顯示1條、最多顯示4條情報摘要",這時我們應考慮的測試用例包括1和4,還應包括0和5等。
4)如果程序的規格說明給出的輸入域或輸出域是有序集合,則應選取集合的第一個元素和最后一個元素作為測試用例。
5)如果程序中使用了一個內部數據結構,則應當選擇這個內部數據結構的邊界上的值作為測試用例。
6.實例
NextDate函數包含三個變量:month(月份)、day(日期)、和年(year),函數的輸出為輸入日期的后一天的日期。例如輸入為2007年9月9日,則函數的輸出為2007年9月10日。要求輸入變量month、day、year均為整數值,並且滿足下列條件:
1)1 ≤month≤ 12
2)1 ≤day≤ 31
3)1812 ≤year≤ 2012
最壞情況測試用例:
7.邊界值分析法的局限性
邊界值分析法非常適用於多個變量相互獨立又都代表實際物理量的情況。例如:NextDate函數中並沒有針對2月和閏年的測試,實際上month、day和year這幾個變量之間存在特殊的依賴關系。邊界值分析假定各個變量之間應該是完全獨立的。
變量的物理指標同樣重要。如果某個變量代表具體的物理量,比如溫度、壓力、速度等,這個量的物理邊界就非常重要。