単体テスト
(たんたいてすと/ユニットテスト/Unit Test)
- 文書で確認(海外)
- 1987年
- 更新
- 2026-09-24
一言でいうと
関数やクラスなど、ソフトウェアを構成する小さな単位を、ほかの部分から切り離して期待どおり動くかを確認するテストです。
提唱者と登場年
単体テストの手順を規格として文書にしたものに、米国電気電子学会(IEEE)のIEEE 1008-1987「Standard for Software Unit Testing」があります。1987年の規格番号を持ち、単体テストを体系的に計画し、記録を残しながら行う手順を定めています。この規格は、ユニットの要件に加えて設計と実装の情報も使い、テストが十分かどうかを判断するとしています。
現在の国際的な資格制度では、テスト技術者の資格を運営するJSTQBのFoundation Levelシラバス(2023年版の日本語訳)が、コンポーネントテスト(ユニットテストとも呼ばれる)をテストレベルの一つに挙げています。シラバスは、コンポーネントテストを通常は開発担当者が開発環境で行うテストと説明しています。
何を解決するか
不具合を、原因の範囲が狭いうちに見つけます。複数の部品を組み合わせた後に不具合が見つかると、どの部品に原因があるかを調べる手間が増えます。単体で確認しておけば、失敗したテストがそのまま原因の場所を示します。
もう一つの役割は、変更の安全を確かめることです。自動化した単体テストがあれば、コードを書き換えたときに既存の動きが壊れていないかを数秒から数分で確認できます。この効果は、テストをこまめに実行できる開発環境と、テストを書く時間を見込んだ計画があって初めて得られます。
実際の進み方
自社サービスの開発では、開発者が実装と同時にテストコードを書き、ユニットテストフレームワークで自動実行する形が一般的です。テストはリポジトリに置かれ、変更のたびにCIで実行されます。
受託開発の工程では、詳細設計をもとにテスト項目を一覧にし、実施結果を記録して提出する形もあります。この場合、テストは必ずしも自動化されておらず、手作業で画面や出力を確認する例も含まれます。
導入でよくある失敗
- カバレッジの数値を目標にし、判定の無いテストや意味の薄いテストが増える
- 外部サービスやデータベースへの依存を切り離さず、テストが遅く不安定になる
- 実装の内部構造に密着したテストを書き、設計を変えるたびに大量のテストを直す
求人票にこの語がある場合に読み取れること
必須要件に「単体テストの経験」と書かれている場合、組織によって想定する中身が大きく異なります。自社サービスの組織ではテストコードを書く習慣を指し、受託開発の組織では項目表に沿って実施し記録する作業を指すことがあります。候補者には、テストを自分でコードとして書いたか、どのフレームワークを使ったか、テストがCIで自動実行されていたかを確認してください。
隣接手法との違い
| 用語 | 指すもの | 単体テストとの違い |
|---|---|---|
| 結合テスト | 複数の部品を組み合わせた状態の確認 | 部品間のやり取りが対象 |
| TDD | テストを先に書いて実装を進める手順 | 書く順序の話。単体テストはテストの粒度の話 |
| テスト自動化 | 確認をコードとして繰り返し実行する取り組み | 単体以外の粒度も含む |