软件验证

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