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