軟體驗證

軟體驗證(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: [http://www.kroening.com/papers/tcad-sw-2008.pdf A Survey of Automated Techniques for Formal Software Verification] . IEEE Trans. on CAD of Integrated Circuits and Systems 27(7): 1165-1178 (2008)

评论 (0)

  • 还没有评论,来抢沙发吧。