基於模型的測試教程


應用程式測試對於任何應用程式來說都是一項關鍵活動。在過去十年中,已經開發出各種應用程式測試方法,以確保我們提供滿足所有客戶需求的高質量應用程式。

基於模型的測試 (MBT) 是測試自動化領域中的一個熱門話題,它涉及從被測應用程式的模型中建立測試用例。

現在已經可以使用各種基於模型的測試方法。我們將向您展示兩種使用遺傳演算法的基於模型的測試方法。使用遺傳演算法進行基於模型的測試是一個熱門話題,並且有幾篇論文和對現有技術的比較。

什麼是基於模型的測試,它是如何工作的?

基於模型的測試是一種軟體測試方法,其中將被測產品的執行時行為與模型預測進行比較。模型是對系統行為的表示。輸入序列、動作、條件、輸出以及從輸入到輸出的資料流都可以用來定義行為。它應該易於理解和重用;共享必須提供被測系統的詳細描述。

有各種可用的模型來描述系統行為的各個方面。

以下是模型的一些示例:

  • 資料流

  • 控制流

  • 依賴圖

  • 決策表

  • 狀態轉換機

基於模型的測試解釋了系統如何響應活動(由模型確定)。提供動作並觀察系統是否按預期響應。

這是一種驗證系統的簡單形式化方法。此測試可用於硬體和軟體。

基本的 MBT 流程包括五個關鍵步驟:

  • 建模

  • 測試計劃

  • 測試設計

  • 測試生成

  • 測試執行

建模

建模是描述系統需求的過程。測試生成器將基於此描述。

模型中還必須包含被測系統的預期輸出。設計模型和測試模型在此階段非常重要。

選擇模型時應考慮一些關鍵標準:在大多數情況下,模型被轉換為狀態轉換系統或有限狀態機系統。有限狀態機系統是系統潛在配置的表示。

搜尋系統中的可執行路徑以查詢測試用例。將使用合理的執行路徑來生成測試用例。如果模型是確定性的,或者可以轉換為確定性模型,則可以使用此方法。

測試計劃

測試計劃包括定義測試選擇標準和指標。這提供了對測試用例規範的形式化制定,以及指導可行測試套件的對映等。

測試設計

測試設計是指使用前面的測試選擇標準對測試用例進行形式化。

測試生成

這需要建立儘可能多的測試。

離線

  • 搜尋演算法

  • 測試格式是預先確定的。

線上

  • 行走或尋光演算法

  • 在執行上一步並收到輸出值後,確定下一步。

  • 演算法必須快速。

測試執行

執行測試並查詢當前輸出和預期輸出之間的差異。

進化演算法

進化演算法中使用的所有概念都是選擇、繁殖和變異。

我們將在本文中介紹三種不同的進化演算法:

  • 遺傳演算法

  • 進化規劃

  • 進化策略

基於遺傳資訊的演算法 (GA)

遺傳演算法屬於進化計算,而進化計算屬於人工智慧。

遺傳演算法基於達爾文的進化論。也可以說,透過遺傳演算法解決的問題的答案已經進化了。

我們在遺傳演算法中使用來自自然選擇的四個關鍵概念:基因、染色體(個體)、種群和自然選擇。

自然選擇包括以下步驟:

  • 將選擇種群中最適合的個體。

  • 個體將擁有繼承其父母特徵的後代。

  • 後代將包含在下一代中。

  • 更適合的父母的後代將勝過他們的父母,並且有更高的生存機會。

這是一個迭代過程,將產生最適合的個體的一代。

描述遺傳演算法最簡單的方法是想象我們有一個要解決的問題,並且我們可以檢查該問題的解決方案集合。我們將不得不使用進化論和自然選擇來找到該問題的最佳答案。

遺傳演算法中使用以下術語:

  • **初始種群:**問題從當前問題的潛在解決方案(個體)集合開始。種群由一定數量的個體組成。每個人都是我們試圖解決的問題的潛在解決方案。一組引數構成一個個體(變數)。這些特性被稱為基因。基因連線成一個字串形成染色體(解決方案/個體)。二進位制值(1 和 0 的字串)通常用於對染色體中的基因進行編碼。

  • **適應度函式:**確定個體與其他個體競爭的能力。基於適應度函式,我們將為每個個體(染色體/解決方案)計算適應度分數。適應度分數決定了個體被選中進行繁殖的可能性。

  • **選擇:**將選擇最適合的個體,並將它們的基因傳遞給下一代。它是如何工作的?根據它們的適應度分數,演算法將選擇兩對個體(父母)。將選擇具有高適應度水平的個體進行繁殖。有很多選擇演算法。

  • **交叉(重組):**這是遺傳演算法最重要的階段。交叉有多種形式。通常,從要交配的每對父母的基因中隨機選擇一個交叉點,以產生新的後代並將它們插入種群。因此,這兩個父母將有兩個孩子。

  • **變異:**這是一種遺傳運算元,以較低的隨機頻率應用於產生的一部分新的後代。這意味著位字串中的位數經常被交換。

  • **終止:**如果種群沒有產生與前一代明顯不同的後代,則演算法將終止。現在我們可以說遺傳演算法已經為我們的問題生成了一組解決方案。

基於模型的測試和遺傳演算法

瞭解如何將遺傳演算法應用於基於模型的測試是本文最重要的部分。讓我們來看一下遺傳演算法在基於模型的測試中的兩種用途。

我們現在正在使用遺傳演算法中的所有術語,並演示它們如何在 GA 的各種基於模型的測試應用程式中使用。

使用 GA 從 UML 狀態圖模型生成測試資料基於模型的測試可以從被測應用程式的 UML(統一建模語言)模型表示中生成測試用例和可執行測試指令碼。使用統一建模語言 (UML) 狀態圖,可以使用遺傳演算法生成測試資料。

使用 UML 狀態圖時,請記住以下術語:

  • 狀態圖(狀態圖)用於表示任何複雜特徵或描述完整系統、子系統甚至系統內單個專案的動態行為。

  • 在編碼之前,基於模型的測試用於從 UML 狀態圖中提取測試用例。因此,我們可以為任何程式規範建立測試套件。規範通常以 UML 圖或形式語言規範的形式出現。

  • 觸發器類似於事件,它啟動從一種狀態到另一種狀態的轉換。

  • 保護條件是一個布林條件,在轉換髮生之前必須滿足該條件。

  • 轉換髮生時發生的動作(活動)被稱為影響。

如前所述,為了使用遺傳演算法,我們必須首先建立初始人群(染色體)。這個初始種群將是我們挑戰的解決方案集合。

基於模型的測試挑戰 −

  • 在任何公司部署MBT顯然需要大量的資金和工作。

  • 學習曲線會更長,模型也更難理解。

基於模型的測試的優勢 −

MBT具有以下優點 −

  • 簡單的測試用例/套件維護

  • 節省成本,提高測試覆蓋率

  • 可以在n臺計算機上執行各種測試

  • 早期缺陷識別

  • 缺陷數量增加(此條可能與上下文不符,建議修改為更正面的說法,例如:更有效的缺陷發現)

  • 節省時間

  • 提高測試人員的工作滿意度

結論

在測試過程中,測試人員無論如何都會建立心智模型。這些心智模型可以轉換成紙質模型。這有助於提高測試人員的可讀性和可重用性。

基於模型的測試是一種相對較新的軟體測試方法。下圖描述了軟體測試的演變過程 −

更新於:2021年9月22日

瀏覽量1K+

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告