999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

軟件邊界測試的典型案例分析

2021-12-18 13:42:01李莉張青
電腦知識與技術 2021年31期
關鍵詞:程序案例

李莉 張青

摘要:軟件的安全性和可靠性在今天越來越受到重視,由于軟件邊界值處理不當引起的問題層出不窮,該文結合若干邊界測試的典型案例,從循環邊界、數據值邊界、數據量邊界、狀態轉換邊界等多個角度闡述軟件相關邊界問題產生原因,總結軟件中的邊界處理要點,為軟件設計提供參考。

關鍵詞:軟件測試;邊界測試

中圖分類號:TP311 ? ? ?文獻標識碼:A

文章編號:1009-3044(2021)31-0132-03

1 邊界測試概述

隨著大數據和人工智能時代的來臨,各種軟件在人們的工作和生活中承擔的任務越來越重要,隨之而來,對軟件的可靠性要求也越來越高。軟件測試是保障軟件安全可靠性的一種重要手段,測試類型從最初的功能測試,擴展和細化到現在的功能、性能測試、數據測試、接口測試、邊界測試、余量測試、安全性、可靠性測試等等眾多類型。

由測試數據統計得知,大量的軟件錯誤是發生在輸入或輸出的邊界上,而不是發生在輸入輸出范圍的內部[1-2],但是在軟件設計和程序編寫過程中,設計師常常對需求中的輸入或輸出邊界重視不夠,導致出現各種錯誤,因此針對各種邊界情況開展測試,我們可以查找出更多的軟件錯誤[3]。

2 邊界測試方法

邊界值分析是邊界測試的主要測試方法,它是對等價類分析方法的一種補充。開展軟件邊界測試首先需要確定邊界情況,然后選取正好等于、剛剛大于或剛剛小于邊界的值作為測試數據,而不是選取等價類中的典型值或任意值作為測試數據[4]。常用的邊界值分析方法有三點法、五點法、七點法等等,分別針對一至多個邊界點,選取相應邊界值開展測試,原理比較簡單。

3 邊界測試點選取

一旦邊界點選定,相應的邊界值也隨之確定,測試數據也順利生成,看上去非常簡單。但是實際操作中,邊界問題還是層出不窮,其原因就在于:

1)設計師并未意識到當前數據是有邊界要求的;

2)有些邊界要求不體現在軟件文檔要求中,而是隨著設計師的程序編寫過程不斷產生的;

3)需求隱含了一些功能邊界要求,但是這些要求需要設計師在領會整個系統流程的基礎上總結概括得出,如果對系統理解不全面,可能會漏掉對相關邊界的處理。

綜上所述,對于軟件測試人員來說,邊界測試的重點在于尋找被設計師忽略或理解錯誤的數據點。因此,邊界測試的難點不在于測試執行,而在于測試對象即測試點的發現和選取。

通常,軟件邊界測試分為數據值邊界和數據量邊界:數據值邊界是指有明確邊界要求的數據,這些數據有些在軟件需求規格說明或者詳細設計中特別提出,有些是程序內部自定義數據,需要根據其含義自行界定其邊界;數據量邊界包括數據長度邊界、數據容量邊界(存儲區容量、堆棧容量等)、通信通道容量邊界等等,這些邊界要求通常隱含在接口說明或硬件說明中;還有一些邊界要求并沒有在文檔中出現,需要測試人員結合軟件文檔和程序上下文推導得出。

在這些顯性或隱性的邊界點的處理上出現了不少軟件問題,下面我們結合具體案例介紹。

4 邊界測試典型案例分析

4.1 循環邊界

循環邊界是比較常見的測試邊界,通常包括:

1)有明確要求的循環次數;

2)與時序有關的循環。

案例1:

需求要求某個操作循環執行3次。

循環變量初始值times=0,軟件實現如下圖:

從圖中代碼可見,由于while判斷times終止值為3,顯然循環次數已達到4次,超過3次循環的要求。

這種循環數據邊界的問題在單元測試中是頻發問題,設計師在編寫循環處理語句的時候需要嚴格對照需求的要求,特別注意循環的起始值和結束值的處理,以避免循環次數超限。

案例2:

需求要求每20ms執行子程序Calu_20(),采用前一拍引力進行當前拍位置計算,程序初始值Gx0,Gx1的值均為0。子程序實現如下圖所示:

由以上程序可得:

第1拍20ms當前位置PX1計算,使用的Gx0值為初始值0;

第2拍20ms當前位置PX1計算,使用的Gx0值為第1拍中Gx1賦予它的值,也是0;

第3拍20ms 當前位置PX1計算,使用的Gx0值為第2拍中Gx1賦予它的值,即Gx0=Gx0_1_Step;

由分析可知,由于語句②的位置錯誤,導致當前位置PX1計算時使用的其實是前2拍的引力值,程序應將語句②放在語句①之前執行,才能保證時序的正確。修改后的程序如下圖所示:

在嵌入式軟件中,常常用中斷去執行一些與時序有關的計算或控制,定時中斷由于定期不斷執行,因此我們可以把它看作是一種特殊的循環。此時,我們需要格外注意從上一次中斷到下一次中斷的切換執行,通常時序錯誤都發生在切換的邊界。例如上面這個例子,如果2拍引力值的偏差較小,這種錯誤很難在動態測試中發現,通常只有通過代碼走讀才能分析得出。

4.2 數據域邊界

數據域的邊界一般包括:

1)數組范圍的邊界;

2)數據類型的邊界。

案例3:

軟件需求要求程序采集每20ms電壓測量值,通過累積每20ms的電壓差值,計算得出2s電壓差值,程序實現如下:

由以上程序可知,數組DY[]中存放的是每20ms的電壓差值,程序需要計算的是2s累計的電壓差值,共100個差值就應該涉及到101個電壓測量值。但是由于程序將電壓測量值數組DY[]大小定義為100,所以該數組大小不夠,應定義為101個元素。此外,程序循環到i=99時,DY[]數組下標已引用到100,而數組的下標最大應該比數組大小小1,因此,此處對數組的引用已溢出。

在數組的應用上,出錯頻率較高的是數組下標邊界,特別是當下標用作循環變量時,設計人員經常容易忽略其范圍要求而超范圍使用下標。

案例4:

軟件運行環境為TMS320C5416,是16位的定點DSP,其中一段程序實現門限的計算,具體見圖5:

在16位定點DSP中,Unsigned int類型數據表示范圍為0~65535,這段程序用到的三個變量都是Unsigned int類型。

設置PRI=90,Δd=50,則程序運行計算時,算到20*PRI*Δd時,中間結果20*PRI*Δd的計算值已達到90000,超過了Unsigned int表示的最大范圍,數據溢出,中間結果由90000變成了24464,再經過/200的運算,最后計算結果為122,程序實現錯誤。

這是一個典型的白盒數據邊界測試問題,此處進行計算的代碼運算執行順序是從左到右,因此導致中間結果溢出。對于不同的編譯器,程序的運算順序可能有所不同,因此無論是軟件設計人員還是測試人員,都應當深入了解程序運行環境,深刻理解每種數據類型的表示范圍,避免數據超出類型表示范圍邊界。

4.3 數據量邊界

數據量邊界通常與硬件相關,一般包括:

1)存儲區容量邊界;

2)堆棧容量邊界;

3)通信通道容量邊界;

4)信號有效范圍邊界。

案例5:

這是一個非常著名的案例,豐田汽車不響應剎車而失控爆沖,該事件后有軟件專家對其控制軟件進行了測試,以下是其中部分軟件缺陷描述:

豐田的軟件系統有兩塊相鄰的內存塊。第一塊內存區域存儲所有任務以及任務的運行狀態,稱為“堆棧(Stack)”,大小為4KB。與“堆棧”相鄰的內存中儲存了操作系統進行任務分配的記錄。在某些情境下,如果任務及任務的運行狀態數據很多,那么會往堆棧里寫入太多東西,如果大小超過4KB,那么就會錯誤地寫入相鄰的內存塊,即任務分配表,這種錯誤被稱為“堆棧溢出”。可以想象,一旦出現堆棧溢出,任務分配表內容會被改寫,系統就會錯誤地分配任務,造成任務內容、執行次數的錯亂,甚至某些任務直接被忽略[5]。

這是一個典型的堆棧使用超邊界問題,這些問題的產生通常是在軟件的系統規劃和設計階段沒有對后期使用作充分評估,導致內存分配不夠引起的。類似的存儲容量、通信通道容量等也應當在系統設計初期就做好規劃,否則一旦使用中超出其容量邊界,會引起整個系統癱瘓等致命故障。

4.4 狀態轉換邊界

在軟件運行過程中從一個狀態切換到另一個狀態也是一個重要的邊界。例如:有些軟件分階段運行,包括測試態和正式狀態,兩者會調用一些相同的函數,靠外部信號來進行狀態轉換。還有一些軟件,執行時有明確的運行狀態,各狀態分工清楚,切換時機明確。

案例6:

某飛行軟件所控制的飛行階段明確分為一、二、三級,一級關機后進入二級飛行段,二級關機后進入三級飛行段。在程序中,每級關機會讀取三次關機信號,分別存儲于三塊不同地址的內存中,程序需要對這三個地址中存放的關機信號進行三取二的可靠性判斷。由于一、二、三級飛行按順序進行,不會并行,因此設計師復用了三個地址存放三個級別飛行時段的關機信號。

需求要求一級關機的條件是收到0xA信號;二級關機的條件是收到0xB信號;三級關機的條件是收到0xC信號。

測試人員在一級關機時給出三個值為0xA,0xB,0xA,一級順利關機,進入二級飛行階段。一級轉二級時,程序沒有將三個地址的數據清零,因此轉二級飛行時,內存中三個值為0xA,0xB,0xA,進入二級后,測試人員給只給第一個地址賦值0xB,內存中三個值為0xB,0xB,0xA,經過三取二,得出當前已收到0xB信號的結論,因此二級關機——但此時實際上程序剛收到一次關機信號,另兩次關機信號還未發出。由于狀態轉換邊界處理不當,程序發生誤判,導致提早關機。

狀態轉換時涉及到的信息處理工作很多,一不小心就會有遺漏,導致程序出錯。因此,設計師應關注狀態轉換邊界,查看程序狀態轉換時涉及到的數據和控制信息,避免發生錯誤。

4.5 輸出邊界

軟件的邊界測試不僅關注輸入邊界和硬件使用邊界,還應結合外部接口要求,考慮輸出數據和信號的邊界。

例如:

1)DSP和FPGA交互時,向對方輸出的數據是否有值域要求。

2)軟件向硬件發出一些信號信息時,考慮硬件是否有特殊要求,比如限幅等。

5 結束語

軟件在計算機系統中所占比重越來越大,相應的軟件面臨的風險也越來越多,本文結合典型案例將軟件測試過程中發現的各種邊界問題進行了總結和歸納,為軟件設計和測試人員提供參考,以避免軟件邊界問題,增強軟件的可靠性。

參考文獻:

[1] 王軼辰,殷永峰,劉斌.航電設備軟件系統測試過程研究[J].測控技術,2004,23(8):53-55,64.

[2] Jorgensen P C.軟件測試[M].韓柯,杜旭濤,譯.北京:機械工業出版社,2003.

[3] MOLLY_CICI.邊界值分析法--測試用例設計方法[EB/OL].[2020-10-18].https://blog.csdn.net/molly_cici/article/details/102626757.

[4] 劉暢,王軼辰,劉斌,等.軟件邊界組合測試的典型案例分析[J].計算機工程與應用,2009,45(20):74-77.

[5] SCHWARZ.豐田栽了的原因[EB/OL].(2013-11-03)[2021-09-27].http://www.amobbs.com/thread-5557598-1-1.html.

【通聯編輯:謝媛媛】

收稿日期:2021-06-20

作者簡介:李莉(1978—),女,江蘇啟東人,高級工程師,碩士,研究方向為軟件工程、軟件測試、軟件開發技術;張青(1979—),男,江蘇啟東人,高級工程師,碩士,研究方向為軟件工程、軟件研發。

猜你喜歡
程序案例
案例4 奔跑吧,少年!
少先隊活動(2021年2期)2021-03-29 05:40:48
隨機變量分布及統計案例拔高卷
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
失能的信仰——走向衰亡的民事訴訟程序
“程序猿”的生活什么樣
發生在你我身邊的那些治超案例
中國公路(2017年7期)2017-07-24 13:56:38
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
隨機變量分布及統計案例拔高卷
創衛暗訪程序有待改進
中國衛生(2015年3期)2015-11-19 02:53:32
一個模擬案例引發的多重思考
中國衛生(2015年4期)2015-11-08 11:16:06
主站蜘蛛池模板: 国产精品毛片一区视频播| 色综合天天综合| 午夜国产精品视频| 国产va欧美va在线观看| 亚洲成在人线av品善网好看| 久久综合九色综合97婷婷| 在线视频97| 99精品在线看| 欧美日韩高清| 国产探花在线视频| 国产av无码日韩av无码网站| 日本高清免费一本在线观看| 国产成人av一区二区三区| 亚洲av无码久久无遮挡| 亚洲最黄视频| 国产亚洲欧美在线专区| 国产一级毛片网站| 亚洲第一成年人网站| 亚洲人成电影在线播放| 日韩午夜福利在线观看| 国产成年女人特黄特色大片免费| 亚洲无码电影| 综合色区亚洲熟妇在线| 午夜不卡视频| 美女潮喷出白浆在线观看视频| 久久国产亚洲欧美日韩精品| 中文字幕日韩久久综合影院| 国产精品黄色片| 国产91精品久久| 五月天福利视频| 二级特黄绝大片免费视频大片| 国产黄在线免费观看| YW尤物AV无码国产在线观看| 狠狠色综合久久狠狠色综合| 亚洲香蕉在线| 高清欧美性猛交XXXX黑人猛交 | 国产成人艳妇AA视频在线| 伊人久久大香线蕉aⅴ色| 欧美精品三级在线| 草逼视频国产| 国产91麻豆免费观看| 欧美日韩亚洲国产| 国产麻豆精品手机在线观看| 日韩精品无码免费专网站| 欧美日韩理论| 久久午夜夜伦鲁鲁片无码免费| 久久6免费视频| 中文字幕在线免费看| 国产二级毛片| 免费无码AV片在线观看中文| 国产成人综合日韩精品无码首页 | 亚洲一级色| 国产香蕉国产精品偷在线观看| 午夜日b视频| 88av在线播放| 中文字幕无码制服中字| 无码电影在线观看| 美女扒开下面流白浆在线试听| 99热这里只有免费国产精品| 特级毛片免费视频| 亚洲成人黄色网址| 国产99精品视频| 高潮毛片免费观看| 久久国产乱子伦视频无卡顿| 欧美三级日韩三级| 欧美a级在线| 精品色综合| 亚洲欧洲日产国码无码av喷潮| 亚洲精品视频免费| 欧美亚洲第一页| 欧美在线导航| 美美女高清毛片视频免费观看| 久久影院一区二区h| 亚洲第一国产综合| 亚洲中文制服丝袜欧美精品| 亚洲不卡影院| 国产va欧美va在线观看| 波多野结衣视频网站| 国产乱子伦手机在线| 精品自窥自偷在线看| 麻豆精品在线视频| 亚洲欧洲日韩久久狠狠爱|