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
はじめてのミューテーション解析 / Mutation Testing
Search
kazusuke sasezaki
August 19, 2019
Technology
2
1.5k
はじめてのミューテーション解析 / Mutation Testing
社内勉強会向けに作成した資料です
kazusuke sasezaki
August 19, 2019
Tweet
Share
More Decks by kazusuke sasezaki
See All by kazusuke sasezaki
できる!!! Validation !!! - builderscon tokyo 2017
sasezaki
1
180
こんなPHP開発者はイヤだ
sasezaki
2
3.8k
Introduction of Web scraping for PHP users
sasezaki
0
120
Other Decks in Technology
See All in Technology
AI時代にPdMとPMMはどう連携すべきか / PdM–PMM-collaboration-in-AI-era
rakus_dev
0
240
Language Update: Java
skrb
1
160
コスト削減の基本の「キ」~ コスト消費3大リソースへの対策 ~
smt7174
2
320
つくって納得、つかって実感! 大規模言語モデルことはじめ
recruitengineers
PRO
32
12k
エラーとアクセシビリティ
schktjm
0
170
AWS環境のリソース調査を Claude Code で効率化 / aws investigate with cc devio2025
masahirokawahara
2
1k
Bye-Bye Query Spaghetti: Write Queries You'll Actually Understand Using Pipelined SQL Syntax
tobiaslampertlotum
0
120
【Grafana Meetup Japan #6】Grafanaをリバプロ配下で動かすときにやること ~ Grafana Liveってなんだ ~
yoshitake945
0
220
Nstockの一人目エンジニアが 3年間かけて向き合ってきた セキュリティのこととこれから〜あれから半年〜
yo41sawada
0
170
PRDの正しい使い方 ~AI時代にも効く思考・対話・成長ツールとして~
techtekt
PRO
0
310
トヨタ生産方式(TPS)入門
recruitengineers
PRO
6
1.4k
データアナリストからアナリティクスエンジニアになった話
hiyokko_data
0
240
Featured
See All Featured
Making the Leap to Tech Lead
cromwellryan
134
9.5k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Bash Introduction
62gerente
614
210k
Side Projects
sachag
455
43k
4 Signs Your Business is Dying
shpigford
184
22k
How GitHub (no longer) Works
holman
315
140k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Into the Great Unknown - MozCon
thekraken
40
2k
A Modern Web Designer's Workflow
chriscoyier
696
190k
Agile that works and the tools we love
rasmusluckow
330
21k
Done Done
chrislema
185
16k
Imperfection Machines: The Place of Print at Facebook
scottboms
268
13k
Transcript
はじめてのミューテーション解 析/ Mutation testing 2019年 8月19日 社内勉強会
今、Mutation testingが熱い! - Tests Coverage is Dead — Long Live
Mutation Testing - https://medium.com/appsflyer/tests-coverage-is-dead-long-live-mutation-testing-7fd61020330e - カンファレンス・meetupでのフィードバックサイト joind.inでの検索結果 - https://joind.in/search?keyword=mutation ・・・PHP界隈では(多分)
ほかの言語界隈だと・・・ - 「Javaの鉱脈」でPITの記事を書きました | さにあらず : https://blog.satotaichi.info/mutation-testing/ - テストをテストする方法-ミューテーションテスト- #gadvent
- うさぎ組 : http://kyon-mm.hatenablog.com/entry/2014/12/12/120000 - Mutation Testing with Ruby - (define -ayalog '()) : http://ayato.hateblo.jp/entry/20150202/1422839583 ※ ミュータント解析の提案は1993年とのことです http://jasst.jp/archives/jasst04/pdf/A5dh.pdf
用語の確認
ミューテーション解析 > テストスイートの完全性を判定する手法の一つ。プログラムのわずかな変形(変異)を テストスイートがどの程度識別できるかを測定する。 https://www.qbook.jp/qpterm/search?initial=%E3%81%BF http://jstqb.jp/dl/JSTQB-glossary.V2.3.J02.pdf
ミューテーションテスト (mutation testing) > back-to-back testingを参照のこと。 https://www.qbook.jp/qpterm/search?initial=%E3%81%BF http://jstqb.jp/dl/JSTQB-glossary.V2.3.J02.pdf
ミューテーション解析 > ミューテーション解析(ミューテーションテスト[1]、ミューテーション法)はソフトウェアテ ストにおける、テストスイートの十分さを測定するための手法である。この手法では、テ スト対象のプログラムの一部を機械的に書き換えることで、ミュータントと呼ばれる「人工 的な誤りを含むプログラム」を生成する。 https://ja.wikipedia.org/wiki/%E3%83%9F%E3%83%A5%E3%83%BC%E3%83%8 6%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E8%A7%A3%E6%9E %90
ミューテーション解析 > 脚注 ^ mutation analysisよりもmutation testingという単語が広く使われているが、 ミューテーション解析はソフトウェアが想定通りに実装されていることを直接確かめるテ スティングとは異なり、テスティングで利用されるテストケースの品質を評価するための 手法である。従って、本稿ではミューテーション解析という用語を主に利用する。
https://ja.wikipedia.org/wiki/%E3%83%9F%E3%83%A5%E3%83%BC%E3%83%8 6%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E8%A7%A3%E6%9E %90
なので、個人的には「ミューテーション解析」か「Mutation testing」という語に合わせたい と思ってます
どうやって測定するのか
どうやって測定するのか ・・・wikipedia「ミューテーション解析」のつづき > テストスイートをミュータントに対して実行した結果と、元のプログラムに対して実行し た結果が異なれば、テストスイートにはその誤りを発見するだけの鋭敏さが備わってい ると考えられるだろう(テストスイートはミュータントをkillすると表現する)。機械的に大量 にミュータントを生成したとき、そのうちテストスイートがkill出来るミュータントの割合を測 定することで、テストスイートの「欠陥発見能力」の十分さを測定することが出来る。 https://ja.wikipedia.org/wiki/%E3%83%9F%E3%83%A5%E3%83%BC%E3%83%8 6%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E8%A7%A3%E6%9E
%90
どうやって測定するのか ・・・ほかの方の説明では > Mutation testing とは、プログラムに対するテストケースが十分であるかを測定する手 法です。テスト対象のプログラムを機械的に変更してバグを埋め込み、テストがちゃんと 失敗するかどうかを調べます。バグのあるプログラムをテストするので、テストの失敗は バグを検出できたことを意味します。さまざまなバグを作り出してテストを行い、バグの 検出率によってテストケースの十分さを測定します。
https://y-uti.hatenablog.jp/entry/2018/11/18/161639
実際に Mutation testingツールを使ってみる
https://devblog.thebase.in/en try/2019/06/13/110000 より一部改変
None
None
None
10桁の場合の検出が されてないことが 分かる
10桁の場合のテストを追加して 再実行
None
実際のaudiobook.jpのコードに適用した場合(demo)
今回の PHPのmutation testingツール Infectionで用意 されているミューテター https://infection.github.io/guide/mutators.html
拡張として mbstringのミューテーターもあります https://infection.github.io/2019/05/18/whats-new-in-0. 13.0/#mbstring-mutators
ちょっと試してみての感想 - まず(行ベースの)コードカバレッジを100%にしないといけないことには変わりない(周知の事実) - (PHPでに限らず?) カバレッジをとったりいくつものミューテーションを実行するので割と実行時間が長い - https://speakerdeck.com/theofidry/mutation-testing-phpdeveloperday?slide=85
- PHP/Infection に限って言えば、まだ変形させられるものは一杯ある。 - 境界値テストの代わりになる。・・と思ったらダメ - コンポーネントの安心感にはつながりそう
各言語ごとのミューテーションツール一覧など theofidry/awesome-mutation-testing: Mutation testing resources: how to make better code
by introducing bugs - https://github.com/theofidry/awesome-mutation-te sting
表紙・イラスト https://hiyokoyarou.com/flower-color/ おわり