iT邦幫忙

2026 iThome 鐵人賽

DAY 15
0
Vibe Coding

四個番茄鐘,三次重新來過:我跟 AI 的 30 天開發考古系列 第 15 篇

Day 15|動工前先寫測試:我把最危險的功能排在第一個

  • 分享至 

  • xImage
  •  

第二版的透明視窗卡了我兩天(Day 7)。
第四版同樣要用透明視窗,而且影響層面更廣——一隻會在桌面上走的貓、一個跟著滑鼠游標的倒數、蓋住所有螢幕的休息遮罩,全部都靠它。

所以這次在寫任何功能之前,先做了一件事:證明這台電腦做得到。

風險清單的第一條

規劃文件第九節叫「風險與注意事項(Windows + Godot 4 特定)」,第一條是:

透明三件套缺一不可:project setting per_pixel_transparency/allowed + Window.transparent + viewport.transparent_bg,少一項 = 黑底。

第二條:

embed_subwindows 必關;代價是 popup(OptionButton 下拉等)也變原生視窗,可接受。

這兩條都是 Sproutimer 換來的知識,這次它們在動工前就被列成已知風險。

但列出來不等於解決。Godot 的透明視窗在某些顯示卡和驅動下會變成黑底,這是硬體相關的問題,只能實測。

M0 做的不是功能,是驗證

6 月 12 日下午 4 點 24 分,第一個 commit(1ff4a3a),497 行,訊息是:

M0: project skeleton with transparency smoke test

裡面沒有番茄鐘、沒有計時器、沒有 UI。只有專案骨架、空的 autoload 檔案,以及一個叫 transparency_smoke_test.gd 的測試。

這個測試的做法很有效:開一個透明小窗,中間畫一個洋紅色的圓,底下再放一個綠色的視窗。然後用 DisplayServer.screen_get_image() 截下真實螢幕,取樣兩個點——圓心應該是洋紅色,圓外的角落應該是底下那個視窗的綠色。

https://ithelp.ithome.com.tw/upload/images/20260928/201539287KC1Zrb3Mc.jpg

如果角落是黑的,就代表透明沒生效。

交接文件裡記錄了結果:

透明視窗冒煙測試 PASS:borderless + transparent + always_on_top + transparent_bg 小窗,洋紅圓外圍正確透出底下主視窗綠色,無黑底 bug。實測環境:Windows 11、AMD Radeon 780M、OpenGL Compatibility。→ 第九節風險 1 已在本機排除,M4 可放心做。

最後那句是重點:風險排除了,所以後面那個最花時間的貓咪覆蓋層可以放心做。

它可以重跑

這個測試不是跑一次就丟。交接文件裡寫了怎麼再跑:

自動模式(測完自動退出,exit code 0 = PASS):<console.exe> --path <專案目錄> ++ --smoke-test
手動模式:開 app 按「透明視窗冒煙測試」鈕,結果顯示在視窗內。
兩種模式都會在專案根目錄輸出 smoke_result.txt(判定明細)與 smoke_result.png(目視截圖)

exit code 0 = PASS 這件事對 vibe coding 特別重要。AI 可以自己跑這個指令、自己看結果,不需要我用眼睛確認。它變成 AI 可以驗證自己工作的工具。

兩個版本的對照

Sproutimer Pomofocus
何時碰透明視窗 第 2 天,直接做功能 第 1 個 commit,先做驗證
怎麼確認做對了 執行、用眼睛看、截圖問 AI 截螢幕取樣兩點,輸出 exit code
花掉多久 4/8 19:04 到 4/9 15:10,跨兩天 包含在 M0 的 497 行裡,同一天完成
留下什麼 一個可以跑的視窗 一個可以重跑的測試 + 一段實測環境紀錄

帶走這個:冒煙測試的三個條件

「先測最危險的東西」並且讓它變成資產,變成資產需要滿足三個條件:

  1. 可重跑——一行指令就能再跑一次,不用手動點按鈕、不用記步驟。
  2. 可自動判定——用 exit code 或明確的 PASS/FAIL 輸出,不要只靠「我看畫面覺得對」。
  3. AI 自己就能執行——這樣它改完能自己驗,不用每次都要手動開起來看。

那個透明冒煙測試就是照這三條做的:++ --smoke-test 跑完自動退出、exit code 0 代表過、順便輸出判定明細和一張截圖。

選什麼來測?選「如果做不到,整個專案就要重來」的那一件。

我的是透明視窗,因為貓、滑鼠旁的倒數、全螢幕遮罩全都建在它上面。
其他專案可能是某個 API 的權限、某個裝置的相容性、或某個效能門檻。

順帶一提,實測環境要一起寫進文件。那行「Windows 11、AMD Radeon 780M、OpenGL Compatibility」看起來很囉唆,但透明視窗在不同顯卡驅動下的行為會不一樣——寫下來,下次換機器才知道要重測。

明天講 6 月 12 日剩下的六個半小時:下午 4 點 24 分建專案,晚上 10 點 51 分做完第三個里程碑,中間包含一套完整的番茄鐘狀態機、原子寫檔的資料層,以及三種強度的休息引導視窗。


上一篇
Day 14|我叫 AI 反過來訪問我,它問出了我沒想過的問題
下一篇
Day 16|16:24 建專案,22:51 做完第三個里程碑
系列文
四個番茄鐘,三次重新來過:我跟 AI 的 30 天開發考古 共 18 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言