改修のテストはどこまでやる?単体・結合・手動の範囲を決める例

広告 設計・テスト・レビュー

改修のテストはどこまでやる?単体・結合・手動の範囲を決める例

「単体テストは通った。でも、画面やDBまで全部試すべき?」
改修のたびに、どこまで確認すればよいか迷うことがあります。

先に結論

  • 見つけたい失敗から、確認する範囲を選ぶ。変更した行数やケース数だけで決めない。
  • 実物とモックを明記する。「単体・結合」は確認する範囲、「手動」は実施方法として分ける。
  • 未確認のリスクも残す。省く確認は、判断する人と補う方法をセットで相談する。

この記事では、架空の問い合わせ管理を使い、入力・権限・検索の3つの改修からテスト範囲を考えます。確認を省くときの伝え方も、記入例で示します。

見つけたい失敗からテスト範囲を選ぶ

同じ問い合わせ機能でも、入力エラーの表示漏れ、権限のない更新、他人の問い合わせの混入では、見つけたい失敗が違います。その失敗を検出できる場所で試すのが、範囲を決める出発点です。

件名の入力:値とエラー応答。状態と権限:許可・拒否・更新なし。保存と取得:実DBとの接続。画面の操作:表示と使える導線。残るリスク:未確認と判断者
確認したい失敗からテスト範囲を選ぶ

題材は、件名が必須で1〜100文字、状態が「下書き・受付済み・対応中・完了」で、投稿者と担当者がいる問い合わせ管理です。以下はそれぞれ独立した架空の改修で、実施範囲を相談するための案です。

単体・結合・手動はどう違う?

「単体」「結合」の呼び方はチームごとに揺れるため、名称だけで合意せず、何を実物で試すかを揃えます。この記事では次の意味で使います。

  • 単体:業務判定などを、狭い範囲で確認する。
  • 結合:Controllerと変換処理、Repositoryと実DBなどのつながりを確認する。
  • 手動:人が操作して確認する方法。画面操作は自動化する場合もある。

「結合テスト済み」だけでは、実DBまで試したかは伝わりません。「Controllerは実物、Serviceはモック、DB未接続」と書くほうが確実です。

分類や回帰確認の考え方は、ISTQB Foundation Levelシラバスの2.2節で確認できます。

3つの改修で、確認する範囲を考える

例1:件名の入力エラー表示を整える

  • 見つけたい失敗:不正入力が通る。エラーの理由が見えない。入力済みの値が消える。
  • 主な確認:既存判定の回帰。Controllerのエラー応答。画面の入力保持と表示。
  • 残るリスク:実ブラウザで試していなければ、配置や操作性は未確認。

表示文だけを変える場合も、訂正して保存できるところまで確認します。判定のロジックを変えないなら、既存の判定テストを大量に書き直す必要があるかは、変更内容から判断します。

例2:「対応開始」を現在の担当者だけに許可する

  • 見つけたい失敗:投稿者や他人が更新できる。拒否したのに状態が変わる。
  • 主な確認:Serviceの権限・状態判定。認証された利用者との対応。DBの更新有無。
  • 残るリスク:Repositoryをモックした確認だけでは、保存後の状態は分からない。

現在の担当者が、受付済みの問い合わせを対応中へ進められることを確認します。投稿者というだけでは許可しません。無関係の利用者、担当者未設定、下書きや完了状態からの操作も試します。

拒否時はエラーが返るだけでなく、元の状態が変わらないことも期待結果です。Serviceを狭い範囲で試す書き方は、ServiceをJUnit・Mockitoでテストする方法を参照できます。

例3:「自分が担当する問い合わせ」で一覧を絞る

  • 見つけたい失敗:他人の行が混ざる。0件で失敗する。並び順が変わる。
  • 主な確認:Repositoryと対象DBの検索。Serviceから渡す条件。画面の絞り込み。
  • 残るリスク:少量データの確認だけでは、本番規模の速度は分からない。

担当者20の行、担当者30の行、担当者なしの行を用意し、検索結果にどれが入るかを確かめます。対象者が0件のときの結果も確認します。

単体で通れば十分?

Serviceの判定が正しくても、Controllerが認証された利用者ではなく、リクエスト本文の利用者IDをそのまま渡していたら、想定した権限確認にならない可能性があります。利用者の情報が業務判定へ届く経路も、実際の構成で試します。

ここに注意

「保存を呼ばなかった」と「実DBで更新されなかった」は別の証拠です。モックでの確認だけで保存結果を保証せず、別経路の更新やトランザクションは、その境界で確認します。

組み込みDBだけでは、対象DBに固有のSQL、照合順序、ロックの動作まで保証できません。そこが変更点なら、対象DBの検証環境を範囲に含めます。

MockMvcは実HTTPサーバーを起動せず、Spring MVCの処理を試す仕組みです。Spring公式のMockMvc説明にあるとおり、組み込むControllerや設定によって確認範囲が変わります。実ネットワークやブラウザまで通したとは限りません。

入力エラーのテストが403や400で止まる場合は、MockMvcでPOSTが403・400になる原因を確認してください。目的の処理に届いていないのに期待値を現状へ合わせると、確認したかった内容を失います。

画面では、操作を完了できるかを見る

件名のエラーが入力欄の近くに出るか、入力が保持されるか、訂正して保存できるかを見ます。対応開始なら、状態表示が更新されるか、拒否された理由が分かるかを確認します。

細かな判定を自動テストで確認し、画面では代表ケースで一連の操作を試す構成も考えられます。ただし、画面表示そのものが主な変更なら、実際の表示を省く理由は慎重に扱います。

手動の記録も「問題なし」で終わらせず、環境・利用者の役割・事前状態・操作・観察した結果を残します。

省くテストは、残るリスクと一緒に相談する

期限が厳しいときも、今回の変更で守るべきことから優先順位を決めます。担当者以外の更新を防ぐ改修なら、権限と更新結果の確認が重要です。表示文だけの変更なら、無関係な性能試験を毎回行う必要性は低いかもしれません。

案件の契約、障害の影響、既存の自動テストも踏まえ、未実施を合格に見せず、判断する人と補う方法を付けます。

記入例|確認済みと未確認を分けて伝える

一覧検索の確認範囲を相談する、架空の記入例です。

  • 確認済み:実DBで担当者別・担当者未設定・0件の検索を確認。
  • 確認予定:主要ブラウザ一つで表示を確認する。
  • 未確認:大量データの性能試験は未実施。応答時間の悪化は判断できない。
  • 判断者と次の確認:運用規模と既存の計測結果を確認し、担当リーダーが追加試験の要否を判断する。

完了時には、変更したところが直った確認と、周辺が壊れていない回帰確認を分けます。ケース数や網羅率だけで十分と断定せず、何を確かめ、何が残ったかを伝えます。

提出前の5点チェック

  • 今回の改修で、見つけたい失敗を挙げたか。
  • それぞれを、どの範囲・方法で確認するか決めたか。
  • 実物とモック、DBやブラウザを試した範囲を明記したか。
  • 変更内容に応じて、正常系だけでなく拒否時の動作や周辺への影響も確認したか。
  • 未確認のリスク、判断者、補う確認を残したか。

入力と業務の境界を見直したい場合は、ControllerとServiceの入力チェックも役立ちます。

さらに学ぶための一冊

『単体テストの考え方/使い方』は、テストの価値や保守性を考える選書候補です。出版社と実務担当の本棚で案内しています。

本書はC#の例を使っており、JUnitの操作入門ではありません。この紹介は出版社の情報をもとにしたもので、読後レビューではありません。

本棚にはアフィリエイトリンクを含みます。本記事のチェック項目は、購入せずに使えます。

-設計・テスト・レビュー
-