- テスト シナリオは、何を検証するかを 1 行で記述したものです。
- テストケースでは、それを検証する方法を示す手順、データ、および予想される結果が提供されます。
- 通常、1 つのシナリオで複数のテスト ケースが生成されます。
- 詳細をリスクに合わせます。迅速なチームには軽いシナリオを、重要な作業や規制された作業には完全なケースを提供します。
新しいテスターは、これら 2 つの用語が同じ意味であるかのように使用されているのをよく聞きます。そうではありません。 テスト ケースとテスト シナリオの違いは主に詳細レベルにあり、それを理解することは、テストを開始する前にどこまで記述するかを決定するのに役立ちます。
このガイドでは、それぞれについて説明し、要件からシナリオ、完全なテスト ケースに至るまで、単一のパスワード リセット機能について説明します。この機能とそのルールは発明された一例です。用語もチームやツールによって若干異なるため、自分のチーム内でこれらの用語が何を意味するかについて合意してください。
短い答え
テスト シナリオは、「ユーザーが忘れたパスワードをリセットできるかどうかを確認する」など、確認する状況を説明します。通常は 1 行で、詳細はテスターに任せます。
テスト ケースは、その状況内の 1 つの条件 (前提条件、手順、テスト データ、および期待される結果) を確認する方法を正確に説明します。これに続く 2 人のテスターは同じ評決に達するはずです。
旅行の計画を考えてみましょう。シナリオは「プネーからデリーへの旅」。テスト ケースは、フライト番号、出発時刻、各段階で行うべき内容を含む完全な旅程です。
テストケースとテストシナリオを並べて表示
| アスペクト | テストシナリオ | テストケース |
|---|---|---|
| 質問に回答しました | 何をテストすべきでしょうか? | 正確にどのようにテストするのでしょうか? |
| 詳細 | ハイレベル | 低レベルかつ具体的 |
| 一般的な長さ | 一行 | いくつかのフィールドとステップ |
| 由来 | 要件、ユーザーストーリー | テストシナリオ |
| テストデータも含まれますか? | まれに | はい |
| 期待される結果が含まれていますか? | 暗黙的 | はい、明示的に |
| 書く時間 | 分 | もっと長い間 |
| メンテナンス | 低い | 詳細が変わるため、より高くなります |
| テスターの自由 | 高 | 低い |
| こんな方に最適 | 対象範囲の概要、高速チーム | 重要なフロー、監査、引き継ぎ |
テストシナリオとは何ですか?
テスト シナリオは、ユーザーが実行する可能性のあること、またはシステムが処理する必要がある状況についての簡単な説明です。それは外部から見て何が重要であるかに焦点を当てており、通常は要件やユーザー ストーリーから直接得られます。
シナリオはすぐに終わるので貴重です。 3 つの詳細なケースを作成するのにかかる時間で 30 件をリストすることができます。これは、製品所有者とカバレッジを確認するための優れた方法になります。「すべてを検討しましたか?」技術的な知識のない読者でも、問題なくシナリオのリストに従うことができます。
テストケースとは何ですか?
テスト ケースは、あることが機能するかどうかを判断するために使用される、一連の特定の条件と手順です。一般的なテスト ケースには次のものが含まれます。
- 一意のIDと明確なタイトル
- 前提条件、開始する前に満たしていなければならないことを意味します
- 番号付きステップ
- 特定のテストデータ
- 予想される結果
- 実行時に入力される実際の結果とステータス
一貫性が重要な場合には、テスト ケースが威力を発揮します。新しいチームメンバーがそれらを実行でき、結果をリリース間で比較でき、何が検証されたかの記録が得られます。 テスト ケースの書き方に関するガイドでさらに詳しく説明します。
最初から最後まで 1 つの機能
ステップ 1: 要件
パスワードを忘れたユーザーは、電子メールでリセット リンクをリクエストできます。リンクは 1 回だけ機能し、30 分後に期限切れになります。新しいパスワードは 8 文字以上にする必要があります。
ステップ 2: テスト シナリオ
| ID | テストシナリオ |
|---|---|
| TS-01 | 登録ユーザーが電子メールで送信されたリンクを使用してパスワードをリセットできることを確認する |
| TS-02 | メール未登録時の動作を確認する |
| TS-03 | 期限切れのリンクが使用できないことを確認する |
| TS-04 | リンクが 2 回使用できないことを確認する |
| TS-05 | 新しいパスワード ルールが適用されていることを確認する |
TS-02を見てください。この要件には、不明な電子メールに対して何が起こるかについては決して記載されておらず、シナリオを作成することでそのギャップが明らかになりました。住所が登録されていないことをページで明らかにする必要がありますか?セキュリティの観点から、攻撃者が有効なアカウントを発見する可能性があるため、通常はそうすべきではありません。こうした疑問を早期に発見できることは、シナリオを書くことの最大の利点の 1 つです。
ステップ 3: テスト ケース
ここで、TS-05 だけをテスト ケースに拡張します。 1 つのシナリオが複数になります。
| ID | タイトル | テストデータ | 期待される結果 |
|---|---|---|---|
| TC-051 | 正確に 8 文字のパスワードを受け入れます | abcd1234 |
パスワードが変更され、確認が表示されます |
| TC-052 | 7文字のパスワードを拒否します | abcd123 |
エラー: 少なくとも 8 文字が必要です |
| TC-053 | 空のパスワードを拒否します | (blank) | エラー: パスワードが必要です |
| TC-054 | 不一致の確認を拒否します | abcd1234、abcd9999 |
エラー: パスワードが一致しません |
これらの値はランダムではありませんでした。 TC-051 と TC-052 は、境界値分析を使用して制限の両側に位置し、その他は等価分割から得られます。
テストケースのテンプレート
これが TC-052 の全文です。チームにまだ標準がない場合は、このレイアウトをコピーします。
ID: TC-052
Title: Reset rejects a password of 7 characters
Scenario: TS-05 New password rules are enforced
Priority: High
Preconditions: Account asha@example.com exists
A valid, unused reset link has been requested
Test data: New password: abcd123
Steps:
1. Open the reset link from the email
2. Enter abcd123 in New password
3. Enter abcd123 in Confirm password
4. Click Reset password
Expected: Error "Password must be at least 8 characters"
Password is unchanged, and the link stays valid
Actual: (filled in during the run)
Status: (Pass / Fail / Blocked)
期待される結果では、エラー メッセージ以上のものがチェックされることに注意してください。また、古いパスワードが引き続き機能し、リンクが引き続き使用できることも確認されます。弱いテスト ケースは、多くの場合、画面に表示されている内容で停止します。
ヒント: 各テスト ケースで 1 つの条件をテストします。 5 つの事柄をカバーするケースが失敗した場合、どれが失敗したかわかりません。短く焦点を絞ったケースは、後で自動化するのもはるかに簡単です。
全体像の中でそれらがどこに当てはまるのか
| レベル | 答え | 例 |
|---|---|---|
| テスト戦略 | 私たちの一般的なアプローチは何ですか? | 回帰を自動化し、新機能を探索する |
| テスト計画 | このリリースでは何をするのでしょうか? | アカウント機能、3 月 3 日から 7 日までテストされました |
| テストシナリオ | 何をチェックするのでしょうか? | パスワードルールが適用される |
| テストケース | どうやって確認するのでしょうか? | TC-052とその手順 |
| テストスクリプト | 機械はどのようにチェックするのでしょうか? | TC-052の自動コード |
従来、シナリオとケースは、ソフトウェア テスト ライフ サイクルのテスト設計段階で作成されます。
それぞれをいつ使用するか
多くの場合、次の場合にはシナリオで十分です。
- チームは小規模で経験豊富で、製品をよく知っています。
- 時間が短いか、要件が頻繁に変更されます。
- リスクが低いのが特徴です。
- 関係者とともに適用範囲を迅速に確認したいと考えています。
- あなたは探索的テストを指導しています。
次のような場合には、詳細なテスト ケースに取り組む価値があります。
- 失敗すると、支払い、セキュリティ、健康データと同様にコストがかかります。
- 規制当局や監査人は、何がテストされたかの証拠を必要とします。
- 新規または外部委託されたテスターがテストを実行する必要があります。
- 回帰スイートのように、結果を正確に繰り返す必要があります。
- この手順は自動テストになります。
成熟したチームのほとんどは両方を使用しています。彼らはすべてのシナリオをリストし、最も高いリスクについてのみ完全なケースを書きます。銀行振込と同じように、低リスク設定ページのすべてのステップを文書化する必要はありません。
シナリオ、ケース、自動化
よく書かれたテスト ケースは、自動テストにほぼ直接マッピングされます。前提条件がセットアップになり、ステップがアクションになり、期待される結果がアサーションになります。動作駆動型開発フレームワークでは、実行可能仕様に「シナリオ」という言葉も使用します。
Scenario: Reset rejects a short password
Given I have opened a valid reset link
When I submit the new password "abcd123"
Then I see "Password must be at least 8 characters"
And my password is unchanged
紛らわしいことに、BDD でシナリオと呼ばれるものは、特定のデータと結果が含まれるため、テスト ケースに非常に近いものです。これは、条件に同意するための良い思い出となります。これらのチェックを自動化するには、Playwright チュートリアル または pytest チュートリアルを参照してください。
何が良いのか
| 良いシナリオ | 良いテストケース |
|---|---|
| ユーザーの目標や状況を説明する | 1 つの特定の条件をテストします |
| 要件へのリンク | 期待通りの正確な結果が得られる |
| 成功だけでなく失敗もカバー | その前提条件とデータを列挙します |
| 不必要な詳細はありません | 新しい人でも運営できる |
| 1行に収まる | 他のテストに依存しない |
よくある間違い
- 幸せなパスのみを書き込みます。 ほとんどのバグはエラー状態にあるため、失敗するはずの内容を含めます。
- 曖昧な期待結果を使用する。 「正しく動作するはずだ」ということで、テスターは何でも判断できます。
- すべてを完全に文書化する。 誰も保守していない数千のケースは、有用な小さなセットよりも悪いです。
- シナリオをスキップします。 いきなりケースに飛び込むと、領域全体が忘れられてしまう可能性があります。
- ケースを陳腐化させます。 製品が変更されると、古いケースが人々を誤解させます。定期的に見直してください。
- 脆弱な詳細にステップを結び付ける。「上部の青いボタンをクリックする」は再設計では機能しません。
まとめ
シナリオは幅を与え、テストケースは深みを与えます。次の機能のシナリオから始めて、開発者と製品所有者と一緒にシナリオをレビューします。次に、リスクのあるものだけを完全なケースに拡張します。ギャップを早く見つけられるようになり、重要なところに執筆時間を費やすことができます。
よくある質問
テスト ケースとテスト シナリオの主な違いは何ですか?
テスト シナリオは、何をテストするかを大まかに記述したものです。テスト ケースには、テスト方法の具体的な手順、データ、および期待される結果が示されます。
テストシナリオとテストケースはどちらが先ですか?
通常はシナリオです。シナリオは要件から作成され、さらに詳細が必要なシナリオからテスト ケースが作成されます。
1 つのシナリオにはテスト ケースがいくつありますか?
固定の番号はありません。それは関係するルールとリスクによって異なり、典型的なシナリオには成功、失敗、境界をカバーする複数のシナリオが含まれる場合があります。
アジャイル チームには詳細なテスト ケースが必要ですか?
いつもではありません。多くはシナリオ、承認基準、自動化に依存しており、重要なフローまたはコンプライアンスのニーズにのみ詳細なケースを保持しています。
テストスクリプトはテストケースと同じですか?
完全ではありません。テスト ケースは何をチェックするかを記述し、テスト スクリプトは通常、それらのチェックを自動的に実行するコードですが、一部のチームはこの用語を大まかに使用しています。
学び続ける
テスト、WordPress、または SEO についてサポートが必要ですか?
私たちは、チームがより優れたソフトウェアを出荷し、サイトを成長させるのを支援します。あなたが取り組んでいることを教えてください。明確な次のステップを提案します。
詳しいガイドはこちら テスト、AI、最新の開発
この記事は気に入りましたか?トピックを選択して、最新のチュートリアルに直接アクセスしてください。
AI 幻覚の説明: 言語モデルが物事をでっち上げる理由とそれを軽減する方法
AI 幻覚について説明しました。幻覚とは何か、言語モデルが幻覚を生成する理由、一般的な種類、グラウンディングとプロンプトで幻覚を軽減する方法、そして私たちが実行した簡単なチェックです。
記事を読む →DevOps環境変数の説明: .env ファイル、シークレット、および設定が正しく行われている
実行した Python の例を使用して環境変数について説明します。環境変数の読み取りと設定、すべての値が文字列である理由、.env ファイル、プロセスの継承、シークレット、検証について説明します。
記事を読む →ソフトウェア開発API レート制限の説明: アルゴリズム、ヘッダー、および 429 エラーの処理
API レート制限については、実行したシミュレーションで説明します。トークン バケット、固定ウィンドウ、スライディング ウィンドウ、429 応答、レート制限ヘッダー、バックオフによる再試行、およびテスト制限です。
記事を読む →テスト自動化Python でのモッキング:unittest.mock、patch、およびテストを嘘にする間違い
Python でのunittest.mockによるモック、テスト済み: モックとreturn_value、side_effect、名前が使用されている場所のパッチ、仕様と自動仕様、日付のモック、およびよくある間違い。
記事を読む →ソフトウェアテストコードカバレッジの説明: 回線カバレッジとブランチカバレッジ、および 100% の実際の意味
実際のcoverage.pyの実行でコードカバレッジを説明: 行、分岐、条件のカバレッジ、レポートの読み取り、100%のカバレッジでもバグを見逃す可能性がある理由、および賢明なターゲット。
記事を読む →データベースとSQLSQL における DELETE、TRUNCATE、DROP: 違い、ロールバック、およびそれぞれをいつ使用するか
DELETE、TRUNCATE、DROP について、テスト済み SQL を使用して説明します。それぞれの削除内容、ロールバック、トリガー、ID リセット、速度、PostgreSQL、MySQL、SQL Server、SQLite の違いについて説明します。
記事を読む →データベースとSQLSQL ビューの説明: 作成、使用、落とし穴の回避、例を示します
SQL ビューについて、実行したクエリとともに説明しました。ビューの作成、ライブ結果、列の非表示、パフォーマンス、更新可能なビューと具体化されたビュー、壊れた依存関係、ベスト プラクティスについて説明します。
記事を読む →ソフトウェア開発TypeScript インターフェイスと型: 実際の違い、コンパイラでテスト
TypeScript インターフェイスと型、実際のコンパイラでチェック: 両方でできること、片方だけでできること、宣言のマージ、拡張と交差、および従うべき簡単なルール。
記事を読む →ソフトウェア開発Python *args と **kwargs の説明: 柔軟な関数と明確な例
Python の *args と **kwargs について、実行したコードで説明しました。パッキングとアンパッキング、パラメーターの順序、キーワードのみの引数と位置のみの引数、デコレーター、一般的なエラーです。
記事を読む →ソフトウェア開発Python Lambda 関数: 構文、実際の用途、および使用すべきでない場合
Python のラムダ関数について、実行したコードとともに説明します。構文、キーによるソート、マップとフィルター、クロージャー、遅延バインディング トラップ、通常の def がより適切な選択である場合。
記事を読む →人工知能AIエージェントとは何ですか?シンプルなエージェント ループを実行できる仕組み
AIエージェントとは何ですか?エージェント ループ、ツール、メモリ、ガードレール、実行した小さな Python ループ、実際のリスク、およびシンプルなチャットボットがより良い選択である場合についてのわかりやすいガイドです。
記事を読む →DevOpsモニタリングと可観測性: ログ、メトリクス、トレースによる本当の違い
モニタリングと可観測性について説明: 既知および未知の障害、ログ、メトリクスとトレース、チェックアウト インシデントのウォークスルー、ゴールデン シグナル、OpenTelemetry、および便利なアラート。
記事を読む →DevOpsDocker ボリュームとバインド マウント: コンテナ データを正しい方法で保持する
Docker ボリュームとバインド マウントについて説明します。コンテナ データが消える理由、名前付きボリューム、バインド マウント、tmpfs、Compose の例、バックアップ、アクセス許可、およびそれぞれをいつ使用するかについて説明します。
記事を読む →テスト自動化TDD と BDD: 主な違い、1 つの機能が両方の方法で構築され、それぞれをいつ使用するか
TDD と BDD は、両方の方法で構築された 1 つの割引機能で説明されています。実行したコードによるレッド-グリーン-リファクタリング、Given-When-Then シナリオ、ツール、トレードオフ、およびそれぞれをいつ使用するかです。
記事を読む →ソフトウェアテストユーザー受け入れテスト (UAT): プロセス、チェックリスト、および実際の例
ユーザー受け入れテストの説明: 誰が実行するか、QA との違い、7 段階のプロセス、UAT テスト ケース テンプレート、チェックリスト、サインオフ基準、およびよくある間違い。
記事を読む →データベースとSQLSQL NULL 値の説明: IS NULL、COALESCE、NULLIF、および回避すべきトラップ
SQL の NULL 値について、実行したクエリで説明しました。3 つの値のロジック、IS NULL、COALESCE、NULLIF、集計、結合、並べ替えでの NULL の扱い方、およびそれが密かに引き起こすバグです。
記事を読む →データベースとSQLSQL CASE WHEN ステートメント: 構文、実際の例、およびよくある間違い
SQL CASE WHEN では、単純な検索フォーム、条件順序、SUM を使用したピボット、COUNT トリック、カスタム並べ替え、更新、回避すべき NULL トラップなど、実行したクエリを使用して説明しました。
記事を読む →ソフトウェア開発JWTとは何ですか? JSON Web トークンを実際の例で説明する
JWTとは何ですか? JSON Web トークンについて説明しました。3 つの部分、実行したコード内で構築および改ざんされたトークン、JWT とセッション、ストレージ、リフレッシュ トークン、およびセキュリティ上の間違いです。
記事を読む →ソフトウェア開発JavaScript イベントループの説明: コールスタック、マイクロタスク、タイマーと例
JavaScript イベント ループについて、実行したコードで説明しました。コール スタック、タスク キュー、マイクロタスク キュー、setTimeout 0 が即時ではない理由、ブロッキング、スターベーション、およびインタビュー クイズです。
記事を読む →ソフトウェア開発Python ジェネレーターと収量の説明: 実際の例でメモリを節約する
Python ジェネレーターと Yield について、実行したコードを使用して説明します。一時停止と再開の方法、メモリ節約の測定、パイプライン、無限シーケンス、Yield from、send、および一般的なトラップについて説明します。
記事を読む →人工知能埋め込みとは何ですか?ベクトルとコサインの類似度を簡単に説明
埋め込みとは何ですか?ベクトル、コサイン類似度、セマンティック検索に関する平易なガイド。私たちが実行した小さな例、一般的な使用法、モデルの選択、既知の制限が含まれています。
記事を読む →DevOpsBlue-Green デプロイメントと Canary デプロイメント: 違い、トレードオフ、および選択方法
ブルー グリーン デプロイメントとカナリア デプロイメントについて説明: それぞれの仕組み、コスト、リスクとロールバック、テストした安定したユーザー バケット化、データベース移行、ローリング アップデート、および選択方法。
記事を読む →テスト自動化不安定なテスト: 問題の原因とそれを永久に修正する方法
不安定なテストについては、私たちが実行したデモを使用して説明しました。主な原因、確認および診断する方法、タイミングの適切な修正、共有された状態と日付、隔離プロセスなどです。
記事を読む →ソフトウェアテスト負荷テストとストレス テスト: 違い、メトリクス、および k6 の例
ロード テストとストレス テストについて説明します。それぞれが何を証明するか、スパイク テストとソーク テスト、重要な指標、平均値が誤解を招く理由、K6 の例、テストの計画方法について説明します。
記事を読む →ソフトウェアテストテスト ケースとテスト シナリオ: 主な違い、例、およびそれぞれをいつ使用するか
テスト ケースとテスト シナリオの説明: 明確な定義、並べて表、シナリオからケースへの 1 つのパスワード リセット機能、テンプレート、およびそれぞれをいつ使用するか。
記事を読む →データベースとSQLSQL クエリの最適化: 実行プランを読み取り、タイミングを考慮して遅いクエリを修正
SQL クエリの最適化は 100 万行でテストされています。実行プランの読み取り、適切なインデックスの追加、検索対象外のフィルターの修正、複合インデックスとキーセットのページネーションの使用。
記事を読む →データベースとSQLSQL UNION と UNION ALL: 違い、例、テストされたパフォーマンス
SQL UNION と UNION ALL について、実行したクエリで説明しました。重複、両方に従うルール、実際のデータのバグ、測定されたパフォーマンス、INTERSECT と EXCEPT、およびそれぞれをいつ使用するかについて説明します。
記事を読む →ソフトウェア開発JavaScript Fetch API チュートリアル: GET、POST、エラー処理、タイムアウト
ローカル サーバーに対してテストされた JavaScript Fetch API チュートリアル: GET と POST、404 がスローされない理由、再利用可能なヘルパー、クエリ文字列、タイムアウト、CORS、およびよくある間違い。
記事を読む →ソフトウェア開発Python ファイル処理: 読み取り、書き込み、CSV、JSON、パスライブラリと例
Python のファイル処理について、実行したコードで説明します。オープン モード、大きいファイルの読み取り、CSV、JSON、パスライブラリ、バイナリ ファイル、安全な書き込み、エラー処理、およびよくある間違いについて説明します。
記事を読む →ソフトウェア開発Python のクラスとオブジェクト: 実際の例を含む OOP チュートリアル
Python のクラスとオブジェクトについて、実行したコードとともに説明します: __init__、メソッド、クラスとインスタンスの属性、継承、プロパティ、ダンダー メソッド、データクラス、およびよくある間違い。
記事を読む →人工知能大規模言語モデルとは何ですか? LLM の仕組みを誇大広告なしで説明
大規模言語モデルとは何ですか? LLM は、トークン、エンベディング、アテンション、トレーニング、温度およびコンテキスト ウィンドウ、小さな次の単語のデモ、実際の制限など、平易な言葉で説明されています。
記事を読む →DevOps初心者のための Linux コマンド: 例を含む基本ターミナル ガイド
初心者向けの Linux コマンド。ナビゲーション、ファイル、ログの表示、grep、パイプ、権限、プロセス、アーカイブなどのタスク別にグループ化されており、実用的なログ分析の例も含まれています。
記事を読む →テスト自動化Selenium と Playwright: 主な違い、コードの比較、どちらを選択するか
Selenium と Playwright の比較: アーキテクチャ、待機、ブラウザと言語のサポート、デバッグ、両方のツールでの同じテスト、移行のアドバイスと選択方法。
記事を読む →ソフトウェアテスト等価性分割: テスト設計手法を実際の例で説明
等価性パーティション化について説明しました。有効なパーティションと無効なパーティションを見つける方法、年齢、パスワード、クーポンに関する実際の例、実行したテスト、境界と組み合わせる理由。
記事を読む →ソフトウェアテストソフトウェアテストにおける重大度と優先度: 相違点、マトリックス、および実際の例
ソフトウェア テストにおける重大度と優先度について説明します。明確な定義、例を含む 4 方向のマトリックス、レベル スケール、それぞれの設定者、バグ トリアージの実行方法。
記事を読む →データベースとSQLSQL サブクエリのチュートリアル: 型、相関サブクエリ、および EXISTS と例
実行したクエリを含む SQL サブクエリのチュートリアル: スカラー、IN、FROM、SELECT サブクエリ、相関サブクエリ、EXISTS、NOT IN NULL トラップ、サブクエリ対 JOIN 対 CTE。
記事を読む →データベースとSQLSQL トランザクションと ACID の説明: COMMIT、ROLLBACK、分離レベル
SQL トランザクションと ACID について、実行した銀行振込で説明しました。COMMIT、ROLLBACK、セーブポイント、ロック、分離レベル、ダーティ リード、デッドロック、ベスト プラクティスについて説明します。
記事を読む →ソフトウェア開発Git mergeとrebaseの違い:例と使い分け
Git mergeとrebaseの違いを、実際のログ出力、比較表、rebaseの黄金律、安全なチームワークフローで解説します。
記事を読む →ソフトウェア開発Pythonのリスト内包表記:構文・例・使うべきでない場面
Pythonのリスト内包表記を解説:構文、フィルタ、if-else、ネストしたループ、実測した処理時間、そして通常のforループの方が良い場面。
記事を読む →データベースとSQLSQL JOINを例で解説(Inner・Left・Right・Full)
サンプルのテーブルとクエリでSQL JOINを順に解説。INNER、LEFT、RIGHT、FULL、CROSS、SELFに加え、よくある間違いとパフォーマンスのコツも紹介します。
記事を読む →