验证与确认
两项活动,两组证据,均需提交
确认与验证针对的问题不同,需要开展的活动不同,产生的证据也不同。在受监管的行业中,根据ISO 26262、DO-178C和IEC 61508标准,它们的强制性文档需求也各不相同。将二者视为同义词的开发团队,通常会在最糟糕的时刻(审计期间),才意识到两者的区别。
核心区别
区分它们的最简单方法:
验证
我们开发这款软件的方式正确吗?
确认
我们开发的是正确的软件吗?
验证旨在检查软件是否正确实现其规范说明。确认则旨在检查规范说明是否正确反映最终用户或系统的需求。
实践中的验证
验证活动侧重于软件的内部正确性。这些活动包括:
- 静态代码分析:在不执行源代码的情况下,检查其中是否存在缺陷和违反标准的情况
- 单元测试:在隔离状态下,根据规格说明对单个组件进行测试
- 代码覆盖率测量:确认测试是否充分覆盖代码
- 基于需求的测试:将每个测试用例与特定需求建立关联
- 同行评审与审查:对代码和文档进行结构化审查
验证的输出是可追溯的证据:测试结果、覆盖率报告和可追溯性矩阵,这些文件展示哪些需求已得到验证以及验证方式。
实践中的确认
确认活动旨在确认系统能够实际完成所需的功能,而不仅仅是满足规范说明书的要求。这些活动通常发生在开发生命周期的后期,包括:
- 根据最终用户需求或运行场景进行的系统测试
- 嵌入式系统的硬件在环(HIL)测试
- 在客户或监管机构参与下的验收测试
确认旨在确认:一个构建正确的系统,同时也确实是正确的系统。
为何在受监管行业中两者都不可或缺
包括ISO 26262、DO-178C、IEC 61508和IEC 62304在内的标准明确要求同时开展验证和确认活动,并针对每项活动提供书面证据。验证证据通常包括单元测试报告、静态分析结果和覆盖率数据。确认证据包括系统级测试结果和验收记录。
VectorCAST和PC-lint Plus旨在支持这一流程中的验证环节,生成这些标准所要求的可审计证据。