軟體驗證

軟體驗證(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)