用單元測試確保 AI 模組不會壞掉,並用 SDD(Specification-Driven Development)讓測試更聰明。
SDD 的意思是「規格驅動開發」——
在寫程式前,先想清楚「這個功能應該怎麼表現」。
然後根據這個「規格」去寫測試,
再讓 AI 或程式通過這些測試。
換句話說:
不是「先寫完再看看會不會壞」,
而是「先想好什麼叫對,然後寫出讓它對的程式」。
老師要小朋友做機器人比賽。
有的同學先亂組再測試,結果機器人常常撞牆。
小美不一樣,她先寫下「機器人規格」:
她把這些規格寫下來,再一條條測試。
比賽時,她的機器人穩穩地贏了。
這就是 SDD 的力量:讓測試根據明確的規格,而不是隨感覺亂測。
在 AI 專案中,我們可以用 SDD 的流程:
像這樣
// Step 1:定義規格(Specification)
const spec = {
shouldGreet: (input) => input.includes("你好"),
shouldReply: (answer) => answer.startsWith("AI 回答:")
};
// Step 2:先寫測試,再實作
import { describe, it, expect } from "vitest";
import { AIUseCase } from "./aiUseCase.js";
describe("AIUseCase (SDD 模式)", () => {
it("符合問候規格:輸入含有『你好』時要正確回應", async () => {
const fakeModel = { reply: async (q) => "AI 回答:你好!今天真開心!" };
const ai = new AIUseCase(fakeModel);
const output = await ai.ask("你好嗎?");
// 規格驗證
expect(spec.shouldGreet("你好嗎?")).toBe(true);
expect(spec.shouldReply(output)).toBe(true);
});
});
這樣的寫法代表:
測試是根據「規格」來的;
程式只要通過規格驗證,就算成功;
規格變更時,測試會先壞 → 提醒你要修。
這就是 SDD 的核心精神:讓測試成為規格的守門員。
SDD(規格驅動開發)讓你先定義「什麼是對的」,
再讓程式學會「如何做到對」。
這樣,AI 不只是會跑,更會「照規則跑」。
如果你要訓練一個 AI 助手幫忙批改作業,
你會先寫下哪些規則,來測試它有沒有判斷正確?