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