模型驅動的軟體測試技術

寒凝雪發表於2017-07-03

一、引言

  模型驅動的軟體測試(Model-Driven Test)技術是針對軟體中的一些常見的軟體模型而提出的一種測試技術,如故障模型、安全模型、死鎖模型等。模型驅動的軟體測試以明確描述系統預期行為的抽象模型為依據,根據模型覆蓋測試準則自動生成抽象的測試用例,自動地產生測試指令碼,執行測試並自動評價測試結果,從而有效提高測試效率。這一技術正成為當前軟體工程學術界研究的一個重要方向。

  近年來,基於模型的軟體測試技術得到快速的發展,大量的軟體測試工具被研製出來從而可以自動地檢測軟體中的故障,並且在對一些大型商業軟體和開源軟體的測試中發現了大量的以前測試沒有發現的軟體故障和安全隱患。

  二、模型驅動的軟體測試技術的特點

  與其他測試技術相比,基於模型的軟體測試技術具有如下特點:

  (1)故障模型根據被測試應用程式的分析設計模型及其生成測試模型、產生測試用例和進行測試結果評價。

  (2)大大提高了測試自動化水平以及測試效率。

  (3)部分解決了測試失效辨識問題,往往能發現其他測試技術難以發現的故障,保證了軟體質量。

  (4)有利於測試用例的重用,並可以應用成熟的理論和技術獲得比較完善的分析結果。

  三、軟體模型分類

  軟體模型是對軟體行為和軟體結構的抽象描述。軟體模型通常可以分為以下7 類:

  (1)故障模型

  故障模型主要是會引起錯誤的常見軟體模型, 應該儘量避免, 如記憶體洩漏故障(MLF) 、使用空指標故障(NPDF) 、陣列越界故障(OOBF) 、非法計算類故障(ILCF) 、使用未初始化變數的故障(UVF) 、不完備的建構函式故障(ICF) 以及操作符異常故障(OAF) 等。

  (2)安全漏洞模型

  安全漏洞模型為他人攻擊軟體提供可能。而一旦軟體被攻擊成功,系統就可能發生癱瘓,所造成的危害可能更大。因此,此類漏洞應當儘量避免,如:緩衝區溢位漏洞模型、被感染資料漏洞模型、競爭條件漏洞模型等。

  (3)差效能模型

  該模型在軟體動態執行時效率比較低下,因此建議採用更高效的程式碼來完成同樣的功能。這類模型主要包括呼叫了不必要的基本型別包裝類的構造方法、空字串的比較、拷貝字串、未宣告為static 的內部類、引數為常數的數學方法、建立不必要的物件以及宣告未使用的屬性及方法等。

  (4)併發故障模型

  該模型主要是針對程式設計師對多執行緒的編碼機制不十分了解,對各種同步的方法、Java 儲存器模型和Java 虛擬機器的工作機制不是很清楚,而且由於執行緒啟動的任意性和不確定性使使用者無法確定所編寫的程式碼具體何時執行而導致對公共區域的錯誤使用,如死鎖等。

  (5)不良習慣模型

  該模型主要是由於程式設計師編寫程式碼的不好習慣造成的一些錯誤。包括檔案的空輸入、垃圾回收的問題,類、方法和域的命名問題,方法呼叫,物件序列化,域初始化等。

 

 (6)程式碼國際化模型

  該模型主要是在語言進行國際化的過程中,可能造成本地設定和程式需求不符的情況,造成匹配錯誤。

  (7)易誘騙程式碼模型

  該模型主要指程式碼中容易引起歧義的、迷惑人的編寫方式。比如無意義的比較,永遠是真值的判斷,條件分支使用相同的程式碼,宣告瞭卻未使用的域等,即那些混淆視聽,無法正常判斷程式的真正意圖的程式碼。

  四、模型驅動的軟體測試過程

  模型驅動的軟體測試方法通過對測試過程的抽象化,分離測試模型和測試執行,從而能夠通過正向或逆向手段建立針對WA某方面特徵的測試模型,並重用有針對性的測試執行手段。傳統黑盒、白盒測試方法與模型驅動的軟體測試方法並不矛盾,它們可以被包含到模型驅動的軟體測試過程中。

  如圖1所示,測試模型是模型驅動的軟體測試的核心概念,它在測試的不同階段表現為不同檢視。

  (1)通過被測系統(SUT)檢視得到測試模型;

  (2)基於測試模型,自動化或半自動化地得到測試用例集,通過測試用例檢視描述;

  (3)在測試執行階段,測試部署和排程檢視通過相應模型描述測試的執行環境以及執行過程;

  (4)根據部署排程模型自動執行測試用例,生成的結果通過測試結果檢視顯示,並將某些結果直接反饋給被測系統模型、測試用例模型以及部署排程模型,在各自檢視上直觀的顯示出來,便於分析結果進行迴歸測試。

  五、模型驅動的軟體測試工具

  模型驅動的軟體測試必須有相關工具支援。當前,有代表性的模型驅動的軟體測試工具中有:

  (1)支援狀態機模型的工具。包括:Software Engineering Technology的測試工具toolSET_Certify,執行於RISC6000和SUN平臺;IBM的GOTCHA,可以根據使用者事先確定的測試充分性準則進行基於軟體狀態模型的測試例生成;IBM 的TCBean是一個提供測試指令碼管理功能的基於狀態機的測試引擎。

  (2)支援馬爾可夫鏈模型的工具。包括:Cleanroom Software Engineering的CleanTest,支援統計測試,是商用的使用模型及統計測試例生成工具;IBM 的CleanroomCertification Assistant,可以自動化統計驗證過程,通過使用概率分佈產生測試例,並對測試結果進行分析。

  (3)對UML模型提供測試支援的工具。包括:SilverMark公司針對IBM 公司的VisualAge開發的支援測試用例生成和迴歸測試的TestMetor和UML Designer Connection。


本文出自seven的測試人生公眾號最新內容請見作者的GitHub頁:http://qaseven.github.io/


相關文章