テストコード品質を高めるためにMutation Testingライブラリ・Strykerを実戦導入してみた | TSKaigi Kansai
スピーカー
Mutation Test
コードを意図的に変更し、バグを植えつける
その後テストを実行し正しいテストが書かれていればアサーションがエラーになるはず
エラーとならなかった箇所は検証されていないと判断できる
Killed
成功するテストが失敗した
Survived
失敗すべきテストが成功した
Mutation Score
Killed / Total * 100
Stryker
JS, C#, Scala
TS, .tsxもOK
vitest-runnerがある
実戦で困ったこと
正攻法で実行すると死ぬほど遅い
Stryker Dashboardがプライベートリポジトリだと使えない
遅い問題
Unitテストが2, 30秒くらいで終わる/Mutation Testは160分34秒
mutantの数は対象ファイルと種類の掛け算
全体の実行時間はmutant数とテストケース数の掛け算
Strykerのデフォルト設定では、すべてのファイルと全mutantの掛け算
→絞ってあげれば良い
絞っても23(m)54(s)
→差分実行を使う
対象ファイルに差分があった箇所のみ実行する
incremental: true
13sまで短くなった
Stryker Dashboardがプライベートリポジトリで使えない問題
CIに組み込んで検証した結果をみたい
Stryker Dashboardは使えない
結果をGCSへ送信してSlack通知するように
導入した結果どうなった?
カバレッジ高い数値をキープ
Mutation Testがあるおかげでカバレッジも信頼できるように
感想
Good
品質への意識が高まる、PRを小さくする文化が浸透(大きくするとmutation testの実行時間が増えるため)
小さいプロジェクトだったので早く実行できている
入れる場合は部分的に入れると良さそう
Bad
CIのタイミングではSurivivedしているかを知ることができない