How to Create Effective Test Cases (With Examples)
Software Teams

効果的なテストケースの作成方法(例付き)

ほとんどのテストケースは、1つのバグも発見する前に失敗に終わります。それらは曖昧なチェックリストとして作成されていたり、前提条件が欠けていたり、複数のアクションが1つのステップにまとめられていたり、期待される結果の記述があまりにも大まかであるため、同じテストケースを読んだ2人のテスターが「合格」の意味について意見が分かれてしまうようなものです。その結果、バグが見逃され、テスト実行が再現できなくなり、QAはセーフティネットではなくボトルネックとなってしまいます。

優れたテストケースの作成は、テストのスキルというより、むしろ検証設計に重きが置かれます。金融業界ではこれを「メイカー・チェッカー・プロセス」と呼び、核発射指令システムでは「2人制ルール」と呼んでいます。その原理は同じです。重要な仕事は、単一の検証されていない行動に決して依存してはならないということです。適切に作成されたテストケースは、ソフトウェアに同様の厳格さを組み込みます。期待される結果と実際に観察された結果を明確に分離することで、その両者の間の乖離を無視できないようにするのです。

ここでは、テストケースの作成方法、その重要性、そして長期的にテストケースの品質を向上させる方法について解説します。

要約

テストケースとは、機能が正しく動作することを検証するために必要な、具体的な手順、入力、および期待される結果を定義したものです。各テストケースには、結果を確認できるよう、一意のID、前提条件、および期待される結果が明記されている必要があります。このガイドでは、7つのステップからなる作成プロセス、3つの例、そして製品の変更に伴いテストスイートの信頼性を維持する方法について解説します。

テストケースとは?

テストケースとは、特定のソフトウェアが正しく動作するかどうかを検証するために必要な、具体的なステップ、入力、前提条件、および期待される結果を定義した構造化された文書です。これは、テスト戦略を概説する「テストプラン」や、ステップをプログラム的に実行する自動化されたコードである「テストスクリプト」とは異なります。テストケースは、これら両方が構築されるための仕様書なのです。

例: Webアプリケーションのログイン機能をテストしているとします。この機能のテストケースでは、以下の要素を定義することになります:

  • ユーザーが行うステップと、期待されるシステムの応答を記述したアクション
  • システムが各ステップを進めるために満たさなければならないルールを定義する条件
  • サンプル値を入力してさまざまな結果をテストし、成功シナリオと失敗シナリオの両方を検証します

手動テストケースと自動化テストケースの比較

現在、AIはほとんどのテストワークフローに組み込まれています。PractiTestの「2026年テスト動向レポート」によると、テスト専門家の76.8%がQA業務でAIを活用しており、最も一般的な用途としてテストケースの作成(69.6%)とスクリプトのメンテナンス(59.6%)が挙げられています。この変化が最も顕著に表れているのが自動テストケースであるため、手動テストケースとの違いを理解しておく価値があります。

パラメーター手動テストケース自動化されたテストケース
実行文書化された一連のステップに従って、人間のテスターが実施するソフトウェアツール、スクリプト、またはAIエージェントによって実行される
スピード人間が手動でデータを入力し、結果を確認しなければならないため、時間がかかり、手間がかかる数百のテストケースを同時に実行可能
再現性人為的なエラーやステップの解釈の不一致が生じやすいテストスクリプトが適切に管理されていれば、高い再現性と一貫性が確保されます
CI/CDの統合人的ボトルネックにより、変化の激しいデリバリーパイプラインへの統合が困難CI/CDパイプラインに直接統合され、ビルドのたびにテストを実行します
保守要件が変更されるたびに、ドキュメントを手動で更新する必要がありますUIやロジックが変更された際には、スクリプトを更新するための技術的なメンテナンスが必要となります
こんな方に最適探索的テスト反復テストと回帰テスト

よく書かれたテストケースが重要な理由

ユーザーがチケットを発行する前に、回帰バグを発見できます。 コードの変更には、すでに正常に動作している機能を壊してしまうリスクが常に伴います。適切に作成されたテストケースは、デプロイのたびに実行される恒常的なチェックポイントとなります。1年後に開発者がログインコードをリファクタリングし、誤ってセッション処理を壊してしまった場合でも、そのテストケースがステージング環境で問題を検知してくれるのです。

「合格」か「不合格」かは、主観ではなく事実であるべきです。 「システムが適切に反応する」といった曖昧な結果は、すべてのテスターに「適切」の意味を解釈することを強いることになります。同じテストケースを実行した2人のテスターのうち、一人は合格と判定し、もう一人は不具合を報告すると、チームはソフトウェアのデバッグではなく、この意見の不一致の解決に時間を費やすことになってしまいます。 期待結果が「システムが『パスワードが無効です』というエラーメッセージを表示し、ユーザーをログインページに留める」と記述されていれば、解釈の余地はありません。結果が一致するか、しないかのどちらかです。これこそが「2人ルール」の実践です。テストケースは「作成者」、テスターは「確認者」であり、両者は同じ言語でコミュニケーションをとる必要があります。

暗黙知を再利用可能な資産に変えることができます。 多くのチームでは、シニアQAエンジニアが、あらゆるエッジケース、回避策、そして「あ、Xも忘れずにチェックしてね」といった細かな注意点を、目に見えないマップとして頭の中に抱えています。その人が休暇を取ったり、チームを異動したりすると、そのマップも一緒に持ち去られてしまいます。明確な前提条件と境界値を記載したテストケースを文書化することで、その知識を体系的に保存することができます。 チームに新しく加わったテスターは、TC_LOGIN_005を手に取り、閾値がいくらかやタイマーがどのようにリセットされるかを誰にも尋ねることなく、初日から「5回ログイン失敗後のアカウントロックアウト」のフローをテストすることができます。

失敗の原因を、漠然とした領域ではなく、正確なステップに特定します。 テストケースで「ページに移動し、認証情報を入力し、送信をクリックする」という一連の操作を単一のステップにまとめ、テストが失敗した場合、わかるのは「ログインフローのどこかで問題が発生した」ということだけです。 」となります。各アクションが独自のステップとなり、それぞれに期待される結果が設定されていれば、失敗の原因はステップ4に特定されます。「『リセットリンクを送信』をクリック → 成功メッセージが表示されるはずが、500エラーが発生した」。この精度の高さにより、開発者は単にどの機能領域を調べればよいかだけでなく、どの操作が不具合を引き起こしたかを正確に把握できるため、デバッグ時間が劇的に短縮されます。

何がカバーされていて、何が死角になっているかがわかります。 構造化されたテストケースがなければ、テストカバレッジは推測に過ぎません。テストケースがあれば、すべてのケースを要件にマップし、ギャップを即座に特定できます。 パスワードリセット機能に6つのシナリオ(リセット成功、リンクの有効期限切れ、リンクの再利用、未登録の電子メール、フォーマット不備、複数回のリクエスト)があり、テストケースが3つしか用意されていない場合、そのギャップは目に見えており、定量化可能です。この可視性こそが、テストを「テストした」という段階から、「具体的に何をテストし、何をテストしなかったか、そしてどのようなリスクを受け入れているか」という段階へと引き上げるのです。

優れたテストケースの構成要素

有用なテストケースは、単に何をテストするかを記述するだけではありません。コンテキスト、実行ステップ、および期待されるシステムの挙動を明確に記述することで、他のテスター、開発者、またはプロダクトマネージャーがテストを再現し、結果を検証できるようにします。

テストケースの構成要素は以下の通りです:

  • 一意の識別子
  • 目的または概要
  • 前提条件
  • 実行ステップ
  • 期待される成果
  • 比較のための実際の結果

前述のWebサイトのログイン機能の例を共有しましたが、テストケースには以下の内容を含める必要があります:

テストケースID: すべてのテストケースには一意の識別子が必要です。機能をテストする際、QAチームは類似した条件を検証する複数のテストケースを作成することがよくあります。テストケースIDがあれば、デバッグやレポート作成の際に、それらを簡単に追跡、整理、参照することができます。

例:TC_LOGIN_001

説明: テストケースがどの機能を検証しているかを説明します。テストケースを読む人が誰でもその目的をすぐに理解できるよう、簡潔な要約を記載します。

例:登録済みのユーザーが、有効な認証情報を使用してアプリケーションに成功してログインできることを確認する。

前提条件: 前提条件とは、テストケースを実行する前に必要なシステムの状態を指します。前提条件が定まっていないと、テスターが異なる条件下で同じテストを実行し、結果に一貫性がなくなる可能性があります。

例:

  • ユーザーアカウントは、システム上にすでに存在している必要があります
  • ユーザーアカウントは有効であり、ロックされていない必要があります
  • ログインページはアクセス可能であるべきです

ステップ: これらは、ユーザーやテスターがテストケースを実行するために行う操作です。チーム内の誰もがテストを再現できるよう、各ステップは明確かつ順序立てて記述する必要があります。

  • ユーザーがログインページに移動します
  • ユーザーが登録済みの電子メールを入力します
  • ユーザーが正しいパスワードを入力する
  • ユーザーが「ログイン」ボタンをクリックします

期待される結果: これは、機能が正常に動作している場合にシステムがどのような動作をするべきかを定義したものです。

  • 認証情報が有効であれば、システムはユーザーを認証します
  • ユーザーはダッシュボードにリダイレクトされます
  • ユーザーセッションが成功して作成されました

認証情報が無効な場合、システムは適切なエラーメッセージを表示する必要があります。

実際の結果: これらは、テストケースを実行した後にテスターが観察した内容を記録したものです。観察された挙動が期待される結果と異なる場合、その問題は問題として記録されます。

観察例:

  • 有効な認証情報を入力したにもかかわらず、「パスワードが無効です」というエラーメッセージが表示されました

それでは、テストケース作成のスキルを実際に活用してみましょう。

ご存知でしたか? AIを活用したテスト手法について、「最適化されている」と回答したチームはわずか2.1%にとどまり、85%以上が依然として初期フェーズまたは実験フェーズにあります。AIの最も一般的な用途はテストケースの生成(69.6%)であり、リスクの特定(19.9%)のような戦略的な仕事ではありません。

テストケースの作成方法(ステップバイステップの手順)

テストケースの作成には、要件の分析、シナリオのリスト、構造のプラン、期待される結果を含む手順の記述、コンテキストの添付ファイル、レビューの依頼、そして実行と記録という7つのステップがあります。

ステップ1:要件を分析する

テストケースを作成する前に、その機能がどのような動作をするべきかを理解しましょう。この段階で、PRD(製品要件定義書)、ユーザーストーリー、機能仕様書、設計書などの関連ドキュメントを確認し、検証が必要な機能をすべて特定します。

例: ユーザーが電子メールを通じてパスワードをリセットできる機能を開発しているとします。この機能に関するテストケースを作成するには、以下の点を理解する必要があります:

  • その機能はどのような問題を解決するものか。つまり、ユーザーがパスワードを忘れてしまった場合、アカウントへのアクセスを回復できるか?
  • ユーザーはどのような操作を行うことができますか? つまり、リセットリンクをリクエストし、電子メールで受け取り、新しいパスワードを設定するといった操作です。
  • それらの操作が行われた場合、どのような動作が期待されるでしょうか。つまり、システムはリセットリンクを送信し、ユーザーがパスワードを成功して更新できるようにするのでしょうか?
  • 何か制限はありますか? つまり、リンクには有効期限がありますか、あるいは1回使用すると無効になりますか?
  • 検証項目やルールはありますか?つまり、新しいパスワードは特定のフォーマットや文字数の要件を満たす必要がありますか?
  • 曖昧な機能や定義されていない機能はありませんか?もしある場合は、関係するステークホルダーに確認して明確にしてください。

この明確さこそが、テストケースの明確な目的を1つ定めるための基盤となります。

目的:登録済みのユーザーが、電子メールを通じてパスワードを成功してリセットできることを確認する。

ステップ2:さまざまなテストシナリオを特定する

次に、検証が必要なテストシナリオをリストします。テストシナリオとは、大まかな状況のことであり、通常は、さまざまな入力や結果を網羅する複数のテストケースにブランチするものです。

パスワードリセット機能の場合、シナリオは次のようなものになるでしょう:

  • リセットの成功: 登録済みのユーザーがリセットリンクをリクエストし、新しいパスワードを設定できることを確認する
  • 登録されていない電子メール: システムに存在しない電子メールが送信された場合に何が起こるかをテストする
  • リンクの有効期限が切れた場合: 有効期限が切れた後にリセットリンクがクリックされた際、システムがアクセスをブロックすることを確認してください
  • 再利用されたリンク: すでに使用されたリセットリンクが再度使用できないことをテストする
  • 無効な新しいパスワード: フォーマット要件を満たさないパスワードが拒否されることを確認してください
  • 連続したリセット要求: ユーザーが連続して複数のリセットを要求した場合、どのリンクが有効なままになるかをテストします。

ここで紹介する各シナリオは、特定の入力や条件を網羅する1つ以上のテストケースに落とし込まれます。このように機能を細かく分解することで、期待される動作だけでなく、実際のユーザーが必然的に遭遇するエッジケースまで、テストカバレッジを確保することができます。

ステップ3:テストのプランを立て、テストケースの構成を決める

反復的な回帰テストを行うには、テストケースとその結果を一貫して記録できる仕組みが必要です。明確に定義されたテストケースのテンプレートがあれば、その一貫性が確保され、毎回一から作成し直すことなく再利用が可能になります。

以下の要素を明確にして、テスト実行のプランを立てましょう:

テストは誰が実施するのでしょうか?

このテストを実施する担当者に求められる役割や資格は何でしょうか?テストの複雑さや必要な人的介入の度合いに応じて、役割を割り当ててください:

  • QAテスター: ログインフロー、フォームの検証、チェックアウトプロセスなどの機能テストや回帰テスト
  • セキュリティチーム: 認証、アクセス制御、またはデータ漏洩の脆弱性に関するテスト
  • 開発者向け: パスワードのハッシュ化やトークンの生成といった個々の機能に対するユニットテスト

テストはどのように実施されるのでしょうか?

  • テストはどのデバイスやオペレーティングシステム上で実行されますか?
  • どのようなツールやテストフレームワークを使用しますか?
  • テストは手動で実行されるのでしょうか、それともAIエージェントを通じて実行されるのでしょうか?
  • 結果はどのように記録されますか?テスト管理ツール、スプレッドシート、それともバグトラッカーでしょうか?

前提条件は何ですか?

ステップ1の前に満たされる必要があるすべての条件をリストし、それぞれがテスターによって検証可能になるようにしてください:

例:

  • 電子メール「test@example.com」のユーザーアカウントが存在します。
  • ユーザーはシステムからログアウトしています
  • 電子メールサービスは稼働しており、メッセージを配信可能です
  • テスト環境にアクセスでき、正常に稼働している

どのようなテストデータを使用しますか?

テストを実行するために必要な正確な入力値(有効なデータ、無効なデータ、境界値)を定義します。

例:

  • 有効:登録済み電子メール「test@example.com」、フォーマット要件を満たすパスワード
  • 無効:未登録の電子メール、またはパスワードが最低文字リミットに満たない
  • 境界条件:文字数が最小および最大のリミットに厳密に一致するパスワード

ステップ4:テスト手順と期待される結果を作成する

実行プロセスを順次的なステップに分解しましょう。用語を統一し、各ステップには1つのアクションのみを盛り込むようにしてください。ステップを定義する際には、期待される結果や、合格・不合格の判断基準についても明記してください。

パスワードリセットのフローを引き続き見ていくと、テストステップは以下のようになります:

ステップ 期待される結果
ログインページへ移動ログインページには、クリック可能な「パスワードをお忘れの方」リンクが表示されます
「パスワードをお忘れの方」をクリックしてくださいユーザーはパスワード再設定リクエストページにリダイレクトされます
「電子メール」フィールドに電子メールを入力してください電子メールは、検証エラーなしで受け付けられます
「リセットリンクを送信」をクリックしてください成功メッセージが表示されます:「test@example.com にリセットリンクを送信しました」
電子メールに記載されているリセットリンクを開いてくださいユーザーは新しいパスワード作成ページにリダイレクトされます
有効な新しいパスワードを入力してくださいパスワード入力フィールドがエラーなしで入力を受け付けてしまう
「パスワードのリセット」をクリックしてください成功メッセージが表示され、ユーザーはログインページにリダイレクトされます

それでは、(前述した)さまざまなシナリオについて、ステップと期待される結果を定義しましょう。ユーザーが無効な電子メールを入力した場合や、パスワードが事前に定められた基準に合致しない場合に、何が起こるかを記述してください。

おまけ: すべてのテストケースについて、AIを活用してドキュメント作成を自動化する方法をご紹介します。

ステップ5:関連する添付ファイルを含める

テスターがテストケースを、完全な文脈の中で曖昧さなく実行できるよう、関連する文書や添付ファイルを含めてください。これには以下が含まれます:

  • 重要なステップにおけるユーザーインターフェースの解説付きスクリーンショット
  • 画面録画:さまざまなシナリオでテストを実行する方法や、どのような結果が得られるかを示しています
  • システムログや設定ファイルは、テストが失敗した際にバックエンドの問題を診断するのに役立ちます
  • 要件ドキュメント:テストケースと、それが検証対象とするユーザーストーリーや受け入れ基準をマップしたドキュメント
  • テストデータファイル:有効な入力や無効な入力、あるいはクレジットカード番号、ランダムな住所、ユーザー認証情報などの生成データを含むもの
  • ドキュメントを作成し、具体的なソフトウェアのバージョン、必要なハードウェア、OS、および必要なセキュリティクリアランスを記載してください。
  • APIテストについては、リクエストメソッド、パラメーター、および期待されるステータスコードを詳述したOpenAPI仕様書やエンドポイントのドキュメント

ステップ6:テストケースのレビューを受ける

作成したテストケースを、実行する前に同僚や上級QAリーダーと共有しましょう。レビューの際には、以下の点を確認してください:

  • このテストケースは包括的であり、要件から導き出されるあらゆるシナリオを網羅しています
  • ステップは明確で、実際の実行フローを時系列に沿って示しています
  • 各期待結果は、「正しく動作する」といったような品質ではなく、観察可能な結果(メッセージ、リダイレクト、ステータスコードなど)を指定します。
  • テストデータと前提条件は完全かつ正確に完了しています
  • 作成時にしたあらゆる仮定は、明示的に文書化される

ステップ7:実行と結果の記録

テストを実施し、各期待結果に対して実際の結果を記録します。各ステップごとに、テストを「合格」または「不合格」と判定します。不合格となったステップについては、直ちにバグを報告し、そのテストケースにリンクを張ってください。さらに、合格・不合格が明確ではない予期せぬ動作が発生した場合は、今後の検討のためにコメントフィールドにその旨をメモしてください。

テストケース作成の例

以下の3つの例は、同じテストケースの構造が、さまざまな種類のソフトウェアテストにどのように適応するかを示しています。それぞれ、このガイドの前半で紹介した構成要素とステップフォーマットを採用していますが、検証対象に応じて、複雑さ、テストデータ、および失敗モードが変化します。

例 1:Eコマースのチェックアウトフロー(UI、多ステップワークフロー)

あるオンライン小売業者のQAチームは、ホリデーセールに先立ち、チェックアウトの体験をテストしています。そのフローは、カート → 配送 → 支払い → 確認という複数のページにまたがっています。ここでの大きな課題は「状態依存関係」です。各ステップは前のステップが正しく完了していることを前提としており、テストデータ(カートのコンテンツ、配送先住所、支払い方法)はすべてのステップを通じて維持されなければなりません。

テスター: ラフル・D.

試験日: 2026年9月3日

テストケースID: TC_CHECKOUT_003

説明: ログイン済みのユーザーが、登録済みのクレジットカードと標準配送を利用して購入を完了できることを検証します。

前提条件:

  • ユーザーアカウントには、登録済みのクレジットカードが1件以上、および登録済みの配送先住所が1件以上存在します
  • 少なくとも1アイテムが在庫ありで、カートに追加されました
  • テスト環境は、Chrome 128、macOS上で動作しています。
ステップ期待される結果実際の結果合格/不合格
カートページへ移動するカートには、正しいアイテム、数量、小計が表示される予想通り合格
「チェックアウトに進む」をクリックしてください保存された住所が事前に選択された状態でページを表示する予想通り合格
「標準配送」を選択し、「続行」をクリックしてください送料が加算された注文合計額が表示された状態で、支払いページが読み込まれる予想通り合格
登録済みのクレジットカード情報を確認し、「注文する」をクリックしてください。注文確認ページには、注文番号、アイテムの要約、および配送予定日が表示されます。支払いページが再読み込みされ、「支払いを処理できません」というエラーが表示される失敗

結果の要約: チェックアウトフローはカートから配送までの処理を正しく行っていますが、保存済みのクレジットカードでの支払い処理に失敗します。不具合の記録:決済ゲートウェイの応答に3秒以上かかる場合、トークン化されたカード情報の検索でタイムアウトが発生します。

例 2: REST API エンドポイント(UI なし、入出力検証なし)

あるバックエンドエンジニアが、フロントエンドチームが利用する前に「ユーザー作成」APIエンドポイントをテストしています。クリックして操作するインターフェースはありません。このテストケースでは、リクエストのペイロード、レスポンスコード、およびデータの永続化を直接検証します。ここでの特徴的な課題は、ユーザー体験ではなく、システム間の契約をテストすることにあります。

テスター: サラ・S.

試験日: 2026年9月5日

テストケースID: TC_API_USER_001

概要: /api/v1/users への POST リクエストにより、新しいユーザーが作成され、正しいレスポンスが返されることを検証します。

前提条件:

  • APIテスト環境は稼働しており、アクセス可能です
  • 管理者許可を持つ認証トークンが生成され、有効です
  • データベースには、「newuser@testdomain.com」という電子メールを持つユーザーは存在しません。
ステップ期待される結果実際の結果合格/不合格
有効なペイロード { "name": "Test User", "電子メール": "newuser@testdomain.com", "役割": "viewer" } を含む POST リクエストを /api/v1/users に送信してください。レスポンスは201を返し、ユーザーID、名前、電子メール、および役割を含むJSONボディが返されます201が正しい本文とともに返されました合格
同じ電子メールを使用して、同じPOSTリクエストを再度送信してくださいレスポンスは409 Conflictを返し、メッセージは「この電子メールを持つユーザーはすでに存在します」となっています。200 OKが返されました。重複するユーザーが作成されました。失敗
「電子メール」フィールドが欠落した状態でPOSTを送信する検証エラーにより、レスポンスが「400 Bad Request」を返します:「電子メールは必須です」400が期待どおりに返されました合格
ステップ1で取得したIDを使用して、GET /api/v1/users/{id} をクエリしますレスポンスは200 OKを返し、ユーザーの詳細情報は元のペイロードと一致しています予想通り合格

結果の要約: このエンドポイントはユーザーを正しく作成し、必須フィールドの検証も行っていますが、データベースレベルでの電子メールアドレスの一意性の確保ができていません。エラーが発生することなく、重複したレコードが作成されました。この不具合は「高」の重大度で登録されました。

例 3:役割ベースのアクセス制御(セキュリティ、許可の境界)

あるセキュリティチームは、コンプライアンス監査に先立ち、アプリケーションがユーザーの役割に基づいてアクションを正しく制限しているかどうかをテストしています。ここでの大きな課題は、機能が動作するかどうかをテストするのではなく、機能が適切に拒否されるかどうかをテストしているという点です。ほとんどのステップで期待される結果は「成功」ではなく「ブロック」です。

テスター: マーカス・L.

試験日: 2026年9月8日

テストケースID: TC_RBAC_002

説明: 「Viewer」役割のユーザーが、プロジェクトを作成、編集、削除できないことを検証します。

前提条件:

  • 2つのアカウントが存在します。1つは「Admin」役割、もう1つは「Viewer」役割です。
  • ワークスペースには、管理者によって作成されたプロジェクトが少なくとも1つ存在します。
  • 閲覧者はFirefox 130、Windows 11でログインしています
ステップ期待される結果実際の結果合格/不合格
「プロジェクト」ページへ移動する閲覧者はプロジェクトリストを読み取り専用モードで表示します。「プロジェクトの作成」ボタンは非表示になっているか、または無効になっています。ボタンは表示されているが、グレーアウトしている合格
「プロジェクトの作成」をクリックしてみてくださいシステムが操作を阻止し、新しいプロジェクトフォームが読み込まれませんフォームが読み込まれていません。ツールチップに「許可がありません」と表示されます。合格
既存のプロジェクトを開き、タイトルを編集してみてください「タイトル」フィールドが編集不可であるか、システムが保存をブロックしています「タイトル」フィールドは編集可能でした。変更は成功して保存されました。失敗
三点メニューからプロジェクトを削除してみてください「削除」オプションが表示されていない、または許可エラーにより操作がブロックされているメニューに「削除」オプションの可視性が低い合格

結果の要約: 閲覧者に対する作成および削除の許可は正しく制限されていますが、編集許可はフィールドレベルで適用されていません。閲覧者は、読み取り専用アクセス権しか持っていないにもかかわらず、プロジェクトのタイトルを変更することができます。この不具合は、重大度「クリティカル(コンプライアンス上の障害)」として記録されました。

テストケースの管理にはどのようなツールが最適でしょうか?

テストケースの管理には、専用のQAツール(TestRail、Zephyr)、汎用的なPMツール(ClickUp、Jira)、あるいはスプレッドシートなどが利用できます。どのツールを選ぶかは、組み込みの実行機能が必要か、それとも単に追跡機能だけでよいかによって異なります。

ClickUp

「ClickUp for Software Teams」を活用して、ロードマップからリリースに至るまでのエンジニアリングライフサイクル全体を一元管理しましょう。
ソフトウェアチーム向けClickUpでタスクとして追跡されるテストケース

ClickUp for Software Teams」は、テストケースが、関連するスプリント、バグ、プルリクエストと並んでタスクとして管理されるプロジェクト管理プラットフォームです。専用のテスト管理ツールではありませんが、その柔軟なタスク構造により、チームは別のツールを用意することなく、カスタムステータス、フィールド、タスクタイプを使用してテストケースのワークフローを構築できます。

ClickUpの主な機能

  • 「スペース」「フォルダ」「リスト」を横断してテストケースを整理するための柔軟な階層構造に加え、テストの種類、優先度、環境などを指定できるカスタムフィールドも備えています。
  • ステータス、担当者、スプリントごとにテストの実行状況を追跡できる、15種類以上のClickUpビュー(ボード、リスト、テーブル)
  • PRD、テストプラン、環境セットアップガイドを、それらが基となるテストケースのすぐそばに保管するためのドキュメント
  • Slackや電子メールに切り替えることなく、QA担当者と開発者のコミュニケーションが可能な組み込みチャット機能
  • ClickUp BrainによるAIを活用したタスク要約で、スプリントレビューの際に状況を素早く把握

ClickUpの制限事項

  • ネイティブのテスト実行エンジンは搭載されていません
  • テスト固有のレポート(要件ごとのカバレッジ、サイクルごとの合格率)には、既成のQAレポート作成機能ではなく、カスタムダッシュボードが必要です。

ClickUpの料金プラン

ClickUpの評価とレビュー

  • G2: 4. 6/5 (14,100件以上のレビュー)
  • Capterra: 4.6/5(4,600件以上のレビュー)

実際のユーザーはClickUpについてどう評価しているのでしょうか?

G2のレビュアーからは、次のような声が寄せられています:

ClickUpの最大の魅力は、すべてを一か所に集約できる点です。タスク、タイムライン、メモ、更新情報など、すべてが同じシステム内に集約されるため、ツール間の行き来が少なくて済みます。また、その柔軟性も高く評価しています。ステータス、フィールド、ビューを、チームの実際の働き方に合わせてカスタムできます。これにより、整理整頓が容易になり、誰が何を担当しているか、またプロジェクトがどの段階にあるかを、いつでも明確に把握できるようになります。

ClickUpの最大の魅力は、すべてを一か所に集約できる点です。タスク、タイムライン、メモ、進捗報告がすべて同じシステム内に集約されるため、ツール間の行き来が軽減されます。また、その柔軟性も高く評価しています。ステータス、フィールド、ビューを、チームの実際の働き方に合わせてカスタマイズできるため、整理整頓が容易になり、誰が何を担当しているか、またプロジェクトがどの段階にあるかを、いつでも明確に把握できます。

こんな方に最適: テストの失敗をワンクリックで開発者のバグチケットに変換し、PR、テストステップ、スプリントの可視性をすべて同じタスクから確保したいと考えるQAリーダー。

以下の場合はスキップしてください: テストサイクルがほぼ自動化されている場合。テストスイートの80%がCIパイプラインから実行されているなら、人が手動でステータスを更新するツールではなく、実行結果を取り込むことができるツールが必要です。

TestRail

TestRailのダッシュボード
viaTestRail

TestRailは、テストプロセス全体を体系的に管理する必要があるQAチーム向けに構築された、専用のテスト管理プラットフォームです。テストケースの作成、実行、レポート作成という全サイクルを処理し、DevOpsやCI/CDとの連携により結果を取り込むことができます。

TestRailの主な機能

  • プロジェクト間で再利用可能なテストケースを用いた、テストケースおよびテストスイートの一元管理
  • スプリントやリリース全体にわたるテスト実行を整理・スケジュールするためのテストプランとマイルストーン
  • カバレッジ分析、進捗追跡、実行履歴を含む詳細なレポート作成機能
  • Jira、GitHub、Jenkins、Azure DevOps、その他20以上のDevOpsツールとの連携
  • タスクの自動化や外部システムとのテストデータの同期を行うためのREST API

TestRailの制限事項

  • ネイティブの要件管理や問題追跡機能がないため、チームはJiraのような外部ツールに依存せざるを得ず、その結果、トレーサビリティが断片化してしまう可能性があります
  • テストリポジトリが数千件規模に拡大すると、フォルダベースの構成では管理が難しくなります

TestRailの料金体系

  • プロフェッショナル:1席あたり月額39ドル
  • 企業:78ドル/席/月

TestRailの評価とレビュー

  • G2: 4.4/5 (600件以上のレビュー)
  • Capterra:4.3/5(レビュー数160件以上)

TestRailについて、実際のユーザーからはどのような声が寄せられていますか?

G2のレビュアーは次のように述べています:

TestRailの最大の価値は、QAチームにテストプラン、テストケース、テスト実行を管理するための、安全で整理された環境を提供してくれる点にあります。 テストスイートの構築や実装、そして以前に作成したテストケースの再利用が、非常に簡単に行える点に感謝しています。JiraやCI/CDツールとの連携により、ワークフローの一体感が向上し、進捗の追跡も容易になりました。テストの進捗状況やカバレッジをリアルタイムで監視できる機能は、スプリント計画やレポート作成において非常に役立っています。QAエンジニアとしての日々の業務においても、TestRailを活用することで大幅な時間の節約につながっています。

TestRailの最大の価値は、QAチームにテストプラン、テストケース、テスト実行を管理するための、セキュリティがあり整理整頓された環境を提供してくれる点です。 テストスイートの構築や実装、そして以前に作成したテストケースの再利用が、いかに簡単に行えるかを高く評価しています。JiraやCI/CDツールとの連携により、ワークフローの一体感が向上し、進捗の追跡も容易になりました。テストの進捗状況やカバレッジをリアルタイムで監視できる機能は、スプリント計画やレポート作成において非常に役立っています。QAエンジニアとしての日々の業務においても、TestRailを活用することで大幅な時間の節約につながっています。

最適な利用シーン: リリースごとに正式なテストサイクルを実施している5名以上のQAチームで、マネージャーがスプレッドシートではなくダッシュボードから「リリース2.0のテストのうち、何パーセントが実行され、合格したか」という質問に答えられる必要がある場合。

以下の場合はスキップしてください: テストスイートが数百件未満の場合、またはテスターが開発者を兼任している場合。その規模では、席あたりのコストや別途ログインが必要な分、結局見ることのないレポート作成を購入することになってしまいます。

Zephyr

Smartbear社のZephyr:テスト管理
viaSmartBear

Zephyrは、SmartBearが提供するJira用テスト管理プラグインであり、Jiraのインターフェース内からテストケースを管理できるように設計されています。手動テストと自動化テストの両方をサポートし、アジャイルチームや企業チーム向けに、強力なレポート作成機能とトレーサビリティ機能を備えています。

Zephyrの主な機能

  • Jiraとのネイティブ連携—Jiraの問題から直接、テストケースを作成、リンクし、実行できます
  • テストケースを大規模に再利用・整理するための、プロジェクト横断型の階層的テストライブラリ
  • テストカバレッジ、実行進捗、不具合追跡などを網羅した、70種類以上のすぐに使えるレポート
  • 行動駆動開発(BDD)ワークフローに対応した、Gherkin構文によるBDDサポート
  • Jenkins、GitHub、GitLab、Bitbucket、BambooとのCI/CD連携

Zephyrのリミット

  • ライセンスはテスターごとではなく、Jiraユーザーごとに付与されます
  • 大規模なテストリポジトリ(数千件のテストケース)は、TestRailのようなスタンドアロン型ツールに比べて、操作が煩雑に感じられることがあります
  • サポートはAtlassian Marketplaceを通じて提供されます。これにより、ベンダーによる直接サポートに慣れているチームにとっては、新たなサポート体制が追加されることになります。

Zephyrの価格

  • Essential: $5.99/ユーザー/月~(11~50ユーザー)
  • スタンダード:1ユーザーあたり月額6.81ドル~(11~50ユーザー)
  • アドバンス:1ユーザーあたり月額8.73ドルから(11~50ユーザー)

Zephyrの評価とレビュー

  • G2: 4. 1/5 (80件以上のレビュー)
  • Capterra:レビューが不足しています

実際のユーザーはZephyrについてどう評価しているのでしょうか?

G2のレビュアーは次のように述べています:

これは、Excelシートからテストケースを直接インポートするのに最適なツールです。このツールを使用することで、Jiraにテストケースをインポートする場合に比べて、テスターの仕事が軽減されます。また、テストケースの合否判定や添付ファイルの追加ができる点も、このツールの優れた機能です。

これは、Excelシートからテストケースを直接インポートするのに最適なツールです。このツールを使用することで、Jiraにテストケースをインポートする場合に比べて、テスターの仕事が軽減されます。また、テストケースの合否判定や添付ファイルの追加ができる点も、このツールの優れた機能です。

最適な対象: 規制が厳しかったり監査頻度が高いチーム(フィンテック、ヘルスケアなど)。すべてのテストがJiraの要件とリンクされており、すべての不具合がそれを発見したテストとリンクされている必要があり、そのすべてを1つのAtlassianインスタンス内で管理したいチーム。

以下の場合はスキップしてください: Jiraインスタンスが大規模で、QAチームが小規模な場合。10人のテスターがいる200席規模のJiraでは、誰も利用しない190個のZephyrライセンス分の費用がかかります。テスター1人あたりの料金で課金されるスタンドアロンツールの方が安上がりです。

Jira

Jiraダッシュボード
viaJira

JiraはAtlassianのプロジェクト管理および課題追跡プラットフォームであり、エンジニアリングチームやQAチームがスプリント、バグ、開発ワークフローを管理するために広く利用されています。専用のテスト管理ツールではありませんが、多くのチームがZephyr ScaleやXrayなどのソリューションと併用し、既存のJiraセットアップ内でテストケース管理を行っています。

Jiraの主な機能

  • スプリント、バックログ、アジャイルテストのワークフローを管理するためのスクラムおよびカンバンボード
  • チームの仕事追跡方法に合わせて、ワークフロー、課題タイプ、フィールドをカスタマイズ可能
  • チーム横断的な計画立案と依存関係の追跡のための高度なロードマップ(プレミアム)
  • GitHub、Confluence、Slack、CI/CDツールなど、1,000以上のマーケットプレイスとの連携
  • 問題の更新やステータスの変更に基づいて、プロジェクト横断的にアクションをトリガーする自動化ルール

Jiraの制限事項

  • テストケースの管理には、Jiraのサブスクリプション料金に加えて、ユーザーごとに別途料金がかかるMarketplaceプラグイン(Zephyr Scale、Xray)が必要です。
  • 技術的知識のないユーザーにとっては学習曲線が急であり、大規模なチームでは導入コストが積み重なる可能性があります

Jiraの料金体系

  • Free
  • スタンダード:1ユーザーあたり月額7.91ドル
  • プレミアム:14.54ドル/ユーザー/月
  • 企業:カスタム見積もり

Jiraの評価とレビュー

  • G2: 4. 3/5 (7,900件以上のレビュー)
  • Capterra:4.4/5(15,400件以上のレビュー)

実際のユーザーはJiraについてどう評価しているのでしょうか?

G2のレビューアからは、次のような声が寄せられています:

Jiraは、私の仕事チームの全メンバーと協力して、すべての業務プロジェクトの進捗を追跡・可視化するために私が愛用しているデジタルツールの一つです。同クラスで最高の仮想パフォーマンス機能を提供しており、私のあらゆる業務上の目標達成を容易にしてくれるからです。

Jiraは、私が最もお気に入りのデジタルツールの一つです。チームメンバー全員と協力して、すべての仕事プロジェクトの進捗状況を追跡・可視化できるため、同クラスで最高の仮想パフォーマンス機能を提供し、私のすべての仕事目標の達成を容易にしてくれます。

最適な対象: 専任のテスト管理が必要かどうかを検討しているエンジニアリングチーム。まず、Jiraのカスタム課題タイプとして数回のテストサイクルを実行することで、その作業量に見合うだけの価値があるかどうか、プラグインの導入が必要かどうかが判断できます。

以下の場合はスキップしてください: テスト管理の必要性をすでに認識している場合。プラグインやスタンドアロンツールに直接移行すれば、カスタム問題タイプがスケーラビリティの限界に達した際の移行作業を回避できます。

テストケース作成時に避けるべきよくある間違い

テストケース全体の有効性を低下させてしまうような、以下の作成上のミスを避けましょう。

間違い代わりにやること
テストケースの作成が遅すぎる要件収集や設計の段階からテスターを関与させ、コーディングが始まる前に潜在的な問題を特定しましょう
テストケースの更新を行わない機能のアップグレード、機能の変更、またはUIの変更があった場合は、速やかにテストケースを更新してください。
後条件なしテスト完了後のシステムの状態(テストユーザーの削除、カートの内容の削除、セッションの終了など)を明記し、次のテストケースがクリーンな状態から開始されるようにします。
正常動作時のデータのみすべての入力フィールドには、システムが拒否すべき価値が少なくとも1つは必要です。データセットがどのように生成または取得されるかを文書化してください。
テストケースの優先順位付けを行っていない各テストケースに、ビジネスへの影響度、使用頻度、および失敗のリスクに基づいて優先度を割り当てましょう。これにより、テスト作業に努力を注ぎ、予算やテスト手法についてより賢明な判断を下すことができます。

テストケースを長期にわたり有用なものに保つ方法

テストスイートが信頼性を保つためには、各テストケースが独立しており、不具合が発生する可能性が最も高い入力をターゲットとし、信頼できる判定結果を出せなくなった瞬間に廃止される必要があります。以下の6つの実践手法こそが、何年にもわたってバグを検出し続けるスイートと、2回目のスプリントを過ぎると無視されてしまうスイートとを分けるのです。

独立した、単一の操作を対象としたテストを作成する

テストケースは、それ自体が独自の状態を設定すべきであり、他のケースが先に実行されたことに依存関係はないべきです。TC_CHECKOUT_003が、TC_CHECKOUT_002によってカートにアイテムが1つ残されていることを前提としている場合、1つの失敗が5つの失敗へと連鎖し、どの失敗が実際の原因なのかを突き止めるために午前中を費やすことになってしまいます。テストのタイトルに「そして」という言葉が含まれる場合は、2つのケースに分割してください。

境界でのテスト

バグは、許容される入力の「中間」ではなく、「境界」に集中して発生します。 パスワード入力フィールドが8~128文字を受け付ける場合、単に扱いやすい12文字のパスワードだけでなく、7文字、8文字、128文字、そして129文字もテストする必要があります。境界値解析がISO/IEC/IEEE 29119-4テスト設計規格において正式な手法として定められているのは、まさにこの理由からです。つまり、ランダムな入力では見逃されてしまう「オフ・バイ・ワン」エラーを発見できるからです。

同値分割を活用して、冗長なテストケースを削減しましょう

システムが同一に扱うべき入力データをグループ化し、各グループから1つの代表的な例を選んでテストしましょう。ログインフォームでは、有効な電子メールのフォーマットはすべて同じように動作するため、有効な電子メールを1つテストすれば十分です。「user@example.com」、「jane@company.com」、「bob@domain.org」を3つの別々のテストケースとしてテストすると、カバレッジが向上するわけでもないのに、メンテナンスの負担が3倍になってしまいます。

テストデータとテストステップを分離する

ステップに「test@example.com を入力」とハードコーディングしてしまうと、テスト環境が変わるたびにそのステップを書き直す必要が生じます。ステップは汎用的な表現(「登録済みの電子メールを入力」)に保ち、実際の値はテストデータフィールドやファイルに格納しましょう。そうすれば、同じステップをステージング環境、QA環境、本番前環境で編集なしで実行でき、ネガティブテスト用に新しいデータセットを差し替えるのも、たった1行の変更で済みます。

不安定なテストや欠陥の見逃し率を追跡する

不安定なテストとは、実際の製品バグがないにもかかわらず、結果が不安定に失敗するテストのことです。こうしたテストが繰り返されると、チームは「赤」の結果を無視するようになってしまいます。同一のビルドにおいて、各テストケースが「合格」と「不合格」の間でどれくらいの頻度で結果が変動するかを追跡しましょう。1か月に2回以上結果が不安定になるテストケースがある場合は、書き直すか削除してください。これを「欠陥見逃し率」(テストケースで検出されるはずだったバグが本番環境で発見された割合)と照らし合わせることで、単にノイズが多い箇所だけでなく、カバレッジが不十分な箇所を特定できます。

頻繁に実行するテストを自動化しましょう

回帰テスト、スモークテスト、および高頻度の機能テストは、すべてのビルドで実行され、変更されることがほとんどないため、自動化の最有力候補となります。これらをCI/CDパイプライン内のスクリプトに移行し、UI要素の位置が頻繁に変化する箇所では、自己修復型ロケーターを備えたAI支援ツールを活用しましょう。そうすることで、人間のテスターは探索的テストや、ユーザビリティ評価やエッジケースの発見など、判断力を要する種類のソフトウェアテストに注力できるようになります。

ClickUpでのテストケースの作成と実行方法

上記の「ツール」セクションでは、ClickUpがどのような役割を果たすかについて説明しました。このセクションでは、本ガイドの前半で説明したステップに沿って、実際のセットアップ方法をご紹介します。

テストケースライブラリを体系化しましょう。 製品用のスペース、各機能領域(例:認証、決済、オンボーディング)ごとのフォルダ、そして各テストサイクルやスプリントごとのリストを作成します。各タスクは個別のテストケースとなります。ClickUpのカスタムフィールドを使用して、テストケースID、前提条件、テストデータ、優先度、環境などの情報を記録しましょう。

テスト手順はタスクに直接記述しましょう。 タスクの説明欄を利用して、順次実行されるステップと期待される結果を文書化します。チェックリストは、テスターが各ステップにチェックを入れる必要がある段階的なフローに適していますが、説明欄には前提条件やテストデータといった文脈情報を記載します。

実行状況と結果を追跡しましょう。 テストワークフローに合わせたカスタムステータスを作成しましょう:未開始 → 進行中 → 合格 → 不合格 → 保留。テストが不合格になった場合は、それをバグタスクに変換するか、優先度、依存関係、期限を設定して開発者に割り当てられたリンクされたタスクを作成します。 GitHubおよびGitLabとの連携機能により、そのバグを原因となったプルリクエスト(PR)に直接リンクさせることができます。根本原因がコードの欠陥である場合、そのバグタスクをClickUp Codegen Agentに割り当てることができます。このエージェントは、タスク、リンクされた仕様書、コメントを読み取り、修正コードを記述し、プルリクエストを開くと同時に、進捗状況をタスクにフィードバックします。

プロのヒント:QAリーダーは、ClickUp Brainに未解決のバグタスクの要約を依頼することで、どのタスクについても即座に概要を把握できます。これにより、個々のタスクを一つずつ確認して状況を把握する必要がなく、スプリントレビューに必要なすべての背景情報を手に入れることができます。

ClickUp Brain を使って未完了のタスクを要約する
ClickUp Brain を使って未完了のタスクを要約する

ビューを活用してテストサイクルを実行しましょう。 ステータス別にグループ化された「ボードビュー」を使用すれば、テスト実行中の合格・不合格の分布を一目で確認できます。「テーブルビュー」は、数十件のテストケースの結果を一覧で確認したい場合に、従来のテストマトリックスとして機能します。担当者に基づいてフィルタリングして作業負荷を分散させたり、優先度に基づいてフィルタリングして、クリティカルパスを優先的にスモークテストしたりすることができます。

ClickUpのテスト管理テンプレートを使えば、複数の機能領域、テストシナリオ、エッジケースにわたるテストワークフロー全体を、一か所で一元的に管理できます。このテンプレートを活用すれば、ツールを切り替えることなく、ユーザーフィードバックの追跡、テストスケジュールの管理、テストの進捗状況の監視、および合格・不合格結果の評価を行うことができます。

ClickUpのテスト管理テンプレートを使って、テストワークフローを整理しましょう

テストワークフローを効果的に管理する

テストケースは、2人の担当者がそれぞれ独立して実行し、同じ「合格」または「不合格」の結果にたどり着いた瞬間に、その価値が認められます。このガイドに記載されているすべての内容(1ステップにつき1つのアクション、明確な前提条件、解釈の余地のない期待される結果)は、この唯一の基準を満たすために存在します。すでにClickUpでスプリントをプランしている場合、前述のセットアップを行えば、別のツールを追加することなく、テストケースの作成、実行、追跡を、それによって発見されたバグと併せて行うことができます。

ClickUpに無料で登録する

テストケースに関するよくある質問

要件1つにつき、テストケースはいくつ必要でしょうか?

1つの要件に対して、含まれるシナリオ、エッジケース、入力のバリエーションの数に応じて、1つのテストケースで済む場合もあれば、10個必要になる場合もあります。重要なのは、現実的なすべての経路を網羅し、冗長性を排除しつつ十分なカバレッジを確保することです。

テストケースとテストスクリプトの違いは何ですか?

テストケースとは、何をテストし、どのような結果が期待されるかを記述したもので、手動で実行するために作成されます。一方、テストスクリプトは、その自動化されたバージョンであり、同じステップをプログラムによって実行するコードのことです。

テストステップはどの程度詳細に記述すべきでしょうか?

テストを、事前の背景知識がなくても理解しやすい、論理的で順序立ったステップに分割しましょう。複数のアクションをまとめて処理したり、不必要な複雑さを加えたりしないでください。

テストシナリオは、1行で「何を」テストするかを記述します(「パスワードのリセットを検証する」)。一方、テストケースは、前提条件、ステップ、テストデータ、期待される結果を用いて、「どのように」テストするかを具体的に指定します。通常、1つのシナリオから、正常な動作、無効な入力、境界条件を網羅する3~10個のテストケースが生成されます。シナリオが先に策定され、カバレッジプランを主導し、テストケースはその後で策定され、実行を主導します。

肯定的テストケースでは、有効な入力を使用し、成功を期待します。たとえば、正しい電子メールとパスワードを入力すると、ユーザーはログインできます。否定的なテストケースでは、無効または予期しない入力を使用し、システムが正常に失敗することを期待します。たとえば、間違ったパスワードを入力すると、セッションが確立されることなく「パスワードが無効です」と表示されます。成熟したテストスイートでは、肯定的テストケースと否定的テストケースの比率は、おおむね1:3から1:5となっています。これは、本番環境でのバグのほとんどが、正常な処理経路(ハッピーパス)ではなく、エラー処理経路に潜んでいるためです。

テストプランとは、テスト活動全体の範囲、アプローチ、リソース、およびスケジュールを定義するものです。テストスイートとは、1回の実行のためにグループ化されたテストケースの集合であり、例えば「リリース2.1の回帰テストスイート」などが挙げられます。テストケースは、これら両方の構成要素となる最小単位であり、1つの文書化された検証項目と、合格/不合格という1つの結果で構成されます。プランは戦略を定め、スイートは範囲を定め、ケースは判定を決定します。