1 引言
前面幾篇文章為我們講述了因果圖、判定表、正交試驗等幾種方法,主要是針對於不同條件輸入輸出的組合進行測試,但在實際需求中,我們也常會遇到需要對被測物件的狀態流轉進行驗證的情況,此時前面幾種方法將不再適用,對於這種狀態轉換類問題,功能圖法則可大展身手。
2 概念及原理
2.1 基本概念
功能圖:也稱狀態圖法,該方法是一種專門解決動態說明問題的測試用例設計方法 ,主要由狀態遷移圖和邏輯功能模型兩部分構成。
2.1.1 狀態遷移圖
用於描述一個特定物件生命期中滿足某些條件的所有狀態,以及由於各種事件的發生而引起的狀態之間的轉移。關於狀態遷移圖,有如下幾點需要注意:
1)一個狀態遷移圖中包含如下幾種狀態:
2)在一張狀態圖中只能有一個初態,而終態則可以有0至多個。
3)狀態圖既可以表示單程生命週期,也可以表示系統迴圈執行過程。
2.1.2 邏輯功能模型
用於描述靜態說明,表示在狀態中輸入條件和輸出條件之間的對應關係。
2.2 核心思想
功能圖法的核心思想在於:抽象出待測系統的若干狀態以及狀態之間的轉換條件和轉換路徑,然後從狀態遷移路徑覆蓋的角度設計測試用例。
3 方法步驟
1)分析需求,明確狀態節點,具體關注以下幾個資訊
2)梳理不同狀態的轉換,輸出狀態-條件表;
3)畫出狀態遷移圖;
4)轉換為狀態遷移樹;
結合廣度優先遍歷+深度優先遍歷演算法,遍歷狀態遷移圖的每一條路徑,得到狀態遷移樹。
5)從狀態遷移樹匯出測試路徑。
狀態遷移樹中根節點到每個葉子節點的路徑即為一條測試用例。
4 舉個例子
場景:針對客服系統事件狀態流轉過程設計測試用例
1)分析客服事件可能存在的所有狀態。
2)梳理狀態之間的轉換關係和觸發條件,得到狀態-條件表。
當前狀態 | 下一個狀態 | 狀態轉換條件 |
已建立/待分配 | 已分派 | ①系統自動分派②手動領取 |
已分派 | 處理中 | ①客服操作事件/事件有更新 |
已建立/待分配 | 處理中 | ①事件轉移 |
已建立/待分配 | 已解決 | ①系統解決事件(如小程式-使用者取消服務) |
已建立/待分配 | 已關閉 | ①mq觸發關閉(如上游取消異常) |
處理中 | 已解決 | ①客服手動解決事件②系統自動解決事件 |
已解決 | 已關閉 | ①歸檔 |
已解決 | 再次開啟 | ①手動reopen②系統觸發reopen |
處理中 | 升級待分派 | ①客服升級事件 |
處理中 | 已關閉 | ①合併 |
升級待分派 | 已分派 | ①系統自動分派②手動領取 |
升級待分派 | 處理中 | ①事件轉移 |
再次開啟 | 升級待分派 | ①客服升級事件 |
再次開啟 | 已解決 | ①客服手動解決事件②系統自動解決事件 |
- | 已建立/待分配 | ①fxm/小程式等生成事件 |
- | 已分派 | ①客服手動建立②電話/咚咚等方式進線 |
- | 升級待分派 | ①系統升級事件(如郵政投訴事件) |
3)根據狀態-條件表,畫出功能圖/狀態圖。
4)根據功能圖輸出狀態遷移樹。
5)輸出測試用例,下表舉例輸出前5條,其餘類似不做贅述。
用例編號 | 測試項 | 標題 | 預置條件 | 操作步驟 | 預期結果 |
Test_01 | 改變事件狀態 | 事件狀態轉變:【已建立/待分配】--【已分派】--【處理中】--【已解決】--【已關閉】 | 可正常操作事件 | 1、透過fxm渠道進線生成事件;2、客服手動領取事件;3、客服操作更新事件資訊;4、客服點選解決事件;5、事件15天無操作,系統歸檔事件。 | 事件狀態轉變為:【已建立/待分配】--【已分派】--【處理中】--【已解決】--【已關閉】 |
Test_02 | 改變事件狀態 | 事件狀態轉變:【已建立/待分配】--【已分派】--【處理中】--【已解決】--【再次開啟】--【已解決】--【已關閉】 | 可正常操作事件 | 1、透過fxm渠道進線生成事件;2、客服手動領取事件;3、客服操作更新事件資訊;4、客服點選解決事件;5、客服reopen事件;6、客服點選解決事件;7、事件15天無操作,系統歸檔事件。 | 事件狀態轉變為:【已建立/待分配】--【已分派】--【處理中】--【已解決】--【再次開啟】--【已解決】--【已關閉】 |
Test_03 | 改變事件狀態 | 事件狀態轉變:【已建立/待分配】--【已分派】--【處理中】--【已解決】--【再次開啟】--【升級待分派】--【已分派】--【處理中】--【已解決】--【已關閉】 | 可正常操作事件 | 1、透過fxm渠道進線生成事件;2、客服手動領取事件;3、客服操作更新事件資訊;4、客服點選解決事件;5、客服reopen事件;6、客服點選升級事件;7、事件分派至其他客服;8、客服操作更新事件資訊;9、客服解決事件;10、事件15天無操作,系統歸檔事件。 | 事件狀態轉變為:【已建立/待分配】--【已分派】--【處理中】--【已解決】--【再次開啟】--【升級待分派】--【已分派】--【處理中】--【已解決】--【已關閉】 |
Test_04 | 改變事件狀態 | 事件狀態轉變:【已建立/待分配】--【已分派】--【處理中】--【已解決】--【再次開啟】--【升級待分派】--【處理中】--【已解決】--【已關閉】 | 可正常操作事件 | 1、透過fxm渠道進線生成事件;2、客服手動領取事件;3、客服操作更新事件資訊;4、客服點選解決事件;5、客服reopen事件;6、客服點選升級事件;7、主管轉移事件;8、客服處理並解決事件;9、事件15天無操作,系統歸檔事件。 | 事件狀態轉變為:【已建立/待分配】--【已分派】--【處理中】--【已解決】--【再次開啟】--【升級待分派】--【處理中】--【已解決】--【已關閉】 |
Test_05 | 改變事件狀態 | 事件狀態轉變:【已建立/待分配】--【已分派】--【處理中】--【升級待分派】--【已分派】--【處理中】--【已解決】--【已關閉】 | 可正常操作事件 | 1、透過fxm渠道進線生成事件;2、客服手動領取事件;3、客服操作更新事件資訊;4、客服點選升級事件;5、事件分派至其他客服;6、客服操作更新事件資訊;7、客服解決事件;8、事件15天無操作,系統歸檔事件。 | 事件狀態轉變為:【已建立/待分配】--【已分派】--【處理中】--【升級待分派】--【已分派】--【處理中】--【已解決】--【已關閉】 |
... | ... | ... | ... | ... | ... |
5 總結
功能圖/狀態圖方法 | |
適用場景 | 1、由於某種條件成立導致發生狀態改變的情況。2、主要關注狀態轉移的正確性。 |
優點 | 1、透過狀態圖可以清晰掌握系統的整個互動過程;2、可保證每一個狀態的所有可達狀態都覆蓋到;3、透過驗證給定條件內是否能夠產生需要的狀態變化,可檢驗出是否存在不可達的狀態、不必要的狀態或其他非法狀態,以及非法的狀態遷移。 |
缺點 | 針對有效輸入輸出進行設計,所以無法覆蓋無效路徑和非法輸入。 |
注意事項 | 1、每種狀態至少需要訪問一次;2、重點測試最常見、最普遍的狀態轉換;3、其次測試最不常用的狀態轉換路徑;4、單個狀態之間的轉換可透過結合其他用例設計方法保證覆蓋全面;5、新增非法測試路徑進行測試。(異常輸入、狀態和條件的非法組合) |
透過本節講述的功能圖測試用例設計方法,我們可以輕鬆設計存在物件狀態轉移變換需求的測試用例,從而清楚的掌握整個系統的互動過程,但如果我們面對的需求中更多描述複雜的業務處理流程,我們又該使用哪種方法呢?一起看看下一節的場景法吧~
作者:京東物流 陳雨婷
來源:京東雲開發者社群 自猿其說Tech 轉載請註明來源