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
ヘルシープログラマになるための作業環境 - 作業環境自慢LT会
ysknsid25
1
28
技術書典16で頒布予定の新刊告知 - 技術同人誌を紹介LT会
ysknsid25
1
14
なぜAWS S3ではなく Cloudflare R2を選ぶの? - Cloudflare Meet-up Osaka #4
ysknsid25
4
270
令和版ソフトウェアエンジニアの情報収集術 PHPカンファレンス香川2024
ysknsid25
4
920
ソフトウェアエンジニア観に影響を与えたアニメ・漫画の名言
ysknsid25
0
34
PHPカンファレンス小田原2024
ysknsid25
5
800
PHP"オレ"カンファレンスの告知
ysknsid25
0
450
なぜ人は組織から去っていくのか?
ysknsid25
0
55
Laravel Sail9から導入された Mailhogの後継Fake SMTP/mailpit を使ってみた
ysknsid25
0
42
Other Decks in Technology
See All in Technology
Money-saving tips for the frugal serverless developer
theburningmonk
1
430
ハードウェアを動かすTypeScriptの世界
9wick
3
1.2k
CloudflareとHonoを使って飲食店のレビューができるLINEアプリを作った
shinaps
2
850
5分で分かる(かもしれない) Vector engine for OpenSearch Serverless
tsukuboshi
1
440
日本が誇るイタリアのダンスミュージック!? ユーロビートって何??
minorun365
PRO
2
240
複雑なビジネスルールに挑む:正確性と効率性を両立するfp-tsのチーム活用術 / Strike a balance between correctness and efficiency with fp-ts
kakehashi
5
3.7k
動画配信サービスのフロントエンド実装に学ぶ設計原則
yud0uhu
1
140
「できる!」を増やすGitHub Copilot活用法 / How to use GitHub Copilot to expand your possibilities
sansan_randd
1
250
Trade-offs all the way down
_aitor
1
120
The depthes of profiling Ruby - RubyKaigi 2024
osyoyu
1
320
Exadata Database Service on Dedicated Infrastructure(ExaDB-D) UI スクリーン・キャプチャ集
oracle4engineer
PRO
2
1.7k
Domain-driven Design: A Complete Example
ewolff
2
280
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
261
12k
Designing on Purpose - Digital PM Summit 2013
jponch
111
6.5k
Why Our Code Smells
bkeepers
PRO
331
56k
How GitHub Uses GitHub to Build GitHub
holman
468
290k
The Cost Of JavaScript in 2023
addyosmani
21
4k
WebSockets: Embracing the real-time Web
robhawkes
59
7k
Scaling GitHub
holman
457
140k
VelocityConf: Rendering Performance Case Studies
addyosmani
321
23k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
22
1.4k
No one is an island. Learnings from fostering a developers community.
thoeni
16
2.1k
5 minutes of I Can Smell Your CMS
philhawksworth
199
19k
Facilitating Awesome Meetings
lara
43
5.6k
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 コミュニティ よろしくお願いします🙏