negative-test-experiment 對照實驗:實驗設計與它足以支持、不足以支持的宣稱
negative-test-experiment 對照實驗:實驗設計與它足以支持、不足以支持的宣稱
這一篇交代本模組各章引用的那份對照實驗是什麼、它的設計限制在哪裡,以及哪些宣稱可以拿它當證據、哪些不行。各章的判斷標準本身出自機制推導,實驗提供的是那些機制一次外顯的形態,所以讀各章引用的數字之前先讀這一篇。
negative-test-experiment 的設計:四種測試紀律與複雜度上限開關的組合
實驗是 Robert C. Martin 公開的 negative-test-experiment:同一份需求從空目錄開始寫八次,八次由四種測試紀律乘上「有沒有施加複雜度上限」這個開關組成。案例側的完整記錄在 同一組驗收通過八個不同的程式 — 關卡放行的等價類有多大。
它只有一個產品(一個主控台文字遊戲)、一種語言,每一種組合只執行一次,設計與可讀性的評分由原作者本人以主觀量表給出。這幾個條件決定了它能支持的宣稱範圍。
negative-test-experiment 足以支持與不足以支持的宣稱
| 這份實驗足以支持的 | 它不足以支持的 |
|---|---|
| 同一組驗收條件可以放行行為互不相同的多個程式 | 那個等價類在任一個真實業務系統裡有多大 |
| 行覆蓋率在紀律差異極大的做法之間鑑別力很低 | 覆蓋率門檻在多大的套件規模下才失效 |
| 突變測試長出的斷言集中在運算子層 | 突變分數在正式產品上的投資報酬 |
| 施加複雜度上限會增加函式數並降低可讀性 | 那個代價的量級(八次各自獨立重寫,差值含重寫本身的變異) |
左欄是形態:在一個產品上觀察到一次,足以證明這種現象會發生。右欄是量:需要多個產品、多次執行才量得到,這份實驗給不出來。所以各章引用的逐項數字要當成示例讀,不要當成基準值。
右欄是量的未知,不是機制的未知。「這份實驗不足以支持覆蓋率門檻在多大規模才失效」不等於「覆蓋率門檻在我的規模還有效」——拿右欄當成對自己有利的推定時,要說得出憑什麼。
#testing #ai-generated-code #acceptance-test #mutation-testing #evidence