作者 | 李偉 上海控安安全測(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)推薦
鑒源實(shí)驗(yàn)室·基于MQTT協(xié)議的模糊測(cè)試研究
![<b class='flag-5'>鑒</b><b class='flag-5'>源</b><b class='flag-5'>實(shí)驗(yàn)室</b>·基于MQTT協(xié)議的模糊<b class='flag-5'>測(cè)試</b>研究](https://file1.elecfans.com/web2/M00/00/46/wKgaomaofVmAGd6VAAGZG-VO-CA091.png)
【實(shí)驗(yàn)室管理系列】實(shí)驗(yàn)室管理體系ISO/IEC17025內(nèi)容拆解
實(shí)驗(yàn)室如何進(jìn)行非標(biāo)方法的確認(rèn)
ISO 26262功能安全標(biāo)準(zhǔn)體系解讀
鋰電材料截面制樣-氬離子拋光CP離子研磨 金鑒實(shí)驗(yàn)室分享(下)
lims實(shí)驗(yàn)室管理系統(tǒng)是什么?實(shí)驗(yàn)室信息管理系統(tǒng)介紹!
實(shí)驗(yàn)室lims系統(tǒng)解決方案
基于UML圖依權(quán)限有序的Web鏈接測(cè)試用例生成方法
![基于UML圖依權(quán)限有序的Web鏈接<b class='flag-5'>測(cè)試用</b><b class='flag-5'>例</b>生成<b class='flag-5'>方法</b>](https://file.elecfans.com/web2/M00/49/8A/poYBAGKhwMSAD495AAATHLgFXWM411.jpg)
數(shù)據(jù)測(cè)試:輸入數(shù)據(jù)的設(shè)計(jì)方法和測(cè)試用例設(shè)計(jì)方法
廣東金鑒實(shí)驗(yàn)室科技有限公司介紹
![廣東金<b class='flag-5'>鑒</b><b class='flag-5'>實(shí)驗(yàn)室</b>科技有限公司介紹](https://file.elecfans.com//web2/M00/20/B0/pYYBAGGfLdmAXhJzAAE6QJj_CbE63.jpeg)
高精度電流源在電子實(shí)驗(yàn)室中的應(yīng)用
![高精度電流<b class='flag-5'>源</b>在電子<b class='flag-5'>實(shí)驗(yàn)室</b><b class='flag-5'>中</b>的應(yīng)用](https://file1.elecfans.com//web2/M00/89/78/wKgaomSF2FyAXORvAADsALt9n5w370.png)
技術(shù)分享 | ISO 26262中的安全分析之FMEA
![技術(shù)分享 | <b class='flag-5'>ISO</b> <b class='flag-5'>26262</b><b class='flag-5'>中</b>的安全<b class='flag-5'>分析</b>之FMEA](https://file1.elecfans.com/web2/M00/C9/65/wKgaomYcn02Aab4NAAB7r7N8H5Q704.png)
鑒源實(shí)驗(yàn)室·ISO 26262中測(cè)試用例的得出方法-等價(jià)類的生成和分析
![<b class='flag-5'>鑒</b><b class='flag-5'>源</b><b class='flag-5'>實(shí)驗(yàn)室</b>·<b class='flag-5'>ISO</b> <b class='flag-5'>26262</b><b class='flag-5'>中</b><b class='flag-5'>測(cè)試用</b><b class='flag-5'>例</b>的<b class='flag-5'>得出</b><b class='flag-5'>方法</b>-等價(jià)類的生成和<b class='flag-5'>分析</b>](https://file1.elecfans.com/web2/M00/FF/62/wKgZomaol_OAF5EYAAENo2DgX3g565.png)
評(píng)論