開発の基本概念

テスト(ソフトウェアテスト) てすと

ソフトウェアテストバグ品質保証ユニットテストテスト駆動開発デバッグ
テストについて教えて

簡単に言うとこんな感じ!

ソフトウェアテストは、作ったシステムが「ちゃんと動くか確認する作業」だよ!新車を出荷前に試乗チェックするのと同じで、バグ(不具合)を見つけて直してから世に出すんだ。テストが甘いと、リリース後にトラブルが起きて大慌て…なんてことになるから、開発の命綱ってこと!


テストとは

ソフトウェアテストとは、開発したシステムやプログラムが仕様どおりに正しく動作するかどうかを確認する工程のことです。単純に「動くかどうか」を確認するだけでなく、「想定外の操作をしたときに壊れないか」「性能は十分か」「セキュリティ上の穴がないか」なども検証します。

テストは開発プロセスの中で非常に重要な位置を占めており、リリース前に問題を発見・修正するコストは、リリース後に対応するコストの数十倍も安いと言われています。つまり、テストに投資することは、後々の損失を防ぐための保険と考えることができます。

発注者やビジネス側の立場から見ると、「テスト計画書」「テスト仕様書」「バグ管理票」といった成果物が適切に用意されているかを確認することが、システムの品質を守るうえで非常に重要なチェックポイントになります。


テストの種類と構造

ソフトウェアテストには、目的や対象範囲によって複数の種類があります。一般的にはテストピラミッドという考え方で整理されます。

テストの種類別名・説明主な実施者タイミング
単体テスト(ユニットテスト)関数・クラス単位の動作確認開発者コーディング中〜後
結合テスト(統合テスト)複数のモジュールを組み合わせて確認開発者・QA単体テスト完了後
システムテストシステム全体が仕様を満たすか確認QAチーム結合テスト完了後
受け入れテスト(UAT)発注者・ユーザーが実際に使って確認発注者・ユーザーリリース直前

また、何を確認するかという観点では以下のように分類されます。

観点
機能テストボタンを押したら正しい処理が走るか
性能テスト1000人が同時アクセスしても落ちないか
セキュリティテスト不正なデータを入力しても守られるか
回帰テスト修正によって別の機能が壊れていないか
ユーザビリティテスト使いやすいか・操作に迷わないか

テストピラミッドで覚える

        /\
       /E2E\       ← 少ない(時間・コストがかかる)
      /──────\
     /  統合   \
    /────────────\
   /  単体(ユニット)\  ← 多い(速くて安い)
  /──────────────────\

「下に行くほど数が多く・速く・安い」が鉄則。単体テストをたくさん書いて、上に行くほど数を絞るのがコスパの良い設計です。

テストに関するよく使う用語

用語意味
バグ(Bug)プログラムの不具合・誤り
デバッグバグを見つけて修正する作業
テストケース「この操作をしたらこうなるはず」という1つの確認シナリオ
テスト仕様書テストケースをまとめたドキュメント
カバレッジコードのうちどれだけテストされたかの割合
リグレッション修正によって別の箇所が壊れること(退行バグ)

歴史と背景

  • 1940年代後半 — コンピューター黎明期にグレース・ホッパーが実際の「バグ(虫)」をコンピュータの中に発見したエピソードが有名。ここからデバッグという言葉が広まった
  • 1950〜60年代 — ソフトウェアが大規模化するにつれ、テストの重要性が認識され始める
  • 1979年 — グレンフォード・マイヤーズが『ソフトウェアのテスト技法(The Art of Software Testing)』を出版。テストを体系化した先駆け的な書籍
  • 1990年代 — オブジェクト指向の普及とともに、ユニットテストの概念が整備される
  • 1999年 — ケント・ベックがテスト駆動開発(TDD)を提唱。「テストを先に書いてからコードを書く」という革新的な手法が広まる
  • 2000年代〜 — JUnit(Java)、RSpec(Ruby)などのテストフレームワークが普及。自動テストが標準的な開発プロセスに
  • 2010年代〜 — CI/CD(継続的インテグレーション/デリバリー)の普及により、コードをプッシュするたびに自動でテストが走る仕組みが当たり前になる

テスト手法の比較と開発プロセスとの関係

主要なテスト関連の手法・プロセスを整理します。

手法概要向いている場面
TDD(テスト駆動開発)テストを先に書き、通るようにコードを書く品質重視の新規開発
BDD(振る舞い駆動開発)「ユーザーがこう使ったとき」を起点にテスト設計仕様と実装を一致させたい場合
自動テストスクリプトで繰り返しテストを実行リグレッション防止・CI/CD
手動テスト人間が実際に操作して確認UIの感触・探索的テスト
探索的テストテストケースを決めず自由に試すバグを見つけにくい領域

以下は、ウォーターフォール型開発とアジャイル型開発でテストがどの位置づけになるかを示した図です。

開発プロセスにおけるテストの位置づけ ウォーターフォール型 要件定義 設計 実装 テスト ←ここ リリース アジャイル型 スプリント(1〜4週間)を繰り返す 設計 実装 テスト ↓ スプリントごとに テストを繰り返す 自動テスト(CI/CD) ✅ テストは開発と並走する ⚠ テストが終盤に集中しがち

ウォーターフォール型では「実装が全部終わってからテスト」となりがちで、後半に問題が集中するリスクがあります。一方アジャイル型では、短いサイクルの中にテストを組み込み、問題を早期に発見・修正できます。


関連用語