mutation-testing:用 Agent Skill 跑 mewt/muton 變異測試戰役

前言

行覆蓋率能告訴你「哪些行被執行過」,卻很難說明斷言是否真的抓住了行爲變化。變異測試通過在源碼裏注入小改動、再跑測試套件,看有多少變異體被測試「殺死」——存活下來的變異體往往指向測試缺口或等價變異,需要人工甄別。

mewt 與 muton 是常用的變異測試工具,但戰役配置、範圍裁剪、超時調優和結果解讀步驟多、文檔分散。Trail of Bits 在 skills 倉庫裏把這套流程做成 mutation-testing Skill:按場景路由到配置、挖 bug、寫報告等工作流,並附帶命令與結果含義的參考說明。下面介紹它是什麼、能做什麼,以及如何安裝與典型用法。

這是什麼

mutation-testing 是 Trail of Bits Skills 中 Verification 類插件下的一個 Skill。官方描述爲:配置 mewt 或 muton 戰役、分析存活變異體、並針對測試薄弱處追查源碼問題。

Skill 聲明可用工具爲:Read、Write、Bash、Grep。它會根據你的意圖加載對應 workflow 與 reference,而不是一次性塞滿全部文檔。官方註明:muton 與 mewt 接口一致;下文示例以 mewt 爲準,使用 muton 時替換爲 muton 及 muton.toml、muton.sqlite 等文件名。命令行行爲以 mewt --help 與 mewt <subcommand> --help 爲準;示例反映 mewt 4.x API。

核心功能

場景路由

Skill 先判斷你要做哪類事,再加載列出的文檔(workflow 與 reference 不會自動互相加載):

場景 加載內容
搭建、限定範圍或加速戰役 workflows/configuration.md;若預估耗時很長或明確要求加速,另加 references/optimization-strategies.md
戰役結束,在未充分測試的代碼裏找 bug workflows/bug-hunter.md
把結果整理成正式分析報告 workflows/analyzing-results.md,以及等價變異、嚴重度、報告模板等 reference;區塊鏈目標另加 blockchain-patterns.md;非 mewt/muton 產出的結果可參考 input-formats.md
其他 以 mewt --help 爲準,直接協助

何時使用 / 不必使用

適合在對話裏提到 mewt、muton 或 mutation testing;需要配置、限定範圍或加速戰役;需要分析存活/未捕獲變異體、等價變異、擊殺率;或希望用變異結果在源碼裏找 bug。

不必使用當用戶只問測試或行覆蓋率、且完全沒有變異測試上下文時。

結果狀態含義

  • Caught / TestFail:測試發現了變異(期望行爲)。
  • Uncaught:測試未發現改動——需區分是測試缺口還是等價變異。
  • Timeout:測試超時,結論不確定,不能當作覆蓋證據。
  • Skipped:同一行上已有更嚴重變異體未捕獲時,較低嚴重度的變異可能被跳過。

嚴重度描述的是變異類型的優先級,不是業務風險;低嚴重度變異若落在計費等關鍵路徑,仍應優先人工審查。

安裝與啓用

mutation-testing 隨 trailofbits/skills 市場發佈,與具體編輯器/CLI 的安裝方式以官方倉庫爲準。

Claude Code

/plugin marketplace add trailofbits/skills

通過 /plugin menu 瀏覽並安裝對應插件。

Codex

codex plugin marketplace add trailofbits/skills
codex plugin list
codex plugin add <plugin-name>@trailofbits

本地開發時,在 skills 倉庫的父目錄執行:

/plugins marketplace add ./skills

安裝市場後,在插件列表中選擇 mutation-testing 所在插件(路徑:plugins/mutation-testing/)即可啓用 Skill。Cursor 側若通過兼容 Claude 插件市場的能力加載同一市場,步驟與上述市場添加方式一致;未在資料中單獨列出的客戶端差異不在此文展開。

典型用法

1. 初始化與跑戰役

先做初始化,再生成變異體或一次性跑完整戰役:

mewt init                    # 創建配置與數據庫
mewt mutate [paths]          # 只生成變異體,不跑測試
mewt run [paths]             # 生成變異體並執行戰役

2. 查看進度與結果

mewt status                  # 總覽及按文件拆分
mewt results                 # 默認:未捕獲的變異體
mewt results --all           # 全部結果
mewt results --format json   # json | sarif | ids | table

按路徑、嚴重度、變異類型、狀態或行號縮小範圍(results 與 print mutants 共用過濾語義):

mewt results --target 'src/auth/**'   # glob 建議加引號,避免 shell 展開
mewt results --severity high,medium
mewt results --mutation-types ER,CR
mewt results --status Uncaught        # Uncaught | TestFail | Skipped | Timeout
mewt results --line 42

3. 深入單條變異與複測

mewt print mutant --id [id]              # 查看變異後代碼
mewt test --ids [ids]                    # 複測指定 ID
mewt test --ids-file uncaught_ids.txt    # 從文件或 stdin('-')複測

4. 檢查配置與語言變異集

mewt print config                        # 當前生效配置
mewt print targets                       # 實際被變異的文件
mewt print mutations --language [lang]   # 某語言的變異算子與嚴重度

語言標籤爲 mewt 4.x 的 canonical family 或 family/dialect,例如 rust、javascript/ts、move/sui、move/iota。

5. 結合 Skill 解讀未捕獲變異

mewt print mutations --language [lang] 是算子與嚴重度的權威列表。資料中給出的優先級示例如下(具體 slug 以工具輸出爲準):

嚴重度 代表 slug 未捕獲時通常意味着什麼
High ER(Error Replacement) 測試容忍了注入的錯誤;需看路徑是否執行、錯誤處理是否掩蓋變化、斷言是否檢查結果
Medium CR(Comment Replacement) 刪掉語句測試仍通過;需判斷語句副作用是否被斷言觀察到
Medium IF/IT、NR 分支或條件變化未被區分;雙分支常量替換都存活可能表示條件未執行或斷言偏弱
Low AOS、COS 等算子_shuffle、BL、AS 等 關注邊界輸入與算術斷言;單憑變異結果不能證明代碼是否執行

分析正式報告、等價變異目錄與驗證步驟、嚴重度分級、報告結構等,在啓用 Skill 並進入「分析報告」路由時會加載對應 reference。

適用場景與注意

適合:已在或計劃使用 mewt/muton 的團隊;需要在 AI 輔助下完成戰役配置、長時戰役優化、存活變異體 triage,或從變異結果反推測試與代碼問題;智能合約等場景可在 Skill 路由下加載區塊鏈相關 pattern 參考(Solidity、Move、FunC/Tolk、Cairo、Solana Rust 等)。

注意:

  • 僅討論覆蓋率而不涉及變異測試時,不應依賴本 Skill 替代覆蓋率工具說明。
  • 外部工具(如 slither-mutate、mull、dextool-mutate)的結果導入需參考 input-formats.md,格式可能與 mewt/muton 原生輸出不同。
  • 超時條目不能當作「測到了」的證據;長戰役應結合 configuration 與 optimization-strategies 工作流做範圍與性能調優。

結尾

mutation-testing 把 mewt/muton 的配置、加速、結果分析與挖 bug 流程收斂成可路由的 Skill,降低變異測試這一進階主題的入門成本。官方 Skill 文檔:

https://github.com/trailofbits/skills/tree/main/plugins/mutation-testing/skills/mutation-testing

Skills 市場與安裝說明:

https://github.com/trailofbits/skills

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜