平成22年度 春期 ITパスポート試験 問47 解説 プログラム単体テスト
プログラムの単体テストに関する記述のうち,適切なものはどれか。
- ア 作成したプログラムごとのテストは行わず,複数のプログラムを組み合わせ,一括してテストする。
- イ テスト仕様は,システム要件を定義する際に作成する。
- ウ テストデータは,システムの利用者が作成する。
- エ ロジックの網羅性も含めてプログラムをテストする。 ✓ 正答
解説
単体テストとは、プログラムを構成する最小単位である「関数」や「メソッド」といった個々の部品が、設計通りに正しく動作するかを検証する工程です。正解の「ロジックの網羅性」というキーワードが、単体テストの目的を端的に表しています。
単体テストの目的と役割
システム開発におけるテスト工程は、開発の進捗に合わせて段階的に行われます。単体テストはその最初のステップであり、プログラム内部の細かい処理が仕様通りであるかを確認します。
ここで重要になるのが「ロジックの網羅性」です。プログラムは条件分岐や繰り返し処理で構成されており、すべての条件が正しく動くかを確認する必要があります。例えば、if文の条件が「真」の場合だけでなく「偽」の場合も正しく処理されるか、特定の数値を入れた時に計算が合うかといった詳細なチェックを行います。これを疎かにすると、後の結合テストでエラーが発生した際、どのプログラムに問題があるのか特定が非常に困難になります。
選択肢が誤りである理由
他の選択肢を検討すると、テスト工程ごとの役割分担が明確になります。
アは結合テストの説明です。単体テストで各部品の動作を保証した後に、それらを組み合わせて連携を確認するのが結合テストの役割です。一括でテストしてしまうと、どこでバグが発生したかの切り分けができません。
イはテスト設計のタイミングに関する記述ですが、テスト仕様はシステム要件定義だけでなく、詳細設計の内容を反映して作成されます。システム要件定義はユーザー側の視点が強い工程であり、単体テストの詳細な仕様を決めるのは設計工程の後半が一般的です。
ウは誤りです。テストデータは開発者やテスト担当者が作成します。利用者は、システムの運用段階で実際のデータを用いてテスト(受入れテストなど)を行いますが、プログラムのロジックを網羅するための細かいテストデータの作成は、開発の専門知識を持つ技術者が担当します。
テスト工程の理解を実務に活かす
この問題の教育的意図は、テストの「粒度」を理解させることにあります。実務において、不具合(バグ)の発見が遅れるほど、その修正コストは指数関数的に跳ね上がります。単体テストという最も細かい粒度でバグを潰しておくことは、プロジェクトの品質を守り、納期を守るための最も効果的な手段です。
この考え方は、テスト駆動開発(TDD)などのモダンな開発手法においても核心となります。コードを書く前にテストコードを書き、そのテストが通るようにプログラムを実装するという手法は、ロジックの網羅性を高めるための最も論理的なアプローチといえます。