シナリオテストについて
シナリオテストとは
この部分ではシナリオテストとはどんなもので、何を目的に実施されるものなのかについて紹介します。
シナリオテストの特徴
シナリオテストとは、ユーザーの実際の操作や業務フローを模擬し、その一連の流れの中でシステムが正しく動作するかを検証するテスト手法のことで、システムの内部構造には着目しないブラックボックステストの1種です。1990年代以降、ユーザー中心設計(UCD)やユースケース駆動開発(Use Case Driven Development)の考え方が広まり、「機能単体のテストだけでは不十分だ」「ユーザーが実際にどう使うかを考慮すべきだ」という認識が強まっていきました。そうして現場で自然に発展してきたのがシナリオテストです。
シナリオテストの目的は、システムがユーザーの満足度を保証する品質であることを確かめることです。ユーザー視点にたったテストであるため、ユーザーの満足度を低下させる不具合を検出するのに向いています。また、テスト環境もユーザーが用いる環境を想定しているので、前工程では検出できなかった不具合も検出できます。
そもそもシナリオとは、台本のことを指します。つまり、途中で分岐するものではなく、開始から終了までがひとつにつながっています。システム開発の世界で、シナリオとは、ユーザーやシステムの動きの“物語”のことです。現実の使い方をイメージして、設計・開発・テストに活かされる重要な視点だと言えます。
実際の現場では、現実の使い方に即して、場合分けを行い、ある程度の数のシナリオが準備されます。あらゆる分岐を想定したシナリオを作ることもできますが、膨大な数となるため、例外的なシナリオも含めて、重要なシナリオを選定し、テストすることになります。
ユースケーステストとの違い
ユースケーステストとシナリオテストは共通点が多く、事実、同義として扱われることもあります。しかし、テストの対象範囲や、その目的には違いがあります。テストの対象範囲としては、ユースケーステストが機能ごとに検証が行われるのに対して、シナリオテストでは、ユーザーの利用を想定して機能を横断的に検証し、そこには例外的な使い方についての検証も含まれます。また、実施されるタイミングについても違い、ユースケーステストが初期チェックとして行われるのに対して、シナリオテストは開発の最終確認として行われます。
目的については、ユースケーステストが、顧客からの要件を満たしているか確認することであるのに対して、シナリオテストの目的は前述したように、システムがユーザーの満足度を保証する品質であることを確かめることですので、ユースケーステストよりも、より実運用に近い形での振る舞いを確認することになります。
シナリオテストのメリットとデメリット
ここでは、シナリオテストを実施するメリットとデメリットについて紹介します。
メリット
シナリオテストのメリットには以下のようなものがあります。
- 機能間の連携やフローの確認ができる
- 実際の利用状況に近いテストができる
- 業務プロセス全体の理解が深まる
機能間の連携やフローの確認ができる
検証されるシステムのほとんどは単一の画面で操作が完了するほど単純な構造ではありません。システム内の様々な機能が画面遷移やデータ引継ぎを行って互いに関係しあって動いています。実運用に近い形でテストするためには単一の機能を検証するだけでなく、機能間の連携やデータのフローの確認が、システムの不具合を検出するには欠かせなくなります。
実際の利用状況に近いテストができる
シナリオテストでは、様々なシナリオを用意し、複数の仮想ユーザーを設定して、システムの検証が行われていきます。このようにすることで、システムが要件通りに振る舞うかを確認するとともに、ユーザー目線での問題や不具合、または仕様上の不備を検出しやすくなります。機能に問題がなくてもユーザー目線では使いにくかったり、手間がかかる場合もあります。こうした問題点も発見されやすくなります。
業務プロセス全体の理解が深まる
テストを通じて、開発者やテスターの業務についての理解度が増すこともメリットの一つです。業務プロセスの理解度が増すなら、仕様の認識ずれや、要件の見落としなどを減らしていくことができます。
デメリット
シナリオテストのデメリットには以下のようなものがあります。
- 網羅性を高めようとするとテスト設計・実施に時間と労力がかかる
- シナリオに含まれない部分の不具合を検出しづらい
網羅性を高めようとするとテスト設計・実施に時間と労力がかかる
シナリオテストは、業務の流れやユーザー行動を正確に理解したうえで設計する必要があり、単純な機能テストよりも準備に時間がかかります。テストのパターンを複雑にし、大量のシナリオを用意すれば、テストの精度はあがりますが、その分、時間も手間もかかってしまうことは覚えておきましょう。
ユーザーが利用する上で欠かせない流れのみのシナリオを用意し、それを実施するのが良いでしょう。業務上ありうる例外事項に関しては代表的なものを選定し、できるだけ効率よくテストを行えるように心がけましょう。
シナリオに含まれない部分の不具合を検出しづらい
シナリオを用意して、それに沿って行っていくシナリオテストでは、ユーザーの操作の流れを中心にテストするため、個々の機能の細かな異常系や例外的な入力パターンまではカバーしにくいことがあります。また、シナリオテストは複雑な操作の流れを含むことが多く、自動化がしづらく、基本的に手動で行うケースが多いので、どのようなシナリオを用意するかが非常に重要になってきます。
シナリオテストの作成手順
ここでは、シナリオテストを作成手順を紹介します。
- テスト対象を明確にする
- 業務フローの可視化
- シナリオを詳細化する
- 確認項目と期待値を明確にする
テスト対象を明確にする
シナリオテストを作成するときにまず取り組むのは、テスト対象を明確にすることです。つまり、どのシステム・機能をテストするのかを明確にします。テストの目的」・方針が決まれば、テストすべき範囲も明確になります。そうすれば、テストの効果を測ることもできるようになります。このとき、検証するシステムに外部からアクセスする利用者やシステム(アクターと呼ばれる)も明確にしておきましょう。シナリオテストは、アクターが操作手順に従って不具合がないか検証する形式のテストなので、アクターがいなければ始まりません。
業務フローの可視化
次に、検証する対象となる機能をどう検証したいのか確認します。例えば、勤怠確認のシステムであれば、ログイン→打刻→就業時間の報告という流れがユーザーにとって満足のいくものである必要があります。そのために、業務フロー図などを用いて業務フローを明確にします。このとき、ユーザーだけでなく外部からアクセスするシステムも明確にしておきます。このようにするなら、システムの内と外に関わらず関係性をはっきりと把握することができ、シナリオの作成に役立ちます。
シナリオを詳細化する
可視化した業務フローからテストに必要なシナリオを選定します。そして、時系列、条件、優先度に着目してシナリオを詳細にしていきます。
まとまった業務単位の始まりから終わりまで、操作内容(ステップと呼ばれる)をかきだしていきます。このときひとつひとつのステップで、ユーザーがどんなことを求めているか、また、どんな心理状態かをイメージしてシナリオを作成していきましょう。そうするなら、ユーザーのニーズやどんな行動をするか予測しやすくなります。
ステークホルダーからの聞き取りや、過去の類似のシステムでの操作事例を参考にすることもできます。
確認項目と期待値を明確にする
作成されたテストケースを用いる上で必要になるのは、確認項目と期待値です。確認項目とは、実際の操作で確認できる項目のことを指します。具体的には、機能としての正しさ(シナリオ通りに機能が動作するか)、データの整合性(入力したデータが正しく登録・更新されているか)、エラーハンドリング(想定外の操作や不正な入力時に適切なエラーメッセージが表示されるか)などが挙げられます。また、期待値とは、システムがどのように動作すべきか、を示す基準です。確認項目ごとに期待値を設定します。
確認項目と期待値を設定するときには、ユーザーに表示される内容が変化するステップに着目しましょう。ユーザー目線で業務の進行に問題がないか確認するというシナリオテストの目的をいつも忘れないように心がけましょう。

シナリオテストで気を付けたいこと
シナリオテストはテストケースの数を増やせば精度があがりますが、開発者側の負担が大きくなります。また、ユーザー視点でテストをしても、実際のユーザーが使用した感想とは異なることを覚えておきましょう。
シナリオを細かくしすぎない
シナリオを細かくする(シナリオの粒度をあげる)とテストの精度があがりますが、開発者側の負担が大きくなります。なぜなら、確認手順や期待結果の記載などが増えてテストケースの作成に手間が増えますし、テスト実施の際、テスターは大量のインプット作業を必要とされ負担となるからです。シナリオの重要部分は掘り下げるべきですが、ほかの部分についてはバランスをとるようにしましょう。シナリオの優先順位を考えて選択するようにしましょう。例えば、情報の発生と受け取り、データの更新と蓄積、業務の進行と例外対応に関わるような、システムとして重要な部分の粒度は細かくし、ほかの部分のシナリオは簡略なものを選ぶようにすることができます。
また、テストケースを作成する時は、ある程度まとまった業務単位(例:ログイン〜検索〜申込)で構成するようにしましょう。そして、テスト仕様書には、確認手順、期待結果、正しい操作の定義などを記載してテスト実施者が変わっても、同様のテストができるようにしておくなら、より効率よくテストを進めることができるでしょう。
シナリオを網羅的にする
シナリオを網羅的にするなら、テストの信頼性を高めることができます。まず、検証するシステムを利用するユーザーのすべてがマニュアル通りに操作をするわけではありません。また、システムの利用に慣れている人もいれば、慣れていない人もいます。より幅広いユーザーの満足度をあげるためにも、ユーザーが間違った操作をしたときの異常系やリスクの高いシナリオを取り入れて検証を行うようにしましょう。

機能間の連携を含むシナリオも用意しましょう。単独の機能の操作では不具合がでずとも、別の機能を同時に使ったり、または組み合わせるとシステムに不具合がでるということがありえます。ある程度まとまったシステムの利用単位でシナリオを設定し、複数の機能の組合せのパターンを増やしてテストするようにしましょう。
実際のユーザーからフィードバックをもらう
開発担当だけでシナリオテストを作成すると、実際の業務フローからはずれたシナリオが作成されることがありえます。これを避けるためには、テストシナリオを実際のユーザーにレビューしてもらうことができます。もしくは、シナリオテストを実際に行ってもらい、フィードバックをもらうこともできます。もしくは、ほかのシステムの要件や、過去のユーザーの操作ミスなどの事例を参考にすることもできるでしょう。
まとめ
シナリオテストとは、ユーザー視点を想定した、システムやソフトウェアの満足度を確認するためのテストです。シナリオと呼ばれる、システムやソフトウェアの操作の一連の流れにそっておこなわれます。十分な数のシナリオを準備し、テストを実施するために手間と工数がかかりますが、システムやソフトウェアの品質を高めるのには欠かせないテストといえます。
この記事を書いた人