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
180
こんなPHP開発者はイヤだ
sasezaki
2
3.8k
Introduction of Web scraping for PHP users
sasezaki
0
120
Other Decks in Technology
See All in Technology
Beyond Kaniko: Navigating Unprivileged Container Image Creation
f30
0
110
Should Our Project Join the CNCF? (Japanese Recap)
whywaita
PRO
0
300
モバイル界のMCPを考える
naoto33
0
380
Node-REDのFunctionノードでMCPサーバーの実装を試してみた / Node-RED × MCP 勉強会 vol.1
you
PRO
0
130
さくらのIaaS基盤のモニタリングとOpenTelemetry/OSC Hokkaido 2025
fujiwara3
2
280
Liquid Glass革新とSwiftUI/UIKit進化
fumiyasac0921
0
310
生成AI開発案件におけるClineの業務活用事例とTips
shinya337
0
190
AWS認定を取る中で感じたこと
siromi
1
130
ビギナーであり続ける/beginning
ikuodanaka
3
530
KubeCon + CloudNativeCon Japan 2025 Recap
ren510dev
1
320
KubeCon + CloudNativeCon Japan 2025 Recap by CA
ponkio_o
PRO
0
260
How Community Opened Global Doors
hiroramos4
PRO
1
130
Featured
See All Featured
A better future with KSS
kneath
239
17k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
For a Future-Friendly Web
brad_frost
179
9.8k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
Navigating Team Friction
lara
187
15k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.8k
Side Projects
sachag
455
42k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.3k
RailsConf 2023
tenderlove
30
1.1k
Automating Front-end Workflow
addyosmani
1370
200k
Gamification - CAS2011
davidbonilla
81
5.3k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
46
9.6k
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/ おわり