當前位置:首頁 > 測試測量 > 測試測量
[導讀]突變測試會對測試用例的質(zhì)量進行評估。它在更改的測試對象上重新執(zhí)行已經(jīng)通過的測試用例,并顯示測試用例是否檢測到測試對象中的更改。發(fā)展安全關(guān)鍵系統(tǒng)的標準,例如:建議進行突變檢測。在實踐中,測試執(zhí)行和突變生成的自動化是不可避免的。自動突變測試是新的主版本V4.3中最重要的新功能。TESSY 該工具用于嵌入式軟件的自動化單元、模塊和集成測試。本文展示了如何應用突變測試來提高測試案例的質(zhì)量;突變測試引起的問題以及如何克服這些問題。

突變測試會對測試用例的質(zhì)量進行評估。它在更改的測試對象上重新執(zhí)行已經(jīng)通過的測試用例,并顯示測試用例是否檢測到測試對象中的更改。發(fā)展安全關(guān)鍵系統(tǒng)的標準,例如:建議進行突變檢測。在實踐中,測試執(zhí)行和突變生成的自動化是不可避免的。自動突變測試是新的主版本V4.3中最重要的新功能。TESSY 該工具用于嵌入式軟件的自動化單元、模塊和集成測試。本文展示了如何應用突變測試來提高測試案例的質(zhì)量;突變測試引起的問題以及如何克服這些問題。

突變測試基本原理

突變測試重復執(zhí)行測試對象已經(jīng)通過的測試用例,例如軟件單元。但是,當測試用例被重復時,它們不會使用測試對象的原始源代碼來執(zhí)行,而是使用已經(jīng)更改的代碼("變異")。變異的代碼不同于原始代碼;更改可能涉及較小的細節(jié),例如替換邏輯和邏輯;然而,更改也可能是激烈的,例如刪除IF指令的其他分支。當然,即使在更改之后,測試對象也必須保持可編譯性,否則測試重復是不可能的。

當測試重復使用變異的源代碼時,問題是現(xiàn)有的測試用例是否顯示出突變(技術(shù)術(shù)語是"殺死")。在重復測試時,如果至少一個測試用例失敗,突變就會被殺死。如果不發(fā)生這種情況,那么測試用例不會檢測到源代碼已經(jīng)更改,或者換句話說:測試用例也會認為原來的測試對象以外的測試對象是正確的。這令人擔憂,需要進一步調(diào)查。對于這個研究,如果只做了一個突變是有幫助的。

如果存活的突變不是一個等價的突變,那么測試案例就缺乏質(zhì)量。對等的突變不會改變測試對象的外部行為,因此不能被殺死。下面給出了一個等價突變的例子。當然,這關(guān)系到突變有多激進。一個微妙的突變將比幾個劇烈的變化更難以察覺。通常會進行幾次不同突變的測試。它評估測試用例的質(zhì)量。

圖1顯示了由TESSY自動進行的突變測試過程。在原始源代碼通過所有現(xiàn)有測試之后,可以啟動實際的突變測試過程。TESSY完全執(zhí)行一個突變,重復所有現(xiàn)有的測試,當然記錄一個突變是否被殺死。然后恢復原來的測試對象,進行另一個突變。

圖1:TESSY自動化整個突變測試過程。

圖2顯示了自版本V4.3以來,TESSY能夠?qū)崿F(xiàn)的突變。用戶可以選擇應用的突變,因此當然也會影響所進行的突變的數(shù)量,這反過來又會影響整個突變測試過程的執(zhí)行時間。

圖2:TESSYV4.3執(zhí)行的默認突變。

突變測試的兩個假設(shè)

在默認情況下,TESSY執(zhí)行的突變是微妙的,例如關(guān)系操作符"&t;"變成"<=="。這是基于"有能力的程序員"的假設(shè),他說熟練的軟件開發(fā)人員只會犯一些小的錯誤--比如說,使用一個循環(huán)來運行太多或者太少("一個接一個"的錯誤)。為了找出測試案例是否發(fā)現(xiàn)了這樣的小錯誤,因此質(zhì)量好,突變必須是微妙的。低質(zhì)量的測試案例也應該顯示激進的突變,比如去除一個甚至幾個指令。另一個根據(jù)經(jīng)驗確認的假設(shè)(OOUT)指出,存在耦合效應:一個完全殺死一個突變體的測試案例也會殺死多個突變體。因此,每次只進行一次突變就足夠了。

例子

我們考慮一個測試對象,它已經(jīng)通過了四個測試用例(圖3),并且在這些測試用例中實現(xiàn)了100%的代碼覆蓋。

圖3:通過應用于原始測試對象的四個測試用例的測試數(shù)據(jù)。

如果TESSY進行了突變測試(對突變進行標準設(shè)置,如圖2所示),結(jié)果是一個死亡的突變體和一個幸存的突變體(圖4)。

圖4:TESSY基因突變試驗的結(jié)果。

在圖的左上角(圖4),顯示了被殺死的突變("突變引起的測試失敗")。這個突變改變了測試對象(圖4右上角突出顯示的)的第一個if指令中的關(guān)系操作符從"<"變?yōu)?<=="。結(jié)果,一個測試用例失敗,在突變測試中呈陽性。因此,這種突變是用綠色的標記的。

在圖4的左下角,您可以看到幸存的突變("突變在所有測試案例中幸存下來");這個突變改變了測試對象的第二個IF指令中的關(guān)系操作符(圖4的右下角突出顯示)從"&ttt;"變?yōu)?&ttt;="。沒有測試用例通過失敗檢測到此更改。這一點值得懷疑,需要進行調(diào)查。

突變評分和測試用例質(zhì)量

突變得分是所有突變與被殺突變的比率。

圖5:TESSY的突變得分。

上面的圖(圖5)顯示了TESSY為四個測試用例確定的突變評分(參見圖3前面所示的四個測試用例的測試數(shù)據(jù),編號為1.1至4.1)。

測試用例2殺死了兩個突變體中的一個,因為測試用例2失敗了,原因是第一個IF指令(v1&l;r1rrge_開始)從"&l;"<==開始)的突變。這就導致了50%的突變得分。測試用例2在M欄中標記綠色檢查標記,因為它殺死了一個突變體。另外三個測試案例沒有殺死任何突變?nèi)?因此有一個紅十字或突變得分為0%。

測試案例2殺死了一個突變體,因此比沒有殺死任何突變體的其他測試案例質(zhì)量更高。這是因為測試用例2中變量V1的值。這取決于第一個if指令中的關(guān)系操作符。在第二個測試用例中,變量V1和變量R1范圍_開始都有值5,因此第一個IF指令中的決定是'5<5',它的值是"假的"。在突變中,這個決定是"5<=5",它被評價為"真實"。因此,第二個測試用例提供了一個意想不到的結(jié)果("否",而不是正確的和預期的"是"),它殺死了突變體。

測試用例4應該在第二個IF-教授的決定中殺死另一個突變(從"&t;"到">=")。但是這并不起作用,因為測試用例4中的V1值是不合適的。變量V1的值為9和R1范圍+R1范圍=7。因此,第二個IF聲明中的決定是在原來的"9&g;7"和突變體"9&g;=7"中作出的,兩者都被評價為"真實"。因此,在兩種情況下,原突變體和突變體都給出了正確的結(jié)果"不";原突變體和突變體都通過了第四個測試案例;這意味著突變體沒有被殺死。

測試用例2比測試用例4有更好的質(zhì)量,因為測試用例2使用一個邊界值,而測試用例4沒有。測試用例2使用邊值5,它是從5開始的范圍的起始值,長度為2。用變量V1的值9,測試用例4不使用范圍的邊界值。

這說明了為什么邊界值是良好的測試數(shù)據(jù),為什么開發(fā)安全關(guān)鍵軟件的標準推薦邊界值作為測試數(shù)據(jù)。例如,第3部分表B.2和B.3建議采用"邊界值分析"方法。在這兩個表格中,此方法被推薦為SL1,高度推薦為SL2至4。在第6部分"邊界值分析"表8中,ISO26262[26262]還提到方法1c是獲取軟件單元測試測試數(shù)據(jù)的程序。該方法對AILA推薦,對B-D推薦較多。

突變測試也可以評估測試用例集。一組測試用例如果它能殺死所有的變種人,就叫做足夠的。適當?shù)臏y試用例設(shè)置越小越好.它也可以用來評估測試用例的施工方法。

無止境的循環(huán)和崩潰

突變也會導致無限循環(huán);這意味著一個測試不會結(jié)束。為了確保這樣的突變不會使整個過程陷入停頓,特塞監(jiān)控執(zhí)行時間。如果一個突變的執(zhí)行時間超過了執(zhí)行時間,而沒有一個突變的次數(shù)增加了10倍,那么tesy將終止測試執(zhí)行。無限循環(huán)或超時殺死突變體。突變也會導致測試對象崩潰,例如由于除法為0。突變測試對象的撞擊也殺死了突變體。在超時或崩潰后,如果更多的突變是適用的,則繼續(xù)進行突變測試過程。

圖6:無限循環(huán)殺死突變體。

在上面的示例(圖6)中,用一個測試用例測試計數(shù)()函數(shù),該測試用例具有參數(shù)X的輸入值10,并通過返回值1提供正確的結(jié)果。這個測試用例殺死了圖6左側(cè)所示的所有四個突變。第三種突變(從"&l;="到"&t;=")并非像往常一樣被測試用例的失敗所扼殺,而是被無止境的循環(huán)和它觸發(fā)的超時所扼殺。TESSY認為這種突變是致命的。在此之后,進行了第四次突變。

圖7:碰撞殺死了突變體。

在上面的例子(圖7)中,用一個測試用例測試了崩潰_比_除法函數(shù)(),兩個參數(shù)都在這個測試用例中。 A 和 b 有相同的價值。這個測試案例殺死了"!======='======'在-教授的決定中。

等量突變是有問題的

突變測試的主要問題是等效突變。這些突變不會改變測試對象的外部行為。

圖8:等價突變的例子。

在上面的圖(圖8)中顯示了一個等價的突變。關(guān)系比較運算符從"&984;"到"&ttt;="的突變沒有一個外部可見的效果,因此不能被任何測試用例殺死。但是輸入值0肯定會導致原始和變異源代碼的不同內(nèi)部程序行為。在原來的代碼中,執(zhí)行了I-教授的其他分支,突變執(zhí)行了該分支。

由于對等突變不能通過測試用例來殺死,所以所有幸存的突變都必須通過手動(人類)檢查,以確定它是否是對等突變??赡芎芎臅r。然而,在這里,如果像TESSY一樣,一次只產(chǎn)生一個突變,這是有幫助的。此外,手頭的測試對象是軟件單元,與整個軟件相比,這些單元很小。這減少了檢查對等突變的努力。除此之外,我們可以假設(shè),進行單元測試的安全關(guān)鍵軟件比其他軟件有更好的測試用例,因為這種軟件需要達到較高的代碼覆蓋率。這意味著,只有一小部分(如果有的話)的安全關(guān)鍵軟件不會被任何測試用例執(zhí)行。另一方面,沒有像安全關(guān)鍵軟件那樣經(jīng)過如此徹底測試的軟件可能會有大量的代碼,而這些代碼并沒有被任何測試用例執(zhí)行。顯而易見的是,軟件中沒有任何測試用例執(zhí)行的部分的突變是不能被殺死的。這意味著存活的突變體數(shù)量增加,因此在測試案例不足和相當?shù)耐蛔凅w之間做出了更大的努力。

等值突變可以被看作是殺死的突變;它們并不表示低質(zhì)量的測試案例。

避免不必要的突變

在安全關(guān)鍵軟件的單元測試中,一個幸存的突變(這不是一個等價的突變)應該導致改變或增加測試用例。由于軟件需要高度的完整性,最終目標是所有應用的突變都被扼殺(同樣,不包括對等的突變)。這可能不是集成測試的目標。集成測試的主要目的是測試各單元之間正確的相互作用.因此,集成測試的測試用例檢查單元的相互作用,而不是每個單元對每個錯誤條件作出正確反應(例如:一個意外的空指針)可能是可能的。

在集成測試中引發(fā)錯誤條件在技術(shù)上可能很困難,因此可能會被忽略。這是支持的,因為我們可以假設(shè)在單元測試期間測試了對錯誤條件的反應。因此,在集成測試中,達到100%的代碼覆蓋率并不是最重要的,特別是代碼中代表防御性編程的部分(例如。對意外的空指針的反應可能會被發(fā)現(xiàn)。顯而易見的是,任何測試用例都不執(zhí)行的代碼的突變是不能被殺死的。應用這種突變會導致人類為人工研究這種突變而付出的努力,因為這種突變是否能夠幸存下來并不明顯,因為它是一種等效的突變,或者因為測試案例質(zhì)量低。此外,應用這種突變增加了突變測試的執(zhí)行時間。

如果用于突變測試的TESSY可以提供代碼覆蓋信息,TESSY可以避免代碼中任何測試用例都不執(zhí)行的部分的突變。在集成測試期間,這個特性特別有用,因為潛在的大部分未發(fā)現(xiàn)的代碼沒有也永遠不會被任何測試用例執(zhí)行。雖然不那么有用,但在單元測試期間,TESSY也會抑制未發(fā)現(xiàn)代碼中的突變。

圖9:兩個突變被抑制,因為它們不能被殺死。

在上圖(圖9)中,對抽象數(shù)據(jù)類型"棧"的函數(shù)推()和POP()進行了集成測試。圖9的右側(cè)顯示了推()的源代碼。第15行中的第一個if指令檢查堆棧指針(變量Next_自由項)是否已到達堆棧頂部,表明堆棧溢出。當時的第一個if指令的一部分是紅色的陰影,表示它沒有被任何測試用例執(zhí)行。因此,在第二行(在第17行中)的決定中的突變是無法檢測到的,而且將會繼續(xù)存在。

利用代碼覆蓋性信息,TISY在第二個IF指令的決策中抑制了關(guān)系操作符的兩個突變"&ttt;"(錯誤的_報告;p;0),圖9右側(cè)的陰影是灰色的。在圖9的左側(cè),同樣的決定在灰色和下面的陰影下,顯示了兩種可能的突變(從'&pt;'到'<'和'&t;'到'&t;==')。兩種突變都沒有應用。這是"結(jié)果"一欄中的破折號(`-')所表示的。

如果TESSY在沒有事先的代碼覆蓋度測量的情況下執(zhí)行突變測試,TESSY將兩個突變應用于第二個IF指令的決策。當然,他們都沒死。與單元測試相反,集成測試可能不需要添加一個測試用例來檢查是否正確地處理了錯誤條件(在我們的案例中堆棧溢出)。通過避免這些突變,TESSY為人類和計算機的計算節(jié)省了大量時間。

標準突變測試

IEC61508將突變測試描述為"從錯誤播種執(zhí)行的測試案例",并建議將此描述為安全完整性等級2至4(見第3部分表B.2)。(第7部分C.5.6節(jié))還指出,人們可以從測試套件在原始測試對象中發(fā)現(xiàn)的錯誤數(shù)和這個測試套件殺死的突變數(shù)(預測性)來估計錯誤總數(shù)。被殺突變體與突變體總數(shù)的比率等于在原始測試對象中發(fā)現(xiàn)的錯誤與原始測試對象中錯誤總數(shù)的比率。這種估計自然假設(shè)了相同的突變類型和位置的統(tǒng)計分布和實際的錯誤;例如,如果實際的錯誤是錯誤的計算,但沒有使用算術(shù)突變,這個估計很難準確.

ISO26262在第6部分表7"故障注入測試"方法(方法1L)的說明中僅提到"代碼突變",其中列出了軟件單元的驗證方法。

結(jié)論

突變試驗可以揭示試驗案例不足。改進它們增加了在測試軟件中發(fā)現(xiàn)錯誤的機會。因此,突變測試不僅可以評估測試案例的質(zhì)量,而且還可以有助于改進測試軟件的質(zhì)量。突變測試的執(zhí)行是在TISY中自動化的,因此執(zhí)行不需要任何更大的努力。

然而,即使不需要TESSY,每個處理測試項目的人都可以手動執(zhí)行一些突變,并重新執(zhí)行測試,看看測試用例是否能殺死突變。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉