静态代码验证与动态代码验证

Vector同时涵盖这两方面

静态分析和动态测试针对同一问题的不同方面。静态分析在执行前发现源代码中的缺陷;动态测试则在执行过程中验证行为是否正确,并衡量测试对代码的覆盖程度。在整个开发流程中将二者结合使用,各自能发现对方未能发现的缺陷类型。

静态代码验证

静态验证是在不执行源代码的情况下对其进行分析。通过直接检查代码的结构和逻辑,静态分析工具能在运行任何测试之前,就识别出潜在的缺陷、安全漏洞以及违反编码规范的情况。

静态分析能发现什么

  • 空指针解引用和数组越界访问
  • 违反编码标准,包括MISRA C、AUTOSAR C++和CERT-C
  • 未初始化的变量和不正确的类型转换
  • 不可达代码和逻辑错误
  • 映射到CWE分类的安全漏洞

主要优势

  • 直接对源代码进行操作,无需构建或执行
  • 从开发最早阶段起就在构建管道中持续运行
  • 若在早期集成,每处缺陷的成本极低
  • 无论运行时条件或输入数据如何,均能生成一致且可重复的结果

PC-lint Plus是一款用于C和C++代码的静态分析工具。该工具已通过IEC 61508和ISO 26262认证,开箱即支持MISRA、AUTOSAR、CERT-C和CWE标准,并可集成到几乎任何构建环境中。

动态代码验证

动态验证是在软件执行过程中对其进行测试。将代码与预定义的测试用例进行比对,观察实际的运行时行为,并衡量测试在多大程度上能够根据需求全面验证代码。

动态测试能带来什么

  • 确认代码在实际和模拟条件下均能正常运行
  • 根据安全标准要求,进行包括语句、分支以及MC/DC在内的代码覆盖率测量
  • 检测运行时错误,例如栈溢出和时序违规
  • 测试结果与其所设计用于验证的需求之间的可追溯性

主要优势

  • 验证实际运行时行为,而不仅仅是源代码结构
  • ISO 26262和DO-178C等标准要求提供结构覆盖率证据
  • 同时支持基于主机和基于目标的测试环境
  • 可集成到CI/CD管道中,实现持续的自动化执行

VectorCAST是专为嵌入式C、C++和Ada软件打造的动态测试与测试自动化平台,能够生成、管理和执行单元测试,按照行业标准测量代码覆盖率,并生成安全认证所要求的可审计报告。

为什么两者不可或缺

静态分析和动态测试各有其明确的范围。静态分析针对源代码进行,在执行之前识别缺陷;动态测试针对正在运行的软件进行,在实际条件下验证其行为是否正确。同时采用这两种方法的开发流程,能够在每种方法最有效的环节捕获缺陷,因此ISO 26262、DO-178C、IEC 61508和IEC 62304标准均将二者作为独立的验证活动予以规定。