ソフトウェアプロジェクト管理、ソフトウェアテスト、ソフトウェアエンジニアリングにおいて、検証と妥当性確認とは、ソフトウェアシステムが仕様と要件を満たし、意図された目的を達成しているかどうかを確認するプロセスです。これはソフトウェア品質管理とも呼ばれます。通常、ソフトウェア開発ライフサイクルの一部として、ソフトウェアテスターの責任となります。簡単に言うと、ソフトウェア検証とは、「Xを構築すべきだと仮定した場合、私たちのソフトウェアはバグや欠陥なく目標を達成しているか?」ということです。一方、ソフトウェア妥当性確認とは、「Xは構築すべきものであったか?Xは高レベルの要件を満たしているか?」ということです。
検証と妥当性確認は同じものではありませんが、しばしば混同されます。ベームは、その違いを簡潔に次のように表現しました[ 1 ]。
「製品を正しく構築する」とは、仕様がシステムによって正しく実装されていることを確認することであり、「適切な製品を構築する」とは、ユーザーのニーズに立ち返ることを指します。状況によっては、両方の要件を文書化し、準拠性を判断するための正式な手順やプロトコルを用意することが求められます。理想的には、形式手法を用いることで、ソフトウェアが仕様を満たしていることを数学的に保証できます。
製品を正しく構築するには、要求仕様書を開発プロセスの次の段階である設計プロセスへの入力として使用し、その出力として設計仕様書を作成する必要があります。さらに、設計仕様書を構築プロセスに活用することも重要です。プロセスの出力が入力仕様書を正しく実装するたびに、ソフトウェア製品は最終検証に一歩近づきます。プロセスの出力が間違っている場合は、開発者がそのプロセスの何らかの要素を正しく実装していないことを意味します。このような検証は「成果物検証」または「仕様検証」と呼ばれます。
これは、ソフトウェアを実行して仕様が満たされているかどうかを確認することを意味しますが、これは不可能です(例えば、ソフトウェアを実行するだけで、アーキテクチャや設計などが正しく実装されているかどうかを知ることは誰にもできません)。仕様が満たされているかどうかを判断するには、関連する成果物をレビューするしかありません。
ソフトウェア開発プロセスの各段階の出力は、入力仕様と照合することで検証の対象となる場合もあります(下記のCMMIによる定義を参照)。
成果物検証の例:
ソフトウェア検証は、ソフトウェア製品が意図された用途を満たしているか適合しているか(高レベルのチェック)を確認します。つまり、ソフトウェアがユーザー要件を満たしているかどうかを確認します。これは、仕様書やソフトウェアを操作する人だけのニーズとしてではなく、すべてのステークホルダー(ユーザー、オペレーター、管理者、マネージャー、投資家など)のニーズとしてです。ソフトウェア検証には、内部検証と外部検証の2つの方法があります。内部ソフトウェア検証では、ステークホルダーの目標が正しく理解され、要件成果物に正確かつ包括的に表現されていると想定されます。ソフトウェアが要件仕様を満たしていれば、内部検証は完了です。外部検証は、ステークホルダーにソフトウェアがニーズを満たしているかどうかを尋ねることで行われます。さまざまなソフトウェア開発手法では、ユーザーとステークホルダーの関与とフィードバックのレベルが異なるため、外部検証は個別のイベントにも継続的なイベントにもなり得ます。すべてのステークホルダーがソフトウェア製品を受け入れ、ニーズを満たしていると表明したときに、最終的な外部検証が成功します。このような最終的な外部検証には、動的テストである受け入れテストの使用が必要です。
しかし、ソフトウェアが要件仕様を満たしているかどうかを確認するために内部静的テストを実行することも可能だが、これはソフトウェアが実行されていないため、静的検証の範囲に含まれる。
ソフトウェア製品全体が完成する前に、要件を検証する必要があります(ウォーターフォール開発プロセスでは、設計開始前に要件を完全に定義する必要がありますが、反復開発プロセスではそうする必要はなく、継続的な改善が可能です)。
成果物検証の例:
能力成熟度モデル(CMMI-SW v1.1)によれば、 [ 2 ]
ソフトウェア開発プロセスにおける検証は、ユーザー要求仕様の検証の一形態と見なすことができ、開発プロセスの最後には、内部および/または外部ソフトウェア検証に相当するものとなる。CMMIの観点から見ると、検証は明らかに成果物に関するものである。
言い換えれば、ソフトウェア検証は、ソフトウェア開発プロセスの各フェーズの出力が、対応する入力成果物(要件→設計→ソフトウェア製品)で指定された内容を効果的に実行することを保証する一方、ソフトウェア妥当性確認は、ソフトウェア製品がすべてのステークホルダーのニーズを満たしていることを保証します(したがって、要件仕様がそもそも正しく正確に表現されていることを保証します)。ソフトウェア検証は、「正しく構築された」ことを保証し、提供された製品が開発者の計画を満たしていることを確認します。ソフトウェア妥当性確認は、「正しいものが構築された」ことを保証し、提供された製品がステークホルダーの意図した用途と目標を満たしていることを確認します。
本稿では、検証という言葉を厳密な、あるいは狭義の定義で用いている。
テストの観点から:
検証と妥当性確認はどちらも、品質およびソフトウェア品質保証の概念に関連しています。検証と妥当性確認だけではソフトウェアの品質を保証することはできません。計画、トレーサビリティ、構成管理、その他のソフトウェアエンジニアリングの側面が必要となります。
モデリングおよびシミュレーション(M&S)コミュニティ内では、検証、妥当性確認、認定の定義は類似している。
M&S検証の定義は、M&Sが現実世界の意図された用途をどの程度正確に表現しているかに焦点を当てています。M&Sはすべて現実の近似値であるため、M&Sの精度を判断する必要があり、その近似度が意図された用途に対して許容できるかどうかを判断することが通常重要となります。これはソフトウェア検証とは対照的です。
ミッションクリティカルなソフトウェアシステムでは、システムの正常な動作を保証するために形式手法が用いられることがある。しかし、これらの形式手法はコストがかさむ場合があり、ソフトウェア設計コスト全体の80%を占めることもある。
独立ソフトウェア検証および妥当性確認(ISVV)は、安全性が重要なソフトウェアシステムを対象としており、ソフトウェア製品の品質を向上させ、ソフトウェアの運用ライフサイクル全体を通してリスクとコストを削減することを目的としています。ISVVの目標は、ソフトウェアが指定された信頼水準で、設計パラメータと定義された要件の範囲内で動作することを保証することです。[ 4 ] [ 5 ]
ISVV活動は、ソフトウェア開発プロセスに関与しない独立したエンジニアリングチームによって実施され、プロセスと結果として得られる製品を評価します。ISVVチームの独立性は、財務、管理、技術の3つの異なるレベルで実現されます。
ISVVは、開発チームが適用する「従来型」の検証・妥当性確認手法を超えたものです。後者はソフトウェアが公称要件に対して適切に動作することを保証することを目的としていますが、ISVVは堅牢性や信頼性といった非機能要件、およびソフトウェアの障害につながる可能性のある条件に焦点を当てています。
ISVVの結果と所見は、修正と改善のために開発チームにフィードバックされます。
ISVVは、ソフトウェアへのIV&V(独立検証および妥当性確認)の適用から派生したものです。今日知られているISVVの初期適用は、1970年代初頭に米国陸軍がセーフガード弾道ミサイル迎撃システムに関するIV&Vに関連する最初の重要なプログラムを後援したことに遡ります。[ 6 ]もう1つの例は、1993年に設立されたNASAのIV&Vプログラムです。[ 7 ]
1970年代末までに、独立検証・妥当性確認(IV&V)は急速に普及し始めた。ソフトウェアの複雑性、規模、重要性が絶えず増大するにつれ、ソフトウェアへのIV&Vの適用に対する需要も高まっていった。
一方、IV&V(およびソフトウェアシステムの場合はISVV)は統合され、現在では国防総省、FAA [ 8 ] 、NASA [ 7 ]、ESA [ 9 ]などの組織で広く使用されています。IV &VはDO-178B、ISO/IEC 12207で言及され、 IEEE 1012で形式化されています。
当初、2004年から2005年にかけて、欧州宇宙機関が主導し、DNV、Critical Software SA、Terma、CODA SciSys plcで構成される欧州コンソーシアムが、他の組織の支援を受けて、ISVV専用のガイド「ESA独立検証および妥当性確認ガイド」の最初のバージョンを作成しました。[ 10 ]このガイドは、ISVVに関するすべてのソフトウェアエンジニアリングフェーズに適用可能な方法論を網羅しています。
2008年に欧州宇宙機関は、多くの異なる欧州宇宙ISVV関係者からの意見を取り入れて、第2版をリリースした。[ 10 ]
ISVVは通常、5つの主要なフェーズで構成され、これらのフェーズは順次実行することも、カスタマイズプロセスの結果として実行することもできます。
ソフトウェアは、多くの場合、政府機関[ 11 ] [ 12 ]や産業行政当局によって指導される、法的に規制された業界のコンプライアンス要件を満たす必要があります。たとえば、FDAはソフトウェアのバージョンとパッチの検証を要求しています。[ 13 ]
{{cite web}}:欠落または空欄|url=(ヘルプ)