基於模型的測試屬於軟體測試領域的一種測試方法。mbt步驟如下:
常規測試一般是由人來設計幾個特定的測試場景,然後斷言測試結果。測試用例固定。缺少不確定性。基於模型的測試(model-based testing)是需要實現乙個模型,然後制定行為和行為之間的關係以及行為和系統的關係(有限狀態機),然後測試系統根據被測系統的狀態、之前設定的限制條件和策略來生成很多用例(每執行一次生成的用例會不同),測試結果受一系列操作的影響,可以產生不確定性,更有可能發現一些想不到的很深路徑下的bug。
基於模型的測試主要包括以下部分:
1、模型程式(model program ):在這裡定義被測系統的可以被執行的一些操作(action),比如建立乙個虛機、刪除乙個虛機等。還有這些操作能被執行的條件(***_enabled)和系統在各個操作下的狀態(state)。
2、test harness/steper/adapter:訪問被測系統,具體實現模型中定義的操作(action)。
3、策略(strategies):在測試執行過程中,完成乙個操作(action)後,下乙個應該執行哪個操作,是由這個策略決定的,最簡單的策略可以用隨機選擇的方式,還可以自己實現一些更複雜的選擇策略演算法,比如zstack的公平排程演算法和基於歷史測試路徑的排程演算法。
4、測試執行器(test runer):執行測試、檢查
基於模型的測試的一般步驟:
1、分析理解被測試軟體
基於模型的軟體測試要求充分理解被測試軟體。構造可以用於測試的模型的工作主要是根據測試目的確定測試物件和測試特徵,針對被測試軟體的相關屬性建立相應模型。這個階段的具體工作包括,
充分了解軟體需求規範和設計文件、使用者手冊和開發隊伍充分交流。
1)識別軟體系統的使用者,列舉每個使用者的輸入序列,研究每項輸入的可能取值範圍,包括, 合法值、邊界值、非法值,以及預期輸出。這項工作往往需要工具支援。
2)記錄輸入發生條件和響應發生條件。軟體系統的響應是指使用者能夠得到的輸出或可見的軟體內部狀態的改變。其目的是設計可以引發特定響應的測試例和評價測試結果。
3)研究輸入序列,如,輸入發生時刻,軟體系統接收特定輸入的條件,輸入處理順序。
4)理解軟體內部資料交換和計算過程,產生可能發現缺陷的測試資料。
2、選擇合適的測試模型
不同的模型適用於不同型別軟體的測試 因此需要根據軟體特點擊擇模型。
1)了解可用的模型:不同的應用領域要使用不同的測試模型。例如,**交換系統多使用狀態模型;併發軟體系統中不同元件併發執行用狀態圖建模;馬爾可夫鏈可以對軟體進行失效統計分析。模型的選擇還依賴於軟體系統的工作特點,例如,測試長期執行軟體系統可以使用狀態機模型。
2)根據模型特徵進行選擇:只有充分理解模型和軟體系統,才能選擇合適的模型對軟體進行測試。以狀態機為例,自動機理論可以對狀態機進行分類,說明不同的狀態機可以表達什麼語言,從而可以根據應用程式的功能和特點,選擇不同的狀態機模型。由於根據有限狀態機產生測試資料相當於遍歷有向圖,因此圖論演算法可以指導產生測試例。
3)人員、組織和工具的影響:基於模型的軟體測試對測試人員的知識結構和技術水平提出了一定要求。如果乙個開發組織使用模型(如uml)完成需求分析和系統設計,開展基於模型的軟體測試就比較容易,因為根據系統分析和設計的模型進行測試,往往可以直接應用基於模型的軟體測試技術,還可以根據測試的進展不斷調整模型或模型的細節並有利於在開發過程早期進行測試規劃。另外還要根據開發組織使用的測試工具選擇特定的模型。
3、構造測試模型
以基於狀態機模型的測試為例說明如何構造測試模型。首先要抽象出軟體系統狀態,狀態抽象一般要根據輸入及輸出條件進行,一般包括以下過程:
1)生成乙個輸入序列並說明每個輸入的適用條件,稱作輸入約束。例如**未摘機時,才允許有摘機動作發生。
2)對每個輸入要說明產生不同響應的上下文環境,稱作響應約束。例如,**摘機時,如果當前狀態為振鈴,則進行通話,否則為撥號音。
3)根據輸入序列、輸入約束和響應約束構造相應狀態機模型,如下圖示例。
4、生成和執行測試例
測試例的自動生成依賴於測試所使用的模型。以有限狀態機模型為例,被遍歷路徑中弧的標記構成的序列就是測試例。在構造滿足測試準則的路徑時,必須考慮約束條件,如路徑長度限制,統計測試還要考慮遷移概率。生成了滿足特定的測試充分性準則的測試例集合後就可以執行測試例。以狀態機模型為例~ 首先要寫出**該軟體系統的每個不同外界激勵的指令碼,稱為**指令碼( simulation script) ,每個**指令碼對應模型中乙個不同的遷移;然後把測試例集合翻譯為測試指令碼( test script)。也可以用測試生成器通過遍歷狀態機的遷移直接產生測試指令碼。測試例的執行就是測試指令碼的執行過程。指令碼是可以重複利用的資源,維護測試指令碼也是測試工作的一部分。
5、收集測試結果進行分析
基於模型的軟體測試方法並沒有解決測試失效辨識(test oracle) 問題,仍然要人工檢查輸出是否正確。但是通過狀態驗證可以部分解決測試失效辨識問題,狀態是內部資料的抽象,比較容易驗證。另外,與傳統測試相比,基於模型的軟體測試的優勢之一就是可以根據測試結果分析軟體的其它質量因素,如可靠性。
基於模型的軟體測試的評價
1、基於模型的軟體測試的優勢
基於模型的軟體測試大大提高了測試自動化水平,部分解決了測試失效辨識問題,可以進行測試結果分析,有利於測試製品的重用,並可以應用成熟的理論和技術獲得比較完善的分析結果。現代軟體工程強調增量和迭代的開發過程,採用物件導向開發技術,提高軟體開發質量和加快軟體開發速度。由於物件導向軟體系統的規範多數使用模型表達,這些模型中包含了大量可以用於軟體測試的資訊,因此基於模型的軟體測試可以把軟體測試工作提前到開發過程早期,如進行測試工作的早期規劃。
2、基於模型的軟體測試的缺點
基於模型的軟體測試存在以下缺點:
1)測試人員需要具備一定的理論基礎,如狀態機理論和隨機過程的知識。還要掌握相關工具使用方法。
2)需要一定的前期投入,如模型的選擇,軟體功能劃分,模型構造等。
3)有時無法克服模型的固有缺陷,如狀態**,這對檢驗,評審和維護模型都提出了要求,也直接影響了測試自動化。狀態**問題一般通過抽象和排除方法( abstraction ***clusion) 減小測試規模,降低測試難度來解決。
什麼是基於模型的測試?
基於模型的測試屬於軟體測試領域的一種測試方法。mbt步驟如下 常規測試一般是由人來設計幾個特定的測試場景,然後斷言測試結果。測試用例固定。缺少不確定性。基於模型的測試 model based testing 是需要實現乙個模型,然後制定行為和行為之間的關係以及行為和系統的關係 有限狀態機 然後測試系...
基於模型的測試 一
概述 使用模型來描述系統的行為對於測試開發團隊來說是一種成熟 主要的優勢。模型在貫穿整個產品的生命週期中會在很多地方使用,例如提高產品規格質量,生成,可靠性分析和測試生成。這篇文章將聚焦於模型給測試帶來的效益,並且回顧一下那些阻礙基於模型測試的的歷史問題和展現如何克服這些苦難。另外,將在兩個實際程式...
什麼是冒煙測試?什麼是回歸測試?
一 什麼是冒煙測試?冒煙測試 smoke testing 是指 針對每個版本或每次需求變更之後,在正式測試之前,對產品或系統的一次簡單的驗證性測試,驗證產品或系統的 基本功能 流程是否正常。我們可以將冒煙測試理解為是在執行正式測試之前的 試 二 冒煙測試的目的是什麼?目的是確認軟體的基本功能正常,可...