こんにちは、QAエンジニアの よしみつ です。
現在は、モバイルサービスアプリのアジャイルQAと、テスト自動化推進を行っています。
先日、3/9-10に開催された、JaSST’23Tokyoにオンライン参加してきました。
AGESTとヤフーによるテクノロジーセッション「ミューテーションテストの取り組み」を聴講しましたので、参加レポートをお伝えしたいと思います。
JaSSTとは
JaSSTとは「ソフトウェアテストおよびソフトウェア品質に関心のある方が深い学びを得ることを目指して、 ソフトウェアテスト分野の幅広い情報と、参加者同士の交流や議論ができる場を提供」するため、特定非営利活動法人ソフトウェアテスト技術振興協会 (ASTER)が主催する日本最大級のソフトウェアテストのシンポジウムになります。
JaSST’23 Tokyoのテーマは「相互理解で広がる世界」ということで、関連するセッションが多数催されました。
ミューテーションテストの取り組み
本講演では、前半、AGESTの坂本さんから「ミューテーションテストの概要について」
後半、ヤフーの片山さんから「ミューテーションテストの導入の流れと効果について」二部構成で発表が行われました。
ミューテーションテストとは
突然ですが、皆さん「ミューテーションテスト」って、ご存知ですか?
本講演を聴講して、ミューテーションテストがどういうもので、どんなメリットや課題があるのかという点について理解を深めることができました。以下に、概要をまとめます。
ミューテーションテストとは
- 単体テストの品質を見える化する手法
- ソースコードに対し、ミューテーションテストツールで作為的にエラーコードを入れ、その誤りを単体テストで検出できるかを確認する
- 誤りを加えられたコードを、ミュータントという
- ミュータントの誤りをどの程度検出できたかで、そのテストの有効性を計測することができる。この有効性の指標をミューテーションスコア(カバレッジ)という。
ミューテーションテストのツールは様々あるそうですが、
本講演では「Stryker Mutator(stryker-js)」を使った実例を紹介されていました。
上記ツールは、結果のレポートが見やすく、使いやすいとのことです。
ミューテーションテスト導入のメリット
- 単体テストの品質を見える化することが可能
- 従来のカバレッジだけではできなかった単体テストの品質の説明が可能になる
- 例え、単体テストの網羅率が100%だとしても、期待値の設定を誤っていたり、期待値の設定自体行っていないテストコードになっていては単体テストの品質は良いとはいえない
- コードカバレッジが高くても、単体テストの品質が高いとは言えない
- 不具合を検出する機会の増加
- ミューテーションテストの導入により、コードカバレッジで判別できないテストケース漏れを判別し、実装・実施することにより新たな不具合を検知することができる
- テストコードの品質向上
- 開発者がミューテーションテストに慣れてくると、最初から漏れの無いテストパターンが書けるようになる
- 単体テストコードレビューの効率・問題検知率向上
- 目視によるテストコードレビューでは漏れが発生しやすい問題を、ツールで検知できる
ミューテーションテストの課題と対策
ミューテーションテストの課題については、大きく2点挙げられていました。
- 確認コストが高いこと
- コード一行につき複数のミュータントが生成されるため、確認する量が膨れ上がる
- 実行結果の確認難易度が高い(プログラミングスキルや対象システムの知識が必要)
- テスト実行時間がかかること
- ミュータントの数だけ、ビルドとテスト実行が必要
- ミュータントは一行につき複数生成され、結果として膨大な数になる
これらの課題については、「ミュータントの数を減らすこと」「ミュータントの適用方法を変更すること」によって、対策を講じることが可能だそうです。
ミューテーションテスト導入事例
後半は、ヤフーにおける、ミューテーションテストの導入の流れと結果についての発表でした。
導入時の工夫や、実際に現場で起こった問題なども知ることができて、とても参考になりました。
ヤフーにおいて、ミューテーションテスト導入の背景として、解決したい課題が2点あったそうです。1点目は、市場不具合の削減、2点目は、現場へのヒアリングから「テストに課題がある」という状況が明らかになったことです。
そこで、より上流における品質担保、単体テストの品質改善を優先すべきである、との判断から、ミューテーションテストの導入に至ったそうです。
導入時の工夫として参考になった点としては、導入するサービスチームの担当者の方に対して、「実施の目的」「ミューテーションテストの概要」「導入の流れ」を丁寧に話をされていたという点です。
現場の担当者に、しっかり納得してもらうまで、数回に渡って説明の場を設けたという話を聞いて、改善の新たな取り組みを導入するためには、現場に寄り添った地道な関わりが大事だなと感じました。
また、ミューテーションテスト導入時の課題として「実行時間がかかる」ことを挙げられていました。この課題に対しては、ツールのオプション設定の見直し、並列処理と差分実行の工夫を行うことで、実行時間の改善ができたということです。
まとめ
本講演を聴講して、アジャイル開発における品質向上の施策として、単体テストの品質を改善すること、そのために、ミューテーションテストを導入することは、とても有効だと感じました。
また、ミューテーションテストの適用には開発スキルが必要であるため、QAとしてもスキルアップの必要性をあらためて実感しました。
最後までご覧いただき、ありがとうございました。