軟體驗證

軟體驗證（software verification）是軟體工程中的一部份，目的在確認軟體滿足預期的需求。

較廣的定義及分類 
廣義定義的軟體驗證類似软件测试。有二種驗證的方式：
 動態驗證，也稱為實驗、或測試。會執行软體，動態驗證可以確認是否有程序错误。
 靜態驗證，也稱為靜態程序分析或原始碼分析或分析。靜態驗證可以確認程式的正确性。不過有可能會出現軟體實際執行結果和靜態分析不一致的情形。

動態驗證（測試、實驗）
動態驗證是在執行軟體時進行，並且動態的確認其行為是否正確。一般會稱為軟體測試階段。驗證本身就是評審的過程。依照測試範圍的不同，可以區分出幾種不同的測試：
 小範圍測試：針對單一函式或是類別的測試（单元测试）
 大範圍測試：針對一組類別進行的測試，例如
 模組測試（單一模組）
 集成测试（幾個模組）
 系統測試（整個系統）
 验收测试：針對軟體是否符合允收條件的正式測試
 機能性測試
 非機能性測試（性能、壓力測試）

軟體動態驗證的目的透過一個活動（例如用醫療軟體來分析生醫資料）來找到軟體問題，也可以透過一個或是多個活動的重覆性性能（例如網頁伺服器的壓力測試、確認產品測試時的情形是否和一開始測試時相同）。

靜態驗證（分析） 
靜態驗證是在軟體執行之前檢查原始碼，來檢查軟體是否符合需求。例如：
 驗證
 負面實務（反面模式）檢測
 計算軟體度量
 形式验证

透過分析進行驗證，此方式可以用檢測、數學計算、邏輯推導、以及教科書上建議的方式或是其他廣為接受的方式來進行驗證。分析包括取樣、找到量測資料和觀察到測試結果之間的相關性，再配合計算軟體符合需求的期望值高低。

較窄的定義 
若要作較精準的定義，軟體的驗證（verification）只包括靜態測試，是要應用在製品（artifacts）上。（整個軟體產品）的確認（validation）就等於動態測試，是要應用在運行的軟體產品上（除了需求外，不會針對製品進行確認）。不過需求確認（requirements validation）可以是動態的，也可以是靜態的。

和軟體確認的比較 

軟體驗證常會和軟體確認（software validation）混淆。軟體驗證及確認之間的差異如下：
 軟體驗證會確保「以正確的方式製造產品」，例如房屋符合藍圖的中的設計。
 軟體確認會確保「製造正確的產品」，例如房屋符合客戶的期待及需求。

相關條目
 軟體驗證及確認
 
 電子設計自動化

參考資料 
 IEEE: SWEBOK: Guide to the Software Engineering Body of Knowledge
 Carlo Ghezzi, Mehdi Jazayeri, Dino Mandrioli: Fundamentals of Software Engineering, Prentice Hall, 
 Alan L. Breitler: A Verification Procedure for Software Derived from Artificial Neural Networks, Journal of the International Test and Evaluation Association, Jan 2004, Vol 25, No 4.
 Vijay D'Silva, Daniel Kroening, Georg Weissenbacher: A Survey of Automated Techniques for Formal Software Verification . IEEE Trans. on CAD of Integrated Circuits and Systems 27(7): 1165-1178 (2008)

软件测试