Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHPカンファレンス関西2024

Kanon
February 04, 2024

 PHPカンファレンス関西2024

Kanon

February 04, 2024
Tweet

More Decks by Kanon

Other Decks in Technology

Transcript

  1. アジェンダ 2 Copyright © 2023 blessing software. All Rights Reserved.

    Illustrated by @amon_mikio • 自己紹介 • Mutation Testingとは • 実際に使ってみる • 個人的な課題 • おわりに
  2. 1. 自己紹介 3 Copyright © 2023 blessing software. All Rights

    Reserved. Illustrated by @amon_mikio 3 Kanon 株式会社 虎の穴ラボ 個人事業 blessing software @samurai_se ↓詳しくは↓ • 3次元に嫁が1人います。2次元にはたくさんいます。 • 本業はKtor(Kotlin), Next.js(TypeScript)で副業がLaravel(PHP), Next.js(TypeScript) • アニメと漫画と声優さんが好きです • 推しは水瀬いのりさんと早見沙織さんです
  3. Mutation Testingとは 5 Copyright © 2023 blessing software. All Rights

    Reserved. Illustrated by @amon_mikio コードに意図的なバグを植え付けることで、 テストコードの検証が適切に行われているか? を測定する手法
  4. 自分が自動テストに対してずっと思っていたこと 6 Copyright © 2023 blessing software. All Rights Reserved.

    Illustrated by @amon_mikio テストコードが正しく書けているか分からないのに、 どれだけたくさんテストコードを書いたところで 品質って担保できてないやん
  5. カバレッジレポートの罠 7 Copyright © 2023 blessing software. All Rights Reserved.

    Illustrated by @amon_mikio • 従来のカバレッジメトリクスは嘘をつく • 例えば以下の(極端な)テストケース コード参考:javascript-testing-best-practice
  6. 以下の(これまた極端な)例の場合は検知できない 9 Copyright © 2023 blessing software. All Rights Reserved.

    Illustrated by @amon_mikio 適切な表示がされているか? を確認できていないが、テスト が通っている しかしプロダクションコード自 体は実行されているため、カバ レッジの%は上がる
  7. そこでMutation Testing 10 Copyright © 2023 blessing software. All Rights

    Reserved. Illustrated by @amon_mikio • Mutation = 突然変異 ◦ コードを意図的に変更し、バグを植え付ける ◦ ex) a===0 を a!==0と変異させる ◦ その後テストを実行し、正しいテストが書かれて いればアサーションがエラーとなるはず ◦ エラーとならなかった箇所がきちんと検証されて いないと判断できる • Googleでは2017~18年ごろから全社的に導入されてい るっぽい 参考:Googleにおける突然変異テストの状況 変異の内容
  8. Mutation Testingに関わる指標 11 Copyright © 2023 blessing software. All Rights

    Reserved. Illustrated by @amon_mikio • Killed ◦ 変異後、成功すべきテストが失敗したことにより 検知された変異の数 • Survived ◦ 変異後、失敗すべきテストが成功したことにより 検知された変異の数 つまり、Survivedの数が多ければ多いほどテストコードの品質が低い
  9. Mutation Testingに関わる指標 12 Copyright © 2023 blessing software. All Rights

    Reserved. Illustrated by @amon_mikio • MSI(Mutation Score Indicator) ◦ (Killed+/TotalMutant)*100 • これが低ければ低いほどテストコードの品質が低い
  10. 実際に動かしてみる Copyright © 2023 blessing software. All Rights Reserved. Illustrated

    by @amon_mikio 当初ライブデモの予定でしたが後から資料を見てくれた人も動きが見れ るように動画にしています💦
  11. 試すことこと 14 Copyright © 2023 blessing software. All Rights Reserved.

    Illustrated by @amon_mikio • 単純実行 • 並列実行してスピードアップ • 実際にレポートを見てみる
  12. 実務で使うレベルの詳しい話と検証ができていない 19 Copyright © 2023 blessing software. All Rights Reserved.

    Illustrated by @amon_mikio • MSIの割合が一定以下の場合、CIをエラーにする ◦ —min-msi オプションがある • 毎回全てではなく、Git上差分のあるファイルだけを対象 ◦ —git-diff-lines オプションなどで可能 • CIでの実行レポートを参照する ◦ Cloud HTML Report(Strykerが提供するSaaS)がある このあたりはいずれまた別のカンファレンスで
  13. Happy Hacking!! 20 Copyright © 2023 blessing software. All Rights

    Reserved. Illustrated by @amon_mikio コミュニティ よろしくお願いします🙏