1.MISRA C 2012 标准浅析
MISRA C 2012 标准浅析
MISRA(The宾利宾利 Motor Industry Software Reliability Association)是汽车工业软件可靠性联会,成立于年英国,系统系统旨在帮助汽车厂商开发安全可靠的源码软件。其成员包括AB汽车电子、操作罗孚汽车、宾利宾利宾利汽车、系统系统影视理财源码福特汽车、源码捷豹汽车、操作路虎公司、宾利宾利Lotus公司、系统系统MIRA公司、源码Ricardo公司、操作实战hadoop 源码TRW汽车电子、宾利宾利利兹大学和福特VISTEON汽车系统公司。系统系统
MISRA支持C语言标准的源码发展历程,MISRA C 目前已经修订多次,最新版本为AMD2,支持C标准。MISRA主要关注功能安全,而CERT C/C++则更多地关注安全威胁。MISRA C :AMD2共有条规则,其中条为规则,条为指令。tomcat 源码 编译指令通常无法被SAST工具检测分析。条规则中,条为强制性,条为必要规则,条为建议规则。
MISRA标准中的每一条规则都有详细的描述信息,包括类别、可判断性、支持语言标准、分析范围、规则编号和规则描述等。随手记 源码
标准分类:规则(Rule)和指令(Directive)的区别在于,指令是一种描述性的指导规范,无法提供执行符合性检查所需的完整描述。为了进行检查,需要提供额外的信息,如设计文件或需求说明。指令部分主要分为实现、编译与构建、要求追踪、代码设计四个部分,共条规范。精品源码 下载规则则可以对相关要求提供完整的描述,评测人员或静态分析工具可以在不需要额外信息的情况下检查源代码是否符合对应规则。
指令:仅依靠源代码分析,无法对指令进行合规性判定,通常需要开发人员提供更多信息,如设计文档和要求说明。静态代码分析工具可以判断代码符合指令,但对于代码不符合指令的情况,代码分析工具给出的结果可能不一致。
规则:仅依靠源代码分析,就可以对规则进行判断,不需要开发人员提供更多信息,所有的静态代码检测工具都应具有对规则进行合规性判定的能力。
Category类别:Mandatory guidelines强制性的,版增加的,声明符合Misra的C代码应遵守所有强制性准则,不允许偏差。Required guidelines必须的,公司或项目可以选择将任何必须的准则视为强制性准则,不符合需要正式的偏差许可。Advisory guidelines建议的,建议性的,不符合应被记录,但是无需正式的偏差许可。
Decidability可判断性和Undecidable不可判定性:Decidable可判断的,总是能够在任何程序中使用工具确定代码是否合规,否则就是不可判定的。例如,规则.3取决于源指针和目标指针的类型是可判定的,而规则.2取决于移位运算符右侧操作数的值是不可判定的。
Analysis Scope分析范围:Single translation unit rule单一编译单元,通过隔离分析每个编译单元中的源代码,可以可靠地进行验证的代码。System rules系统级,只能通过分析整个系统中的源代码了完全检查验证。
MISRA合规对于企业的价值:MISRA是汽车行业公认的C/C++语言编码规范,符合编码规范是ISO :-6软件功能安全开发标准的内在要求之一,开发ASIL功能安全项目必须满足,客户软件过程能力审核要求,在研发生命周期早期发现软件中的缺陷,预防成本投入会大幅度降低投产后的售后维护成本。
对于C、C++语言开发,我们关注里面包括的运行时缺陷,例如缓冲区溢出、整数溢出、数组越界、内存泄露、空指针解引用等缺陷。但是对于出海的企业,例如车企其开发软件遵守MISRA标准是必要的。这些规则虽然大多数不会导致程序崩溃,但是会给这些软件运行带来潜在的出错风险,对于可能造成重大生命财产随时的软件还是应该去遵守的。下面我们列举几个例子、说明代码不安全性主要来源。
开发者编码引入的错误;开发者对C/C++语言的误解;编译器不执行开发人员所期望的操作;编译器包含错误;运行时错误。
目前,业界对于MISRA C :ADM2支持最好的SAST工具是Coverity,支持的规则最多,检测效果最好。其次是北大Cobot,检测效果还可以。
(结束)