測試用例設計方法六脈神劍——第四劍:石破天驚,功能圖法攻陣

京東雲技術團隊發表於2023-12-14

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 轉載請註明來源

相關文章