💡 このページでわかること
- 単体テスト(ユニットテスト)の基本的な意味と役割
- 具体例を使った単体テストのイメージ
- 単体テストを行う目的とメリット
- 単体テストと結合テストの違い
ITの現場やプログラミングの学習を進めていると、「単体テスト」という言葉をよく耳にしますよね。
「テストというからにはプログラムの確認作業だろうけれど、具体的に何を確認するの?」
そんな疑問を持っている方も多いのではないでしょうか。
単体テストは、作成したプログラムを小さな単位に分け、それぞれが正しく動くかを確認するテストです。
この記事では、IT初心者の方に向けて、単体テストの意味や目的、具体例、結合テストとの違いをわかりやすく解説します。
単体テスト(ユニットテスト)とは?プログラムを小さな単位で確認するテスト
単体テストとは、簡単にいうとプログラムを小さな単位に分け、それぞれが正しく動くか確認するテストのことです。
英語では「Unit Test(ユニットテスト)」、略して「UT」と呼ばれます。
大きなシステムはいくつものプログラムや機能を組み合わせて作られています。
単体テストでは、それぞれの部品が想定通りに動くかを個別に確認します。

単体テストの役割
単体テストには、システムを組み合わせて確認する前に、それぞれのプログラムに問題がないかを確認する役割があります。
小さな単位で問題を見つけておけば、不具合が発生した場所を特定しやすくなります。
「単体」が指す範囲
「単体」がどこまでの範囲を指すかは、プロジェクトやシステムによって異なります。
たとえば、次のような単位でテストすることがあります。
- 関数・メソッド: 特定の計算や処理を行うプログラム
- クラス・モジュール: 関連する処理をまとめた単位
- 機能・画面: プロジェクトによっては、1つの機能や画面を単位として扱う場合もある
そのため、実際の仕事では「このプロジェクトでは何を単体として扱うのか」を確認することが大切です。
具体例で理解する「単体テスト」のイメージ
「小さな単位でテストする」といっても、最初はイメージしにくいかもしれません。
日常生活とシステム開発、それぞれの例で考えてみましょう。
日常生活の例で考える(電子レンジ)
たとえば電子レンジなら、ボタンやタイマー、温めるための部品などを、それぞれ個別に確認するイメージです。
完成した電子レンジだけを確認するのではなく、それぞれの部品が正しく動くことを確認してから組み合わせると考えると、単体テストをイメージしやすいでしょう。
システム開発の例で考える(ログイン機能)
Webサイトの「ログイン機能」を例に考えてみましょう。
ログイン機能には、さまざまな処理が含まれています。
たとえば、
- パスワードチェック処理: 8文字未満ならエラーになるか
- 入力チェック処理: IDが空欄ならエラーになるか
- 認証判定処理: 正しい情報を渡した場合に成功と判定されるか
といった処理です。
単体テストでは、このような個々の処理が想定した結果になるかを1つずつ確認していきます。
それぞれが正しく動くことを確認したあと、複数の処理や機能を組み合わせたテストへ進みます。
なぜ単体テストを行うの?3つの目的・メリット
単体テストを行う大きな目的は、プログラムの問題を早い段階で発見することです。
ここでは、主なメリットを3つ見ていきましょう。
バグ(不具合)を早い段階で見つけるため
システムをすべて組み合わせた後に不具合が見つかると、「どの部分が原因なのか」を調べる必要があります。
複数のプログラムが関係しているほど、原因の特定も難しくなります。
単体テストの段階で1つずつ確認しておけば、問題がある場所を絞り込みやすくなります。
修正コストや手間を減らすため
開発が進んでから不具合が見つかると、そのプログラムと関係する機能まで確認し直さなければならない場合があります。
早い段階で問題を発見できれば、影響する範囲が小さいうちに修正できます。
結果として、修正や再テストにかかる手間を減らすことにつながります。
プログラムの品質を保つため
単体テストは、一度実施したら終わりとは限りません。
プログラムの一部を修正したり、新しい機能を追加したりしたあとに再度テストすることで、それまで動いていた処理が壊れていないかを確認できます。
このように、変更後も既存の機能が正しく動くことを確認するテストを「回帰テスト(リグレッションテスト)」と呼びます。
単体テストと結合テストの違い
単体テストと一緒によく使われる言葉に「結合テスト」があります。
大きな違いは、何を確認するのかです。
| 項目 | 単体テスト(ユニットテスト) | 結合テスト |
|---|---|---|
| テスト範囲 | 個々のプログラムや機能 | 複数のプログラムや機能を組み合わせた範囲 |
| 主な目的 | 個々の処理が正しく動くか確認する | 処理同士の連携やデータの受け渡しを確認する |
| 実施する時期 | 主に実装後 | 主に単体テストの後 |

つまり、
単体テスト → 個々の処理を確認する
結合テスト → 処理同士のつながりを確認する
という違いがあります。
単体テストでそれぞれの処理を確認したあと、結合テストで組み合わせたときの動きを確認すると覚えておきましょう。
単体テストに関するよくある疑問
Q. 誰が単体テストを行うの?
単体テストは、プログラムを作成した開発者本人が行うことが多いです。
自分が作成したプログラムが、設計した通りに動くかを確認します。
ただし、誰が担当するかはプロジェクトによって異なります。
テスト担当者や別の開発者が実施する場合もあるため、実際の現場ではプロジェクトのルールを確認しましょう。
Q. 単体テストでは何を確認するの?
単体テストでは、「正しく動いた」という1パターンだけを確認するわけではありません。
たとえば、次のようなパターンがあります。
- 正常系: 正しい値を入力したとき、想定した結果になるか
- 異常系: 間違った値や想定外の値を入力したとき、適切にエラーになるか
- 境界値: 条件が切り替わるギリギリの値でも正しく判定されるか
たとえば「パスワードは8文字以上」という条件なら、8文字だけでなく、7文字や9文字なども確認します。
単体テストでは、どのような条件を確認すれば不具合を見つけられるかを考えることも重要です。
Q. 単体テストはどうやって実行するの?
単体テストの方法は、プロジェクトによって異なります。
テスト仕様書に沿って画面を操作したり、値を入力したりして手動で確認する方法もあれば、JUnitやpytestなどのテスト用ツールを使って自動化する方法もあります。
自動テストでは、あらかじめ「この値を渡したら、この結果になるはず」というテストコードを作成しておきます。
プログラムを変更したあとも同じテストを繰り返し実行できるため、不具合が発生していないかを確認しやすくなります。
初心者のうちは、まず「単体テストには手動で行う方法と、自動化する方法がある」と覚えておけば十分です。
まとめ
単体テストとは、プログラムを小さな単位に分け、それぞれが正しく動くかを確認するテストです。
ポイントを整理すると、
- 役割: 個々のプログラムや機能に問題がないか確認する
- 目的: バグの早期発見、修正の手間の削減、品質の維持
- 結合テストとの違い: 単体テストは個々の処理、結合テストは処理同士の連携を確認する
「単体テスト」という言葉が出てきたら、まずは「システムを組み合わせて確認する前に、それぞれの部品をチェックする工程」とイメージしてみてください。
このあと結合テストなどへ進むことで、確認する範囲が少しずつ広がっていきます。
