はじめに
こんにちは。ソーイ株式会社の工藤です。
本記事では、開発中のプロダクトのソフトウェアテストについて整理し、特に「シナリオテスト」がどのようにバグ発見やリリース品質の向上につながるのかをまとめました。
結論
シナリオテストは、単体テストや結合テストだけでは見つけにくい「ユーザー操作の流れで発生する不具合」を発見するのに有効です。
特に、複数の機能をまたいで利用するプロダクトでは、各機能が正しく動いていても、ユーザーが目的を達成するまでの流れの中で問題が発生することがあります。
そのため、シナリオテストは他のテストを置き換えるものではなく、単体テスト・結合テスト・システムテストでは拾いにくい観点を補うテストとして有効です。
想定読者
- バグがなかなか減らずに悩んでいる開発チーム
- ソフトウェアテストを担当している方
- テスト観点を増やしたい初心者エンジニア
この記事でわかること
- バグを減らすための考え方
- シナリオテストの基本的な考え方
- 他のテストとの違い
- シナリオを作るときのポイント
私たちの開発フロー
私たちのチームでは、2週間単位のアジャイル開発を行っています。リリース後に発生するバグは、ユーザー影響が大きく、対応の緊急度も高くなります。そのため、安全にリリースするために、複数の観点からテストやレビューを行っています。
実装後は、機能テスト、デザインレビュー、リリースレビューなどを行い、そこで発見したバグを都度修正してリリースしています。
それでもバグはなくならない
実装後に複数回のテストやレビューを行っていても、リリース後に不具合が発見されることがあります。
アジャイル開発の限られた期間の中では、すべての操作パターンを確認することは難しく、テスト段階で発見できないバグや、既存機能との組み合わせで発生するバグもあります。
特に、単体の機能としては正しく動いていても、ユーザーが実際に操作する流れの中で問題が見つかることがあります。そこで重要になるのが、ユーザーの行動を起点に確認する「シナリオテスト」です。それらのバグへの効果的な対応と今後の改修をスムーズに行うため、シナリオテストを行うことにしました。今回のシナリオテストは通常のフローとは切り分けて実施しました。
シナリオテストとは
シナリオテストとは、ユーザーが実際に行う操作の流れをシナリオとして定義し、その一連の流れが正しく動くかを確認するテストです。
たとえば、ECサイトであれば「新規ユーザーが会員登録をして、商品を検索し、購入を完了するまで」のように、ユーザーの目的達成までを一つの流れとして確認します。
他のテストとの違い
| 単体テスト | 結合テスト | システムテスト | シナリオテスト | |
|---|---|---|---|---|
| 確認の視点 | 開発者 | 開発者 | 開発者・仕様 | ユーザー |
| 確認範囲 | 関数・クラス単体 | 複数モジュールの連携 | システム全体 | 特定の操作フロー |
| テストの起点 | コード・仕様 | コード・仕様 | 要件 | ユーザーの行動 |
| 見つけやすいバグ | ロジックの誤り | 連携の不整合 | 機能の不足・仕様との差異 | 操作フロー上の問題 |
単体テスト・結合テスト・システムテストは、主に仕様や機能を起点としたテストです。そのため、各機能が正しく動いているかを確認するには有効です。
一方、ユーザーが目的を達成できるかという視点は抜けやすくなります。
シナリオテストでは、ユーザーの行動を起点にするため、複数機能をまたいだ操作の流れで発生する不具合を見つけやすくなります。
シナリオの作り方
シナリオは、「ユーザーが何を達成したいか」から作成します。
シナリオ例:新規ユーザーが商品を購入するまで
前提条件
- 未ログイン状態である
- 購入対象の商品に在庫がある
手順
- トップページにアクセスする
- 会員登録を行う
- 商品を検索する
- 商品詳細ページを開く
- カートに追加する
- 購入手続きに進む
- 支払い情報を入力して注文を確定する
確認内容
- 注文完了画面が表示されること
- 確認メールが届くこと
- 在庫数が減っていること
このように、シナリオは単なる画面操作の手順ではなく、「ユーザーが目的を達成できるか」を確認するために作成します。
また、正常系だけでなく、異常系のシナリオも用意することで、より実際の利用状況に近い確認ができます。
たとえば、以下のようなシナリオも考えられます。
- 支払い情報の入力に失敗した場合
- 商品が途中で在庫切れになった場合
- 会員登録済みのメールアドレスで登録しようとした場合
シナリオテストの有効性
シナリオテストでは、機能単位ではなく、シナリオのゴールまでの一連の操作を確認します。そのため、これまでのテストでは拾えていなかった操作パターンを確認でき、正常系のシステム理解を深めることにもつながります。
また、不具合の発見だけでなく、仕様に対する疑問や、ユーザーにとってわかりにくい操作の発見にもつながります。
独立行政法人情報処理推進機構(IPA)の資料でも、シナリオテストは従来テストと比較して不具合抽出に効果があることが紹介されています。
出典:独立行政法人情報処理推進機構(IPA)
「顧客の運用観点を取り入れたシナリオテスト抽出方法とその適用効果」
https://www.ipa.go.jp/archive/files/000057840.pdf
まとめ
シナリオテストは、ユーザーの行動を起点に、目的達成までの一連の流れを確認するテストです。
単体テストや結合テストでは各機能の正しさを確認できますが、ユーザーが実際に使う流れの中で問題が起きないかまでは確認しきれないことがあります。
そのため、シナリオテストを取り入れることで、以下のような効果が期待できます。
- 複数機能をまたいだ不具合を見つけやすくなる
- ユーザー視点で仕様を確認できる
- 操作性や導線の改善点に気づける
- リリース後の不具合リスクを減らせる
シナリオテストを通じて、機能やシステム起点のテストだけでなく、ユーザーが実際に使う流れを意識したテストを行うことが重要だと感じました。今後、より安全なリリースにつなげていきたいです。
お知らせ
技術ブログを週1〜2本更新中、ソーイをフォローして最新記事をチェック!
https://qiita.com/organizations/sewii

