ソフトウェア開発でよく用いられる「ベリフィケーション(verification)」と「バリデーション(validation)」の意味をご存知でしょうか。
ベリフィケーションとバリデーションは、ソフトウェアの品質を保証するうえで重要なプロセスですが、両者の違いはイメージしづらい部分もあります。
今回は、ソフトウェア開発におけるベリフィケーション・バリデーションの意味や違いを整理して解説します。
またそれぞれの重要性や実施のポイントも紹介するため、ぜひ参考にしてみてください。
- もくじ
1.ベリフィケーションとバリデーションとは
ソフトウェア開発におけるベリフィケーション(Verification)とバリデーション(Validation)は、いずれも品質を保証するために実施するプロセスです。
バリデーションとベリフィケーションをまとめて「V&V(Verification & Validation)」と呼ぶこともあります。
しかし日本語に訳すと、いずれも「立証」「検証」「証明」といった意味になるため、言葉からは明確な違いが分かりづらいかと思います。
まず、ソフトウェア開発で用いられるベリフィケーションとバリデーションのそれぞれの意味について解説します。
1-1 ベリフィケーション=検証
ソフトウェア開発において、ベリフィケーションとは「検証」と訳されます。簡単にいえば「作り方が正しいか」を確かめるプロセスのことです。
ベリフィケーションでは、各工程における成果物が、前工程で定義した仕様や条件に合致しているかを確認します。
たとえば、実装したコードが設計通りになっているかを確かめる「コードレビュー」は、ベリフィケーションの一種です。
ベリフィケーションを料理に例えると、料理の作り方がお店で決められたレシピ通りかを確かめる作業です。
たとえばラーメンの場合、麺のゆで時間やスープの分量、具材の取り合わせなどがレシピ通りになっているかを確かめます。
1-2 バリデーション=妥当性確認
ソフトウェア開発において、バリデーションは「妥当性確認」と訳されます。簡単に言えば「作ったものが正しいか」を確かめるプロセスのことです。
バリデーションでは、開発したソフトウェアが最終的なユーザーの要求や要件に合致しているかを確認します。
たとえば、ユーザーが求める性能を発揮できるか、ソフトウェアを実際に動かして確かめる「パフォーマンステスト」は、バリデーションの一種です。
バリデーションを料理に例えると、提供する料理が「お客様の注文通りか」「お客様が満足できるか」を確かめる作業です。
たとえばラーメンの場合、麺の硬さや量、スープの種類、具材などが注文通りであり、お客様を満足させられるかを確かめます。
なお、ソフトウェアの入力データが問題ないかをチェックする仕組みを「バリデーション」と呼ぶこともあります。これは、ベリフィケーションと対比されるバリデーションとは別物です。本記事では、バリデーション=作ったものが正しいかを確かめるプロセスとして解説します。
2.ベリフィケーションとバリデーションの違い
ベリフィケーションとバリデーションの違いについて詳しく見ていきます。
ここでは次の4観点に分けて、両者の違いについて解説します。
2-1 実施対象および実施目的
ベリフィケーションは、「ソフトウェア開発過程における各成果物」が主な実施対象です。
各工程の成果物が前工程の想定と違っているのでは、以降の開発を正しく進められません。
そうならないよう、「ソフトウェア開発が正しい方向へ進んでいるかを確認」する目的で実施するのがベリフィケーションです。
一方のバリデーションは「開発したソフトウェアそのもの」が主な実施対象です。
開発の前提であるユーザーの要求や要件が、実際のソフトウェアに反映されているかを確かめます。
つまり、「ソフトウェアがユーザーの期待に応えられているかの確認」が実施目的です。
2-2 実施タイミング
ベリフィケーションの実施タイミングは、ソフトウェア開発における全工程の各段階です。
要件に沿っているか確かめる基本設計レビュー、詳細設計に沿って実装されているか確かめるコードレビューなど、各工程で逐次的に実施します。開発終盤のバリデーションは、それまでのベリフィケーションが問題ないことが前提です。
一方、バリデーションの実施タイミングは、主に開発サイクルの終盤です。ソフトウェアが完成に近づいた段階で、実際にユーザーの期待と相違がないかを確かめます。
ただし、バリデーションについては開発サイクル全体で意識することが重要です。たとえば、具体的なバリデーションを開発初期に検討しておくことで、実際のバリデーションを効率的に進められるでしょう。
2-3 実施方法
ベリフィケーションでは、各工程におけるインプット・アウトプットを比較して相違がないか確認するのが基本です。たとえば基本設計レビューでは、要件定義書(インプット)で定義した要件が、基本設計書(アウトプット)へ適切に落とし込まれているかを確認します。
ただし、ベリフィケーションの観点からテストを実行することもあります。たとえば単体テストでは、関数やメソッドを実際に動かした際の振る舞いを、詳細設計と照らしてテストします。これは、一種のベリフィケーションといえるでしょう。
一方のバリデーションでは、実際にソフトウェアを動かした際の振る舞いを、ユーザーの要求や要件と照らし合わせてテストするのが基本です。
たとえば分析機能のテストでは、ユーザーが求める分析項目が網羅されているか、分析結果がユーザーの期待通りか、などがバリデーションの観点として挙げられます
2-4 実施の視点
ベリフィケーションはソフトウェア開発の各工程で行うため、開発者の視点が中心です。要件が基本設計に正しく盛り込まれているか、実装したコードが詳細設計に沿っているか、などが挙げられます。開発過程での整合性を確かめることに重きを置きます。
一方、バリデーションは主にユーザー視点、ベリフィケーションは主に開発者視点で実施します。
バリデーションでは、形になったソフトウェアがユーザーの期待を満たしているかが重要です。ユーザーにとって必要な機能が盛り込まれているか、ユーザーにとって使いやすいか、といった観点が挙げられます。基本的に開発者の視点は含みません。
3.ベリフィケーションとバリデーションの重要性
「ベリフィケーションとバリデーションのどちらが重要か」と疑問に思う方もいるでしょう。
しかし、ベリフィケーションとバリデーションはソフトウェア開発において同じくらい重要です。
なぜなら、ベリフィケーションを重視してバリデーションだけを行うと、開発者の視点とユーザーの要求の間で食い違いが発生した場合にユーザーの期待に応えられず、結果的に品質や満足度が低下してしまう恐れがあるからです。
最終的なソフトウェアの価値を保証するためには、ユーザー視点のバリデーションが必要不可欠になります。
また、反対に、バリデーションを重視するあまりベリフィケーションを怠ると、開発の途中で生じた抜けや間違いに気づけません。ユーザーが期待している機能に漏れが生じたり、設計ミスで思わぬ誤動作が発生したりするケースも考えられます。
このように、ソフトウェア開発においてV&Vの片方だけでは不十分であり、両者を組み合わせることが重要です。
4.ベリフィケーションとバリデーションの実施のポイント
ベリフィケーションとバリデーションを正しく実施するためには、レビュー技法やテスト技法を正しく理解し、活用することが大切です。
レビュー技法やテスト技法に関するノウハウを習得・実践することで、効率的にソフトウェアの問題を検出できます。
なお、レビュー技法やテスト技法に関して学ぶ際には、弊社のオンライン教育プラットフォーム「VALDEMY(バルデミー) 」が役立ちます。
VALDEMYは、ソフトウェア品質向上のために必要な知識をオンラインで体系的に学べるプラットフォームです。レビュー技法やテスト技法に関する正しい知識を効率的に習得したい方は、ぜひご活用ください。
まとめ
ソフトウェア開発において、「ベリフィケーション(verification)」と「バリデーション(validation)」は品質を保証するために欠かせないプロセスです。
ベリフィケーションは「検証」を意味し、「作り方が正しいか」を確認します。
バリデーションは「妥当性確認」を意味し、「作ったものが正しいか」を確認します。
ベリフィケーションとバリデーションは、実施対象や実施タイミング、実施方法、実施の視点などに違いがあります。
しかし、両者はどちらも重要であることに違いはなく、両者を組み合わせることが大切です。
ソフトウェア開発において品質向上を目指すのであれば、ベリフィケーションとバリデーション(V&V)を大切にしていきましょう。