模型驅動的軟件測試技術
一、引言
模型驅動的軟件測試(Model-Driven Test)技術是針對軟件中的一些常見的軟件模型而提出的一種測試技術,如故障模型、安全模型、死鎖模型等。模型驅動的軟件測試以明確描述系統(tǒng)預期行為的抽象模型為依據(jù),根據(jù)模型覆蓋測試準則自動生成抽象的測試用例,自動地產(chǎn)生測試腳本,執(zhí)行測試并自動評價測試結果,從而有效提高測試效率。這一技術正成為當前軟件工程學術界研究的一個重要方向。
近年來,基于模型的軟件測試技術得到快速的發(fā)展,大量的軟件測試工具被研制出來從而可以自動地檢測軟件中的故障,并且在對一些大型商業(yè)軟件和開源軟件的測試中發(fā)現(xiàn)了大量的以前測試沒有發(fā)現(xiàn)的軟件故障和安全隱患。
二、模型驅動的軟件測試技術的特點
與其他測試技術相比,基于模型的軟件測試技術具有如下特點:
(1)故障模型根據(jù)被測試應用程序的分析設計模型及其生成測試模型、產(chǎn)生測試用例和進行測試結果評價。
(2)大大提高了測試自動化水平以及測試效率。
(3)部分解決了測試失效辨識問題,往往能發(fā)現(xiàn)其他測試技術難以發(fā)現(xiàn)的故障,保證了軟件質量。
(4)有利于測試用例的重用,并可以應用成熟的理論和技術獲得比較完善的分析結果。
三、軟件模型分類
軟件模型是對軟件行為和軟件結構的抽象描述。軟件模型通常可以分為以下7 類:
(1)故障模型
故障模型主要是會引起錯誤的常見軟件模型, 應該盡量避免, 如內存泄漏故障(MLF) 、使用空指針故障(NPDF) 、數(shù)組越界故障(OOBF) 、非法計算類故障(ILCF) 、使用未初始化變量的故障(UVF) 、不完備的構造函數(shù)故障(ICF) 以及操作符異常故障(OAF) 等。
(2)安全漏洞模型
安全漏洞模型為他人攻擊軟件提供可能。而一旦軟件被攻擊成功,系統(tǒng)就可能發(fā)生癱瘓,所造成的危害可能更大。因此,此類漏洞應當盡量避免,如:緩沖區(qū)溢出漏洞模型、被感染數(shù)據(jù)漏洞模型、競爭條件漏洞模型等。
(3)差性能模型
該模型在軟件動態(tài)運行時效率比較低下,因此建議采用更高效的代碼來完成同樣的功能。這類模型主要包括調用了不必要的基本類型包裝類的構造方法、空字符串的比較、拷貝字符串、未聲明為static 的內部類、參數(shù)為常數(shù)的數(shù)學方法、創(chuàng)建不必要的對象以及聲明未使用的屬性及方法等。
(4)并發(fā)故障模型
該模型主要是針對程序員對多線程的編碼機制不十分了解,對各種同步的方法、Java 存儲器模型和Java 虛擬機的工作機制不是很清楚,而且由于線程啟動的任意性和不確定性使用戶無法確定所編寫的代碼具體何時執(zhí)行而導致對公共區(qū)域的錯誤使用,如死鎖等。
(5)不良習慣模型
該模型主要是由于程序員編寫代碼的不好習慣造成的一些錯誤。包括文件的空輸入、垃圾回收的問題,類、方法和域的命名問題,方法調用,對象序列化,域初始化等。
(6)代碼國際化模型
該模型主要是在語言進行國際化的過程中,可能造成本地設置和程序需求不符的情況,造成匹配錯誤。
(7)易誘騙代碼模型
該模型主要指代碼中容易引起歧義的、迷惑人的編寫方式。比如無意義的比較,永遠是真值的判斷,條件分支使用相同的代碼,聲明了卻未使用的域等,即那些混淆視聽,無法正常判斷程序的真正意圖的代碼。
四、模型驅動的軟件測試過程
模型驅動的軟件測試方法通過對測試過程的抽象化,分離測試模型和測試執(zhí)行,從而能夠通過正向或逆向手段建立針對WA某方面特征的測試模型,并重用有針對性的測試執(zhí)行手段。傳統(tǒng)黑盒、白盒測試方法與模型驅動的軟件測試方法并不矛盾,它們可以被包含到模型驅動的軟件測試過程中。

如圖1所示,測試模型是模型驅動的軟件測試的核心概念,它在測試的不同階段表現(xiàn)為不同視圖。
(1)通過被測系統(tǒng)(SUT)視圖得到測試模型;
(2)基于測試模型,自動化或半自動化地得到測試用例集,通過測試用例視圖描述;
(3)在測試執(zhí)行階段,測試部署和調度視圖通過相應模型描述測試的執(zhí)行環(huán)境以及執(zhí)行過程;
(4)根據(jù)部署調度模型自動執(zhí)行測試用例,生成的結果通過測試結果視圖顯示,并將某些結果直接反饋給被測系統(tǒng)模型、測試用例模型以及部署調度模型,在各自視圖上直觀的顯示出來,便于分析結果進行回歸測試。
五、模型驅動的軟件測試工具
模型驅動的軟件測試必須有相關工具支持。當前,有代表性的模型驅動的軟件測試工具中有:
(1)支持狀態(tài)機模型的工具。包括:Software Engineering Technology的測試工具toolSET_Certify,運行于RISC6000和SUN平臺;IBM的GOTCHA,可以根據(jù)用戶事先確定的測試充分性準則進行基于軟件狀態(tài)模型的測試例生成;IBM 的TCBean是一個提供測試腳本管理功能的基于狀態(tài)機的測試引擎。
(2)支持馬爾可夫鏈模型的工具。包括:Cleanroom Software Engineering的CleanTest,支持統(tǒng)計測試,是商用的使用模型及統(tǒng)計測試例生成工具;IBM 的CleanroomCertification Assistant,可以自動化統(tǒng)計驗證過程,通過使用概率分布產(chǎn)生測試例,并對測試結果進行分析。
(3)對UML模型提供測試支持的工具。包括:SilverMark公司針對IBM 公司的VisualAge開發(fā)的支持測試用例生成和回歸測試的TestMetor和UML Designer Connection。