20世纪90年代初,汽车电子产品的重要性日益凸显。电子产品中的软件也随之变得举足轻重。不论是从商业角度还是从安全角度考虑,保证软件可靠性都是很有有必要的。如今,一辆汽车内的软件代码可扩展到百万行的量级。保证软件的可靠性正面临着空前的挑战。
汽车工业软件可靠性协会(MISRA),是在英国政府的大力支持下,由多家汽车工业的公司代表组成,以应对汽车电子中日益增长的软件使用,并给嵌入式软件的发展提供指导。该协会针对软件工程中出现的问题不断发布新的标准。
该协会首先于1994年发布了“基于车辆的软件开发指南”。此指南为IEC 61508标准(“电气/电子/可编程电子安全相关系统的功能安全”)中汽车行业标准的前身。而最近出版的ISO 26262标准(道路车辆功能安全)取代了此指南。
协会建立至今,发表了一系列的文件和指南,用以解决C和C 语言的一些固有问题。
C 和 C++
C和C++ 语言在嵌入式软件开发领域使用最为广泛(VD C最近研究显示:受访企业的嵌入式系统开发,70%在使用C语言,42%在使用C 语言)。C语言提供了一个广泛的资源库,众多工具都支持该语言,有着丰富的开发库。
C语言替代汇编语言发展成为应用程序语言,但从没有考虑过其是否适合用于安全关键环境。一个通过编译并完全符合ISO语言标准要求的C程序,可能还会包含不可预测的行为——在如汽车制动系统等应用程序中,此种情况显然是不可接受的。我们可以通过限制语言的使用大幅减少危险的发生。这一直是MISRA编码准则的基本目的。
编码标准
编码标准即定义一种统一编码方式。不同于可靠性、可移植性和可维护性等影响软件质量的重要属性,虽然编码风格属于个人喜好,但是在一个软件项目中,统一的编码风格也是一项重要约束。编码标准更为基本的作用是定义一个更安全的编程语言的子集。通过制定一组规则,消除编码结构已知的危险。
C语言允许开发人员做很多本质上不正确的事情,所以编写符合语言标准要求的代码非常容易。但是这将导致程序失败(如崩溃)或者未定义的行为。如访问数组或算术运算内存范围之外导致溢出。
显然确定这样的“bugs”是非常重要的。其中一些可通过编译器识别出来,当然专门的静态分析工具将更为有效。然而,编码标准的主要目的并非识别问题而是着重预防,它们劝诫开发人员不要犯这样显而易见的“错误”。
编码规则的根本目的是限制语言的使用,用以避免开发人员做本质上是“错误”或者有潜在危险的事情。例如,在C语言中函数的声明和定义有两种不同的方式。‘旧’(Kernighan和Ritchie即K&R)语法虽然现在仍然支持,但是现在已经被‘函数原型’语法所取代。为避免误用和引入错误,在MISRA-C中禁止使用K&R语法。很多软件缺陷可通过采取合理限制语言的使用来避免。
MISRA编码准则
MISRA编码标准简洁明了,在全球范围内公认为C和C ++ 开发安全关键软件的基准。
MISRA每个文档都包含一组编码规则,在文档前几章节会介绍背景信息,对于开发健壮代码也是相当重要的。该背景信息强调,对编码规则的严格遵守只是成功的软件开发过程中的一个要素,我们还需适当的编译器和验证工具。
MISRA-C:1998
第一组编码标准于1998年由MISRA发布。两个MISRA成员——福特和路虎,要求PRQA帮助他们创建自己的编码标准。通过这项工作,确定了第一版本的MISRA-C基础内容:“汽车电子软件中使用C语言的指导方针”。这个版本包含127个编码规则,并取得了立竿见影的影响。13年后的今天,它仍然被用在许多旧有系统的维护中。
MISRA-C:2004
MISRA-C在2004年推出了新版本,对之前的版本进行了改进,并明确了该规则的使用领域。与之前版本相比较,其结构有了很大的改变,增加了一些额外的规则,并保留了原始版本的精髓。值得注意的是,新版本将标题中“汽车行业软件”修订为“关键系统”。这反映出MISRA-C已经广泛应用于汽车行业之外。
MISRA-C ++ :2008
尽管C语言是安全关键系统的主要编程语言,但是C 语言的使用仍然保持了稳步增长。在这一背景下,在2008年推出了MISRA-C++ 。较之C,C++ 要复杂的多。所以此编程规则中包含228条规则。
MISRA-C自动代码
在系统开发中使用建模工具频率大幅增长。从模型自动生成代码的过程灵活、快速。特别是使用建模工具给产品开发周期带来的显著变化使得该优势更加突出明显。
在遵循应用程序的编码准则情况下自动生成的代码可以说是混乱的根源所在。因为手动代码开发准则并不总适合于自动生成代码。所以MISRA发布了适用于代码生成工具的MISRA-C:2004规范。
然而影响自动生成代码质量的并非只是代码生成工具的原因,也可能是在模型设计时就存在了问题。所以MISRA还出版了一些书籍,用来为在应用程序中使用如Simulink和TargetLink建模语言提供设计方案和风格指南准则。
MISRA-C:2012
第三代MISRA C编码标准MISRA-C:2012已于2013年3月正式发布。MC3对一系列编码规则进行了改进,增加了对C99的支持,并对所有编码规则给予了更为精确的定义。对于那些关心代码质量和可靠性的C代码开发人员来说,MC3意义重大。此外,新版本还增加了一些新的规则,对一部分规则进行改进设计使得用户更容易理解和使用这些准则。这些改进都是通过全球各地用户在使用MISRA C2的反馈中获取的丰富经验。
静态分析
不幸的是,在推行编码准则的过程中,面临着很多困难。据观察,许多公司投入相当大的精力编制了一套编码准则,在实施过程中却因难以执行而被放弃。
MISRA编码准则是很难通过手动代码审查实现有效的执行。传统的代码检查会耗费大量时间,而且并不是很可靠。大多数的编码规则适合于使用工具自动执行。
虽然一些嵌入式编译器会提供一定程度的规则检查,但是专用静态分析工具提供更为全面的检查。通过静态分析工具不仅可确定具体违反规则的地方,也可找出其他编码问题,源码度量计算,通过深度数据流分析确定代码运行时可能会出现的错误。
但并不是每一条MISRA规则都可通过工具自动执行。也有少数规则是解决文档问题或是规则框架,需要凭借主观判断的。然而绝大多数的MISRA规则可以非常有效地自动执行。
静态代码分析是一种速度快,功能强大,可靠且可复用的一种技术。每个程序员可单独使用,避免了手动代码审查中很容易出现的争吵现象的出现。
有关PRQA
PRQA与MISRA之间的关系可追溯到20年前,MISRA-C和MISRA-C++ 的主要准则元素是来自PRQA自己的编码标准。并且PRQA的技术专家为MISRA-C何MISRA-C++ 工作组的主要成员。
PRQA的静态分析工具——QA·C和QA·C++ ,在MISRA-C和MISRA-C++ 依从性检查,以及许多其他有价值的分析能力方面在业内独占鳌头。
(公司简介:恒润科技成立于1998年,一直致力于汽车电子工业的发展,为国内外汽车厂商提供全方位、高科技的一体化产品与服务,包括汽车电子产品、生产设备、咨询服务、专业培训及代理研发工具等,以满足广大客户日益个性化的需求。恒润科技65%以上的员工拥有硕士或博士学位,公司总部设在北京,在上海、成都、长春、武汉设有分公司,在重庆、广州等地均设有联络处,并在美国成立了分公司。)
(文章来源:盖世汽车网)
*版权声明:本文为盖世汽车原创文章,如欲转载请遵守 转载说明 相关规定。违反转载说明者,盖世汽车将依法追究其法律责任!
本文地址:https://auto.gasgoo.com/News/2014/07/09014334433460303774397.shtml
 好文章,需要你的鼓励
联系邮箱:info@gasgoo.com
求职应聘:021-39197800-8035
简历投递:zhaopin@gasgoo.com
客服微信:gasgoo12 (豆豆)
新闻热线:021-39586122
商务合作:021-39586681
市场合作:021-39197800-8032
研究院项目咨询:021-39197921