在软件测试中不仅要检查程序是否出错、程序是否和软件产品的设计规格说明书一致,而且还要检验所实现的正确功能是否是客户或用户所需要的功能,两者缺一不可,这两部分活动构成了一个完整的测试活动。这是软件测试中有名的V&V,即Verification和Validation。实际上,在整个软件开发生命周期,Verification和Validation每时每刻都存在着。

  1、验证??Verification

  Verification,翻译为“验证”,也可以译为“检验”,即验证或检验软件是否已正确地实现了产品规格书所定义的系统功能和特性。验证过程提供证据表明,软件相关产品与所有生命周期活动(需求分析、设计、编程、测试等)的要求(如正确性、完整性、一致性、准确性等)相一致。

  验证是否满足生命周期过程中的标准、实践和约定;验证为判断每一个生命周期活动是否已经完成,以及是否可以启动其他生命周期活动建立一个新的基准。

  在 ISO9000 中,“验证”的严格定义是:验证是通过检查和提供客观证据,表明规定要求已经满足的认可。“验证”强调的是“规定规格要求”

  2、有效性确认??Validation

  Validation,翻译为“确认”,但更准确地翻译,应该是“有效性确认”,这种有效性确认要求更高,要能保证所生产的软件可追溯到用户需求的一系列活动。确认过程提供证据,表明软件是否满足客户需求(指分配给软件的系统需求),并解决了相应问题。

  在 ISO9000 中,“确认”的严格定义是: 确认:是通过检查和提供客观证据,表明一些针对某一特定预期用途的要求已经满足的认可。“确认”强调的是“预期用途的要求”

  3、两者的区别和联系

  为了更好地理解这两个测试活动的区别,可以概括地说,验证(Verification)是检验开发出来的软件产品和设计规格书的一致性,即是否满足软件厂商的生产要求。但设计规格书本身可能有问题、存在错误,所以即使软件产品中某个功能实现的结果和设计规格书完全一致,但所设计的功能不是用户所需要的,依然是软件严重的缺陷。因为设计规格书很有可能一开始对用户的某个需求理解错了,所以仅仅进行验证(Verification)测试还是不充分的,所以还需要进行性确认(Validation)测试。确认(Validation)是检验产品功能的有效性,即是否满足用户的真正需求。

  这是BOEHM对V&V的又简单的解释是:

   Verification:Are we building the product right?是否正确地构造了软件?即是否正确地做事,验证开发过程是否遵守已定义好的内容

   Validation: Are we building the right product?是否构造了正确的软件?即是否正在做用户真正所需要的事。

  我们还可以给出在目的、对象、参与人员和时机等各个方面的区别和联系。

  目的:

   验证的目的是证实设计阶段输出是否确保设计阶段输入要求;

   确认的目的是通过产品确认设计是否满足使用要求。

  对象:

   验证的对象是设计输出文件,计算书或样品等;

   确认的对象是终产品(样品)。

  参与人员:

   验证的参与人员通常是设计部门;

   确认的参与人员必须包括使用者或能代表使用要求的人员。

  时机:

   验证的时机是设计适当阶段,一般是设计阶段输出形成结果时;

   确认的时机是成功的设计验证后,一般针对终产品,也可分阶段确认。