文章目錄
- 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動作。
- 狀态遷移:用有向線條表示。
要素的命名:
- 狀态:建議以”已+動詞”的結構來命名,比如已付款、已發貨。
- 條件:建議以”動作+結果”的動賓結構或者”表達式”來命名,以明确狀态遷移的具體條件。
- 比如支付失敗、下單時間>72小時。
- 注意命名一般站在使用者立場,盡量命名标準化。
設計:
- 了解業務實體有多少種狀态
- 不需要的狀态盡量去除
- 注意不要遺漏狀态
- 明确隻有一個初始狀态,終止狀态可能有多個
- 考慮每一個狀态因為什麼條件而變化
- 合理實作各個狀态之間的切換
- 将狀态和狀态之間用條件有向連接配接
- 形成狀态機圖
- 友善擴充,狀态有可能會增加,有可能會有子狀态機
注意:不要搞混動作和狀态的差別,命名本身就不一樣。而本質上動作是不穩定的,一旦執行完畢就結束了;而狀态是穩定的,隻要沒有外部條件觸發。
2)執行個體訓練
2.1 外賣訂單的簡單狀态機圖
外賣app為例:制作了一個訂單的簡單的狀态機圖,以訂單的狀态變更推動。
1、确定包含哪些狀态:
- 待付款
- 訂單關閉
- 待接單
- 待配送
- 待評價
- 待退款
2、相關的條件:
- 付款
- 逾時
- 取消
- 商家接單與否
- 配送成功與否
- 退款成功與否
2.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