基於模型的測試教程
應用程式測試對於任何應用程式來說都是一項關鍵活動。在過去十年中,已經開發出各種應用程式測試方法,以確保我們提供滿足所有客戶需求的高質量應用程式。
基於模型的測試 (MBT) 是測試自動化領域中的一個熱門話題,它涉及從被測應用程式的模型中建立測試用例。
現在已經可以使用各種基於模型的測試方法。我們將向您展示兩種使用遺傳演算法的基於模型的測試方法。使用遺傳演算法進行基於模型的測試是一個熱門話題,並且有幾篇論文和對現有技術的比較。
什麼是基於模型的測試,它是如何工作的?
基於模型的測試是一種軟體測試方法,其中將被測產品的執行時行為與模型預測進行比較。模型是對系統行為的表示。輸入序列、動作、條件、輸出以及從輸入到輸出的資料流都可以用來定義行為。它應該易於理解和重用;共享必須提供被測系統的詳細描述。
有各種可用的模型來描述系統行為的各個方面。
以下是模型的一些示例:
資料流
控制流
依賴圖
決策表
狀態轉換機
基於模型的測試解釋了系統如何響應活動(由模型確定)。提供動作並觀察系統是否按預期響應。
這是一種驗證系統的簡單形式化方法。此測試可用於硬體和軟體。
基本的 MBT 流程包括五個關鍵步驟:
建模
測試計劃
測試設計
測試生成
測試執行
建模
建模是描述系統需求的過程。測試生成器將基於此描述。
模型中還必須包含被測系統的預期輸出。設計模型和測試模型在此階段非常重要。
選擇模型時應考慮一些關鍵標準:在大多數情況下,模型被轉換為狀態轉換系統或有限狀態機系統。有限狀態機系統是系統潛在配置的表示。
搜尋系統中的可執行路徑以查詢測試用例。將使用合理的執行路徑來生成測試用例。如果模型是確定性的,或者可以轉換為確定性模型,則可以使用此方法。
測試計劃
測試計劃包括定義測試選擇標準和指標。這提供了對測試用例規範的形式化制定,以及指導可行測試套件的對映等。
測試設計
測試設計是指使用前面的測試選擇標準對測試用例進行形式化。
測試生成
這需要建立儘可能多的測試。
離線
搜尋演算法
測試格式是預先確定的。
線上
行走或尋光演算法
在執行上一步並收到輸出值後,確定下一步。
演算法必須快速。
測試執行
執行測試並查詢當前輸出和預期輸出之間的差異。
進化演算法
進化演算法中使用的所有概念都是選擇、繁殖和變異。
我們將在本文中介紹三種不同的進化演算法:
遺傳演算法
進化規劃
進化策略
基於遺傳資訊的演算法 (GA)
遺傳演算法屬於進化計算,而進化計算屬於人工智慧。
遺傳演算法基於達爾文的進化論。也可以說,透過遺傳演算法解決的問題的答案已經進化了。
我們在遺傳演算法中使用來自自然選擇的四個關鍵概念:基因、染色體(個體)、種群和自然選擇。
自然選擇包括以下步驟:
將選擇種群中最適合的個體。
個體將擁有繼承其父母特徵的後代。
後代將包含在下一代中。
更適合的父母的後代將勝過他們的父母,並且有更高的生存機會。
這是一個迭代過程,將產生最適合的個體的一代。
描述遺傳演算法最簡單的方法是想象我們有一個要解決的問題,並且我們可以檢查該問題的解決方案集合。我們將不得不使用進化論和自然選擇來找到該問題的最佳答案。
遺傳演算法中使用以下術語:
**初始種群:**問題從當前問題的潛在解決方案(個體)集合開始。種群由一定數量的個體組成。每個人都是我們試圖解決的問題的潛在解決方案。一組引數構成一個個體(變數)。這些特性被稱為基因。基因連線成一個字串形成染色體(解決方案/個體)。二進位制值(1 和 0 的字串)通常用於對染色體中的基因進行編碼。
**適應度函式:**確定個體與其他個體競爭的能力。基於適應度函式,我們將為每個個體(染色體/解決方案)計算適應度分數。適應度分數決定了個體被選中進行繁殖的可能性。
**選擇:**將選擇最適合的個體,並將它們的基因傳遞給下一代。它是如何工作的?根據它們的適應度分數,演算法將選擇兩對個體(父母)。將選擇具有高適應度水平的個體進行繁殖。有很多選擇演算法。
**交叉(重組):**這是遺傳演算法最重要的階段。交叉有多種形式。通常,從要交配的每對父母的基因中隨機選擇一個交叉點,以產生新的後代並將它們插入種群。因此,這兩個父母將有兩個孩子。
**變異:**這是一種遺傳運算元,以較低的隨機頻率應用於產生的一部分新的後代。這意味著位字串中的位數經常被交換。
**終止:**如果種群沒有產生與前一代明顯不同的後代,則演算法將終止。現在我們可以說遺傳演算法已經為我們的問題生成了一組解決方案。
基於模型的測試和遺傳演算法
瞭解如何將遺傳演算法應用於基於模型的測試是本文最重要的部分。讓我們來看一下遺傳演算法在基於模型的測試中的兩種用途。
我們現在正在使用遺傳演算法中的所有術語,並演示它們如何在 GA 的各種基於模型的測試應用程式中使用。
使用 GA 從 UML 狀態圖模型生成測試資料基於模型的測試可以從被測應用程式的 UML(統一建模語言)模型表示中生成測試用例和可執行測試指令碼。使用統一建模語言 (UML) 狀態圖,可以使用遺傳演算法生成測試資料。
使用 UML 狀態圖時,請記住以下術語:
狀態圖(狀態圖)用於表示任何複雜特徵或描述完整系統、子系統甚至系統內單個專案的動態行為。
在編碼之前,基於模型的測試用於從 UML 狀態圖中提取測試用例。因此,我們可以為任何程式規範建立測試套件。規範通常以 UML 圖或形式語言規範的形式出現。
觸發器類似於事件,它啟動從一種狀態到另一種狀態的轉換。
保護條件是一個布林條件,在轉換髮生之前必須滿足該條件。
轉換髮生時發生的動作(活動)被稱為影響。
如前所述,為了使用遺傳演算法,我們必須首先建立初始人群(染色體)。這個初始種群將是我們挑戰的解決方案集合。
基於模型的測試挑戰 −
在任何公司部署MBT顯然需要大量的資金和工作。
學習曲線會更長,模型也更難理解。
基於模型的測試的優勢 −
MBT具有以下優點 −
簡單的測試用例/套件維護
節省成本,提高測試覆蓋率
可以在n臺計算機上執行各種測試
早期缺陷識別
缺陷數量增加(此條可能與上下文不符,建議修改為更正面的說法,例如:更有效的缺陷發現)
節省時間
提高測試人員的工作滿意度
結論
在測試過程中,測試人員無論如何都會建立心智模型。這些心智模型可以轉換成紙質模型。這有助於提高測試人員的可讀性和可重用性。
基於模型的測試是一種相對較新的軟體測試方法。下圖描述了軟體測試的演變過程 −