← Agent 實驗室
課程 11面試 13

測試有效性實驗

左邊選擇要納入的 xUnit 測試,右邊比較「覆蓋率」與「變異分數」:覆蓋率只告訴你程式有沒有被執行到,變異測試才會問「把程式改錯,測試會不會失敗」。你會看到哪些測試只是在刷數字。

被測程式與測試

勾選要納入的測試
被測方法 CalcDiscount

        跑覆蓋率後,左側色條:綠=有被執行、紅=沒有。點右邊矩陣的變異標題,會標出被改動的那一行。
      
xUnit 測試(7 個)

這是教學用的模擬:覆蓋行數與「哪個測試殺死哪個變異」是依每個測試的程式碼預先推演、結果固定;真實專案請用 coverlet 量覆蓋率、Stryker.NET 做變異測試。

測試到底有沒有用

看完要記得

口試怎麼答(約 30 秒)

覆蓋率只代表程式有被執行到,不代表改錯時測試會失敗,所以下一步要追求有效性。找無效測試的方法是掃沒有斷言、只斷言不是 null 或用 try/catch 吞掉錯誤的測試,再用變異測試,也就是自動把程式改壞,看測試會不會失敗。脆弱測試則是重複執行、打亂順序,找出時好時壞的,並把時間和外部呼叫改成可注入的假資料。處理完後在 CI 加防線,要求 AI 寫測試時說明每個測試在防哪種錯。