什么是代码验证?

嵌入式软件团队的精确定义

代码验证是指确认软件是否正确实现其预期设计和需求的过程。在安全关键型开发中,该过程贯穿整个生命周期,每个阶段都会产生书面证据,并纳入合规案例中。

验证与确认:简明版

这两个术语常被混用,但它们针对的是不同的问题。

  • 验证关注的是:是否正确地构建软件?实现是否符合规范说明?
  • 确认则关注:构建的是正确的软件吗?是否满足用户的实际需求?

代码验证侧重于前者:通过静态分析、结构化审查和动态测试,来确认实现是否忠实反映设计和规范的要求。

代码验证的内容

一套完整的验证策略通常结合多项互补的活动。

静态代码分析

源代码在未执行的情况下进行检查。在测试开始之前,PC-lint Plus等工具会扫描代码,以检测是否存在违反编码规范、空指针解引用、越界访问、未定义行为以及数百种其他缺陷类型。更多关于静态分析的信息

单元测试

各个函数、模块、类和组件均在隔离状态下进行测试。开发人员会验证代码在正常输入、边界条件和错误情况下的正确行为。VectorCAST等工具可自动生成和执行测试,并衡量测试对代码的覆盖程度。了解更多关于单元测试的信息

代码覆盖率测量

包括语句、分支以及MC/DC在内的覆盖率指标,可证明测试套件已充分验证代码。在受监管的行业中,达到特定的覆盖率水平是一项强制性要求,而非目标。了解代码覆盖率

需求可追溯性

每个测试用例都与其所验证的需求相关联。双向可追溯性表明所有需求均已通过测试,且不存在毫无目的的测试。这是任何安全审计的关键要素。

验证不应事后弥补

在代码验证阶段发现的缺陷,其修复成本远低于在集成测试、系统测试或实际使用中发现的缺陷。对于嵌入式软件而言,由于召回成本和安全后果可能十分严重,通过系统化的验证尽早发现错误,无论从经济还是道德角度来看都至关重要。

包括ISO 26262、DO-178C、IEC 61508和IEC 62304在内的行业标准均要求开展有文档记录且具有可追溯证据的验证活动。Vector的工具正是专门为满足这些要求而设计的。