使用RoaveInfectionStaticAnalysisPlugin提升MutationTesting質量,解決PHP類型錯誤問題

在進行 Mutation Testing 時,我們經常會遇到一些“幸存”的 Mutant,它們雖然沒有被現有的測試用例殺死,但實際上違反了代碼的類型約束,例如返回了錯誤的類型。這些 Mutant 會干擾我們對代碼質量的判斷,甚至誤導我們編寫不必要的測試用例。Roave Infection Static Analysis Plugin 通過集成靜態分析工具,可以有效識別并排除這類 Mutant,從而提升 Mutation Testing 的準確性和效率。 composer在線學習地址:學習地址 Mutation Testing 是一種通過修改代碼并運行測試用例來評估測試集有效性的方法。它通過引入各種小的代碼變更(Mutant),然后運行測試用例,如果測試用例能夠檢測到這些變更,則認為 Mutant 被“殺死”。然而,在 php 這樣的動態類型語言中,即使 Mutant 沒有被測試用例殺死,也可能違反了代碼的類型約束,例如返回了錯誤的類型。

roave infection static analysis plugin 的作用就是在 mutation testing 的過程中,利用靜態分析工具(目前主要支持 psalm)來檢查生成的 mutant 是否符合類型約束。如果 mutant 違反了類型約束,則會被標記為“殺死”,從而避免了我們編寫不必要的測試用例。

如何使用 Roave Infection Static Analysis Plugin

  1. 安裝

    使用 Composer 安裝 Roave Infection Static Analysis Plugin:

    composer require --dev roave/infection-static-analysis-plugin
  2. 運行

    立即學習PHP免費學習筆記(深入)”;

    使用 vendor/bin/roave-infection-static-analysis-plugin 命令來運行 Mutation Testing,而不是直接運行 vendor/bin/infection。

    vendor/bin/roave-infection-static-analysis-plugin
  3. 配置 Psalm

    通過 –psalm-config 參數指定 Psalm 的配置文件:

    vendor/bin/roave-infection-static-analysis-plugin --psalm-config config/psalm.xml

優勢

  • 提高 Mutation Score:通過排除違反類型約束的 Mutant,可以更準確地評估測試集的有效性,從而提高 Mutation Score。
  • 減少不必要的測試用例:避免了為違反類型約束的 Mutant 編寫測試用例,節省了開發時間和成本。
  • 更早發現類型錯誤:在 Mutation Testing 過程中,可以更早地發現代碼中的類型錯誤。

實際應用效果

假設我們有以下代碼:

/**  * @param Array<int, string> $values  * @return list<string>  */ function makeAList(array $values): array {     return array_values($values); }

如果 Mutation Testing 生成了以下 Mutant:

function makeAList(array $values): array { -    return array_values($values); +    return $values; }

這個 Mutant 雖然能通過一些簡單的測試用例,但實際上違反了類型約束,因為 $values 是 array,而返回值應該是 list。Roave Infection Static Analysis Plugin 可以通過 Psalm 識別出這個 Mutant 違反了類型約束,并將其標記為“殺死”,從而避免了我們編寫額外的測試用例來檢測這個錯誤。

總結

Roave Infection Static Analysis Plugin 是一個強大的工具,它可以幫助我們提高 Mutation Testing 的質量,減少不必要的測試用例,并更早地發現代碼中的類型錯誤。雖然目前還存在一些穩定性問題,但隨著 Infection 本身對插件支持的完善,相信它會變得更加易用和可靠。如果你正在使用 Mutation Testing,不妨嘗試一下 Roave Infection Static Analysis Plugin,相信它會給你帶來意想不到的收獲。

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享