劉東旭 吳昊



摘要:測試用例由測試輸入數據以及與之對應的輸出結果組成,測試用例設計的好壞直接決定了測試的效果和結果,所以說在軟件測試活動中最關鍵的步驟就是設計有效的測試用例。文章闡述了一種尋優搜索算法來自動生成軟件測試用例數據,即遺傳算法,利用遺傳算法原理的模型圖結合測試用例設計需求,介紹了遺傳算法自動生成測試用例數據的思想和步驟,并在此基礎上研究了基于遺傳算法在測試用例自動生成上的技術。利用此方法產生的測試用例數據可以產生較好的測試結果。
關鍵詞:軟件測試;測試用例;遺傳算法
1 遺傳算法概述
遺傳算法(Genetic Algorithm,GA)是在20世紀70年代由美國科學家提出的,是模擬自然界的生物物種的進化和遺傳機制原理用來尋找最優解的自組織、自適應搜索算法。軟件測試與軟件質量是成正比的關系。測試工作的質量決定了軟件的質量,而測試用例的優劣又決定了測試工作的質量,人工的用例設計耗時耗力且存在主官片面性,因此,要設計出最優最少的用例找出軟件中盡可能多的缺陷是測試人員需要解決的問題。本文在闡述了軟件測試的特點及測試用例設計之后,結合軟件測試與遺傳算法各自的特點,分析利用遺傳算法自動生成軟件測試用例數據的應用,研究用于軟件測試用例數據自動生成的遺傳算法。
2 軟件測試及測試用例設計
軟件測試是由測試人員獲取需求規格說明書,設計文檔及源程序清單等資料,結合測試用例設計方法有針對性地設計出大量的測試用例,測試用例執行人員執行設計出的用例找出軟件中存在的問題[2]。因此軟件測試的目的找出程序在設計過程中的問題(或者叫缺陷)。所以軟件測試是在軟件開發整個周期中找出軟件中存在的缺陷,而并不是為了驗證軟件的正確。軟件測試團隊在進行測試時主要包括以下幾個步驟。
(1)編寫軟件測試計劃方案;(2)利用常用的測試用例設計方法編寫測試用例;(3)測試人員逐條執行用例,如找出缺陷,標記并提交;(4)測試人員追蹤缺陷狀態,進行回歸測試;(5)編寫本次測試總結報告。
測試用例是測試人員在測試過程中執行的最小的一個單位,是由輸入的數據值、測試執行的條件和步驟以及對應的預期輸出的數據值3部分構成[3]。一個測試用例的好壞,不能體現整個測試用例集的優劣。所以測試用例集的設計對
測試人員有著很高的要求,不僅能找出潛在的缺陷,還能節省軟件開發的成本。
測試用例在設計過程中的輸入數據值的范圍很廣,如有一個程序F,有兩個輸入量X,Y,一個輸出量Z,在字長為64位的計算機上運行。若X,Y取整數,按用例設計方法可設計出:264×264=2 128條測試用例。這是一個非常龐大的數據,在實際的測試中這種數據量的測試是不可行的,因此窮舉法在測試中是不能實現的,我們需要在大量的數據中選擇一些具有代表性的值作為測試用例。這要求在測試人員在設計測試用例時利用一些方法并考慮到額外的一些因素。測試方法主要包括兩大類:黑盒測試法主要著重與功能和特性,白盒測試法主要著重與程序的邏輯結構。黑盒測試和白盒測試主要方法如表1所示。
3 遺傳算法生成測試用例的系統模型
遺傳算法作為一種在大量數據中尋優的搜索算法,它是在大量搜索數據中隨機選取數據,按照一定的評價函數對搜索出的每個數據進行評估,并對遺傳算子進行優化,直到找出最合理最優的數據值,利用遺傳算法原理自動生成測試用例數據的系統模型如圖1所示。從圖1中我們可看出其由兩大塊組成:(1)遺傳算法設計與執行模塊;(2)數據個體評優模塊。其中遺傳算法設計與執行模塊是用例生成的核心算法,第一步給定初始數據值,隨機初始化第一代種群,第二步按照設計好的編碼規則將初始化的數據值轉換成驅動程序的實參值,通過參數傳遞給被測程序的形參,運行被測程序。而個體評價部分主要是在被測程序中插入評價函數,產生相應的函數值傳遞給遺傳算法。利用個體評優模塊的評價函數對遺傳算法設計與執行模塊產生的大量數據值優勝劣汰,再結合遺傳算子的選擇、交叉、突變操作改變個體數據值的結構,形成更優一代的種群,反復循環,直至找出測試用例需求數據的最優解[4]。
4 遺傳算法在軟件測試用例生成中的應用研究
軟件測試過程中測試用例的設計起著至關重要的作用,人工設計軟件測試用例是不可或缺的,但是龐大的數據量讓人工設計測試用例舉步維艱,因此自動化生成測試用例是測試人員設計用例的未來發展方向。測試用例數據自動生成大大縮短軟件開發的生命周期、提高了軟件測試的效率。測試用例數據的自動生成就是在大量數據值的范圍中,利用設計好的算法規則選出一些具有代表性的數據成為用例的輸入值。而遺傳算法又作為一種尋找最優解的搜索算法,因此將遺傳算法融入測試用例設計中去,很大程度上優化了測試用例的數據值,提高了測試用例的質量。
4.1 遺傳算法生成測試數據的思想
遺傳算法是一種高效的自動尋優搜索算法,對繁冗的軟件測試用例自動生成具有指導性作用。利用遺傳算法的原理
得出一組最優的測試用例數據集,在每一次種群迭代過程中,不斷生成新的群體,并繼續自動生成測試用例傳遞給被測試程序執行,測試人員在每一次對被測程序執行測試之后都將記錄執行路徑追蹤測試數據,并形成一個日志文件,以路徑覆蓋度的最大化作為評價函數的評價標準,得出新一代的群體;經過多次迭代,使用遺傳和變異的方式更新種群中的個體,當算法達到之前設定的循環結束條件或者產生出最優最適合的測試用例集。軟件測試過程中,利用遺傳算法搜索最優解的特點,自動生成數值型測試用例數據,產生測試用例集。使用遺傳算法自動生成軟件測試用例數據的思想是:(1)數據值輸入問題轉化為數據值優化問題;(2)設計出合理有效的評價函數,評價生成數據值的優劣。
4.2 利用遺傳算法生成軟件測試用例數據
(1)將程序的輸入數據問題轉換為遺傳算法可處理的問題,對程序的輸入值f1(x1,x2,x3,x4,…..xn_),進行編碼,一般可利用二進制編碼形式,編碼后數據值為f1(y1,y2,y3,y4,…..yn_)每個數據均視為一個個體,利用隨機函數生成初始化種群。
(2)配置好被測程序的驅動程序一個driver()和粧程序若干program1(),program2(),program3()…以及之間的接口問題。
(3)結合具體的程序要求和測試要求,設計出一個軟件失效模型,給出相應的評價體系函數F(x)執行測試用例數據輸入操作,根據被測程序的返回數據值,對比軟件失效模型的數據值F=F[f1(y1,y2,y3,y4,…..yn_), f2(y1,y2,y3,y4,…..yn_),…fn(y1,y2,y3,y4,…..yn_)],評價測試用例數據的優劣。所謂的軟件實現模型亦即評價函數或適應度函數。
(4)根據軟件失效模型的數據值對每個輸入值的個體利用遺傳算子進行選擇、交叉和變異操作,形成新一代的種群。
(5)重復(2)—(4),利用遺傳算法直至找出測試用例數據的最優解或依據程序規則設置合適的終止條件。如可定義一個整型變量count。測試用例輸入值每輸入一次count++。當count值達到設定的范圍時,終止此次算法。依據評價函數的數據值和實際數據值比較形成測試用例數據值。
5 結語
利用算法為軟件測試生成高效率的測試用例是測試人員必須面臨和急需解決的問題。而遺傳算法由于其本身強大的全局搜索能力和魯棒性,因而能夠很好地應用于測試用例數據的自動化生成中[1]。
本文主要闡述了目前測試用例數據自動生成技術的普遍性和重要性,軟件測試的目的和測試用例設計的主要方法,并利用遺傳算法建立了測試用例自動生成的系統模型,介紹了遺傳算法生成測試用例數據的思想以及利用遺傳算法自動生成測試用例數據的算法步驟[5]。綜上所述,遺傳算法在生成數據時受到適應性函數的制約,由此產生的數據值既高效又具有代表性。因此,結合遺傳算法自動生成測試用例,它不僅能保證高質量的測試用例數據,而且還在很大程度上縮短了開發周期,提高了軟件質量降低軟件使用過程中受到的風險。
[參考文獻]
[1]姚堯.一種基于遺傳算法的軟件測試用例生成新方法[J].計算機與數字工程,2009(1):18-21.
[2]陳明.軟件工程實用教程[M].北京:清華大學出版社,2005.
[3]易禹,廖年冬.軟件測試簡明教程[M].武漢:武漢大學出版社,2012.
[4]彭稷棟.基于改進遺傳算法的測試用例自動生成應用研究[D].南昌:江西理工大學,2012.
[5]李柱.基于自適應遺傳算法的軟件測試用例自動生成[J].計算機系統應用,2016(1):192-196.