ソフトウェア検証は、ソフトウェア工学、プログラミング言語、計算理論の一分野であり、その目的はソフトウェアが期待される要件を満たしていることを保証することである。
検証を広義に定義すると、ソフトウェアテストと関連付けられてしまう。その場合、検証には大きく分けて2つのアプローチがある。
ACMコンピューティング分類システムでは、ソフトウェア検証のトピックは「ソフトウェアとそのエンジニアリング」の「ソフトウェア作成」の中に含まれ、プログラム検証は「計算理論」の「意味論と推論」の「プログラム推論」の中に含まれます。
動的検証はソフトウェアの実行中に実行され、その動作を動的にチェックします。これは一般的にテストフェーズとして知られています。検証はレビュープロセスです。テストの範囲に応じて、テストは次の3つのカテゴリに分類できます。
ソフトウェアの動的検証の目的は、活動によって発生したエラー(例えば、生化学データを分析する医療ソフトウェアなど)や、1つまたは複数の活動の反復実行によって発生したエラー(例えば、Webサーバーのストレステストなど、活動の現在の成果物が活動開始時と同じくらい正しいかどうかを確認するなど)を見つけることです。
静的検証とは、ソフトウェアが実行前にコードを検査することで、要件を満たしているかどうかを確認するプロセスです。例えば、次のようになります。
分析による検証 - 分析による検証方法は、調査、数学的計算、論理的評価、および古典的な教科書的手法または一般的に認められているコンピュータ手法を用いた計算による検証に適用されます。分析には、測定データと観測された試験結果をサンプリングし、計算された期待値と相関させて、要求事項への適合性を確認することが含まれます。
より厳密に定義すると、検証は静的テストに相当し、成果物に適用されることを意図しています。また、(ソフトウェア製品全体の)妥当性確認は動的テストに相当し、実行中のソフトウェア製品(要件を除く成果物ではない)に適用されることを意図しています。要件の妥当性確認は、静的にも動的にも実行できることに注意してください(成果物の妥当性確認を参照)。
ソフトウェア検証は、ソフトウェア妥当性確認と混同されがちです。検証と妥当性確認の違いは以下のとおりです。