天天看點

【測試】通過狀态機梳理業務流程的測試點1)什麼是狀态機?2)執行個體訓練

文章目錄

  • 1)什麼是狀态機?
    • 1.1 四個要素
      • 狀态(state):
      • 事件(event):
      • 動作(Action):
      • 變換(transaction):
    • *狀态機圖VS業務流程圖
      • 1、概念上的差別
      • 2、節點内容的差別
      • 3、關注點的差別
      • 4、适用場景的差別
    • 1.2 應用
      • 【舉例】自動售貨機
    • 1.3 畫圖
      • 要素的表示:
      • 要素的命名:
      • 設計:
  • 2)執行個體訓練
    • 2.1 外賣訂單的簡單狀态機圖
    • 2.2 電商訂單狀态圖
      • 測試點梳理:

1)什麼是狀态機?

狀态機(State Machine)是有限狀态自動機的簡稱,是現實事物運作規則抽象而成的一個數學模型。

簡單來說,狀态機其實就是狀态轉換圖,可以很清晰地表達整個狀态的流轉。

  • 如果流程圍繞某個事物的狀态變化進行,就該用到狀态機圖。
  • 一個狀态機圖中隻描述一個事物,該事物有多個狀态,不同的動作作用到狀态上導緻狀态的轉換。
從PM的角度:狀态機用來表示業務實體的全部狀态以及互相間如何轉移。
  • 其中,業務實體是指客觀上可以互相區分的事物,比如訂單、優惠券、商品、活動……

1.1 四個要素

  • 狀态(state):

    一個狀态機至少要包含兩個狀态。
    • 例如,自動門有 open 和 closed 兩個狀态。
  • 事件(event):

    事件就是執行某個操作的觸發條件或者密碼。
    • 例如,對于自動門,“按下開門按鈕”就是一個事件。
  • 動作(Action):

    事件發生以後要執行動作。
    • 例如事件是“按開門按鈕”,動作是“開門”。
    • 程式設計的時候,一個 Action 一般就對應一個函數。
  • 變換(transaction):

    從一個狀态變化為另一個狀态。
    • 例如,“開門過程”就是一個變換。
從PM的角度:狀态機可歸納為4個要素,即現态、條件、動作、次态。
  • 現态:是指目前所處的狀态。
  • 條件:又稱為“事件”。
    • 當一個條件被滿足,将會觸發一個動作,或者執行一次狀态的遷移。
  • 動作:條件滿足後執行的動作,動作執行完畢後,可以遷移到新的狀态,也可以仍舊保持原狀态。
    • 動作不是必需的,當條件滿足後,也可以不執行任何動作,直接遷移到新狀态。
  • 次态:條件滿足後要遷往的新狀态。
    • “次态”是相對于“現态”而言的,“次态”一旦被激活,就轉變成新的“現态”了。
這樣的歸納,主要是出于對狀态機的内在因果關系的考慮。
  • “現态”和“條件”是因
  • “動作”和“次态”是果

*狀态機圖VS業務流程圖

1、概念上的差別

  • 流程圖:用于表示完成某件事情中的各個活動過程。
    • 其中最重要的部分是處理(process)單元。
  • 狀态圖:描述一個特定對象的所有可能狀态,以及由于各種事件的發生而引起的狀态之間的轉移。
    • 其最主要的就是程式目前的狀态,每一個狀态總結記錄程式由開始到目前所有接到的輸入。

2、節點内容的差別

  • 流程圖的節點為動作,狀态機的節點為狀态。

3、關注點的差別

  • 流程圖更在意動作是如何完成的,狀态圖更重視動作的完成,相較不在意是哪一個程式完成的。
    • 是以,當狀态圖中某一個狀态下少考慮了哪一個輸入事件,我們可以很快地檢查出來,但如果在流程圖上,我們就無法分辨了。

4、适用場景的差別

  • 是以,狀态圖比較适合對象導向的程式,流程圖則比較适合描述程式導向或是資料處理的程式。

1.2 應用

可以應用到各個層面上,例如硬體設計,編譯器設計,以及程式設計實作各種具體業務邏輯的時候。

【舉例】自動售貨機

做一下簡化,假設這是一台隻賣2元一瓶的汽水的售貨機,隻接受五毛和一塊的硬币。
  • 初始狀态是”未付款“,中間狀态有”已付款5毛“,”已付款1塊“,”已付款1.5塊“,”已足額付款“,四個狀态。
  • 狀态切換的觸發條件是”投一塊硬币“和”投5毛硬币“兩種,”到達足額付款“狀态。
  • 還要進行餘額清零和彈出汽水操作。
是以如果畫出一張完整的狀态轉換圖,也會是比較複雜的一張圖了。
  • 而實際中的售貨機對應的狀态機就會更加複雜了。

1.3 畫圖

要素的表示:

  • 開始:一般用實心黑圓點表示,代表狀态圖的起始位置。
  • 結尾:一般用實心黑圓點外包一個圓圈表示,是一個狀态的終止點。
  • 狀态:使用圓角矩形表示。
  • 條件:使用有向線條上的文字表示,比如系統怎麼樣,或者使用者執行xx動作。
  • 狀态遷移:用有向線條表示。
【測試】通過狀态機梳理業務流程的測試點1)什麼是狀态機?2)執行個體訓練

要素的命名:

  • 狀态:建議以”已+動詞”的結構來命名,比如已付款、已發貨。
  • 條件:建議以”動作+結果”的動賓結構或者”表達式”來命名,以明确狀态遷移的具體條件。
    • 比如支付失敗、下單時間>72小時。
  • 注意命名一般站在使用者立場,盡量命名标準化。

設計:

  • 了解業務實體有多少種狀态
    • 不需要的狀态盡量去除
    • 注意不要遺漏狀态
    • 明确隻有一個初始狀态,終止狀态可能有多個
  • 考慮每一個狀态因為什麼條件而變化
    • 合理實作各個狀态之間的切換
  • 将狀态和狀态之間用條件有向連接配接
  • 形成狀态機圖
    • 友善擴充,狀态有可能會增加,有可能會有子狀态機
注意:不要搞混動作和狀态的差別,命名本身就不一樣。而本質上動作是不穩定的,一旦執行完畢就結束了;而狀态是穩定的,隻要沒有外部條件觸發。

2)執行個體訓練

2.1 外賣訂單的簡單狀态機圖

外賣app為例:制作了一個訂單的簡單的狀态機圖,以訂單的狀态變更推動。

1、确定包含哪些狀态:

  • 待付款
  • 訂單關閉
  • 待接單
  • 待配送
  • 待評價
  • 待退款

2、相關的條件:

  • 付款
  • 逾時
  • 取消
  • 商家接單與否
  • 配送成功與否
  • 退款成功與否
【測試】通過狀态機梳理業務流程的測試點1)什麼是狀态機?2)執行個體訓練

2.2 電商訂單狀态圖

1、狀态:

  • 待付款
  • 已付款
  • 訂單關閉
  • 待發貨
  • 待收貨
  • 申請退貨
  • 待退款
  • 待評價

2、條件:

  • 是否付款
  • 是否發貨
  • 是否退貨
  • 退款成功與否
  • 退貨同意與否
【測試】通過狀态機梳理業務流程的測試點1)什麼是狀态機?2)執行個體訓練

測試點梳理:

1、正常場景:

  • 選擇商品建立訂單,訂單狀态更改為:待付款狀态
  • 待付款訂單進行支付,訂單狀态更改為:待發貨狀态
  • 背景選擇待發貨狀态的訂單填寫快遞公司、快遞單号進行發貨,訂單狀态更改為:待收貨狀态
  • 前台點選确認收貨,訂單狀态更改為:待評價狀态
  • 前台送出評價,訂單狀态更改為:已完成狀态

2、異常場景:

  • 待支付的訂單超過三天未支付,訂單狀态更改為:已取消狀态
  • 待支付狀态的訂單背景操作取消訂單,訂單狀态更改為:已取消狀态
  • 待支付狀态的訂單前台操作取消訂單,訂單狀态更改為:已取消狀态
  • 待支付狀态的訂單前台修改訂單資訊,修改成功
  • 待支付狀态的訂單背景修改訂單資訊,修改成功
  • 待發貨狀态的訂單背景操作取消訂單,訂單狀态更改為:待退款狀态
  • 待發貨狀态的訂單前台操作取消訂單,訂單狀态更改為:待退款狀态
  • 待發貨狀态的訂單前台修改訂單資訊,修改成功
  • 待發貨狀态的訂單背景修改訂單資訊,修改成功
  • 待收貨狀态的訂單超過15天未确認收貨,訂單狀态更改為:待評價狀态
  • 待評價的訂單超過七天未評價,預設好評,訂單狀态更改為:已完成狀态
  • 待收貨狀态的訂單操作退還貨,生成退還貨單
  • 待評價狀态的訂單操作退還貨,生成退還貨單

3、安全性:訂單資訊的篡改等

4、相容性:web、app

5、性能:

  • 多使用者并發下單
  • 送出訂單、取消訂單、申請退款、申請退貨的響應時間

6、可靠性:

  • 多使用者長時間運作多次送出訂單等功能

7、子產品關聯:

  • 優惠券
  • 庫存
  • 物流
  • 第三方平台支付

【部分内容參考自】

  • 什麼是狀态機?:https://zhuanlan.zhihu.com/p/47434856
  • 流程圖、順序圖、狀态圖他們三者分别解決什麼樣的問題?:https://www.zhihu.com/question/23356888
  • 如何繪畫狀态機來描述業務的變化:http://www.woshipm.com/pd/594751.html?winzoom=1
  • 電商項目訂單狀态變更的測試點:https://blog.csdn.net/qq_33180069/article/details/113338577