在硬件和软件系统的上下文中,形式验证是使用形式化数学方法证明或反驳系统底层预期算法关于特定形式规范或属性的正确性的行为。
如果没有对模型的正式描述,这些怎么可能是形式验证呢?
静态分析器将生成一段代码的控制/数据流,然后可以应用形式化方法来验证与系统/单元的预期设计模型的一致性。
请注意,建模/正式规范不是static-analysis的一部分。
无论组合在一起,这两种工具在形式验证中都很有用。
例如,如果系统被建模为有限状态机 (FSM)
- 由某些成员数据的特定值组合定义的预定义状态数。
- 由成员函数列表定义的各种状态之间的一组预定义转换。
然后静态分析的结果将有助于形式验证
控制永远不会沿着上述 FSM 模型中不存在的路径流动。
此外,如果可以根据类型定义、数据流、控制流/调用图(即静态分析器可以验证的代码度量)简单地定义模型,那么静态分析本身就足以正式验证该代码符合这样的模型。
注1。上面的黄色区域是静态分析器,用于强制执行诸如编码指南和命名约定之类的东西,即不能影响程序行为的代码方面。
笔记2。上面的红色区域是形式验证,需要额外的步骤,例如 100% 动态代码覆盖、消除未使用和死代码。这些无法使用静态分析器检测/执行。
静态分析在验证系统/单元是否使用语言规范的子集实现以满足系统/单元设计中规定的目标方面非常有效。
例如,如果设计目标是防止堆栈内存超过特定限制,则可以对递归深度应用限制(或完全禁止递归函数调用)。静态分析用于识别此类违反设计目标的行为。
在没有来自静态分析器的任何警告的情况下,
系统/单元代码将根据其各自模型的此类设计目标进行正式验证。
例如。汽车软件的 MISRA-C 标准定义了用于汽车系统的 C 子集。
MISRA-C:2012 包含