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
3
令和版ソフトウェアエンジニアの情報収集術 PHPカンファレンス香川2024
ysknsid25
4
830
ソフトウェアエンジニア観に影響を与えたアニメ・漫画の名言
ysknsid25
0
29
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
パフォーマンス最適化のベストプラクティス
databricksjapan
0
180
Google Cloudを組織(企業)で運用する時のベストプラクティス × 健康の環境分離戦略 #まるクラ勉強会
yasumuusan
0
120
Exadata Database Service on Dedicated Infrastructure(ExaDB-D) UI スクリーン・キャプチャ集
oracle4engineer
PRO
2
1.7k
AI JIMY - 登壇(インストール編)
hanacchi
0
130
SWC Transformerから見るTypeScript関数記述ベストプラクティス
fujiyamaorange
1
160
Password cracking: past, present, future
openwall
0
160
OPENLOGI Company Profile for engineer
hr01
1
2.1k
グイグイ系QAエンジニアでやっていくよ!
____rina____
0
670
Autonomous Database Cloud 技術詳細 / adb-s_technical_detail_jp
oracle4engineer
PRO
15
36k
Prisma ORMを2年運用して培ったノウハウを共有する
tockn
19
4.8k
Domain-driven Design: A Complete Example
ewolff
2
220
技術力の伸ばし方を考える
khirata
0
130
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
22
1.4k
The Cult of Friendly URLs
andyhume
74
5.7k
Automating Front-end Workflow
addyosmani
1357
200k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
15
1.6k
Building Better People: How to give real-time feedback that sticks.
wjessup
356
18k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
14
1.5k
Atom: Resistance is Futile
akmur
260
25k
4 Signs Your Business is Dying
shpigford
176
21k
Imperfection Machines: The Place of Print at Facebook
scottboms
261
12k
Reflections from 52 weeks, 52 projects
jeffersonlam
345
19k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
117
18k
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 コミュニティ よろしくお願いします🙏