高階測試工程師必會之狀態遷移法?
1、概念
狀態遷移法主要關注在測試狀態轉移的正確性上面。對於一個有限狀態機,通過測試驗證其在給定的條件內是否能夠產生需要的狀態變化,有沒有不可達的狀態和非法的狀態,是否可能產生非法的狀態轉移等。通過構造能導致狀態遷移的事件,來測試狀態之間的轉換。
2、 應用範圍
狀態遷移法的思想是提供將多個狀態的轉換串起來進行測試的思路。該方法適合功能的狀態比較多的情況下,需測試各種狀態的轉換,且這些狀態轉換的測試在實際工作中容易被遺漏。比如播放器、遙控按鍵等。
3、狀態遷移法的步驟
- 分析需求,整理所有狀態;
- 畫出狀態遷移圖;
- 列出狀態-事件表;
- 得到狀態轉換樹(測試路徑);
- 根據狀態轉換樹得到測試用例
4、案例:
需求:通過某購票系統,顧客可以提前購買火車票,去到某地。
-
使用者登入購票系統,選擇出發地、目的地、出發日期,選擇某趟車次點選”預定“,且填好訂票人資訊,點選提交訂單;當前訂單狀態為”未支付“;
使用者手動取消訂單,車票狀態更新為“已取消”;
45 分鐘內未支付,訂單自動取消,車票狀態為“已取消”;
-
使用者支付車票,車票狀態變為“已支付”;
-
使用者到達車站通過自動取票機或售票視窗取票,車票狀態為“已出票”;
-
在開車半小時前,可進行改簽,改簽成功,車票狀態為“改簽成功”;
-
已出票/已改簽的車票檢票登上火車後,車票狀態變為“已使用”;
-
在開車半小時前,可進行退票,退票成功,車票狀態為“退票成功”。
a、整理車票訂單的所有狀態:
未支付、已取消、已支付、已出票、退票成功、改簽成功、已使用
b、畫出狀態遷移圖:
c、列出狀態-事件表:
此項不是必須項,可依據實際情況跳過該步驟,直接得到狀態轉換樹;
d、得到狀態轉換樹(測試路徑):
通過以上得到測試路徑:
- 未支付--> 已取消
- 未支付--> 已支付--> 已出票--> 改簽成功--> 退票成功
- 未支付--> 已支付--> 已出票--> 改簽成功--> 已使用
- 未支付--> 已支付--> 已出票--> 退票成功
- 未支付--> 已支付--> 已出票--> 已使用
- 未支付--> 已支付--> 改簽成功--> 退票成功
- 未支付--> 已支付--> 改簽成功--> 已使用
- 未支付--> 已支付--> 退票成功
- 未支付--> 已支付--> 已使用
e、根據狀態轉換樹得到測試用例
以上每條測試路徑則為 1 條測試用例,把每條路徑進行覆蓋測試即可。對於狀態轉換有存在多個事件觸發,覆蓋多個事件的操作,比如“未支付--> 已取消”這條測試路徑,需要測試 2 種情況:1)使用者手動取消車票訂單 2)超過 45 分鐘使用者未支付,自動取消車票訂單
5、總結
實際工作中,對於業務流程複雜的產品,不能很好地通過場景覆蓋的方法進行用例設計時,可應用狀態遷移法的思路,從業務的各種狀態出發,並通過這些狀態之間的切換條件串聯起來進行測試覆蓋,以此保證用例的高覆蓋率。