开发生命周期中的验证
遵循ISO 26262、DO-178C、IEC 61508和IEC 62304标准的嵌入式软件团队会在开发的每个阶段进行验证。其经济效益显而易见:静态分析阶段发现的缺陷所产生的成本,仅为集成阶段发现缺陷成本的一小部分;而集成阶段发现的缺陷所产生的成本,又仅为实际使用中发现缺陷成本的一小部分。静态分析、单元测试、集成测试、覆盖率测量和可追溯性记录,各自服务于特定的开发阶段。当项目进入审计阶段时,相关证据应当已经准备就绪。
验证始于源头
发现缺陷最具成本效益的时机是在测试开始之前。静态代码分析无需执行源代码即可对其进行检查,能在代码编写完成的瞬间就发现违反编码规范、类型错误、空指针解引用以及安全漏洞等问题。将其集成到构建管道中,既能为开发人员提供即时反馈,又能防止缺陷在项目过程中不断累积。
单元测试:验证每个组件
代码编写完成后,单元测试用于验证每个函数、模块、类或组件在孤立状态下是否行为正确。每个测试用例均针对特定需求编写,自动执行,并测量其结构覆盖率,从而建立安全标准所要求的双向可追溯性。
VectorCAST可自动创建和管理C、C++及Ada语言的单元测试环境,支持主机和目标平台上的执行,并生成安全标准所要求的覆盖率数据和可追溯性记录。
集成测试:验证接口
在验证各个单元之后,集成测试用于确认它们之间的接口是否行为正确。在此阶段,将对模块边界的假设进行验证,测试组件之间的耦合关系,并开始显现系统级行为。覆盖率测量在此阶段继续进行,通常使用VectorCAST/QA工具,在不依赖编译器的情况下对集成后的软件进行插桩。
覆盖范围、可追溯性与证据
Vector工具可按照各标准规定的级别测量结构覆盖率,从较低完整性级别的语句和分支覆盖率,到ASIL D和DO-178C A级的MC/DC覆盖率。每个测试结果都与所验证的需求相关联,且每份覆盖率报告均以认证机构审核的格式生成。
持续验证
持续验证意味着每次提交都会被检查,而不仅仅是那些被标记为需要审查的构建。PC-lint Plus在代码编写时即进行静态分析。VectorCAST会重新执行受每次更改影响的测试,而不是每次都运行完整的测试套件。Squore会监控这些运行的累积效果,强制执行质量门槛,并在趋势演变为发布风险之前将其揭示出来。