ともにテストする手法である[1]。ユニットとはアプリケーションのテスト可能な最小の部品単位である、と直観的にとらえることができる。手続き型プログラミングでは、ユニットは、モジュール全体のこともあるが、より一般的には、個々の関数や手続きである。オブジェクト指向プログラミングでは、ユニットは、クラスなどのインタフェース全体だが、個々のメソッドであることもある[2]。単体テストは開発プロセス中にプログラマー、時にはホワイトボックステスターによって作成される。理想的には、各テストケースは他から独立しているべきである。メソッドスタブ、モックオブジェクト[3]、フェイク、テストハーネスなどのような代替を、モジュールを分離した状態のテストを支援するために使用できる。一般的に単体テストは、コードが設計通りであることと、意図したとおりに動作することを確認するため、ソフトウェア開発者の手によって書かれ、実行される。その実装は手作業(鉛筆と紙)から[要出典]ビルド自動化の一環として定式化される場合まで、さまざまである。今日では、単体テストはxUnitといったテスト自動化ツールを用いて行われるのが主流となっており、単体テストを自動化されたテストとして言及するケースもある(本項目も、自動化されたテストとしての記述を含む)。単体テストはあくまでテストの粒度に対する分類であり、必ずしもテスト自動化を意味しないため、注意が必要である。外部リンク特長[編集]単体テストの目的は、プログラムの各部分を分離し、個々の部品が正しいことを示すことである[1]。単体テストはコードの一部が満たさなければならない厳格な、明記された契約を規定する。その結果、以下のような利点をもたらされる。早期に問題を発見する[編集]単体テストは、開発サイクルの初期段階で問題を発見する。コード自体を書く前に単体テストが作成される。テストに合格すると、そのコードが完成したと見なされる。大規模なコードベースを開発している場合、コードを変更したとき、あるいはビルドの自動プロセスの過程で、同じ単体テストがその機能に対して頻繁に実行される。ユニットテストが失敗した場合は、変更されたコードまたはテスト自体のどちらかのバグであると考えられる。単体テストは、障害や障害の場所を簡単にトレースすることができる。単体テストはテスターやクライアントにコードを渡す前に、開発チームに問題を警告するため、開発プロセスの初期段階に行われる。変更を容易にする[編集]単体テストはプログラマーがコードを後日リファクタリングすることを可能にし、モジュールがまだ正しく動作することを確認する(例えば回帰テスト)。その手順は変更が障害を引き起こした場合、すばやく原因を究明し修正できるため、すべての関数やメソッドに対するテストケースを書くことである。単体テストができているため、プログラマーがコードが正しく動作するかどうかを確認するのは容易である。継続的な単体テスト環境では保守が常時行われているため、どんな変更に対しても、単体テストは実行形式ファイルとコードの意図された用途を正確に反映している。確立した開発業務や単体テストのカバレッジに応じて、最新情報を掲載した精度を維持することができる。統合の簡素化[編集]単体テストは、ユニット自体に不確実性を減らすことができボトムアップテストのスタイルのアプローチで使用することができる。最初のプログラムの部分をテストし、その部分の総和をテストすることにより、統合テストは、はるかに容易になる。[要出典]精巧に階層化された単体テストは統合テストと等価ではない。周辺ユニットとの統合は、単体テストではなく、統合テストに含まれるべきである[要出典]。統合テストは、通常、手動で人間によるテストに大きく依存している。高レベルまたはグローバルスコープのテストは自動化が困難であるため、手動テストの方が多くの場合より速く、より安価であると見られている[要出典]。ドキュメント[編集]単体テストはいわばシステムの生きた技術文書を提供する。開発者がユニットにどのような機能があるかどのように使用すればいいかを知るためには単体テストを調べてユニットのAPIの基本を理解すればよい。単体テストケースはそのユニットの正常動作に必要不可欠な特性を持っている。これらの特性は、ユニットの適切/不適切な使用を示すだけでなく、ユニットにトラップされるネガティブな動作を示す。単体テストはそれ自身とその内部において重要な性質をドキュメント化している。多くのソフト開発環境は開発中製品をドキュメント化するためにコードだけには頼らない。ドキュメント最新化の習慣の緩和など)。設計[編集]テスト駆動のアプローチでソフトウェア開発を行う場合、単体テストが正式な設計の代わりになる。各単体テストは、クラス、メソッド、および観測可能な動作を指定する設計要素として見ることができる。次のJavaの例が、この点を説明する助けになる。ここに実装のいくつかの要素を規定するテストクラスがある。