
前回の記事(テスト自動化とテスト設計【前編】~作成済のテストケースの整理と加工)では、テスト自動化のために既存のテストケースを整理・加工する際のポイントについて説明しました。
今回はテスト自動化を前提としてテスト設計(およびそれに伴うテスト計画やテスト分析の見直しなど)を行う際の方法について考えます。
これまでの連載記事とは異なり、「こうするとよい」「こうしましょう」といった、わたしの経験や一般の知見に基づくノウハウの共有という意味合いは少なくなっています。
むしろ、「わたしはこう考えて、こんなことをやっている。世の中ではこんなことが言われている。みなさんはどうですか?」といった、半分は読み手の皆さまへの問いかけとして本記事を書いています。
これをきっかけに、テスト自動化を前提としたテスト設計について情報の流量が増え、議論が活発になればうれしいです。
テスト自動化とテストプロセスとの関連についてあらためて整理
テストエンジニアやQAエンジニアの間でも、テスト自動化を業務で行っている方や経験がある方が増えているようです。
テスト自動化研究会が行ったアンケート結果の毎年の推移をみると、テスト自動化の経験がない方は少しずつですが下がっています。
しかし、テスト自動化が普及している一方で、テストエンジニアが普段の業務で扱っている「テストプロセス」と、「システムテストの自動化」とを完全に別のものとして考えてしまっている場合があるように思います。

上の図に近い形の方法が、前回の記事でご紹介したやり方です。
ただ、これも前回の記事で何度か触れたように、このやり方で進める場合はデメリットもいくつか考えられます。たとえば自動化をする際の手戻りが多くなるリスクがありますし、暗に「手動実行の効率化・工数削減」という視点で考えてしまいがちでもあります。
本記事でお伝えしたいことのひとつは、先の図における「手動テストの世界」と「自動テストの世界」は別々のものではなく、下図のように同じプロセスで検討されるべきものである、という点です。

テスト設計の先が2つに分岐していますが、実際には先の図で「手動テストの世界」として表現したテストプロセスと、そのアウトプットやフェーズには大きな違いがありません。
つまり、テストプロセスのアウトプットをあとから自動化向けに加工するのではなく、テスト自動化を考慮してテストプロセスに沿って進み、手動・自動それぞれのアウトプットを作成するほうが効果的ということです。
手動実行が前提のテスト設計と、自動化を考慮したテスト設計との違い
手動実行が前提のテスト設計、つまりテスト手順をあとから自動化するパターンの場合と、自動化を考慮したテスト設計とでは何が異なるのでしょうか?テスト分析やテスト設計の段階で自動化について考えておくと、どんなメリットがあるのでしょうか?
ひとつは、前編で触れた
– 手順や期待結果の具体化
– 順序や依存関係の整理
などが後追いではなく最初から行えるという点です。
他にも、以下のような違いが考えられます。
テストの範囲が広がる・網羅度合いが高まる
手動実行を前提としてテスト設計を行うと、プロジェクトの現実的なリソースでできる範囲でテストケースを作成する場合があると思います。
自動実行によって効率的に実行できるのであれば、本来やりたかった範囲をすべてテストする、網羅度合いを高めるといった選択ができるかもしれません。手動実行時に比べてテストケースの量を増やすことができる、とも言えます。
もちろん、テストは多ければ多いほど良いわけではありません。しかし、手動実行ではリソース等の制約があってできなかった範囲・量のテストが実行できる可能性が生まれる点は、メリットと考えられます。
実行頻度・フィードバックサイクルを増やせる
テストの範囲や網羅度合いに加えて、実行頻度やフィードバックサイクルを増やせる、というメリットがあります。
手動でシステムテストを実行する場合、たとえば「システムテストフェーズ」として一定の期間を設け、この期間内にシステムテストをすべて完了させるというやり方があります。その場合、テストケースもシステムテストフェーズで1回ずつ実行される前提で作成します。
しかし、自動実行を考慮してテスト設計を行うことで、「システムテストフェーズで行うテスト」というひとかたまりのテスト設計ではなく、より段階を分けて考えることができます。リグレッションテストに相当するテストをCIパイプラインに組み込んだり、もしくはステージング環境で毎晩実行したりと、テストの目的や内容に応じて実行タイミングや頻度を分け、増やすことができます。
自動化を考慮したテスト設計のポイント
これらのメリットを得るために、テスト分析やテスト設計の段階から自動化を考慮しておくことが大切です。
自動化を考慮してテスト設計を行う際のポイントは前述の「手動実行が前提のテスト設計と、自動化を考慮したテスト設計との違い」がほぼそのまま該当します。
ただ、ここまでに出てきていない注意点としては
– 自動化によって抜けがちな観点に注意しましょう
ということをお伝えしておきます。
手動実行向けのテストを自動化する際にも同様の注意が必要になりますが、テストを自動実行することによる実行効率UPと引き換えに、手動実行時に人間が暗に確認しているさまざまな観点が抜け落ちることになります。
単純な例で考えると、たとえばテスト設計時に「ログイン処理は簡単に自動化できるから、自動実行するテストとして設計しよう」と考えたとします。そうするとログインに関するテストは自動実行でカバーできているからOK!と思いがちですが、ログイン処理における画面表示の問題などは単純な自動テストスクリプトでは見逃されてしまいます。
こうした、自動実行するテストでカバーできていない範囲・観点があるにもかかわらず、機能や画面としては自動テストで見ている、という場合は必要な観点が見逃されがちです。
まとめ
今回はテストプロセス、とくにテスト設計時にテスト自動化を考慮して行う際の考え方等について説明しました。
こうした、テストプロセス中のどのタイミングで、自動化に関するどんなことを考慮するかについてはまだまだ議論や改善の余地があると考えています。
わたしも普段の業務における自動化向けのテストケース設計のやり方はいろいろと模索中で、過去のテスト設計コンテスト決勝進出チームの成果物なども繰り返し参照しながらよりよい形を考えています。
本記事がなんらかのヒントになればもちろんうれしいですが、それ以上に「もっとこう考えるべきでは」などいろいろな意見をいただけると、よりありがたいです。
参考
– 自動テストを活躍させるための基礎作りとテスト設計の工夫 – Speaker Deck
連載一覧
テスト自動化ツールの選定【前編】~ツールの比較表をどう活用するか
テスト自動化ツールの選定【後編】~AI自動テストツールを選ぶ時に気をつけるべきポイント
テスト自動化の普及と推進【前編】~阻害要因と対策
テスト自動化の普及と推進【後編】~個人レベルでテスト自動化を学ぶ
テスト自動化とテスト設計【前編】~作成済のテストケースの整理と加工
テスト自動化とテスト設計【後編】~テスト自動化のためのテスト設計


