1. 程式人生 > 其它 >高階測試工程師必會之狀態遷移法?

高階測試工程師必會之狀態遷移法?

1、概念

狀態遷移法主要關注在測試狀態轉移的正確性上面。對於一個有限狀態機,通過測試驗證其在給定的條件內是否能夠產生需要的狀態變化,有沒有不可達的狀態和非法的狀態,是否可能產生非法的狀態轉移等。通過構造能導致狀態遷移的事件,來測試狀態之間的轉換。

2、 應用範圍

狀態遷移法的思想是提供將多個狀態的轉換串起來進行測試的思路。該方法適合功能的狀態比較多的情況下,需測試各種狀態的轉換,且這些狀態轉換的測試在實際工作中容易被遺漏。比如播放器、遙控按鍵等。

3、狀態遷移法的步驟

  1. 分析需求,整理所有狀態;
  2. 畫出狀態遷移圖;
  3. 列出狀態-事件表;
  4. 得到狀態轉換樹(測試路徑);
  5. 根據狀態轉換樹得到測試用例

4、案例:

需求:通過某購票系統,顧客可以提前購買火車票,去到某地。

  1. 使用者登入購票系統,選擇出發地、目的地、出發日期,選擇某趟車次點選”預定“,且填好訂票人資訊,點選提交訂單;當前訂單狀態為”未支付“;

    使用者手動取消訂單,車票狀態更新為“已取消”;

    45 分鐘內未支付,訂單自動取消,車票狀態為“已取消”;

  2. 使用者支付車票,車票狀態變為“已支付”;

  3. 使用者到達車站通過自動取票機或售票視窗取票,車票狀態為“已出票”;

  4. 在開車半小時前,可進行改簽,改簽成功,車票狀態為“改簽成功”;

  5. 已出票/已改簽的車票檢票登上火車後,車票狀態變為“已使用”;

  6. 在開車半小時前,可進行退票,退票成功,車票狀態為“退票成功”。

a、整理車票訂單的所有狀態:

未支付、已取消、已支付、已出票、退票成功、改簽成功、已使用

b、畫出狀態遷移圖:

c、列出狀態-事件表:

此項不是必須項,可依據實際情況跳過該步驟,直接得到狀態轉換樹;

d、得到狀態轉換樹(測試路徑):

通過以上得到測試路徑:

  1. 未支付--> 已取消
  2. 未支付--> 已支付--> 已出票--> 改簽成功--> 退票成功
  3. 未支付--> 已支付--> 已出票--> 改簽成功--> 已使用
  4. 未支付--> 已支付--> 已出票--> 退票成功
  5. 未支付--> 已支付--> 已出票--> 已使用
  6. 未支付--> 已支付--> 改簽成功--> 退票成功
  7. 未支付--> 已支付--> 改簽成功--> 已使用
  8. 未支付--> 已支付--> 退票成功
  9. 未支付--> 已支付--> 已使用

e、根據狀態轉換樹得到測試用例

以上每條測試路徑則為 1 條測試用例,把每條路徑進行覆蓋測試即可。對於狀態轉換有存在多個事件觸發,覆蓋多個事件的操作,比如“未支付--> 已取消”這條測試路徑,需要測試 2 種情況:1)使用者手動取消車票訂單 2)超過 45 分鐘使用者未支付,自動取消車票訂單

5、總結

實際工作中,對於業務流程複雜的產品,不能很好地通過場景覆蓋的方法進行用例設計時,可應用狀態遷移法的思路,從業務的各種狀態出發,並通過這些狀態之間的切換條件串聯起來進行測試覆蓋,以此保證用例的高覆蓋率。