Validation とVerification

テストには、Validation とVerification という考え方があります。

詳細設計書をもとに、ソースコードを作成した場合を例にします。

Validation は、詳細設計書に基づいて作成したソースコードが、詳細設計書に書いてある内容を満たしていることを確認します。つまり、成果物に対する確認です。

Verification は、詳細設計書に基づいてソースコードを作成できたことを確認します。つまり、プロセスに対する確認です。

例えば、詳細設計書の一部の情報を完全に見落として、ソースコードを作成したとします。ただし、見落とした情報以外については、正しく作成できたとします。この場合、プロセスの input が正しくないのですが、プロセス自体は正しいので、Verification は PASS します。しかし、Validation で FAIL します。

一方、Verification は Validation より細かい粒度で確認を行ないます。例えば、以下のような設計仕様があったとします。

関数 PrintGender(uint8_t num)
num 0:男性, 1:女性

上記の仕様に基づいた validation では、最低限テストケースで保証する num の値は 0 と 1 です。しかし、以下のような実装で、num > 1 のときに発生する不具合を発見できません。

char gender[] = {'M', 'F'};
PrintGender(uint8_t num)
{
    printf("%c", gender[num]);
}

この場合、設計書に十分な記載がなかったとしても、ソースコード作成者は何かしらの処置を施す必要があります。そのプロセスに対して、Verification で正しく作れているか確認をします。また、設計仕様とは関係のない開発環境の都合により、思いがけない不具合を生む可能性もあります。そうした仕様とは直接関係のない、或いは仕様では考慮しきれていない不具合の可能性を潰すのが、Verification です。最低限動いたあともしつこく続けるデバッグですね。

勘違いしやすいこと

詳細設計書から作成したソースコード群を結合して、基本設計書で定義されたパッケージモジュールが出来たとします。このパッケージモジュールに対して、デバッグのように仕様外の不具合を潰す Verification はあるでしょうか。実はありません。そういうテスト自体は、意地悪テストとして存在はしますが、Verification ではありません。Verification はあくまでプロセスに対する確認です。なので、パッケージモジュール作成に対する Verification は何かと言うと、正しくリンク出来たかを確認することです。

実際問題、パッケージモジュールに対する Verification と言っても、パッケージモジュール自体を作った人って存在しません。存在するのは、個々のソースコードを作った人と、それらを結合した人です。これらを全て同じ人が担ったとしても、意味は同じです。なので、パッケージモジュールの動作に対する Verification は、やりようがないのです。

具体的な作業内容

Validation は、設計書に基づいたテストになります。Verification は色々な方法があり、検査プログラムを動かしたり、ソースコードレビューを行ったり、様々です。


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-05-22 (土) 03:08:04