作者 | 李偉 上海控安安全測評部總監
來源 |鑒源實驗室
上篇文章我們介紹了等價類的分析和生產方法(ISO 26262中測試用例的得出方法-等價類的生成和分析),并在代碼測試中對等價類進行了舉例,本篇我們將對邊界值分析和代碼測試中邊界值的測試用例設計進行介紹。
01
開始之前
等價類生成方法很大程度上避免重復測試提高了測試效率,在一類輸入數據中取少量的該類數據,來代表整個類的所有數據進行測試。邊界值則是因為人們在長時間的測試經驗總結后發現,缺陷通常會在輸入輸出的邊界上因處理上的疏忽而出現,所以針對數據在邊界上的處理做測試逐漸成了一個必要的測試設計方法。
邊界值法可以單獨使用,通常情況下為了更全面地對輸入數據的場景進行測試覆蓋,特別是異常情況下的測試設計,邊界值分析法會和等價類分析法配合使用。配合使用時先對輸入情況進行等價類分析,然后在劃分好的每個等價類中使用邊界值分析,對類中的測試取值做選取。
02
邊界值分析
2.1 邊界條件的選擇
我們依然以上一篇中代碼的邏輯來展示邊界值的選取設計,示例中邏輯如下:根據獲得的傳感器溫度,在車內溫度超過25攝氏度時打開空調,此時風扇啟動吹冷風,空調壓縮機啟動,風扇中檔風,返回“空調制冷啟動”;在車內溫度低于15攝氏度時打開空調,此時風扇啟動吹熱風,空調壓縮機不啟動,風扇中檔風,返回“空調加熱啟動”;在溫度大于等于15攝氏度,且小于等于25攝氏度時不做響應。
我們根據輸入條件溫度分為3個等價類,有效等價類集合是(25,+∞)、(-∞,15),無效等價類為[15,25]。邊界值設計有效的邊界值對應選取為26、14,無效等價類邊界值設計為15、25。
在一些項目中,或者公司測試質量規范中會根據實際情況對邊界值測試設計選取做要求,除了上述的基本設計選取,在每個邊界上的取值數量和步進有要求,如次例中通常會額外要求選取邊界值、次邊界值、中間值、次中間值,連續取值的步進為整數1。按照這個要求測試用例設計選值為(-∞,15)選取-30、13、14,(25,+∞)選取26、27、40,無效等價類邊界值設計為15、16、19、20、21、24、25。
上面舉例中我們發現邊界的取值沒有什么特殊的地方,容易造成出問題的點可能在邊界15和25取值時的處理,要看這兩個值是否需要啟動空調。我們重新舉一個例子來給大家說明為什么邊界值的地方容易出錯。我們知道在Python語言中隊列的分片時,第一個元素的下標是從0開始的,而-1表示倒數第一個元素,且分片時不包含右邊界,如下隊列:
① queue_test = [‘a’, ’b’, ’c’, ’d’, ’e’, ’f’];
② 隊列中第一個元素應該是queue_test[0] = [‘a’];
③ 下標1表示的卻是隊列中的第2個元素即queue_test[1] = [‘b’];
④ 直接表示倒數第一個元素時為queue_test[-1] = [‘f’];
⑤ 而表示第1個至第3個元素時,右邊界不是到2而是3,即queue_test[0:3] = [‘a’, ’b’, ’c’]。
通過這個例子我們就可以發現,在對類似的情況進行測試時,下標使用的選取測試我們需要對邊界值進行嚴格測試,因為開發人員稍不注意就可能因為隊列下標的使用失誤,而造成隊列中元素的操作出現缺陷。
2.2 隱藏的邊界條件
上面示例中的等價類劃分明確邊界值比較明顯,通常在功能的需求規格說明書中也會有明確的范圍定義,然而還有一些邊界值在一般的設計文檔或者產品說明中不會明確表述出,但是軟件測試時依然很有必要進行檢查,這樣的邊界條件稱為次邊界條件或者內部邊界條件。
如溫度空調示例中,我們選取極限測試溫度值用來做測試時,依據了通常情況下的常用溫度值,即-30和40。當然也可以根據溫度傳感器的上下限進行取值,即溫度傳感器肯定有最低和最高設備探測溫度極限值,也可以用來作為測試設計依據。
同樣代碼測試中對于變量取值的范圍,我們可以從變量對應的實際數據含義設計范圍取值,如溫度,高度等,不能明確獲知這些隱藏范圍時,可以從定義數據類型取極限值,如無符號的int,有符號int等等。
2.3 邊界值設計原則
使用邊界值分析來設計測試用例時,需要遵循一些基本原則,我們引用全國計算機技術與軟件專業技術資格軟件評測師教程描述大體如下:
對邊界值設計測試用例,應遵循以下幾條原則:
① 如果輸入條件規定了值的范圍,則應取剛達到這個范圍的邊界的值,以及剛剛超越這個范圍邊界的值作為測試輸入數據。
② 如果輸入條件規定了值的個數,則用最大個數、最小個數、比最小個數少1、比最大個數多1的數作為測試數據。
③ 根據規格說明的每個輸出條件,使用前面的原則①。
④ 根據規格說明的每個輸出條件,應用前面的原則②。
⑤ 如果程序的規格說明給出的輸入域或輸出域是有序集合,則應選取集合的第一個元素和最后一個元素作為測試用例。
⑥ 如果程序中使用了一個內部數據結構,則應當選擇這個內部數據結構邊界上的值作為測試用例。
⑦ 選取邊界值時每個邊界上選取的值個數和選取的步進等信息要看實際項目要求。
⑧ 分析規格說明,找出其他可能的邊界條件。
03
單元測試中的使用
邊界值在代碼測試中相對比較簡單,根據形成對應的設計內容取邊界值即可。
我們繼續使用前一篇中的溫度空調控制示例代碼,如下:
代碼定義了vehicle_temperature_inside 為車內的溫度,實際中該值通常是調用溫度傳感器讀值,本示例中簡單將溫度傳感器接口讀值寫成了全局變量Sensor_temperature ;AC_switch 空調壓縮機開關,0為關,1為開;Fan_swtch 風扇開關,0為關,1為開;Fan_speed 1為微風檔,2為中風檔,3為高風檔;Fan_temp 風扇冷熱0為冷風,1為熱風。
代碼要實現的邏輯是根據獲得的傳感器溫度,在車內溫度超過25攝氏度時打開空調,此時風扇啟動吹冷風,空調壓縮機啟動,風扇中檔風,返回“空調制冷啟動”;在車內溫度低于15攝氏度時打開空調,此時風扇啟動吹熱風,空調壓縮機不啟動,風扇中檔風,返回“空調加熱啟動”。
分析代碼得知有效等價類集合是(25,+∞)、(-∞,15),無效等價類為[15,25]。我們根據前文基本邊界值設計vehicle_temperature_inside 參數輸入值有效的邊界值對應選取為26、14,測試用例如下:
vehicle_temperature_inside邊界值設計無效等價類邊界值設計為15、25,測試用例如下:
測試完成后檢查控制流圖如下,所有路徑均已設計測試用例覆蓋。
04
測試小結
在執行代碼的測試設計中使用邊界值分析方法有如下建議:
1. 白盒代碼測試中參數邊界值的取值可以其對應的設計數據內容要求中的實際取值范圍,如設計溫度、高度、速度等,無設計約束時可以參考常用取值的范圍。
2. 使用等價類和邊界值分析是代碼測試和黑盒測試設計的基本要求。
3. 邊界值分析法相對比較簡單,邊界值取值個數和中間值取值等根據實際情況需要取舍。
參考文獻:
1. 全國計算機技術與軟件專業技術資格考試指定用書 – 軟件評測師教程.
審核編輯 黃宇
-
測試
+關注
關注
8文章
5322瀏覽量
126741 -
ISO
+關注
關注
0文章
261瀏覽量
39608 -
代碼
+關注
關注
30文章
4798瀏覽量
68714
發布評論請先 登錄
相關推薦
評論