王廷永 黃松
(陸軍工程大學(xué)指揮控制工程學(xué)院 江蘇省南京市 210007)
測試用例是軟件測試過程中的重要資產(chǎn),根據(jù)ISO/IEEE-24765的定義,測試用例是對輸入、執(zhí)行條件、測試過程和預(yù)期結(jié)果的規(guī)范,這些規(guī)范定義了為實現(xiàn)特定的軟件測試目標(biāo)而執(zhí)行的單個測試,例如執(zhí)行特定的程序路徑或驗證是否符合特定的需求[1]。一直以來,測試用例生成技術(shù)是軟件測試領(lǐng)域研究的熱門方向,國內(nèi)外學(xué)者針對測試用例生成技術(shù)已經(jīng)提出若干種方法,如基于模型的測試用例生成方法、基于搜索的測試用例生成方法、基于隨機測試的測試用例生成方法、組合測試用例生成方法、基于變異的測試用例生成方法、基于符號執(zhí)行的測試用例生成方法、基于需求的測試用例生成方法、基于錄制與回放的測試用例生成方法。
根據(jù)是否需要軟件源代碼,本文將以上測試用例生成技術(shù)分為白盒測試用例生成技術(shù)和黑盒測試用例生成技術(shù)。其中基于模型的測試用例生成技術(shù)、隨機測試用例生成技術(shù)、基于需求的測試用例生成技術(shù)以及基于錄制與回放的測試用例生成技術(shù)屬于黑盒測試用例生成技術(shù),基于搜索的測試用例生成技術(shù)、基于變異的測試用例生成技術(shù)、基于符號執(zhí)行的測試用例生成技術(shù)以及組合測試用例生成技術(shù)屬于白盒測試用例生成技術(shù)。
基于搜索的測試用例生成是指利用各種搜索算法例如爬山算法,模擬退火算法,禁忌搜索,遺傳算法,粒子群優(yōu)化算法以及蟻群算法等生成高覆蓋的測試用例。2020年Kappé[2]等人將爬山算法引入RESTful API 測試中,實驗結(jié)果表明爬山算法實現(xiàn)了更高的分支覆蓋率。2020年Damia[3]等人提出了一種結(jié)合螢火蟲算法和無性繁殖優(yōu)化算法的測試用例生成方法,通過使用無性繁殖優(yōu)化解決螢火蟲算法中的過早收斂問題,實驗結(jié)果表明此方法在覆蓋率與適應(yīng)性方面取得比現(xiàn)有方法更好的表現(xiàn)。
基于變異的測試用例生成是指利用變異現(xiàn)有的軟件源代碼,發(fā)現(xiàn)“無用”測試用例和設(shè)計新的測試用例。變異測試能夠很好發(fā)現(xiàn)評估的測試用例發(fā)現(xiàn)缺陷的能力。2021年Jeangoudoux[4]等提出一種將測試用例和 oracle 生成作為數(shù)值區(qū)間域上的一個約束滿足問題,通過解決約束問題進行變異測試并生成對應(yīng)測試用例的方法,實驗結(jié)果表明其方法優(yōu)于隨機測試,并生成有用的測試用例集。2019年Almeida[5]等人提出一種基于用戶行為結(jié)合變異算子的Web測試用例生成方法。采用將變異算子擴展了基于錄制與回放生成的測試用例,獲取更多測試用例。
基于符號執(zhí)行的測試用例生成是指通過符號化執(zhí)行待測軟件以收集約束條件,并借助約束求解器為每條路徑生成測試用例[6]。2019年謝肖飛[6]等人提出一種將模糊測試與符號執(zhí)行相結(jié)合的測試用例生成方法,通過模糊測試提供覆蓋率信息來引導(dǎo)符號執(zhí)行的搜索方向,從而生成更高覆蓋率的測試用例,實驗結(jié)果表明此方法相比于只基于模糊測試的測試用例生成方法取得更高覆蓋率以及發(fā)現(xiàn)更多的漏洞。
待測軟件的輸入?yún)?shù)存在多種內(nèi)外約束,且彼此之間也存在相互作用,借助參數(shù)組合方式發(fā)現(xiàn)因為參數(shù)違反約束條件或參數(shù)之間相互作用的缺陷稱為組合測試。將組合測試應(yīng)用于測試用例生成稱為組合測試用例生成技術(shù)。組合測試存在問題是面對相互作用強度較高的待測軟件會導(dǎo)致搜索時間呈指數(shù)級別的增長,2020年Hasan[7]等人采用隨機選擇策略對混合鄰域禁忌搜索(RMiTS)算法進行改進,成功提升了較高的相互作用強度組合測試的測試效率,生成更高覆蓋的測試用例。2020年Bombarda[8]等人提出基于有限狀態(tài)機生成約束來解決組合測試的參數(shù)組合爆炸問題;自動機檢查無效測試序列,并對無效測試序列設(shè)置修復(fù)方法。結(jié)果表明此方法比傳統(tǒng)基于測試序列的測試用例有更高的覆蓋率以及更多有用測試用例。
基于模型的測試用例生成是指通過建立對被測軟件預(yù)期行為動作的抽象描述的模型,從模型中派生出測試用例。目前應(yīng)用測試用例生成的模型主要分為UML 狀態(tài)圖、FSM 有限狀態(tài)機以及馬爾可夫鏈模型。
基于UML 模型的測試用例生成的研究近年來有2018年李艷梅[9]以 UML 時序圖為基礎(chǔ),將時序圖首先轉(zhuǎn)化成順序有向圖,再使用遺傳蟻群算法進行優(yōu)化計算,最后生成測試用例,2019年Wang[10]為了解決UML 語義不夠精確無法生成完整程序的問題,提出了一種可擴展語言xUML。分析xUML 的活動圖以獲得系統(tǒng)的層次語法圖,然后根據(jù)層次語法圖獲得 JAVA 程序的測試用例。
基于有限狀態(tài)機模型的測試用例生成研究主要包含有限狀態(tài)機(FSM)、分層有限狀態(tài)機(HFSM)與擴展有限狀態(tài)機(EFSM)。利用有限狀態(tài)機(FSM)的測試用例生成研究有陳亞龍[11]等人基于最小測試成本遷移覆蓋的準(zhǔn)則,使用退火遺傳算法遍歷FSM 模型來生成測試用例。Lefticaru[12]、Briand[13]等人都選擇使用遺傳算法(GA)來從狀態(tài)機模型中生成測試用例。利用分層有限狀態(tài)機(HFSM)實現(xiàn)測試用例生成研究有Florentin Ipate[14]和Logica Banica[15]基于W 方法提出了分層有限狀態(tài)機(HFSM,Hierarchical FSM)模型的測試方案生成方法,通過對每層FSM 應(yīng)用W 方法,再將測試生成序列進行合并,能夠保證錯誤檢測能力。對于復(fù)雜系統(tǒng)采用該算法,既可防止?fàn)顟B(tài)爆炸,又可達到測試的充分性。在利用擴展有限狀態(tài)機生成測試用例的研究有楊瑞等人[16]提出了一種基于EFSM 模型的自動化測試用例生成方法(ATGEM),通過使用基于數(shù)據(jù)流分析的路徑可行性度量方法來解決不可行路徑問題。蘇寧等人[17]研究了基于EFSM 不定型切片的測試用例生成方法,發(fā)現(xiàn)基于使用模型切片的效率比原模型更高。李棟[18]將EFSM 模型用于Web 應(yīng)用的安全測試,從威脅模型中解析出安全測試用例。
基于馬爾可夫鏈模型實現(xiàn)測試用例的生成近年的研究有2019年趙衛(wèi)東[19]等人提出的改進的高階馬爾可夫測試模型,以此模型提出基于快速輪盤賭的二分查找的測試用例生成方法。2020年Gebizli[20]等人引入了一種三步更新優(yōu)化的基于馬爾可夫鏈測試用例生成方法。用馬爾可夫鏈的形式來表示測試模型。先根據(jù)使用概況更新模型中的狀態(tài)轉(zhuǎn)移概率。再根據(jù)靜態(tài)代碼分析估計的故障可能性執(zhí)行更新。最后是基于動態(tài)分析估計的錯誤可能性。在每次更新優(yōu)化之后都會生成并執(zhí)行測試用例,該方法在智能電視系統(tǒng)經(jīng)過驗證,證實了多角度對測試模型進行連續(xù)改進是可以提高基于模型的測試的有效性。
隨機測試用例生成是指通過在待測軟件的輸入域上隨機產(chǎn)生測試輸入并生成測試用例的自動化測試技術(shù)。2020年Wetzlmaier[21]等人通過將增加額外的隨機步驟以擴展原有測試用例,從而擴大測試用例的窗口覆蓋范圍以及提升代碼覆蓋率,提高原有測試用例發(fā)現(xiàn)缺陷的能力。2020年Mao[22]等人提出一種靈活劃分的自適應(yīng)隨機測試用例生成方法,此方法結(jié)合了迭代分割測試和隨機分區(qū)自適應(yīng)隨機測試的有點,不僅保證生成的測試用例具有較高隨機性還保證測試用例分布均勻,同時保持與隨機分區(qū)自適應(yīng)隨機測試的相同復(fù)雜度水平。
基于需求的測試用例生成是指針對待測軟件的需求文檔進行分析并派生出測試用例的方法?;谛枨蟮臏y試用例生成方法分為兩類:一種是直接分析由自然語言描述的測試需求派生出測試用例,2018年Veera 等人[23]提出從需求到測試用例(Req2Test)方法。預(yù)先通過處理特定領(lǐng)域的語料庫,建立特定領(lǐng)域的知識庫。然后,處理每個需求語句 并根據(jù)領(lǐng)域知識庫和領(lǐng)域本體來驗證需求,并提取實體的領(lǐng)域?qū)哟谓Y(jié)構(gòu)生成需求說明。最后從提取的需求說明中構(gòu)建一個測試模板 并通過使用自然語言生成或基于規(guī)則的方法從模板中生成測試用例。另一種是通過分析測試需求構(gòu)建可用于描述待測軟件系統(tǒng)的抽象模型。2015年Lindsay[24]等人通過分析需求建立行為樹模型,并以此模型生成從測試用例,實驗結(jié)果表明此方法能夠?qū)崿F(xiàn)測試用例與需求之間可追溯性,顯著減少測試用例數(shù)量,提高測試效率。
基于錄制與回放的測試用例生成是指通過獲取用戶操作的信息,經(jīng)過處理生成相應(yīng)的測試用例。2018年侯津等人[25]提出的基于控件路徑的跨設(shè)備UI 自動化測試方法,解決跨設(shè)備查找控件失敗的問題,2020年張文燁[26]利用深度學(xué)習(xí)的目標(biāo)檢測提高控件查找的準(zhǔn)確度?;阡浿婆c回放的測試用例生成方法在面對不斷迭代的軟件產(chǎn)品顯得力不從心,測試用例以及測試腳本的維護變得繁重又困難。
本文首先介紹測試用例定義,然后介紹了測試用例生成的兩個方向:白盒測試用例生成技術(shù)與黑盒測試用例生成技術(shù)。盡管測試用例生成研究成果層出不窮,并不斷結(jié)合最新的技術(shù),但是測試用例自動生成還有克服各種困難,比如復(fù)雜度問題,不僅白盒測試用例生成技術(shù)存在,黑盒測試用例生成技術(shù)也同樣存在。除此之外,對于如何有效將研究成果真正應(yīng)用到實際測試用例生成中,目前還缺乏有效解決方案,因此測試用例生成技術(shù)有效應(yīng)用也是今后的研究方向之一。