回到頂部
AI 除錯與程式碼重構:從 Legacy Code 噩夢解脫 — 封面

AI 除錯與程式碼重構:從 Legacy Code 噩夢解脫

秒級 Log 診斷、自動寫單元測試、老舊專案無痛翻新。AI 如何幫助工程師將 Bug 修復時間縮短 80%。

AI 除錯與程式碼重構讓 Legacy Code 不再是噩夢——把舊程式碼丟給 AI,它能找出 bug、解釋意圖、重構架構,效率比人工高 5-10 倍。

當你接手一個沒有文件、沒有測試、且變數名稱都是 val_1val_99 的祖傳專案時,過去的你只能默默祈禱。現在的你,擁有了一位 24 小時隨傳隨到、從不抱怨的資深救火隊員

💡 核心觀念 AI 可能會寫出 Bug,但 AI 更是「找 Bug」的終極利器。把 AI 當作你的 Code Reviewer 與除錯好夥伴,大幅縮短你在 StackOverflow 上大海撈針的時間。


🐛 秒級 AI 錯誤診斷 (Debugging)

終結「這個莫名的錯誤到底卡在哪」的噩夢

以前遇到報錯,你會把 Log 丟上 Google,祈禱有人跟你遇到一模一樣的問題。有了 Claude 3.5 Sonnet 或 GPT-4,你可以一氣呵成。

萬用偵錯 Prompt:

這段程式碼在執行時拋出了以下錯誤:

【錯誤訊息 / Call Stack】:
(貼上 console 或 Sentry 的完整錯誤報告)

【相關模組與行號】:
(貼上會報錯的那幾行,以及前文 20 行)

【預期與實際行爲】:
本來應該要把購物車資料存入 DB,結果回傳 `null reference / TypeError`。

請你:
1. 分析產生這個錯誤的兩種最可能的 Root Cause。
2. 指出哪一行的變數狀態最可能為空。
3. 給我修復這段 Code 的具體建議,並加上 Type Check。

AI 除錯四神技

  • 脈絡補完法:AI 找不出 Bug,往往是因為你沒貼到「真正有問題的地方」(例如:錯在 Utils 卻只貼 Frontend)。
  • 解釋每一行 (Explain Code):遇到超複雜的正則表達式 (Regex) 或位元運算,請 AI 逐句翻譯成人話。
  • 邊緣測試 (Edge Case):當你看了一百遍都沒問題,可以請 AI「舉出 3 個可能導致這段邏輯出錯的輸入值」。
  • 提問式偵錯:讓 AI 當橡皮鴨 (Rubber Ducking),請它一直問你問題,通常問到第三題你自己就找到 Bug 了。

🏗️ 自動產出單元測試 (Unit Tests)

沒有時間寫測試是業界常態,但現在這個藉口不成立了。

TDD (測試驅動開發) 的大重生

不要讓 AI「漫無目的」地寫測試,給予它框架限制,你才能拿到有用的覆蓋率。

自動生成 Jest / PyTest 測試:

請為這個 `calculateDiscount.ts` 函式撰寫一套 Jest 的單元測試。

規則:
1. 必須涵蓋正常流程 (Happy Path) 至少 2 個情境。
2. 必須驗證 Invalid Input 的報錯行爲 (拋出自訂 Exception)。
3. 請考量邊界條件 (例如總價為 0、會員等級不存在)。
4. 請使用 mock 處理對外部 DB 的非同步存取,確保測試隔離性。

[附上原本的程式碼]

[!WARNING] 人類審核警告 (Human Audit Required) AI 有時為了讓測試「全數通過 (Pass)」,會投機取巧寫出沒有實質驗證力的 Assertions (例如 expect(true).toBe(true))。 永遠不要信任第一眼綠燈的測試。身為人類工程師,你的職責是去檢查 AI 寫的斷言是否真的測試了商業邏輯,並試著故意改壞原本的 Code(例如把 + 變成 -),確認這個測試檔真的會報錯抓 Bug。


♻️ Legacy Code (祖傳程式碼) 無痛翻新

這是企業導入 AI 後,最能具體衡量 ROI (投資報酬率) 的一塊。那些「不要碰它不然系統會垮」的模塊,現在都能安全地加上防護網重構。

從「看得懂」開始

首先,你需要有人翻譯這堆火星文。

你是一位資深架構師。
請分析底下這 300 行的 PHP / Java 古老類別:

1. 它主要負責什麼商業邏輯?畫出一張簡單的流程表。
2. 列出它對外依賴的所有全域變數或資料庫表單。
3. 標出那些「可能已經廢棄永遠不會執行」的 Dead Code。

漸進式重構 Prompt

我想要將上面這段義大利麵條式的 Legacy Code 重構為更現代的 Clean Code 架構。

第一階段:
1. 請幫我把這段大長篇 (Monolithic Function) 拆解成 4-5 個單一職責 (Single Responsibility) 的小函式。
2. 維持原有輸入與輸出的結構,確保邏輯完全不變。
3. 請補上 JSDoc / Type Hint。
4. 提供重構後的版本。

你先用 AI 加上了測試,再讓 AI 執行重構,最後跑一次測試確認綠燈。這就是 2026 年重構的神仙體驗。


👀 把 AI 當嚴苛的 Code Reviewer

不要客氣,請 AI 給你最無情的指教。你可以指定一個極度嚴格的審查角色。

你現在是 Google 的 Principal Engineer (主任工程師),並且以吹毛求疵的 Code Review 聞名。
我即將提交這個 Pull Request (PR)。

請對這段程式碼進行殘酷的審查:
1. Security:有沒有 SQL Injection、XSS、權限越權檢查漏掉?
2. Performance:有 N+1 查詢嗎?有記憶體未釋放的可能嗎?
3. Readable:這段程式碼夠「優雅」嗎?能不能用原生的陣列方法替代那三個槽狀迴圈?
4. 如果滿分是 100 分,你給這段 PR 幾分?並列出扣分點。

你會驚訝於 AI 挑出的效能瓶頸,往往是人類 Reviewer 為了趕下班而忽視的細節。


🔁 AI 輔助的 CI/CD 管線偵錯

除了在本地開發環境用 AI 除錯,越來越多團隊開始把 AI 整合到 CI/CD(持續整合/持續部署)管線中,讓 AI 在程式碼合併之前就自動攔截潛在問題。

自動化 PR 審查流程

在 GitHub Actions 或 GitLab CI 中加入 AI 審查步驟,每次有人提交 Pull Request 時,自動把變更的程式碼丟給 AI 做初步審查。AI 可以檢查:

  • 是否有明顯的安全漏洞(硬編碼的密鑰、SQL 注入風險)
  • 是否有效能問題(N+1 查詢、未關閉的連線)
  • 新加的程式碼是否有對應的測試覆蓋
  • 程式碼風格是否符合團隊規範

這不是要取代人類 Code Reviewer,而是讓人類 Reviewer 能專注在架構設計和商業邏輯上,把格式和基礎安全檢查交給 AI。

Build 失敗的自動診斷

CI 管線中最煩人的情境之一,就是 Build 在遠端伺服器上失敗了,但你在本地跑完全沒問題。把 CI 的完整錯誤日誌丟給 AI,請它分析「這個 Build 在本地能通過但在 CI 環境失敗」的可能原因。常見的結論包括:環境變數未設定、Node.js 版本不一致、或是某個相依套件在 Linux 和 macOS 上的行為不同。AI 能在幾秒內幫你縮小排查範圍,省去你反覆推送試錯的時間。


❓ FAQ

AI 寫的測試能信嗎?會不會是為了通過測試而亂寫結果?

有可能。AI 喜歡「討好」使用者,如果它發現某段邏輯很難寫 mock,它可能會生成一個無用的斷言 (Assertion),例如 expect(true).toBe(true)。 這就是為什麼你需要指定測試規範,並且在使用 AI 生成測試後,一定要手動跑一次覆蓋率報告或是故意寫壞原本的程式碼,確定這個測試真的能抓到 Bug。

把公司的 Code 貼給 AI 除錯會有資安問題嗎?

這是一個嚴肅的問題。如果你貼的是包含 API 金鑰、資料庫連線字串、或是用戶個資的 Log,絕對違反公司資安規範。 在使用免費版 (或未簽保密條款的 Enterprise 版) LLM 時,務必先將敏感資料遮蔽 (Masking)。目前較為安全的做法是公司內部建置 Ollama 等開源模型,在本地端執行 AI 除錯與重構。

📚 延伸閱讀