MBT中文名稱為基於模型的測試,基於模型的測試屬於軟件測試領域的壹種測試方法。
二、背景
? 軟件測試是壹款軟件產品質量的最後壹道防線,是產品線上前必不可少的、最重要的壹環。每壹款高質量的軟件產品背後,都蘊含了大量的測試工作。而且測試工作很可能是軟件開發過程中最昂貴、勞動最密集的工作。在設計測試用例的過程中,或多或少的存在著問題,使得軟件測試結果不那麽理想。下面引入新的測試方法,基本模型的測試,是自動化測試的壹個分支,它將測試用例的設計依托於被測系統的模型,並基於該模型自動生成測試用例的技術。從質量保證的角度來看,我們可以制定測試的內容,但是無法保證測試會覆蓋所有可能的組合,而MBT則允許軟件開發和測試人員,只關註建立系統的正確性及模型的規範性,再通過專門的MBT工具根據不同的測試用例設計策略從系統模型生成可靠的測試用例。
與傳統測試相比,優點:
?(1)測試用例的維護更輕松:維護好模型,無需關註測試用例的細節
?(2)軟件缺陷發現的更早:在構建被測系統模型的過程中,需要對被測系統有比較全面的理解,那麽在早期建模過程中就可以發現被測系統中的壹些問題,不需要等到執行大量用例時才發現;
?(3)測試自動化的水平更高:建模後,MBT可以自動生成測試用例,不需要人工編寫測試文檔;
?(4)測試覆蓋率變得更高,使得徹底的測試(即:窮盡測試)成為可能:傳統測試設計的過程中依賴人工,MBT生成測試路徑時會避免人工設計測試用例時的思維局限性,生成更豐富的測試路徑用例,但是是否需要執行“徹底”的測試由漏測對業務的影響決定。MBT只是從技術上提供了窮盡測試可能性。
?(5)基於模型間接維護測試用例的方式更高效:傳統維護時需要依賴人工,需要耗費大量的人力和時間成本,重新測試設計。使用MBT只需要維護好測試模型即可,生成測試用例的工作可以由MBT工具自動完成;
?缺點,即未廣泛推廣的原因:
?(1)學習成本較高:要求開發人員、測試人員都精通建模,和工具的選型;
?(2)使用MBT的初期投資較大:已有的MBT工具不壹定適合自己產品,定制的話需要考慮擴展性,和處理復雜邏輯,也就是要花費大量時間和精力;
?(3)用例爆炸
總結下,測試方法多種多樣,MBT和傳統測試相比,各有優劣。如果壹個應用的任何組件都可以通過模型來模擬、通過驅動程序來驅動,並可以通過測試結果來比較的話,那麽這個應用是MBT的最佳候選者。
2.1? 通用流程
2.2? Model design (模型設計)? 模型設計,目的是用來為構造測試用例而進行的被測系統描述
(1)模型關註點:
?(2)?MBT模型分類:
2.3? Tests selection ( 測試需求選擇)
指導測試用例生成器( test generation)如何生成用例
2.4 Tests? paths generation(測試用例生成)
按模型及測試需求選擇來生成測試用例。GraphWalker就是完成這部分工作的壹個開源的java工具。
2.5 Tests execution(執行測試)
執行測試,並比較預期
2.6? FSM舉例:海拍客mallpc 登錄相關功能建模,如下
壹個箭頭,代表壹次測試動作;
壹個節點,代表壹次測試驗證;
2.7 常見工具 :BPM-X、fMBT、GraphWalker
三 、GraphWalker簡介
?GraphWalker就是壹個基於測試模型的用例生成工具,主要支持於FSM, EFSM模型。它以有向圖的形式讀取模型,生成測試路徑,適合於多狀態以及基於事件驅動的狀態轉換的系統。
四、使用GraphWalker建模
有向圖中,頂點(或節點)表示壹些期望的狀態,並且邊(弧,箭頭,過渡)表示為了實現期望的狀態需要做的任何動作;
4.1 建模工具:yEd4.2?建模規則1
? 4.3 建模規則2
4.4 建模keywords
4.5 支持多模型:
?GraphWalker可以在壹個會話中使用幾個模型。這意味著在生成路徑時,GraphWalker可以選擇跳出壹個模型到另壹個模型。當將不同的功能分為多個模型時,這是非常方便的。
?
多模型offilne運行舉例:
java -jar graphwalker-cli-4.0.0-SNAPSHOT.jar -d all offline -m Model_A.graphml random(edge_coverage(100)) -m Model_B.graphml random(edge_coverage(100)) -m Model_C.graphml random(edge_coverage(100))?-m Model_D.graphml random(edge_coverage(100)) –o
當路徑生成到達模型A中的頂點v_B時,它必須考慮關鍵字SHARED:B ..這將告訴GraphWalker使用相同的名稱搜索所有其他模型的同壹個關鍵字:B.在我們的例子中,只有壹個,它在模型B中。
現在GraphWalker決定是跳出模型A,進入模型B中的頂點v_B,還是留在模型A中。這個決定是基於隨機的。
多模型特性:
五、路徑生成器和結束條件
六、GraphWalker工作方式
以作為第三方庫為例: 使用GraphWalker第三方庫實現模型自動化測試
七、GraphWalker命令行:此處省略
八、Restful或WebSocket服務的區別:此處省略
九、Web Socket API接口:此處省略
十、REST API接口:此處省略
十壹、GraphWalker源碼:
GraphWalker工具核心:graphwalker-core
參考資料:
備註:
FSM :有限狀態機?Finite State Machine
EFSM:擴展有限狀態機