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
720
PHPカンファレンス関西2024
https://fortee.jp/phpcon-kansai2024
Kanon
February 04, 2024
Tweet
Share
More Decks by Kanon
See All by Kanon
ソフトウェアエンジニア観に影響を与えたアニメ・漫画の名言
ysknsid25
0
25
PHPカンファレンス小田原2024
ysknsid25
5
760
PHP"オレ"カンファレンスの告知
ysknsid25
0
430
なぜ人は組織から去っていくのか?
ysknsid25
0
45
Laravel Sail9から導入された Mailhogの後継Fake SMTP/mailpit を使ってみた
ysknsid25
0
42
GASとChatGPTを組み合わせてZennとQiitaの急上昇記事を紹介するTwitter botを作った
ysknsid25
0
15
アジャイル勉強法〜自分という製品を開発する〜
ysknsid25
0
140
PHPカンファレンス関西2024は神戸で過ごそう
ysknsid25
2
630
要件を理解するために、非エンジニアと一緒に業務をこなした話
ysknsid25
1
92
Other Decks in Technology
See All in Technology
ルーターでプレゼンする
puhitaku
1
3.4k
One engineer company with Ruby on Rails
rstankov
2
450
VSCodeの拡張機能を作っている話
ebarakazuhiro
1
830
Babylon.js JAPAN活動紹介 (2024/4)
limes2018
1
120
DX企業CTOとして考える技術への向き合い方
shoheitai
0
100
M&A戦略を支えるデータマネジメント (MIDAS Tech Study #16 GENDA Komiyama)
kommy339
1
150
個人のAWSアカウントをマルチ運用してみた
miura55
2
230
生産性向上チームの紹介
cybozuinsideout
PRO
1
960
Building a RAG-poweredAI chat appwith Python and VS Code
pamelafox
0
170
中年男性がメインフレームから クラウドへキャリアシフトしてみた
uechishingo
0
380
実例で紹介するRAG導入時の知見と精度向上の勘所
yamahiro
7
2.1k
AWSに詳しくない人でも始められるコスト最適化ガイド
yuhta28
2
410
Featured
See All Featured
Done Done
chrislema
178
15k
BBQ
matthewcrist
80
8.8k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
123
39k
Six Lessons from altMBA
skipperchong
22
3k
Facilitating Awesome Meetings
lara
43
5.6k
A Tale of Four Properties
chriscoyier
153
22k
Web Components: a chance to create the future
zenorocha
306
41k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
22
1.6k
Fashionably flexible responsive web design (full day workshop)
malarkey
398
65k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
242
1.2M
A Philosophy of Restraint
colly
197
16k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
26
2.3k
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 コミュニティ よろしくお願いします🙏