iT邦幫忙

2026 iThome 鐵人賽

DAY 2
0
佛心分享-IT 人職涯歷練

我從 intern 變菜鳥:30 天學會別再手擀破輪子系列 第 2

Day 02|LED 有亮不算完成,按鈕怎樣才算真的能用?

  • 分享至 

  • xImage
  •  

我們用 SMART——Specific(具體)、Measurable(可衡量)、Achievable(可達成)、Relevant(具關聯)、Time-bound(有時限)——把每個故事拆成五天,作為每次動手造輪子前的五個檢查問題。

本篇是故事一「客戶要加個按鈕切換 LED 呼吸燈,一個月後 RD 還在談 CMSIS 與 Clean Code」的 Measurable 篇:什麼證據可以證明問題已經解決?

本篇定位:把「按鈕功能完成」轉成可測試、可展示、可驗收的條件。

當時發生了什麼

有了那句使用情境之後,事情看起來有救了:短按按鈕,LED 在常亮、呼吸、熄滅之間循環。某天有人把路走通了一半,示範給大家看:按一下,LED 從常亮變成呼吸。

得說清楚,那是開發板上的臨時試打,不是要交付的那份韌體:沒有既有功能要保護,腳位怎麼接都行。它證明的只有一件事——這條路在最乾淨的環境下走得通。

即使如此也沒撐過幾分鐘。有人手癢多按了幾下:快速連按兩下,燈直接跳過呼吸變成熄滅;按住不放,狀態開始自己輪播。問「這樣算完成了嗎」,回答是「先跑起來而已,細節之後再調」。

同一週的架構會議上,「完成」是另一個樣子:分層圖、命名規則與框架介面各有定稿日與凍結日。兩種「完成」都在認真推進,共同點是沒有一種能讓客戶親手按出來。

真正的問題在哪裡

「LED 有亮」是一次觀察,不是一個驗收條件。那句使用情境只描述了最順利的一條路:短按、切換、循環。但一顆實體按鈕的大部分行為發生在這條路之外——彈跳讓一次按壓在電氣上其實是一連串抖動;使用者會連按、會按住不放、會在呼吸進行到一半時再按;設備會斷電重開。這些沒有一個寫在「加一顆按鈕」五個字裡,卻每一個都會改變產品行為。

更關鍵的是,當「完成」沒有公共定義,每個人就會自帶一份私有定義:對展示的人,跑給大家看過就算完成;對重構的人,整理到自己滿意才算完成。「我覺得還能再整理」之所以能無限延長,正是因為它不可證偽——沒有任何測試能證明「已經夠整理了」。範圍失守讓工作沒有邊界,驗收缺席讓工作沒有終點,兩者加起來,就是一個月後按鈕仍然不能用的完整解釋。

可以怎麼做

要讓「完成」脫離私人定義,得把那句使用情境攤成兩張表。

第一張是狀態與事件表。三個狀態:常亮、呼吸、熄滅;一個事件:一次有效按壓。轉移規則一行寫完:常亮→呼吸→熄滅→常亮。這張表近乎廢話,價值在於它逼出一個真正的問題:什麼才算「一次有效按壓」?

去彈跳就卡在這裡,而且卡得比想像中深。機械接點在切換的瞬間會連續通斷,多數開關的彈跳收在 10 毫秒以內,個別開關在放開時卻可以拖到上百毫秒。去彈跳窗要開多寬因此是一組取捨:太短濾不掉抖動,一次按壓被算成好幾次;太長則吃掉快速連按,手指按下去燈慢半拍才反應。實務上常落在數十毫秒這個量級,也可以把「按下」的窗設短、「放開」的窗設長。

重點是:這個數字不該等到寫程式時由工程師隨手填。它直接決定「快速連按每次都要切換」和「彈跳絕不能誤觸發」哪一邊優先,而這在驗收表上是會互相拉扯的兩列。它是要跟客戶或測試先講定的參數,講定了才有得驗收。

長按也需要一個決定,而不是一個猜測。這次的做法是:本次交付把長按視同短按,專屬行為另案處理;寫下來,驗收表上就多一列可以按。呼吸進行到一半再按是立即切換還是等週期結束,也照同樣方式定案。這些答案不必自己猜,它們正是需求剛進來時就該問客戶的問題;狀態表的作用是把問題具體到客戶答得出來。

第二張是驗收表,每一列都是可以當著客戶的面操作一次的動作與預期結果:

操作 預期結果
短按一次(常亮中) 切換為呼吸
再短按一次 切換為熄滅
以講定的最短間隔連按 每次有效按壓恰好切換一次,不多不少
觸點彈跳 不造成連續誤觸發
按住不放後放開 視同短按,只切換一次
斷電重開 回到預設狀態或保留前次狀態(二選一,由客戶定案)
既有功能 全部不受影響

這張表同時完成三種區分。功能驗收:表上的列,這次交付要全數通過。程式碼品質:屬於審查與靜態分析的標準——靜態分析擋的是未初始化就被讀取的變數這類真的會出事的寫法,驗收場所在審查流程,不在客戶面前。後續改善:介面對齊、全面分層,另開工單、另訂驗收。程式碼品質當然重要,把它混進功能驗收,才是那一個月的由來。

驗收表對重構的抑制作用也很直接:任何一項改動,要嘛能讓表上某一列從失敗變成通過,要嘛承認自己與這次交付無關。分層重構會讓哪一列變綠?答不出來,它就歸入後續改善那一堆——重點不在否定重構,在於每一分工時都要出示證據。

今天學到的事

「會動」與「能用」之間差的,是所有沒被問出口的邊界條件。把完成條件寫成可以按出來、看出來、測出來的表,也是工程師的自我保護:表全數通過的那一刻,就有了說「這次到此為止」的憑據,無限的「再整理一下」和「順便多做一點」都被這張表擋在門外。

寫表還有一個副作用:它把幾個原本會被工程師默默決定的參數推回該待的地方。去彈跳窗多寬、長按算不算、重開機記不記得,都是產品行為問題,該由需求方回答,也該在動手前就有答案。

不過,驗收表回答的是「做完長什麼樣」,還沒回答「怎麼走到那裡」。面對一份確實混亂的既有程式,是先整理乾淨再實作,還是在混亂中先鋪一條最短的路?這條路上有沒有東西真的擋著,得把既有程式攤開來看才知道。


上一篇
Day 01|客戶要的是一顆按鈕,不是韌體憲法
下一篇
Day 03|先讓按鈕真的能切換,再決定要不要重整整套韌體
系列文
我從 intern 變菜鳥:30 天學會別再手擀破輪子17
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言