軟件驗證

軟件驗證(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, ISBN 0-13-099183-X
  • 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)