產品經理不得不知的——有限狀態機

2021-01-14 人人都是產品經理

編輯導讀:狀態機可以對業務狀態進行梳理,一目了然,之後可以根據業務場景不斷增加。它雖然不是做好一款產品的必備品,但是卻可以讓你在跟技術等人員溝通時效率更高。文章對有限狀態機進行了簡要的介紹,與大家分享。

一、地址的分析和識別

以前每次搬家,要重新寫收貨地址時,我都會特別小心,要去百度地圖上搜一下地址的完整寫法,生怕一不小心寫錯或寫漏了就收不到包裹了(捂臉)。直到某天我看到有限狀態機的原理,才知道我太天真了。

比如騰訊公司在深圳的地址,有如下的各種寫法:

廣東省深圳市騰訊大廈廣東省518075深圳市南山區科技園騰訊大廈深圳市510875科技園騰訊大廈深圳市南山區科技園騰訊大廈廣東省深圳市科技園中一路騰訊公司…這些地址寫得都有點不清楚,那麼程序是如何準確地識別這些信息呢?下圖所示的是一個識別中國地址有限狀態機的例子。

每一個有限狀態機都有一個開始狀態和一個終止狀態,以及若干中間狀態。每一條弧上帶有從一個狀態進入下一個狀態的條件。如果一個地址能從狀態機的開始狀態進過狀態機的若干中間狀態,走到終止狀態,那麼這條地址有效,否則無效。

比如「北京市雙清路83號」對於上面的狀態機有效,而「上海市遼寧省馬家莊」則無效。

二、什麼是有限狀態機

有限狀態機(Finite-state machine)是一個非常有用的模型,可以模擬世界上大部分事物。

它有三個特徵:

狀態總數(state)是有限的。任一時刻,只處在一種狀態之中。某種條件下,會從一種狀態轉變(transition)到另一種狀態。現實世界中存在大量具有有限個狀態的系統:鐘錶系統、電梯系統、交通信號燈系統、通信協議系統、正則表達式、硬體電路系統設計、軟體工程,編譯器等,有限狀態機的概念就是來自於現實世界中的這些有限系統。

下面是一個可樂機的狀態圖。

從圖中就可以清楚地看到可樂機的運行過程,圖中直觀地表現了可樂機投入不同金額硬幣時的情況以及幾個處理步驟的各個狀態和它們之間的轉換關係,根據投入硬幣的不同面值,對總金額進行計算,並對各種操作進行響應以完成一次購買。 狀態機的動態結構使得其在通訊系統,數字協議處理系統,控制系統,用戶界面等領域得到了廣泛地應用。

上圖是非常有名的TCP協議狀態機。這個狀態機我沒看懂,放在這裡拋磚引玉吧。

三、有限狀態機的應用

有限狀態機有多種實現方式

1. switch-case或if-else

舉例來說,網頁上有一個菜單元素。滑鼠懸停的時候,菜單顯示;滑鼠移開的時候,菜單隱藏。如果使用有限狀態機描述,就是這個菜單只有兩種狀態(顯示和隱藏),滑鼠會引發狀態轉變。

當狀態量少並且各個狀態之間變化的邏輯比較簡單時,使用switch語句實現的有限狀態機的確能夠很好地工作,但代碼的可讀性並不十分理想。在很長一段時期內,使用switch語句一直是實現有限狀態機的唯一方法,甚至像編譯器這樣複雜的軟體系統,大部分也都直接採用這種實現方式。

但之後隨著狀態機應用的逐漸深入,構造出來的狀態機越來越複雜,這種方法也開始面臨各種嚴峻的考驗,其中最令人頭痛的是如果狀態機中的狀態非常多,或者狀態之間的轉換關係異常複雜,那麼簡單地使用switch語句構造出來的狀態機將難以擴展和維護。

2. 狀態表

我們還可以用狀態表來表示狀態的轉化過程,以一個遊戲中的簡單設定為例:

這段需求相信大家一眼就可以看明白,現在我們用狀態機來表示,大概是這樣:

看完這個圖,是不是有種似曾相識的感覺。產品經理在做複雜的業務需求時,往往會遇到狀態的變更,一般我們會畫流程圖來表示(比如一個審核流程),偶爾也會用表格的形式來表示(比如內容平臺的發布流程)。

但是我們在做的時候往往沒有考慮過有限狀態機的這種表述方式,或者說考慮得不夠全面,如果用有限狀態機的這種方式,那就是可以直接供測試人員使用的一個測試用例了,想想測試同學雀躍的心情吧。

四、總結

狀態機表示有限個狀態以及在這些狀態之間的轉移和動作等行為的數學模型。

通俗的描述狀態機就是定義了一套狀態変更的流程:狀態機包含一個狀態集合,定義當狀態機處於某一個狀態的時候它所能接收的事件以及可執行的行為,執行完成後,狀態機所處的狀態。

狀態機主要的應用場景就是流程控制。一個狀態機定義以後,在某個狀態下就只接收固定的Event,也就是執行指定的操作,這樣流程就能按照預期定義的那樣流轉,不會出現亂入的情況,執行了一些在某狀態下不允許執行的操作。

一個很典型的應用就是工作流引擎:以工作流中典型的審批流程為例,審批流程按照預先定義的流程流轉的固定的某些人手裡,只有這一批固定的人才能審批,當審批後(可能是一個人審批,也可能是多個人審批)才會流轉到下個節點,由下個節點的審批人繼續審批,一直流轉到最後一個節點。

狀態機的流轉可以人工幹預,也可以自動流轉。定義為自動流轉後,把業務流程定義完成後,只要添加一個定時任務,整個流程的運轉就都由狀態機來完成了。

寫到這,只想說一句話,無處不狀態機!

本文由 @CARRIE 原創發布於人人都是產品經理。未經許可,禁止轉載

題圖來自Unsplash,基於CC0協議

相關焦點

  • 有限狀態機的FPGA設計
    有限狀態機是一種常見的電路,由於時序電路和組合電路組成,設計有限狀態機的第一步是確定採用Moore狀態機還是採用Mealy狀態機。Mealy狀態機的狀態轉變不僅和當前狀態有關,而且和各輸入信號有關;Moore狀態機的轉變只和當前狀態有關。
  • 利用有限狀態機的交通燈控制系統設計與仿真
    1 有限狀態機的基本特性 有限狀態機FSM(finite state machine)由有限的狀態及其相互之間的轉移關係構成。從有限狀態機的角度看,許多數字系統中的時序電路都可以用其來描述,因此,有限狀態機是一種重要的、易於建立的、比較規範、以描述控制特性為主的建模方法,它可以應用於從系統分析到設計的所有階段。同時,因為有限狀態機具有有限個狀態,所以可以在實際的工程上實現。
  • 用STATECAD快速設計有限狀態機
    控制單元的實現方式有: 有限狀態機、控制寄存器和微代碼控制器等。有限狀態機在時間尺度上對其控制信號進行離散化控制, 利用狀態轉移使控制信號在有限狀態機的狀態節拍控制下變化, 以實現對被控對象的控制。有限狀態機設計的關鍵是如何把一個實際的時序邏輯關係抽象成一個時序邏輯函數,傳統的電路圖輸入法通過直接設計寄存器組來實現各個狀態之間的轉換, 而用硬體描述語言來描述有限狀態機, 往往是通過充分發揮硬體描述語言的抽象建模能力,通過對系統在系統級或寄存器傳輸級進行描述來建立有限狀態機。EDA 工具的快速發展,使通過CAD快速設計有限狀態機自動化成為可能。
  • 初學者對有限狀態機(FSM)的設計的認識
    有限狀態機(FSM)是一種常見的電路,由時序電路和組合電路組成。設計有限狀態機的第一步是確定採用Moore狀態機還是採用Mealy狀態機。(Mealy型:狀態的轉變不僅和當前狀態有關,而且跟各輸入信號有關;Moore型:狀態的轉變只和當前狀態有關)。
  • 如何繪畫狀態機來描述業務的變化
    然後我們不得不新增了一個中間狀態「已確認」,讓客服審核無誤後,再傳給網倉走發貨流程。再後來我們發現除了主業務-下單購物之外,還需要兼顧支線業務-退款退貨,此時不得不需要引入「退款中」狀態並且增加退款子狀態機、退貨子狀態機。以上這些我最開始是用文字描述,然後加上憑感覺畫的流程圖來表示,服務端RD很難理解,並且無法清楚所有狀態以及轉移條件,不得不多次反覆確認。
  • 基於VHDL的MTM總線主模塊有限狀態機設計
    摘要:為了能夠更簡潔嚴謹地描述MTM總線的主模塊有限狀態機的狀態轉換,同時減少FPGA晶片功耗,提高系統穩定性,文中在分析MTM總線結構和主模塊有限狀態機模型的基礎上,基於VHDL語言採用「單進程」式對該有限狀態機進行了設計,並在QuartusⅡ開發軟體中實現了對語言代碼的編譯及程序的時序仿真和功能仿真
  • 用VHDL設計有限狀態機的方法
    主要任務是設計控制器,而其控制功能可以用有限狀態機來實現。因而有必要深入探討有限狀態機的設計方法。本文引用地址:http://www.eepw.com.cn/article/150667.htm1 狀態機設計的一般方法  傳統的設計方法是首先繪製出控制器的狀態圖,並由此列出狀態表,再合併消除狀態表中的等價狀態項。在完成狀態寄存器的分配之後,根據狀態表求出次態及輸出方程,最後畫出設計原理圖。
  • 基於有限狀態機的飛行器自毀系統時序控制設計
    分析飛行器自毀系統工作原理,採用複雜可編程邏輯器件(CPLD)實現了飛行器自毀系統設計,結合CPLD的特點,提出一種基於改進型有限狀態機的飛行器自毀系統時序控制的設計方法,並在CPLD中予以實現。仿真及實驗表明,基於有限狀態機的飛行器自毀系統定時精度達到納秒級,可以有效地控制自毀信號輸出並消除毛刺現象,很好地滿足系統性能要求。該方法具有結構簡單緊湊、成本低、可靠性高、精度高等優點。
  • 如何以面向對象的思想設計有限狀態機
    狀態機的概念有限狀態機又稱有限狀態自動機,簡稱狀態機,是表示有限個狀態以及在這些狀態之間的轉移和動作等行為的數學計算模型,用英文縮寫也被簡稱為 FSM。FSM 會響應「事件」而改變狀態,當事件發生時,就會調用一個函數,而且 FSM 會執行動作產生輸出,所執行的動作會因為當前系統的狀態和輸入的事件不同而不同。
  • 基於FPGA與有限狀態機的高精度測角系統的設計與實
    本文介紹的有限狀態機方法,在FPGA上可以有效消除抖動引起的計數幹擾,提高計數的精度[1]。1 方案設計1.1 系統組成雷射跟蹤測量系統的核心處理模塊主要由ARM處理器,FPGA組成。2 理論分析與算法2.1 有限狀態機原理在編碼器的一個輸出周期內
  • Verilog HDL設計進階:有限狀態機的設計原理及其代
    由於寄存器傳輸級(RTL)描述是以時序邏輯抽象所得到的有限狀態機為依據的,所以把一個時序邏輯抽象成一個同步有限狀態機是設計可綜合風格的Verilog HDL模塊的關鍵。在本章中我們將通過各種實例由淺入深地來介紹各種可綜合風格的Verilog HDL模塊,並把重點放在時序邏輯的可綜合有限狀態機的Verilog HDL設計要點。
  • Verilog HDL設計進階:有限狀態機的設計原理及其代碼風格
    由於寄存器傳輸級(RTL)描述是以時序邏輯抽象所得到的有限狀態機為依據的,所以把一個時序邏輯抽象成一個同步有限狀態機是設計可綜合風格的Verilog HDL模塊的關鍵。在本章中我們將通過各種實例由淺入深地來介紹各種可綜合風格的Verilog HDL模塊,並把重點放在時序邏輯的可綜合有限狀態機的Verilog HDL設計要點。
  • 簡單的狀態機入門!
    大家晚上好,今天給大家分享一個篇關於狀態機的學習。為啥突然會寫這個話題,因為今天要看文章和視頻學習的時候,突然看到了「狀態機」三個字,也突然讓我想起了,在剛入職一家公司的時候,看產品的原始碼畫出整個軟體框架流程圖來,現在我還清晰的記得當時公司產品裡面就有用到這個狀態機的用法,但是當時我剛接觸到這個東西,看了老半天那個源碼嗎,沒看懂,因為那時候第一次看那麼大的工程量代碼,說實話腦袋有點暈暈的,不是很習慣。
  • ST推出LIS3DSH內置2個有限狀態機的三軸高解析度加速度計
    打開APP ST推出LIS3DSH內置2個有限狀態機的三軸高解析度加速度計 愛好者 發表於 2011-11-07 23:33:20
  • 產品經理之熵減思維
    筆者讀完之後受益匪淺,回首自己的工作經歷和感悟,筆者覺得產品經理更需要熵減思維。那麼熵減思維是什麼?一句話簡單描述就是將事物由無序轉化為有序的過程,即抵抗熵增的思維方式。就像筆者在之前分享的《產品經理之「種子」挑選和栽培》、《破局:如何運用金字塔原理開啟產品設計思路》中都有提到,產品經理需要有將具象的事物進行抽象再具化的能力,這其實就是熵減思維。為更好地闡述該思維,筆者先簡單闡述一下熵增原理。
  • 掃盲貼 關於投影機你不得不知的四件事
    關於投影機你不得不知的事項——亮度流明  流明是光通量的單位。發光強度為1坎德拉(cd)的點光源,在單位立體角(1球面度)內發出的光通量為「1流明」。英文縮寫(lm)。40瓦的白熾燈220伏時,光通量為340流明。
  • 產品經理底層內核之——熵減思維
    一、產品經理的思維方式思維方式嚴格來說跟人的原生家庭、成長環境、所受教育強相關,屬於意識層面的東西,也是非常難以改變的。而產品思維方式更多偏向於為了解決產品工作中的問題,是可以培養鍛鍊的,很多的網際網路前輩闡述了自己對產品經理必備思維的理解,雖各有不同卻有共通之處。
  • 基於有限狀態機與消息隊列的第三方支付系統補單實踐
    0.引言在日常生活中,從線下的超市購物到線上的外賣點餐、電商網購等,支付無時無刻不在發生,不論是通過現金、pos機刷卡還是微信支付寶等第三方支付。線上支付有著及時便捷一氣呵成的極致體驗,當然也有少數的時候體驗不夠絲滑,比如早期我們在PC版12306買火車票,當支付完成後,訂單的支付狀態卻經常不能及時更新,會有一段時間的延遲,有時甚至會等待很長時間處在未支付狀態。
  • 創業公司產品經理浮沉圖鑑
    做產品不再像想像中的輕鬆瀟灑:一邊是產品各自搏殺的紅海市場,一邊是成長的焦慮滋生。內憂外患之下,產品經理如何立足?這篇文章,我們盤點了五個城市、五個不同行業的創業公司產品經理,從深圳、北京的漂泊一族,到鄭州、成都的奮鬥青年,他們的理想與現實的衝撞,他們的妥協與堅持,這裡的職場浮沉,產品故事,我們說給你聽:
  • 關於B端狀態流轉的思考
    狀態作為給用戶反饋結果的欄位,設計「狀態」部分時,產品經理要對狀態所對應的業務流程進行充分的調研,對「狀態」的劃分內容和不同狀態的產生條件規則,做到準確的界定。因為狀態對於用戶來說是非常重要的感知欄位,設計的狀態與需求方達成共識,顯示的狀態才能便於用戶理解和感知,不會造成理解上的歧義和偏差,用戶理解起來不會感到困難。02 狀態的作用1.