這不是一篇嚴肅的技術白皮書。
這是一篇後端 QAQC 工程師,被販賣機小車逼瘋的懺悔錄。
請帶著笑意閱讀,因為只有笑,才能掩蓋得了我的眼淚。
外人看販賣機,看到的是一格一格的飲料、零食、咖啡罐。
RD 看販賣機,看到的是一堆電路板、馬達、韌體程式碼。
而我,一個後端 QAQC,看販賣機,看到的是——
一台坐在 XY 軌道上左右亂竄的小車。
這台小車,理論上應該是可靠的搬運工:
去對的位置,取對的商品,送到對的出口。
但在我們開發的真實世界裡,它更像是:
簡單來說:
小車不是機械,是一個帶有靈魂的惡夢。
廠商的簡報總是那麼動聽。
他們說:
「別擔心,我們有自動掃描功能!
自動掃描 → 自動產生座標 → 自動套用。」
聽起來像夢幻般的 CI/CD 流程。
自動化、免人力、智慧型。
甚至讓 RD 一度興奮到拍桌:
「哇,以後 QAQC 只要驗驗 API 就好!」
然後現實給了我們一個大耳光。
結果 QAQC 的我,只能再次打開那個老掉牙的手動設定界面,
一格一格把座標調回正確位置。
就算系統已經掃描過,沒有手動設定,小車就是不鳥你。
它會冷冷地待在原地,靜默到你懷疑是不是掛了電。
更慘的是,log 裡還會冒一句:
[INFO] Carriage idle, no position defined.
我看著這行字,心裡只有一句 OS:
「哼,根本是在冷嘲熱諷吧。」
好吧,假設今天我真的耐著性子,手動設好了座標。
是不是就能一切順利?
不。
不。
不。
小車的日常就像三本漫畫:
《爆衝!販賣機戰士》
→ 小車突然加速,像要參加 F1 一樣,速度快到 QAQC 的眼睛追不上。
《急停列車》
→ 跑到一半突然急煞,硬生生停在軌道中間,整個販賣機彷彿按下暫停鍵。
《怠工之舞》
→ 左右亂晃,動作毫無章法,像在跳某種奇怪的 TikTok 舞蹈。
而這一切的根源,往往來自那顆「又黑又重的馬達外殼」。
它壓在小車上,就像讓小車揹著一顆墓碑去跑酷。
結果就是:
我常常看著那顆黑殼,心裡默默替小車祈禱:
「兄弟,辛苦你了。」
如果要票選「QAQC 抓狂排行榜 TOP 1」,
毫無疑問是——
RD 忘記確認小車狀態,就直接下指令。
這件事,百試百中,保證出事。
舉例:
log 當場炸裂,錯誤訊息像彈幕一樣狂噴:
[ERROR] XY position not found
[ERROR] Command rejected: state mismatch
[ERROR] Motor overload detected
[ERROR] QAQC screaming detected
看到最後一行,我整個人傻眼。
我才想起來,這不是機器回報的,這是我心靈的吶喊。
每次小車出事,console 就變成一場災難現場。
全是紅色字,像開了聖誕節特效。
最誇張的一次,錯誤訊息直接衝破 console buffer,
把 Jenkins log 也拖下水。
結果 CI/CD pipeline 硬生生掛掉,
前端同事笑到肚子痛,說這是「全員販賣機」。
有段時間,我們甚至認真懷疑:
是不是那顆黑殼帶有詛咒。
因為它太重,導致:
有一次測試,小車跑到一半,黑殼震得像地震。
飲料罐還沒掉下來,QAQC 的眼淚先掉下來了。
RD 嘴硬說:
「啊沒差啦,反正只要 log 沒爆就好。」
結果下一秒:
[ERROR] Motor vibration detected
[ERROR] Carriage lost in hyperspace
我只好冷冷回一句:
「恭喜你,現在它不只是小車,是量子小車了。」
最後,我們才總算悟了。
問題不在小車,它只是忠實執行者。
真正的錯誤在於:
我們沒有建立正確的狀態機。
要讓小車乖乖聽話,必須先問:
這三個問題不問清楚,
下指令就等於自找麻煩。
換句話說:
狀態機就是小車的語言。
如果不學會它的語言,
小車就會用爆笑、暴力、崩潰的方式懲罰你。
我常常幻想,如果有一天這台小車能開口說話,
它一定會對我們這群 RD 和 QAQC 嘆氣:
「拜託啦,先問我在幹嘛,再叫我做事,好嗎?」
這麼簡單的道理,
卻是我花了無數個深夜,
對著滿屏錯誤 log,
才徹底學會的血淚教訓。
這篇文章不是技術指引,而是一首 QAQC 的黑色惡夢。
寫給所有被硬體小車搞到心神俱裂的人。
願你在看到小車爆衝時,
能笑著說:
「啊,這只是狀態機的惡作劇。」
願你在看到滿屏錯誤 log 時,
能淡淡地關掉 console,
然後轉頭去喝一杯珍奶。
因為哭,已經沒有用了。