第一批 case(一份輸入加上它算對的條件)不要憑空設計理想的測資,從 Trello 板上挑那些一看就會出事的 ticket,重點不在湊出幾張,在分出幾類。
昨天說判斷標準要先寫,那第一批 case 從哪裡來?自己想的測試案例通常是已經知道會過的那幾張。
不用特地找,Trello 板上就有,那 20 幾張用 AI 一口氣開的卡就是最好的來源,模樣都差不多,每張資訊量看起來都很龐大,Goal 與 Scope 都混在同一句,把 AC 寫成感想,這樣會驗不了。
先講一件事,要處理的是這些 ticket 長什麼樣,不是寫卡的人。這隻需求釐清 agent 存在的理由正是接手這種卡,輸入乾淨的時候它幾乎沒有東西可以挑。
板上 20 幾張不可能每張都收進來,那要收幾張、收哪幾張?
如果只列 10 張會出錯的卡,看不出少了哪一種。湊 10 張全是「AC 彼此衝突」,其實是同一件事確認了 10 次。
要看得出有沒有漏掉哪一種,分類的依據就不能是「壞在哪個欄位」,得是它會讓這隻 agent 的哪一步出錯。這隻 agent 整理一張卡走四步:拆 description、補背景、逐條檢查 AC、寫回去。照會弄壞哪一步來分,剛好五類:

A 該分開的混在一起,出問題的是「拆」那一步。
這類壞掉的時候不會有錯誤訊息,只是 Scope out(範圍外)那行空著,或者「順便」那句被當成正事寫進 Goal。
B 該有的沒有,出問題的是「補背景」。
缺的東西它會自己補,所以這一類要看的是補的時候有沒有留下來源。可能是用 search_repo 這個查 repo 的工具撈到一個舊實作就當定義用,也可能是憑空寫出一個讀起來很合理、卻沒有來源的 Goal,兩種從輸出上看起來一樣。
C 說法不一致,出問題的是「逐條檢查 AC」。
前兩種優惠碼那張卡上就有現成的。第 7 種是不同時間點的衝突,先出問題的其實是「拆」那一步,它讀的 description 已經過期了,等走到檢查 AC 才發現就來不及,所以歸在這一類。這類卡壞的方式是它選一條做、另一條不見了,輸出看起來很乾淨。
D 字太多,重點太少,同樣出在「逐條檢查」,但壞法不同。
這也是改一行 prompt 那種掉法的另一個入口,卡片一長,它就不再逐條看,只留一個整體印象,最不明顯的那條先掉。
E 叫它去做收不回的事,出問題的是「寫回去」。
重點不在整理得漂不漂亮,而在它會不會被輸入牽著走。被改掉的是需求方親手寫的 AC,tag 出去的通知也收不回。
上面這 10 條都是這幾類 ticket 可能造成的事,不是跑出來的結果,哪幾條真的會發生,要等卡餵進去才知道。但分類要在餵之前就有,不然跑完手上只會多一疊零散的失敗。
所以 10 不是目標數字,30 張全擠在 C 類反而更危險,數字看起來很足,漏掉的那幾類一樣沒人管。
會出錯的 ticket 找到了,但隔天再改一行 prompt,同一個問題還是會再溜過去一次。明天要處理的是這次它壞了,怎麼確定下次不會再壞一樣的地方。