验证与确认

两项活动,两组证据,均需提交

确认与验证针对的问题不同,需要开展的活动不同,产生的证据也不同。在受监管的行业中,根据ISO 26262、DO-178C和IEC 61508标准,它们的强制性文档需求也各不相同。将二者视为同义词的开发团队,通常会在最糟糕的时刻(审计期间),才意识到两者的区别。

核心区别

区分它们的最简单方法:

验证

我们开发这款软件的方式正确吗?

确认

我们开发的是正确的软件吗?

验证旨在检查软件是否正确实现其规范说明。确认则旨在检查规范说明是否正确反映最终用户或系统的需求。

实践中的验证

验证活动侧重于软件的内部正确性。这些活动包括:

  • 静态代码分析:在不执行源代码的情况下,检查其中是否存在缺陷和违反标准的情况
  • 单元测试:在隔离状态下,根据规格说明对单个组件进行测试
  • 代码覆盖率测量:确认测试是否充分覆盖代码
  • 基于需求的测试:将每个测试用例与特定需求建立关联
  • 同行评审与审查:对代码和文档进行结构化审查

 

验证的输出是可追溯的证据:测试结果、覆盖率报告和可追溯性矩阵,这些文件展示哪些需求已得到验证以及验证方式。

实践中的确认

确认活动旨在确认系统能够实际完成所需的功能,而不仅仅是满足规范说明书的要求。这些活动通常发生在开发生命周期的后期,包括:

  • 根据最终用户需求或运行场景进行的系统测试
  • 嵌入式系统的硬件在环(HIL)测试
  • 在客户或监管机构参与下的验收测试

 

确认旨在确认:一个构建正确的系统,同时也确实是正确的系统。

为何在受监管行业中两者都不可或缺

包括ISO 26262、DO-178C、IEC 61508和IEC 62304在内的标准明确要求同时开展验证和确认活动,并针对每项活动提供书面证据。验证证据通常包括单元测试报告、静态分析结果和覆盖率数据。确认证据包括系统级测试结果和验收记录。

VectorCAST和PC-lint Plus旨在支持这一流程中的验证环节,生成这些标准所要求的可审计证据。