この記事はソフトウェアテストの小ネタのカレンダー | Advent Calendar 2021 - Qiitaの19日目です。
テスト自動化している中での疑問
「テストカバレッジn%」って、何をどうカバレッジしてるのだろうか
— 伊藤由貴(Yoshiki Ito) (@yoshikiito) November 29, 2021
テスト自動化ツールの導入メリットの記事や発表などで「自動化によってカバレッジが向上しました!」や「このツールを導入することでテストカバレッジが向上します!」のような文面を見ることがあります。
ぱっと見では「なるほど!すごいね!」と思えるのですが、この「カバレッジ」が雰囲気で使われているような気がしたので、「カバレッジって何なの?」というのを少し考えてみましょう。
※「***なの?」はJaSSTnanoから来ています。が、本記事の内容に直接の関係はありませんのでスルーして大丈夫です
テストカバレッジ の意味
ISTQB Glossaryでの意味
テストの用語について考えるので、まずはISTQBの用語集を見てみましょう。(※用語集が正義、ではないです。念の為。)
カバレッジ(coverage)
テストスイートを使用して特定のカバレッジアイテムを判定または実行した度合い。パーセンテージで表す。
Synonyms: テストカバレッジ(test coverage)
via カバレッジ(coverage) | ISTQB Glossary
それほど直感と異なることは書いていません。「特定のカバレッジアイテム」の何%をテストしたのか、の意です。
カバレッジアイテム1~100があったとして、そのうち30の実行が済んでいたら「テストカバレッジ30%」ということになります。
次に「カバレッジアイテムって何なの?」という疑問が湧いてくるので、これも同じく調べてみると・・・
カバレッジアイテム(coverage item)
テスト技法を使用して、一つ以上のテスト条件から導出される属性または属性の組み合わせ。テスト実行の完全性を測定するために使用する。
via カバレッジアイテム(coverage item) | ISTQB Glossary
ちょっとややこしいことが書いてありますが、カバレッジアイテムはすなわちカバーの基準なので、「おれが思いついたこれらがカバレッジアイテムだ!」はダメということがわかります。(そりゃそうだ)
テスト技法を使用して、という部分で↑一定このような個人や感覚に依存しないものを目指しているように見えます。All-Pairなど使えば一応誰がやっても同じに近い基準になりますしね。
テストカバレッジ○%、はすごいのか?
では元の疑問にもどって、「テスト自動化によってテストカバレッジ○%を達成しました!」はすごいことなのか?を考えてみると、「ケースバイケース」になってしまいます。
なぜならカバレッジアイテムが明示されていないから、です。
厳密に「こんなテスト対象に対してこんなテスト技法を使ってこんなカバレッジアイテムを出して、その○%です」なんて冗長なので毎回は言わないのはもちろん理解できます。が、ぼんやりとでもカバレッジアイテムが知りたいところですね。
テストを自動化するとテストカバレッジは上がるのか?
これもカバレッジアイテム次第になりそうですが、上がる可能性は十分にあると考えます。
例えば「リリースまでの時間の制約があって、ほんとうはやりたいテストが100あったときに、重要度が高いほうから80しかできていませんでした」という場合(よく聞く)、テストを自動化して実行効率を上げることにより、ほんとうにやりたいテスト100をすべて実行してからリリースできるようになる、かもしれません。この場合はテストカバレッジを自動化で向上させた、と言えるでしょう。
(強引な)まとめ
結局言いたいのはコレです。
カバレッジアイテムがなんなのかを明示しないでテストカバレッジほげ%って言うのはやめようよ!
— 伊藤由貴(Yoshiki Ito) (@yoshikiito) December 18, 2021
余談
世の中では「カバレッジ」あるいは「テストカバレッジ」といったときに、暗黙にソースコードカバレッジを指すことがあるようです。 カバレッジアイテムをソースコードの網羅率(これも複数の基準がある)として、そのうちどのくらいの割合をテストできているの?を表す指標です。
テストカバレッジ=ソースコードカバレッジ、という前提で読んでしまうと、E2Eのテストを自動化してテストカバレッジが向上しました!と言われても「ん?」となるわけですね。