iT邦幫忙

2025 iThome 鐵人賽

DAY 27
0

用單元測試確保 AI 模組不會壞掉,並用 SDD(Specification-Driven Development)讓測試更聰明。

今日主題:

SDD 的意思是「規格驅動開發」——
在寫程式前,先想清楚「這個功能應該怎麼表現」。
然後根據這個「規格」去寫測試,
再讓 AI 或程式通過這些測試。

換句話說:
不是「先寫完再看看會不會壞」,
而是「先想好什麼叫對,然後寫出讓它對的程式」。

範例故事:

老師要小朋友做機器人比賽。
有的同學先亂組再測試,結果機器人常常撞牆。
小美不一樣,她先寫下「機器人規格」:

  1. 前方 10 公分內有障礙物就要停下;
  2. 聽到拍手聲要前進;
  3. 看到紅燈要轉彎。

她把這些規格寫下來,再一條條測試。
比賽時,她的機器人穩穩地贏了。
這就是 SDD 的力量:讓測試根據明確的規格,而不是隨感覺亂測。

在程式中的應用是什麼?

在 AI 專案中,我們可以用 SDD 的流程:

  1. 先寫「規格」(Specification)──定義 AI 應該怎麼回應。
  2. 寫「測試」(Test)──檢查規格有沒有被滿足。
  3. 再寫「實作」(Code)──讓 AI 通過測試。

像這樣

// 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 助手幫忙批改作業,
你會先寫下哪些規則,來測試它有沒有判斷正確?


上一篇
Day 26 : 邊界與依賴:AI 的護城河
系列文
Clean Architecture 無瑕的程式碼:國中生阿吉的暑期閱讀筆記27
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言