前言
在 Day 8 中,我們介紹了如何用 Cursor 與 GitHub Copilot 快速產出程式碼。然而,在日常開發中,工程師花在「讀 Code、除錯 (Debug) 與重構 (Refactoring)」的時間,往往遠多於撰寫全新程式碼的時間。
面對接手的遺留系統(Legacy Code)或是詭異的 Runtime Bug,AI 能夠扮演高效率的「24 小時專屬 Code Reviewer」。今天我們將探討如何用 AI 幫你快速抓出資安漏洞、定位 Memory Leak,並將笨重的舊程式碼重構成乾淨簡潔的現代架構!
一、AI 除錯的黃金公式:如何精準提問?
當程式發生 Error 或邏輯不符預期時,直接把錯誤訊息甩給 AI 通常只能得到籠統的回答。要讓 AI 發揮最高除錯效益,請使用以下三步驟 Prompt 架構:
環境與上下文 (Context): 提供語言版本、主要套件與框架。
預期行為 vs 實際結果 (Expected vs Actual): 說明你希望發生什麼,但實際上發生了什麼。
完整 Call Stack / Traceback: 附上詳細的報錯日誌與相關程式碼。
優質 Debug Prompt 範例:
「這是一個 Python 3.11 / FastAPI 的 Endpoint(附上片段)。
預期行為: 使用者傳入 JSON 資料後應寫入 MongoDB 並回傳 201。
實際結果: 在併發高時會觸發 pymongo.errors.ServerSelectionTimeoutError。
請幫我分析:
可能造成連線池(Connection Pool)耗盡的原因有哪些?
請提供修正後的程式碼片段(含連線池設定優化)。」
二、實戰範例:用 AI 將 Legacy Code 重構成現代化架構
假設我們有一段舊版的 Python 程式碼,裡面充斥著多層巢狀 if-else、全域變數以及缺乏型別標註(Type Hints):
❌ 重構前 (Legacy Code):
Python
def process_data(data):
if data != None:
if 'status' in data:
if data['status'] == 'active':
res = []
for item in data['items']:
if item['price'] > 100:
res.append(item['name'].upper())
return res
return None
💡 給 AI 的重構 Prompt:
「請重構這段 Python 函數:
使用 Early Return / Guard Clauses 消除深度巢狀。
加入 Python Type Hints 與 Docstring。
改用語意更清晰的 List Comprehension 或 Functional Style。
增加邊界條件檢查。」
✅ 重構後 (Refactored Code):
Python
from typing import Dict, List, Any, Optional
def extract_active_high_value_items(data: Optional[Dict[str, Any]]) -> List[str]:
"""從輸入資料中過濾出狀態為 active 且價格大於 100 的項目名稱。"""
if not data or data.get('status') != 'active':
return []
items = data.get('items', [])
return [
item['name'].upper()
for item in items
if item.get('price', 0) > 100
]
三、AI 靜態分析與資安檢測 (Security & Code Review)
除了寫 Code 與除錯外,你也可以把 AI 納入 Git Commit 或 PR (Pull Request) 的檢核關卡:
抓 SQL Injection / XSS 漏洞: 讓 AI 檢視前端與後端介面,檢查是否有未經過濾的 SQL 查詢或未轉義的 HTML 輸出。
檢查 Time/Space Complexity: 詢問 AI:「這段演算法的時間複雜度是多少?是否有雙重迴圈造成的效能瓶頸?如何優化至 O(N)?」
自動產生單元測試 (Unit Tests): 指示 AI:「請針對這段程式碼,列出所有邊界條件 (Edge Cases) 並寫出基於 pytest 的測試用例。」
四、心法與避坑提示
小範圍重構: 每次只讓 AI 重構一個模組或函數,重構後立即執行測試,切忌一次重構整個專案。
信任但要驗證 (Trust, but Verify): AI 偶爾會「幻覺」出不存在的套件方法,或是看似簡潔卻改變原業務邏輯的改動,必須依賴完善的測試(Test Suite)來保護系統。
結語
善用 AI 輔助 Debug 與重構,不僅能幫我們節省大量尋找 typo 與語法錯誤的時間,更能透過對比 AI 提供的高品質程式碼,在日常開發中無形提升自己的 Coding Style 與架構眼界。
明天(Day 10),我們將進入第二週的下一個重點:「AI 輔助系統架構設計與 API 文件撰寫(OpenAPI / Mermaid.js)」,我們明天見!