在 Day 16 的理性探討中,我們面對了 TDD 的適用邊界,我們認識到,TDD 雖是利器,卻非萬能的銀彈。
在過去的兩週裡,我們投入了大量精力來磨練手動 TDD 的技巧,我們體會了它的嚴謹、安全感,也感受到了它在編寫樣板程式碼和思考邊界條件時的繁瑣。
今天的目標:正式邀請我們的 AI 隊友——GitHub Copilot——加入專案,並為我們的人機協作搭建好舞台。
進行第一次互動,初步感受 AI「你的好同事」的威力。
GitHub Copilot 不是一個簡單的自動補全工具。 傳統的自動補全(IntelliSense)是基於你專案中的語法和程式碼結構來提供建議,而 Copilot 則是由 OpenAI 開發的一個強大的大型語言模型 (LLM),它學習了 GitHub 上數十億行的開源程式碼。
這意味著它不僅僅理解「語法」,它在一定程度上還理解「意圖」:
它就像一個坐在你身邊,知識淵博、不知疲倦、但偶爾會犯錯的結對程式設計夥伴。我們的目標,就是學會如何引導它、利用它,來極大地加速我們的 TDD 流程。
要使用 GitHub Copilot,你需要一個 GitHub 帳號,並啟用 Copilot 的訂閱服務 (掏錢囉)。
付款方式分成幾種:
一旦你的 GitHub 帳號擁有了 Copilot 的使用權限,在 VS Code 中安裝它就非常簡單了。
打開 VS Code,點擊左側邊欄的「擴充套件 (Extensions)」圖示,在搜尋框中輸入 GitHub Copilot。
你會看到幾個由 GitHub 官方發布的擴充套件。我們需要安裝兩個核心的:
當你在 VS Code 右下角的狀態列看到一個正常的 Copilot 圖示(一個小小的機器人頭像)時,就代表你的 AI 隊友已經準備就緒了!
讓我們回到 go-tdd-kata 專案,體驗一下 Copilot 的魔力。
在專案中建立一個臨時的練習檔案,例如 playground/hello_ai.go。
在檔案中,輸入以下這行註解,然後按下 Enter:
// Create a function that takes a name as a parameter and returns a greeting message.
稍等片刻(有時需要一兩秒),你會看到 Copilot 以灰色的字體,自動為你提示了接下來的程式碼!
// Create a function that takes a name as a parameter and returns a greeting message.
func Greet(name string) string {
return "Hello, " + name + "!"
}
(灰色部分為 Copilot 的建議,每個人不同時間會有不同)
此刻,你有幾個選擇:
這就是與 Copilot 互動最基本的方式。它會在你編寫程式碼時,根據上下文不斷地提供建議。
選取你剛剛生成的 Greet 函式。
按下 Ctrl+I (Windows/Linux) 或 Cmd+I (macOS),這會彈出一個內聯的聊天視窗,或是 ctrl+shift+p(Windows/Linux) 或 Cmd+shift+p(macos) 後搜尋: Chat: Focus on Chat View
。
在輸入框中輸入 /tests
,然後按 Enter,此時 Copilot Chat 會立刻分析你選取的函式,並在幾秒鐘內為它生成一個完整的、使用表格驅動模式的單元測試!
// Copilot Chat 可能生成的測試程式碼
func TestGreet(t *testing.T) {
type args struct {
name string
}
tests := []struct {
name string
args args
want string
}{
{
name: "Test with a regular name",
args: args{name: "World"},
want: "Hello, World!",
},
{
name: "Test with an empty name",
args: args{name: ""},
want: "Hello, !",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := Greet(tt.args.name); got != tt.want {
t.Errorf("Greet() = %v, want %v", got, tt.want)
}
})
}
}
看到這裡,你是否已經開始其他與AI共舞的想法呢? 回想一下我們之前手動編寫測試表格的過程,再看看 AI 在幾秒鐘內完成的工作,這就是我們下一階段將要深入探索的效率革命。
今天,我們成功地使用我們的 AI,為 TDD 開發流程的下一次進化做好了準備。
預告:Day 18 - AI 詠唱術 (Prompt Engineering) - 如何下達讓 AI 理解 TDD 的指令
擁有強大的工具,還需要學會如何使用它。直接讓 AI 寫程式碼,與引導 AI 遵循 TDD 的流程,是完全不同的兩件事。明天,我們將學習一些基本的「AI 詠唱術」(即 Prompt Engineering),探討如何下達精準的指令,讓 AI 能夠理解我們的 TDD 意圖,成為我們 TDD 流程中的得力助手,而不是一個只會寫產品程式碼的「破壞者」。