Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PHPカンファレンス関西2024
Search
Kanon
February 04, 2024
Technology
0
750
PHPカンファレンス関西2024
https://fortee.jp/phpcon-kansai2024
Kanon
February 04, 2024
Tweet
Share
More Decks by Kanon
See All by Kanon
なぜAWS S3ではなく Cloudflare R2を選ぶの? - Cloudflare Meet-up Osaka #4
ysknsid25
0
4
令和版ソフトウェアエンジニアの情報収集術 PHPカンファレンス香川2024
ysknsid25
4
830
ソフトウェアエンジニア観に影響を与えたアニメ・漫画の名言
ysknsid25
0
31
PHPカンファレンス小田原2024
ysknsid25
5
790
PHP"オレ"カンファレンスの告知
ysknsid25
0
440
なぜ人は組織から去っていくのか?
ysknsid25
0
51
Laravel Sail9から導入された Mailhogの後継Fake SMTP/mailpit を使ってみた
ysknsid25
0
42
GASとChatGPTを組み合わせてZennとQiitaの急上昇記事を紹介するTwitter botを作った
ysknsid25
0
19
アジャイル勉強法〜自分という製品を開発する〜
ysknsid25
0
150
Other Decks in Technology
See All in Technology
社内での継続的な機械学習勉強会の開催のコツ
yudai00
2
370
Deno で作る快適な “as Code” プラットフォーム – TSKaigi 2024
pizzacat83
4
280
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
5
38k
Databricksの生成AI戦略
taka_aki
1
340
RailsConf 2024 Keynote "Startups on Rails in 2024"
irinanazarova
0
680
OPENLOGI Company Profile for engineer
hr01
1
2.1k
Google Cloud Next '24 Recap in ZOZO AIにより変わる開発 運用/Development and operation changed by AI
gachimuchiengineer
0
150
多言語化対応における TypeScript の型定義を通して開発のしやすさについて考えた / TSKaigi TypeScript Multilingualization
nabeliwo
2
370
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
9
37k
グイグイ系QAエンジニアでやっていくよ!
____rina____
0
700
OPENLOGI Company Profile
hr01
0
45k
AWS アーキテクチャ作図入門/aws-architecture-diagram-101
ma2shita
16
6.7k
Featured
See All Featured
Docker and Python
trallard
35
2.7k
Mobile First: as difficult as doing things right
swwweet
217
8.6k
Debugging Ruby Performance
tmm1
70
11k
Gamification - CAS2011
davidbonilla
77
4.6k
For a Future-Friendly Web
brad_frost
172
9k
Testing 201, or: Great Expectations
jmmastey
30
6.4k
The World Runs on Bad Software
bkeepers
PRO
61
6.7k
Music & Morning Musume
bryan
41
5.6k
Product Roadmaps are Hard
iamctodd
45
9.8k
GraphQLとの向き合い方2022年版
quramy
33
12k
Creatively Recalculating Your Daily Design Routine
revolveconf
211
11k
The Pragmatic Product Professional
lauravandoore
26
5.9k
Transcript
Mutation Testingとはなにか? Laravel(Pest)でInfectionを使ってみる Kanon (@samurai_se) Copyright © 2023 blessing software.
All Rights Reserved. Illustrated by @amon_mikio
アジェンダ 2 Copyright © 2023 blessing software. All Rights Reserved.
Illustrated by @amon_mikio • 自己紹介 • Mutation Testingとは • 実際に使ってみる • 個人的な課題 • おわりに
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) • アニメと漫画と声優さんが好きです • 推しは水瀬いのりさんと早見沙織さんです
Mutation Testingとは Copyright © 2023 blessing software. All Rights Reserved.
Illustrated by @amon_mikio
Mutation Testingとは 5 Copyright © 2023 blessing software. All Rights
Reserved. Illustrated by @amon_mikio コードに意図的なバグを植え付けることで、 テストコードの検証が適切に行われているか? を測定する手法
自分が自動テストに対してずっと思っていたこと 6 Copyright © 2023 blessing software. All Rights Reserved.
Illustrated by @amon_mikio テストコードが正しく書けているか分からないのに、 どれだけたくさんテストコードを書いたところで 品質って担保できてないやん
カバレッジレポートの罠 7 Copyright © 2023 blessing software. All Rights Reserved.
Illustrated by @amon_mikio • 従来のカバレッジメトリクスは嘘をつく • 例えば以下の(極端な)テストケース コード参考:javascript-testing-best-practice
Pest(PHPUnitも?)はassertionがなければwarningを吐く 8 Copyright © 2023 blessing software. All Rights Reserved.
Illustrated by @amon_mikio
以下の(これまた極端な)例の場合は検知できない 9 Copyright © 2023 blessing software. All Rights Reserved.
Illustrated by @amon_mikio 適切な表示がされているか? を確認できていないが、テスト が通っている しかしプロダクションコード自 体は実行されているため、カバ レッジの%は上がる
そこでMutation Testing 10 Copyright © 2023 blessing software. All Rights
Reserved. Illustrated by @amon_mikio • Mutation = 突然変異 ◦ コードを意図的に変更し、バグを植え付ける ◦ ex) a===0 を a!==0と変異させる ◦ その後テストを実行し、正しいテストが書かれて いればアサーションがエラーとなるはず ◦ エラーとならなかった箇所がきちんと検証されて いないと判断できる • Googleでは2017~18年ごろから全社的に導入されてい るっぽい 参考:Googleにおける突然変異テストの状況 変異の内容
Mutation Testingに関わる指標 11 Copyright © 2023 blessing software. All Rights
Reserved. Illustrated by @amon_mikio • Killed ◦ 変異後、成功すべきテストが失敗したことにより 検知された変異の数 • Survived ◦ 変異後、失敗すべきテストが成功したことにより 検知された変異の数 つまり、Survivedの数が多ければ多いほどテストコードの品質が低い
Mutation Testingに関わる指標 12 Copyright © 2023 blessing software. All Rights
Reserved. Illustrated by @amon_mikio • MSI(Mutation Score Indicator) ◦ (Killed+/TotalMutant)*100 • これが低ければ低いほどテストコードの品質が低い
実際に動かしてみる Copyright © 2023 blessing software. All Rights Reserved. Illustrated
by @amon_mikio 当初ライブデモの予定でしたが後から資料を見てくれた人も動きが見れ るように動画にしています💦
試すことこと 14 Copyright © 2023 blessing software. All Rights Reserved.
Illustrated by @amon_mikio • 単純実行 • 並列実行してスピードアップ • 実際にレポートを見てみる
単純実行 15 Copyright © 2023 blessing software. All Rights Reserved.
Illustrated by @amon_mikio
並列実行 16 Copyright © 2023 blessing software. All Rights Reserved.
Illustrated by @amon_mikio
レポート 17 Copyright © 2023 blessing software. All Rights Reserved.
Illustrated by @amon_mikio
課題 Copyright © 2023 blessing software. All Rights Reserved. Illustrated
by @amon_mikio
実務で使うレベルの詳しい話と検証ができていない 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)がある このあたりはいずれまた別のカンファレンスで
Happy Hacking!! 20 Copyright © 2023 blessing software. All Rights
Reserved. Illustrated by @amon_mikio コミュニティ よろしくお願いします🙏