浅谈验证(Verification)和确认(Validation)
目录
- 1 摘要
- 2 验证和确认的定义
- 2.1 验证(Verification)
- 2.2 确认(Validation)
- 2.3. 主要区别以及示例
- 3 验证和确认在各个测试阶段的应用
- 3.1 软件单元测试(Software Unit Testing)
- 3.2 软件集成测试(Software Integration Testing)
- 3.3 软件合格性测试(Software Qualification Testing)
- 3.4 系统集成测试(System Integration Testing)
- 3.5 系统合格性测试(System Qualification Testing)
- 3.6 V&V的核心区别
- 4 总结
1 摘要
ISO 26262标准中,**验证(Verification)和确认(Validation)**是功能安全生命周期中的两个关键活动。验证确保每个开发步骤(如硬件/软件设计)符合其输入需求(如安全需求),确认确保最终产品在所有预期环境中均满足安全目标(如避免非预期加速等危害)。通常先完成各阶段的验证,最后进行确认(但可能有迭代)。通过区分这两者,ISO 26262确保从微观到宏观层面均覆盖功能安全要求。
2 验证和确认的定义
2.1 验证(Verification)
定义:
验证是通过客观证据证明开发阶段的输出是否满足该阶段规定的需求,即检查“是否正确地构建了产品”(Are we building the product right?)。
关键点:
- 针对开发过程的中间或最终产物(如需求文档、设计模型、代码、测试用例等)。
- 方法包括:评审(Reviews)、静态分析(Static Analysis)、仿真(Simulation)、硬件在环测试(HIL)、单元/集成测试等。
- 示例:检查软件模块是否符合其设计规范。
2.2 确认(Validation)
定义:
确认是通过客观证据证明最终产品(或系统)是否满足用户需求和预期用途,即检查“是否构建了正确的产品”(Are we building the right product?)。
关键点:
- 针对最终产品在真实或接近真实的环境中的行为。
- 方法包括:整车级测试(Vehicle-level Testing)、场景测试(Scenario-based Testing)、用户场景验证等。
- 示例:验证自动驾驶功能在真实道路条件下是否满足安全目标。
2.3. 主要区别以及示例
- 区别:
维度 | 验证(Verification) | 确认(Validation) |
---|---|---|
目标 | 检查是否符合阶段需求(正确性) | 检查是否满足用户需求(适用性) |
范围 | 开发过程中的中间或局部产物 | 完整的系统或产品 |
执行阶段 | 贯穿开发各阶段(如需求→设计→实现) | 开发完成后(或接近完成时) |
方法 | 评审、静态分析、单元测试 | 整车测试、用户场景模拟 |
- 举例说明:
- 验证案例:
通过静态代码分析验证软件是否符合MISRA C规则(防止内存泄漏等)。 - 确认案例:
在试验场测试制动功能是否能在所有定义的故障模式下安全停车。
- 验证案例:
3 验证和确认在各个测试阶段的应用
ISO 26262标准中,验证(Verification)和确认(Validation)在测试过程域(如单元测试、软件集成测试等)的区别主要体现在目标、范围和方法上。以下是各测试过程域中V&V的区别:
3.1 软件单元测试(Software Unit Testing)
-
验证(Verification)
-
目标:确保单个软件单元(如函数、模块)符合详细设计规范。
-
方法:静态分析(代码审查)、动态测试(如白盒测试、覆盖率分析)。
常见方法如下:
-
重点:逻辑正确性、边界条件、语句/分支覆盖率(ISO 26262-6要求覆盖率目标,如MC/DC)。
-
-
确认(Validation)
- 不适用:单元测试通常不涉及确认活动,因为确认关注的是最终产品是否满足用户需求,而单元测试仅针对代码单元。
3.2 软件集成测试(Software Integration Testing)
-
验证(Verification)
-
目标:验证软件组件之间的接口和交互是否符合架构设计。
-
方法:接口测试、故障注入(验证错误处理)等。
常见方法如下:
-
重点:交互错误、架构合规性(ISO 26262-6要求覆盖接口规范)
-
-
确认(Validation)
- 部分适用:可能初步验证软件集成的功能是否满足高层需求(如功能安全需求),但主要仍是验证。
3.3 软件合格性测试(Software Qualification Testing)
-
验证(Verification)
- 目标:确保软件完整实现所有安全需求(ISO 26262-6的Part 6要求)。
- 方法:基于需求的测试(如功能安全测试)、故障注入测试等。
常见验证测试方法:
-
确认(Validation)
- 目标:确认软件是否满足最终用户需求(如安全目标)。
- 方法:用户场景测试、端到端功能测试。
-
关键区别:验证检查“是否按设计实现”,确认检查“是否解决了正确的问题”。
3.4 系统集成测试(System Integration Testing)
-
验证(Verification)
- 目标:验证硬件与软件的交互是否符合系统设计(如ECU与传感器/执行器)。
- 方法:基于需求的测试(如功能安全测试)、故障注入测试等。
常见测试方法如下:
-
确认(Validation)
- 目标:初步确认系统级功能是否满足安全目标(如故障检测机制是否有效)。
- 方法:集成环境下的场景测试(如故障注入到整车层级)。
3.5 系统合格性测试(System Qualification Testing)
-
验证(Verification)
- 目标:验证系统是否符合所有技术安全需求(TSR)。
- 方法:需求追溯性测试、安全机制测试(如安全状态切换)。
常见测试方法:
-
确认(Validation)
- 目标:最终确认系统在真实环境中的行为是否满足用户需求和安全目标。
- 方法:整车级测试(如场地测试、道路测试)、用户用例覆盖。
- 关键活动:评估功能安全(如ASIL等级)是否达成。
3.6 V&V的核心区别
测试阶段 | 验证(Verification) | 确认(Validation) |
---|---|---|
单元测试 | 代码是否符合详细设计 | 不适用 |
软件集成测试 | 组件交互是否符合架构设计 | 初步检查高层需求满足性 |
软件合格性测试 | 软件是否满足安全需求(TSR) | 软件是否满足用户需求(安全目标) |
系统集成测试 | 硬件-软件接口是否符合系统设计 | 系统级功能是否有效(如故障处理) |
系统合格性测试 | 系统是否满足所有TSR | 整车级行为是否满足用户需求和安全目标 |
附加说明
- 验证是“自下而上”的过程(检查设计一致性),确认是“自上而下”的过程(检查需求正确性)。
- 测试层级越高(如系统合格性测试),确认活动的比重越大。
- ISO 26262要求V&V活动需覆盖所有ASIL等级的需求,且确认最终需通过实际环境或等效模拟完成。
4 总结
通过分层实施V&V,ISO 26262确保从代码到系统的每一级均满足功能安全要求,最终降低系统性失效和随机硬件失效的风险。