単体テストの解説(基本情報技術者シラバス用語)

目次

単体テストとは

単体テストとは、システムを構成する最小単位の部品(モジュールや関数、クラスなど)が、単体で正しく設計通りに動作するかを検証するテストのことです。英語では「ユニットテスト」とも呼ばれます。

プログラム全体を組み立ててからテストを行うと、バグ(不具合)が見つかったときに「どの部品のせいで動かないのか」原因を特定するのが非常に困難になります。そのため、家を建てる際にレンガや柱の強度を個別に検査するように、プログラムのパーツ一つひとつを個別にテストします。通常はプログラムの作成者が行い、テストを自動的に実行するためのツール(テストフレームワーク)を使って、様々な入力パターンに対する出力結果が期待通りになるかを確認します。

具体例

消費税を計算する関数 `calculate_tax` というモジュール(部品)を対象にした単体テストのコード例です。

【テスト対象の関数】
def calculate_tax(price):
    return int(price * 0.1)

【単体テストの例】
・テスト1: priceに「100」を入力したとき、戻り値が「10」になることを確認する。
・テスト2: priceに「1000」を入力したとき、戻り値が「100」になることを確認する。
・テスト3: priceに「0」を入力したとき、戻り値が「0」になることを確認する。

もう少し詳しく

単体テスト(ユニットテスト)は、プログラムの個々の部品(関数、メソッド、クラス、モジュール)が、設計通りに正しく動作するかを個別に検証するテスト工程です。通常、プログラムを書いた開発者自身がコーディング直後に実施します。

テストを効率的に行うため、テスト対象が他のモジュール(例えばデータベースや外部API)に依存している場合は、ダミーの応答を返す部品を用意してテストを行います。この際に用いられるテスト用コンポーネントには以下のものがあります。

  • ドライバ(Driver): テスト対象のモジュールを呼び出し、テストデータを与えて実行する「呼び出し代行」プログラム。
  • スタブ(Stub): テスト対象のモジュールから呼び出され、あらかじめ用意された仮のデータを返却する「呼び出され代行」プログラム。

テスト手法としては、プログラムの内部ロジック(制御フローやデータの流れ)に着目して網羅性を確認する「ホワイトボックステスト」が主に使用されます。近年では、JUnitなどのテスティングフレームワークを使い、コードの変更のたびにテストを自動実行する「継続的インテグレーション(CI)」の一部として自動化されるのが一般的です。

試験でのポイント

試験では、単体テストで使われるテスト用補助モジュールである「ドライバ」と「スタブ」の役割の違いについて頻出します。

「ドライバは上流モジュールの代わりとして、テスト対象を起動するために使うもの」「スタブは下流モジュールの代わりとして、テスト対象から呼び出されて仮の応答を返すもの」という違いを確実に暗記しておきましょう。また、V字モデルにおいて、単体テストは「内部設計(詳細設計)」に対応する検証工程であることや、テスト手法として「ホワイトボックステスト」が採用されるという点も出題のポイントです。

関連する用語

関連する用語には、下流モジュールのダミーである「スタブ」、上流モジュールのダミーである「ドライバ」、プログラムの内部構造に基づいてテストする「ホワイトボックステスト」、および単体テスト後の工程である「結合テスト」があります。

読んだ内容を10問練習と実技で確認

記事で理解した用語を、StudyQuestの演習とクラウド実技ラボで定着させます。

10問練習 実技ラボ