iT邦幫忙

2026 iThome 鐵人賽

DAY 17
0
Software Development

當 AI 越來越會寫程式,開發者究竟還需要懂什麼系列 第 17 篇

Day17 - 測試通過,不代表需求被滿足

  • 分享至 

  • xImage
  •  

昨天談到折扣金額:逐筆打折後取位數,與先加總再打折,可能得到不同總額。今天接著看測試:即使案例依SRS撰寫、預期答案也正確,測試通過後,我們能確認到哪裡?

從同一份SRS,分別實作與驗證

假設一套支援小數金額的訂單系統,要調整折扣計算。SRS寫每筆明細先打九折,再依一般四捨五入取至小數第二位,最後加總。

這次由兩個Agent分工。實作Agent依SRS與既有專案完成修改;測試Agent則在獨立的對話脈絡中,依同一版SRS、介面契約與驗收條件建立測試案例,再接上測試環境執行。

測試Agent先推導輸入與預期結果,不先接收實作Agent對算法的解釋。介面、資料格式與環境資訊可以共享,業務答案則以SRS為依據。這樣分工,是讓驗證多一個獨立的判斷來源。

實作Agent仍可撰寫單元測試、執行測試與除錯。另一個Agent負責的,是從需求角度確認功能表現;兩者的工作可以互補。

答案正確,還要看資料能分辨什麼

檢查測試時,看到其中一個案例使用兩筆100元的明細,預期總額為180元。這個答案符合SRS,測試也通過了。

但這組資料有個限制:逐筆打折,得到90元加90元;先加總再打折,則是200元乘以0.9。兩種做法都得到180元。單看這個案例,還無法分辨程式是否遵守「逐筆取位數後加總」。

這不表示案例沒有用。它可以核對這組輸入的折扣總額,只是要驗證取位數的時機,還需要另一組資料。

沿用昨天的兩筆10.05元,差異就會出現:

計算方式 結果
逐筆打折、取至小數第二位,再加總 9.05+9.05=18.10元
先加總,再打折、取至小數第二位 20.10×0.9=18.09元

依這份SRS,預期答案是18.10元。這組測試資料讓兩種算法產生不同結果,才能檢查程式有沒有把取位數放在規定的步驟。

差異也可能由測試Agent主動指出。我們與AI討論時,便能具體問:「目前哪些案例能分辨逐筆計算與整張計算?」而不是只看新增了幾個測試、通過率是多少。

隔離的是推導脈絡,規格仍要能對得回去

兩個Agent分開工作,可以減少直接沿用彼此解釋的機會,但它們仍可能對同一條規格做出相同解讀。因此,測試交付時,除了執行結果,也可以留下對應的SRS條件、輸入與預期結果,以及這組資料要驗證的差異。

在這個案例裡,檢查重點很明確:答案是否依逐筆計算得出?資料是否讓取位數時機影響結果?執行時是否真的呼叫了要驗證的訂單計算功能?有了這些對應,才看得出測試通過支持了哪一條需求。

如果結果是18.09元,就把差異交回實作端追查;若懷疑測試答案有誤,也回到同一版SRS核對。獨立驗證不代表測試永遠正確,而是讓雙方有共同依據可以討論,不必由其中一邊的輸出決定答案。

測試除了要依SRS算出正確答案,也要選用能讓錯誤做法露出差異的資料。否則,就算程式沒有照規格計算,測試仍可能通過。


從GPT‑6 Sol 升到 6.1,只花了一週
我們的測試資料倒是很穩定
三年了還是用那兩筆100元
至今沒讓任何一個模型為難過

/images/emoticon/emoticon31.gif


上一篇
Day16 - 系統中的資料,是否保留了真實世界的意思
系列文
當 AI 越來越會寫程式,開發者究竟還需要懂什麼 共 17 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言