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