软件验证
软件验证(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)