この記事は、「ソフトウェアテストの小ネタ Advent Calendar 2021」の26日目の記事(自称)です。
きんぢさんのブログ記事、「テストケースを束ねしもの -とあるテスト管理ツール開発者の気づき-」に触発されて、テストケースの「束ね方」について、私見を書こうと思います。
ただその前に、前提となる「テストケースとテスト実行の分離」の一般的な*1考え方について整理してみます。というのも、テスト管理ツールを知らない人にとって、その理解が最初の障壁になりがちだと感じるからです。
Excel1件1行型テスト管理の問題点
Excelをはじめとするスプレッドシートによるテスト管理では、こんな表が登場します。
テストケースの内容と、テスト実行の結果が、1行で管理されていますね。
つまり、テストケースとテスト実行が1:1で結合した構造ということができます。言い換えると、1つのテストケースに対して、テスト実行の情報を1つしか持てないということです。
模式的に描くと、以下のようになります。
この形には、2つの問題が内在しています。
問題点1: テスト実行が失敗した場合の管理が煩雑になる
あるバージョンにおけるテストを考えてみましょう。
テストケースが1回目の実行で失敗すると、Excelの「結果」欄にたとえば「×」などと書くことになるでしょう。
失敗の原因がテスト環境の不備だったとして、それをあらため、テスト再実行。今度はうまくいきました。Excelのテスト結果を「〇」にしましょう。
・・・いえ、それだと失敗した履歴が消えてしまうので、「×→〇」と書いておきましょうか。
「実施日」欄にはどう書きましょう。「2021/12/24」と「2021/12/25」、2回分の実行日を書いておきますか?
すでに地獄感がありますよね。
テスト結果に「〇」「×」以外の「×→〇」という新しくて気持ち悪い値が出てきたうえに、今後も「×→×→〇」など、どんな値が出てくるかもわかりません。せっかく表計算ソフトで管理しているのに、これでは集計が大変そうです*2。
あるテスト期間で行うテストケース1つに対して、テスト実行の回数は0か1ではなく、「0以上」なのです。それを無視して、複数の実行を1つの記録に押し込もうとすると、どんどんぐちゃぐちゃになっていくんですね。
問題点2: 複数のバージョンで実行するテストケースの関連が失われる
Excelテスト管理ではありがちなのが、「前のバージョンのテストケース一覧をコピーして、新しいバージョンをテストケース一覧のベースにする」プラクティス(?)です。
この際に、コピー元とコピー先の情報の関係が保持されることは、まずありません。まったく同じ内容のテストケースであっても、それを把握するための情報が失われているのです*3。
上の図でいうと、テストケースAとテストケースA'が実は同一であることがわからなくなります。
すると、「このテストケースを前回やったのはいつだっけ?」が遡れません。「同じテストケースで過去にも欠陥が見つかっている」といった分析もできなくなりますね。
またこのコピーによる副作用として、「自分たちがテストケースをいくつ持っているのかわからなくなる」 という問題もあります。バージョンごとに毎度コピーを作っているため、ユニークなテストケース件数がわからなくなってしまうのです。
テスト管理ツールによる問題解決
2つの問題は、テストケースとテスト実行の関係を多対多で管理することで解決できます。
解決1: テスト実行はそれぞれ別に管理する
あるバージョンのテストにおいて、1つのテストケースは複数回実行されることを前提にします。それぞれのテスト実行の情報(実行結果、実行日時など)は、独立した別のレコードとして記録されます。
気の利いたテスト管理ツールであれば、各テストケースの最新の結果を、サマリとして表示してくれます。
解決2: テストケースをバージョンに「割り当てる」
「バージョンがあって、その中でテストケースを作る」のではなく、「一元管理されたテストセットがあって、バージョンに対してはその中からテストケースを割り当てる」 という考え方になります。
これによって、複数バージョンで同じテストケースを行う場合でも、両者の関係が維持されます*4。
まとめ
テスト管理ツールでは普通、テストケースとテスト実行の関係を以下のように捉えます。
1. テストセットの中からテストケースを選定し、割り当てる。
2. テストケースは1つのバージョンの中でも複数回実行されうる。
Excelテスト管理の文化からすると、テスト管理ツールにおける各概念とその関係性に戸惑いを覚えることがあります。が、無意味に難解になっているわけではなく、むしろ合理的な考えに基づいてこの姿になっているということです。
*1:この記事における「一般的な」「普通は」という言葉の意味するところは、筆者が見た範囲でそうなっている、という意味です、ごめん。
*2:もちろん、Excelをがんばって作りこめば、一番最後の文字を取得して最終結果と見なすなどの式は書けるだろう、でもやりたくない・・・。
*3:もちろん、Excelをがんばって作りこめば情報を保持することはできるだろう、でもやりたくない・・・。
*4:細かくいうと、バージョン1とバージョン2では、テストケースAの内容が変更されていることもありうる。普通は、その時点のテストケースの内容がスナップショットして保持されている。しかし依然として、行われたテストケースが同一のアイデンティティをもったものであるという情報は保持される。