這一篇交代本模組各章引用的那份對照實驗是什麼、它的設計限制在哪裡,以及哪些宣稱可以拿它當證據、哪些不行。各章的判斷標準本身出自機制推導,實驗提供的是那些機制一次外顯的形態,所以讀各章引用的數字之前先讀這一篇。

negative-test-experiment 的設計:四種測試紀律與複雜度上限開關的組合

實驗是 Robert C. Martin 公開的 negative-test-experiment:同一份需求從空目錄開始寫八次,八次由四種測試紀律乘上「有沒有施加複雜度上限」這個開關組成。案例側的完整記錄在 同一組驗收通過八個不同的程式 — 關卡放行的等價類有多大。

它只有一個產品(一個主控台文字遊戲)、一種語言,每一種組合只執行一次,設計與可讀性的評分由原作者本人以主觀量表給出。這幾個條件決定了它能支持的宣稱範圍。

negative-test-experiment 足以支持與不足以支持的宣稱

這份實驗足以支持的它不足以支持的
同一組驗收條件可以放行行為互不相同的多個程式那個等價類在任一個真實業務系統裡有多大
行覆蓋率在紀律差異極大的做法之間鑑別力很低覆蓋率門檻在多大的套件規模下才失效
突變測試長出的斷言集中在運算子層突變分數在正式產品上的投資報酬
施加複雜度上限會增加函式數並降低可讀性那個代價的量級(八次各自獨立重寫,差值含重寫本身的變異)

左欄是形態:在一個產品上觀察到一次,足以證明這種現象會發生。右欄是量:需要多個產品、多次執行才量得到,這份實驗給不出來。所以各章引用的逐項數字要當成示例讀,不要當成基準值。

右欄是量的未知,不是機制的未知。「這份實驗不足以支持覆蓋率門檻在多大規模才失效」不等於「覆蓋率門檻在我的規模還有效」——拿右欄當成對自己有利的推定時,要說得出憑什麼。