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.4k
はじめてのミューテーション解析 / 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
170
こんなPHP開発者はイヤだ
sasezaki
2
3.8k
Introduction of Web scraping for PHP users
sasezaki
0
110
Other Decks in Technology
See All in Technology
プロダクトエンジニア 360°フィードバックを実施した話
hacomono
PRO
0
130
(機械学習システムでも) SLO から始める信頼性構築 - ゆる SRE#9 2025/02/21
daigo0927
0
220
短縮URLをお手軽に導入しよう
nakasho
0
130
転生CISOサバイバル・ガイド / CISO Career Transition Survival Guide
kanny
3
1.1k
IAMポリシーのAllow/Denyについて、改めて理解する
smt7174
2
180
ソフトウェアエンジニアと仕事するときに知っておいたほうが良いこと / Key points for working with software engineers
pinkumohikan
1
130
設計を積み重ねてシステムを刷新する
sansantech
PRO
0
130
コンピュータビジョンの社会実装について考えていたらゲームを作っていた話
takmin
1
550
AIエージェント入門
minorun365
PRO
4
860
日経のデータベース事業とElasticsearch
hinatades
PRO
0
190
脳波を用いた嗜好マッチングシステム
hokkey621
0
260
大規模アジャイルフレームワークから学ぶエンジニアマネジメントの本質
staka121
PRO
2
140
Featured
See All Featured
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Docker and Python
trallard
44
3.3k
Rebuilding a faster, lazier Slack
samanthasiow
80
8.8k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
570
We Have a Design System, Now What?
morganepeng
51
7.4k
Adopting Sorbet at Scale
ufuk
74
9.2k
Build The Right Thing And Hit Your Dates
maggiecrowley
34
2.5k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
10
1.3k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Building Your Own Lightsaber
phodgson
104
6.2k
RailsConf 2023
tenderlove
29
1k
Making the Leap to Tech Lead
cromwellryan
133
9.1k
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/ おわり