葉鑫
摘 要 本文主要介紹了一種先進(jìn)的軟件錯(cuò)誤注入測試技術(shù)在現(xiàn)代的高可靠性系統(tǒng)中的應(yīng)用,首先需要對(duì)于該技術(shù)的原理和方法有深入的認(rèn)識(shí),這是了解這項(xiàng)技術(shù)的基礎(chǔ),然后才能清楚地知道該技術(shù)在提高軟件質(zhì)量,增強(qiáng)系統(tǒng)穩(wěn)定性等各個(gè)方面起到的至關(guān)重要的作用。系統(tǒng)在運(yùn)行的過程中會(huì)受到諸多因素的影響,比如環(huán)境異常以及外部攻擊等等,可以通過函數(shù)的封裝以及虛擬的模擬技術(shù)來有效的模擬出各種不同的錯(cuò)誤類型,因此就可以更加清楚的知道系統(tǒng)的安全性以及穩(wěn)定性,使得系統(tǒng)的測試效果達(dá)到最佳,覆蓋率更加的廣泛。
關(guān)鍵詞 軟件測試 錯(cuò)誤注入 軟件錯(cuò)誤注入測試
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A
隨著互聯(lián)網(wǎng)時(shí)代的不斷發(fā)展,軟件在現(xiàn)實(shí)生活中的應(yīng)用越來越廣泛,規(guī)模正在不斷地?cái)U(kuò)大,各種軟件的設(shè)計(jì)復(fù)雜程度也會(huì)不斷提升來估計(jì)到更多的不確定因素,在這種復(fù)雜性的開發(fā)過程中,難免會(huì)出現(xiàn)一些錯(cuò)誤和漏洞。這些軟件的用戶對(duì)于軟件質(zhì)量的要求也是越來越高了,軟件行業(yè)的競爭也是不斷增強(qiáng),尤其是在安全核心系統(tǒng)以及高穩(wěn)定性系統(tǒng),例如一些航空或者軍事的應(yīng)用中,一個(gè)小小的錯(cuò)誤造成的后果是難以預(yù)測的,因此人們對(duì)于軟件的質(zhì)量的關(guān)注也是更甚從前。軟件質(zhì)量的測試是一種常用的并且非常有效的保證軟件質(zhì)量的手段,軟件管理的相關(guān)部門和軟件的開發(fā)公司的重視度也是持續(xù)上升。
通過大量的數(shù)據(jù)分析可以知道,發(fā)現(xiàn)軟件中存在的問題的時(shí)間越早,在整個(gè)軟件開發(fā)的過程中花費(fèi)的成本費(fèi)用越低。利用相關(guān)的公式計(jì)算可以得到,代碼完成之后進(jìn)行的修改話費(fèi)的成本價(jià)格一般是代碼編寫前的10倍左右,產(chǎn)品上線之后進(jìn)行的軟件問題修改花費(fèi)的金額也是上線之前花費(fèi)金額的近10倍左右。在典型的軟件開發(fā)中,軟件測試的工作量是非常大的,一般大概會(huì)占到總工作量的45%左右,而軟件測試所需的費(fèi)用大概是軟件開發(fā)中總開銷的40%左右。
軟件測試技術(shù)有多種的分類方式,如靜態(tài)測試和動(dòng)態(tài)測試就是根據(jù)是否執(zhí)行測試軟件來進(jìn)行分類的,靜態(tài)測試并不會(huì)運(yùn)行整個(gè)程序,只是對(duì)于其中的結(jié)構(gòu)以及代碼進(jìn)行分析檢查,通過這種形式來保證邏輯結(jié)構(gòu)是否滿足要求。動(dòng)態(tài)測試就是正常的運(yùn)行被開發(fā)的程序,根據(jù)系統(tǒng)指定的測試形式來驗(yàn)證軟件的行為和結(jié)果。動(dòng)態(tài)測試又可以分為軟件錯(cuò)誤注入測試和黑盒測試,黑盒測試相當(dāng)于功能測試,主要考慮的是軟件的功能,而軟件錯(cuò)誤測試主要在被測系統(tǒng)中引入錯(cuò)誤,發(fā)現(xiàn)軟件無法解決的問題,以此來評(píng)估軟件的穩(wěn)定性以及安全性。
1軟件錯(cuò)誤注入測試技術(shù)概述
錯(cuò)誤注入技術(shù)需要人為的向目標(biāo)系統(tǒng)中注入特定形式的故障,讓系統(tǒng)在該故障的環(huán)境下運(yùn)行,發(fā)現(xiàn)可能產(chǎn)生的錯(cuò)誤,系統(tǒng)是否失效等等,同時(shí)還要得到系統(tǒng)中對(duì)于該故障做出的反應(yīng)信息,這樣就可以通過這些信息來分析目標(biāo)系統(tǒng)的錯(cuò)誤容忍能力和處理能力,以此來判斷系統(tǒng)的穩(wěn)定性以及安全性。
軟件錯(cuò)誤注入測試主要借助于軟件的方法,實(shí)現(xiàn)錯(cuò)誤的注入,進(jìn)行檢測的技術(shù)。該技術(shù)的前身應(yīng)該是錯(cuò)誤種子技術(shù),是美國IBM公司的一名員工最早提出來的,后來經(jīng)過不斷地變更就形成了現(xiàn)代的軟件錯(cuò)誤注入測試技術(shù)。對(duì)比于傳統(tǒng)的軟件錯(cuò)誤測試技術(shù),該技術(shù)主要存在以下的一些優(yōu)點(diǎn):
(1)軟件測試靈活性得到很大程度的提升,通過該技術(shù)建立起不同的外部環(huán)境以及參數(shù),實(shí)現(xiàn)軟件接口的高靈活度,因此就可以非常方便的進(jìn)行各種類型的測試。
(2)軟件錯(cuò)誤的發(fā)生時(shí)間大大縮短,比如該技術(shù)可以最快的模擬出計(jì)算機(jī)資源耗盡的情景以及外部環(huán)境異常等等可能存在的問題,相比傳統(tǒng)的測試技術(shù)可以節(jié)約大量的時(shí)間來完成其他的工作。
(3)對(duì)于商用產(chǎn)品軟件也是有效的,一般的商用軟件是不會(huì)公開源代碼的,軟件錯(cuò)誤注入技術(shù)通過接口注入錯(cuò)誤,并不需要了解整個(gè)系統(tǒng)的代碼結(jié)構(gòu),一般來說,傳統(tǒng)的測試方法是無法做到的。
(4)軟件測試的范圍大大增強(qiáng),軟件錯(cuò)誤注入測試可以在一些小概率錯(cuò)誤上也起到很好的覆蓋,有些無法達(dá)到的路徑也會(huì)被很好的檢測到,發(fā)現(xiàn)其中可能存在的問題,相比傳統(tǒng)的軟件測試方法,更具有說服力。
(5)大大增加軟件的安全穩(wěn)定性,模擬出各種不同的網(wǎng)絡(luò)攻擊,信息攻擊等等,這些不同的問題必定會(huì)不斷地鞏固系統(tǒng)的安全穩(wěn)定性,這是傳統(tǒng)的軟件測試技術(shù)無法達(dá)到的。
我們常說的軟件系統(tǒng)一般是應(yīng)用程序加上運(yùn)行環(huán)境,應(yīng)用程序就是在計(jì)算機(jī)的操作系統(tǒng)上實(shí)現(xiàn)某些功能的邏輯代碼,而其他的配置文件,注冊(cè)表,文件系統(tǒng)等等都是屬于應(yīng)用程序的運(yùn)行環(huán)境。根據(jù)軟件系統(tǒng)的分類,我們將軟件錯(cuò)誤技術(shù)也可以分成程序錯(cuò)誤注入和環(huán)境錯(cuò)誤注入,因此錯(cuò)誤是可以注入到不同的地方的。
程序錯(cuò)誤注冊(cè)模擬的是開發(fā)人員形成的錯(cuò)誤,在該基礎(chǔ)上來檢測軟件的一些異常行為,現(xiàn)在比較常見的一些程序上面的錯(cuò)誤主要有內(nèi)存錯(cuò)誤,進(jìn)程死鎖,信號(hào)異常處理等等。被測試的軟件在硬件系統(tǒng)異常的情況下,是否存在一定的容錯(cuò)能力,進(jìn)行自我的調(diào)節(jié),這是程序錯(cuò)誤注入技術(shù)所要檢測的。
環(huán)境錯(cuò)誤注入主要是在軟件運(yùn)行中進(jìn)行的工作,主要就是將錯(cuò)誤注入到軟件和操作系統(tǒng)交流的環(huán)境中,這些環(huán)境實(shí)體包含多種,因此環(huán)境錯(cuò)誤注入測試主要就是測試軟件在惡劣的運(yùn)行環(huán)境下的應(yīng)對(duì)能力以及自我保護(hù)能力,這就需要軟件有非常強(qiáng)大的外部適應(yīng)能力。
軟件錯(cuò)誤注入測試測流程如下:首先分析被測試的軟件系統(tǒng),以及來確定需要進(jìn)行測試的方法以及步驟,然后確定出錯(cuò)誤如何注入以及編寫相應(yīng)的錯(cuò)誤注入代碼,緊接著會(huì)有兩種測試過程來進(jìn)行選擇,分別是需要修改被測試的程序以及不修改被測試程序的方法,這兩種方法在平常的使用中根據(jù)具體的情況來定,運(yùn)行好了之后觸發(fā)錯(cuò)誤的生成,根據(jù)被測試軟件的反應(yīng)來進(jìn)行具體的分析,評(píng)價(jià)被測試軟件系統(tǒng)的安全穩(wěn)定性。
2程序錯(cuò)誤注入測試分析
通過修改軟件的函數(shù)返回值,內(nèi)存變量,程序分支,錯(cuò)誤格式等等方法來進(jìn)行程序錯(cuò)誤注入測試,以此來確定軟件在諸多的不確定因素下是否可以采取自我保護(hù)措施,程序自己轉(zhuǎn)向可控的異常處理部分,讓軟件可以繼續(xù)的運(yùn)行下去。下面就以異常信號(hào)處理作為例子來進(jìn)行分析
2.1測試背景以及目標(biāo)
在這個(gè)例子中,我們選取的對(duì)象是Unix環(huán)境下的實(shí)時(shí)指揮信息系統(tǒng),這個(gè)系統(tǒng)的構(gòu)架主要是分層的軟件體系,主要有以下四層:核心業(yè)務(wù)層,基礎(chǔ)層,業(yè)務(wù)展現(xiàn)層以及共性平臺(tái)層。
共性平臺(tái)層為核心業(yè)務(wù)層和業(yè)務(wù)展現(xiàn)層提供良好的運(yùn)行環(huán)境,核心業(yè)務(wù)層和業(yè)務(wù)展現(xiàn)層完成具體的業(yè)務(wù)處理以及界面的完美展示。共性平臺(tái)層來負(fù)責(zé)整個(gè)系統(tǒng)的管理和維護(hù)。測試的目標(biāo)就是當(dāng)核心業(yè)務(wù)層和業(yè)務(wù)展現(xiàn)層中的某個(gè)軟件出現(xiàn)運(yùn)行異常時(shí),系統(tǒng)能不能獲取到該信號(hào)并且跳出異常處理函數(shù),讓整個(gè)系統(tǒng)繼續(xù)的運(yùn)行著。
2.2測試方法和過程分析
前期的準(zhǔn)備工作就是了解該軟件的工作模式,核心業(yè)務(wù)層以及業(yè)務(wù)展現(xiàn)層的軟件處于的狀態(tài),當(dāng)接收到人機(jī)交互界面請(qǐng)求或者信號(hào)打斷,軟件系統(tǒng)發(fā)出相應(yīng)的響應(yīng),信號(hào)中斷進(jìn)入到錯(cuò)誤處理,處理的程序也可能因?yàn)槎喾N原因出現(xiàn)異常,軟件錯(cuò)誤的植入就是需要研究這種異常來進(jìn)行相應(yīng)的錯(cuò)誤注入來測試軟件的安全穩(wěn)定性。程序的錯(cuò)誤植入有兩種,根據(jù)具體的情況選擇合適的方法,更好的測試。
2.3測試結(jié)果分析
通過對(duì)于軟件運(yùn)行過程的觀察,可以知道軟件是否退出或者繼續(xù)的運(yùn)行,因此就可以知道其中有沒有加入異常的保護(hù)措施,軟件的魯棒性就會(huì)得到驗(yàn)證。如果該軟件具有一定的異常處理能力,當(dāng)異常出現(xiàn)的時(shí)候,該信號(hào)必定會(huì)被捕捉到,強(qiáng)制的跳出該次的正常運(yùn)行過程,記錄異常的信息,通過這個(gè)機(jī)制,系統(tǒng)在下次遇到這樣的情況就會(huì)容易進(jìn)行相應(yīng)的處理,節(jié)約系統(tǒng)的運(yùn)行時(shí)間。如果軟件系統(tǒng)無法達(dá)到上面的情況,說明該軟件系統(tǒng)缺少適當(dāng)?shù)娜蒎e(cuò)能力,需要進(jìn)行適當(dāng)?shù)耐晟苼碓鰪?qiáng)系統(tǒng)的安全穩(wěn)定性。
3環(huán)境錯(cuò)誤注入測試分析
嚴(yán)格的來說,沒有運(yùn)行環(huán)境的軟件系統(tǒng)是不完整的,軟件的正常運(yùn)行需要依據(jù)很多的外部環(huán)境,所以在進(jìn)行開發(fā)的時(shí)候,我們想到的運(yùn)行環(huán)境都是正常的,可是實(shí)際的情況并不是這樣的,運(yùn)行的環(huán)境也會(huì)出現(xiàn)各種各樣的問題,所以環(huán)境錯(cuò)誤的注入也是非常有必要的。由于環(huán)境錯(cuò)誤對(duì)于軟件程序的影響可以分為兩種形式,所以一般將環(huán)境錯(cuò)誤注入分為兩種,間接環(huán)境錯(cuò)誤注入和直接環(huán)境錯(cuò)誤注入。
間接的環(huán)境錯(cuò)誤注入是在應(yīng)用程序需要用戶向其中輸入信息的時(shí)候進(jìn)行錯(cuò)誤的輸入,這樣就可以向應(yīng)用程序的內(nèi)部注入錯(cuò)誤的變量參數(shù)等等。直接環(huán)境錯(cuò)誤注入是在程序訪問運(yùn)行環(huán)境時(shí)完成的,向環(huán)境實(shí)體中注入錯(cuò)誤來拒絕程序訪問環(huán)境實(shí)體,用此方法來實(shí)現(xiàn)對(duì)于程序注入錯(cuò)誤的目的。
3.1測試背景和目標(biāo)
該測試的對(duì)象還是前面提到的那個(gè)系統(tǒng),通過直接環(huán)境錯(cuò)誤注入和間接環(huán)境錯(cuò)誤注入兩種方式來進(jìn)行,主要就是驗(yàn)證異常的運(yùn)行環(huán)境下系統(tǒng)軟件的應(yīng)對(duì)能力。
3.2測試方法和過程分析
間接環(huán)境錯(cuò)誤注入測試過程如下:間接環(huán)境錯(cuò)誤有各種各樣的類型,這里只需要選取其中的一種進(jìn)行測試和介紹。首先編寫一個(gè)基于TCP網(wǎng)絡(luò)協(xié)議的簡易程序,該程序模擬的是外部輸入,向被測試系統(tǒng)之間進(jìn)行信息的交互。然后就需要對(duì)于該系統(tǒng)的外部接口報(bào)文格式進(jìn)行分析,針對(duì)格式來做出合適的錯(cuò)誤注入方法。通常情況下軟件系統(tǒng)是會(huì)對(duì)外部環(huán)境建立一定的排錯(cuò)機(jī)制,收到一些異常信息時(shí)可以進(jìn)行自我的保護(hù)措施。
直接環(huán)境錯(cuò)誤注入的測試方法如下:直接環(huán)境錯(cuò)誤注入主要會(huì)涉及到計(jì)算機(jī)硬件資源以及操作系統(tǒng)環(huán)境變量,外部的程序修改可以使得計(jì)算機(jī)的CPU被耗盡,被測試的軟件就會(huì)無法訪問相應(yīng)的文件,這樣就會(huì)實(shí)現(xiàn)環(huán)境錯(cuò)誤的注入。
3.3測試結(jié)果分析
通過對(duì)于軟件系統(tǒng)的反應(yīng)分析,確定該軟件是否對(duì)于外部環(huán)境建立異常保護(hù)機(jī)制。當(dāng)然軟件系統(tǒng)的自我調(diào)節(jié)能力和適應(yīng)能力畢竟是有限的,計(jì)算機(jī)資源長時(shí)間被耗盡的情況下,軟件系統(tǒng)必定不可能繼續(xù)長時(shí)間的運(yùn)行,所以環(huán)境錯(cuò)誤的注入測試只能在一定的程度上來說明軟件系統(tǒng)的安全穩(wěn)定性。
4.結(jié)束語
軟件錯(cuò)誤注入測試技術(shù)作為一種新型的檢測技術(shù),必定會(huì)得到更加廣泛的應(yīng)用,在軟件開發(fā)過程中為技術(shù)人員提供強(qiáng)大的檢測能力,節(jié)約一定的時(shí)間和成本。目前,軟件錯(cuò)誤注入檢測技術(shù)在每個(gè)單位之間還沒有統(tǒng)一的標(biāo)準(zhǔn),因此想要實(shí)現(xiàn)大面積的普及還是存在一定的困難需要解決。但是隨著這種檢測技術(shù)在技術(shù)層面上面的進(jìn)步,未來的檢測技術(shù)將會(huì)更加的方便,為軟件工程專業(yè)提供更好的發(fā)展前景。
參考文獻(xiàn)
[1] 軟件測試有效性度量指標(biāo)體系研究[J]. 楊玲萍,蔡?hào)|華,王建強(qiáng). 指揮信息系統(tǒng)與技術(shù). 2010(06)
[2] 一種基于EAI模型的錯(cuò)誤注入測試方法[J]. 魯軍,羅揚(yáng),李新洲. 工業(yè)控制計(jì)算機(jī). 2011(04)
[3] 綜合網(wǎng)管系統(tǒng)軟件測試模型的研究與實(shí)現(xiàn)[J]. 陳良臣,張朔. 計(jì)算機(jī)與數(shù)字工程. 2014(04)
[4] 基于程序譜概念格的軟件錯(cuò)誤定位技術(shù)[J]. 文萬志,陳翔,孫小兵. 四川大學(xué)學(xué)報(bào)(工程科學(xué)版). 2014(02)
[5] 基于馬爾可夫模型的軟件錯(cuò)誤定位方法[J]. 張?jiān)魄嵳?,季曉慧,張文博,張震? 計(jì)算機(jī)學(xué)報(bào). 2013(02)