PTT推薦

[討論] FSM狀態機程式架構是不是災難?

看板Soft_Job標題[討論] FSM狀態機程式架構是不是災難?作者
IhateOGC
(我討厭)
時間推噓10 推:16 噓:6 →:43

吐泡一下

最近在維護一個交易老程式碼

就像是依照流程圖畫出來的狀態機實作

主狀態機有N個case

每個case又各自註冊可以重複的條件


FSM主要的狀態是有順序的

但是下面登記的function重覆性有87%

一個flag就可以解決的事情搞到變成很巨大的狀態機

有股想砍掉重練的衝動...但是只能自己驗證

QQ

--

※ PTT留言評論
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 116.241.146.114 (臺灣)
PTT 網址

ybite07/02 01:05我認為看設計 良好設計下可以迴避可能問題

w18011207/02 01:44設計問題…不要怪東怪西

labbat07/02 01:45主管請你來是維護的,亂動手腳而不提出規格變更申請是找死

Apache07/02 01:47不是 幾乎所有DP教材都會講到SM

pot123407/02 06:1687%像的程式碼沒有共用code,這不是fsm的問題吧

k79897686907/02 07:06IC數位設計都是狀態機啊

MacPerson07/02 07:07如果改狀態,大家都自己去異動flag就好,那才是真正的

MacPerson07/02 07:07災難

TWkobe07/02 07:22要看驗證還有主管同意

wulouise07/02 07:23fsm最好要有辦法auto gen流程圖,不然維護起來很痛苦,

wulouise07/02 07:23而且要是每個流程都在那邊改一堆singleton..算了

milk83012207/02 07:48各有好處吧 設計模式看情況用 flag遇到大架構要改直接

milk83012207/02 07:48累死

tofuflower07/02 08:45用 flag 也會有 flag 的雷

tofuflower07/02 08:51如果每個 func 的業務邏輯是獨立的, code 有 87 %

tofuflower07/02 08:51 像也不是問題

tofuflower07/02 08:53把看起來一樣的程式碼共用等於把所有業務邏輯耦合在一

tofuflower07/02 08:53起,這更雷

kkes000107/02 09:41怎麼看都覺得問題是實現架構的人

smallcar80107/02 09:58沒壞的東西不要修

alongalone07/02 10:26存在必有道理. 人的問題不要怪東西

wulouise07/02 11:19重複不表示他們可以同時被改

NDark07/02 11:25大部分是. 原因很複雜不能歸咎於一處.

NDark07/02 11:26最大的問題常發生在幾處:

NDark07/02 11:26- (後續)需求就超出設計之初的範圍

NDark07/02 11:27- 維護的人沒有照著狀態機的方式來撰寫邏輯

NDark07/02 11:28邏輯分離得好就算switch也能運作得很好.

NDark07/02 11:29狀態機有點像是緊錮圈.是頭要去適合圈.

NDark07/02 11:29不是每個開發者/團隊都有受過足夠的訓練能用得好.

airtsubasa07/02 11:36沒壞的東西不要修,但頻繁修改(例如一樣的邏輯要改n個

airtsubasa07/02 11:36地方,然後變數還不一樣) 那到底要不要修呢

Odia07/02 13:11在沒有提出更好的設計前別說是災難

s67813107/02 13:46FSM明明是個好東西

dnabossking07/02 14:19我接收過這種賺錢中程式碼,我直接翻寫掉了,我滿肯

dnabossking07/02 14:19

dnabossking07/02 14:19不是狀態機的問題

DrTech07/02 14:59標題是災難,看一個程式有問題,就說整個世界有問題。

alan310007/02 15:25差多了吧...感覺上是你不知道為何要用FSM

alan310007/02 15:43邏輯規模大到覺得測試麻煩大概就可猜想你不應該改成flag

wave1et07/02 17:02自己為是阿,你快搞懂後把狀態數合併吧

easyman07/02 17:19使用FSM 肯定不會太災難, 用flag 才災難

chuegou07/02 17:45聽你在屁 10幾個flag在那邊if else你連文件都寫不出來

chuegou07/02 17:46你是不是要說沒文件是災難

lturtsamuel07/02 19:48誰叫你要用狀態來實作fsm,用class或variant不好嗎

pttano07/02 20:58你才是災難,跟程式沒關係

ichunlai07/02 22:39用flag才是災難

viper970907/02 23:54三樓正解

peter9807/03 00:38這個還真不一定

APTON07/03 00:54有辦法提供sample code給大家討論嗎?不然也只是聽你抱怨而

APTON07/03 00:54

molimoli07/03 01:00怎麼感覺你比較雷

Lipraxde07/03 08:31不然有更好的寫法嗎?

KanzakiHAria07/03 11:58笑死 自己不會改狀態機說那是災難

za75518807/03 17:56狀態機如果文件還在 不容易大災難

za75518807/03 17:58至少很容易理解他裡面在幹嘛

revorea07/04 00:52flag災難中的災難

CaptainH07/04 08:07沒有FSM的話就是一堆if-elseif 有比較簡單?

bear141407/04 11:08FSM是有用的控制架構 會變成災難通常是用的人的問題

bear141407/04 11:10另 砍掉重練可以 但test case涵蓋率要趨近99.9%以上

bear141407/04 11:11尤其是邊界條件或很少出現的條件的test都要涵蓋

notBeing07/04 13:00先生出100% coverage 的test env再改阿XD

freef1y307/04 14:38flag是災難 所以把flag每個組合都弄成state就不是災難了

hongsiangfu07/05 12:08擴展便利,修改便利,過度最佳化不一定是好事

snaketsai07/07 13:57若真如你說,那應該有大量的狀態轉換可以縮減吧,離散

snaketsai07/07 13:57數學基本概念