0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MISRA编码标准和静态代码分析器

星星科技指导员 来源:嵌入式计算设计 作者: Ekaterina Nikiforova 2022-06-30 14:45 次阅读

近年来,软件质量、安全和保障已成为重中之重。在我们之前的文章中,我们已经提到了历史上的一些事件,这些事件既造成了巨大的经济损失,也造成了人员死亡。Ariane 5的爆炸,Therac-25放射治疗机使患者暴露于 20,000 拉德的过量剂量,89 人因丰田的过错而死亡。所有这些故事都有一个共同点:导致巨大损失的软件错误。

那么什么是 MISRA?

最初,MISRA(汽车行业软件可靠性协会)成立的目的是为道路车辆中使用的微控制器设计一套软件开发指南。从那时起,它就被应用于汽车工业、医疗设备、航空航天和国防等所有对可靠性和安全性至关重要的领域。MISRA 标准是由一组规则和建议组成的文档,C 和 C++ 开发人员在开发其应用程序时应遵守这些规则和建议。MISRA-C:1998 版本有127条规则。

所有这些规则都可以分为以下几类:

强制的

必需 – 允许偏离规则(但建议记录在案)

咨询——非强制性

(来源: 什么是 MISRA 以及如何烹饪)

首先要提到的是,MISRA 标准的应用应该在开发过程真正开始之前就开始,并且只有在真正需要的时候才开始。在其他情况下,特别是当代码库足够大并且不打算在嵌入式系统上使用时,开发人员将不得不进行漫长而乏味的重构。为什么这样?

WinMerge 的源代码长约 25 万行 C 和 C++ 代码。这是一个小项目,但是将if语句的主体括在花括号中的规则在其中被破坏了大约 2000 次。有 127-228 条这样的规则(取决于标准的版本)。

Nana 是一个用于创建图形用户界面的跨平台库,其源代码长度不到 10 万行。在这个项目中,同样的规则被打破了大约三千次。

除了关于花括号的规则之外,还有一些规则:

不得使用 continue 语句;

每个 switch 语句都应该有一个默认标签

不得使用 goto 语句;

所有 if 。.. else if 结构都应以 else 子句终止;

那么,它是用来做什么的呢?

但是,这些规则并不意味着让开发人员的生活更加艰难。这些是用鲜血写成的规则,它们用于使安全关键代码不易出现错误。这个想法是简单而清晰的代码不太可能包含错误。以下是一些作为证据的诊断示例:

赋值运算符不得用于返回布尔值的表达式;

所有非 void 的函数都应该返回一个值;

循环计数器不应具有本质上的浮动类型;

一个函数最后应该有一个退出点;

遵循 MISRA 指南将有助于提高软件的可靠性。但是,不熟悉 MISRA 的人可能想知道它是如何使用的。你真的必须记住所有这 127 条规则吗?这就是静态分析器可以提供帮助的地方。

静态分析的目的是什么?

手动检查代码是否符合 MISRA 标准是一项漫长而乏味的工作。但实际上你不必记住所有这些规则。静态代码分析器可以为您完成所有工作。

静态代码分析是检测计算机程序源代码中的错误和小缺陷的过程。它可以被视为自动代码审查。一些静态分析器可以检查代码是否符合 MISRA 规则,正是这些工具将帮助您找到并修复程序中所有不符合规则的点。为此,您只需使用分析仪检查您的项目并研究检查结束时生成的分析报告。下面我将简要演示如何使用 PVS-Studio 分析器和项目 Shairport 作为示例来执行此操作。PVS-Studio 可在此处下载

克隆存储库。

pYYBAGK9Rq6AIaujAAE-aWH--yw308.png

运行构建配置脚本。

poYBAGK9RriASXBeAAF900aVcks432.png

在跟踪模式下运行 PVS-Studio 并构建项目。

poYBAGK9RsGAXSjhAASMtsi8K7Q047.png

根据上一步的结果分析项目文件。

poYBAGK9RsmAN4kbAANhT7WmPYM112.png

将日志转换为 html。

poYBAGK9RtOANvczAAFj9JPDt4k863.png

完毕。我们现在可以查看日志。

pYYBAGK9RtuAHx02AAR-jZpO5eI066.png

所以,我们今天了解了 MISRA:我们查看了一些规则,讨论了为什么需要这些指南,如何将它们应用到您的项目中,等等。我希望这篇文章足够有趣,不会让你昏昏欲睡,而且仍然能提供丰富的信息,让作者的工作值得。希望现在您对 MISRA 是什么以及需要什么静态代码分析器有了更好的理解。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    7463

    浏览量

    150876
  • C++
    C++
    +关注

    关注

    21

    文章

    2102

    浏览量

    73455
  • 源代码
    +关注

    关注

    96

    文章

    2943

    浏览量

    66620
收藏 人收藏

    评论

    相关推荐

    如何测试TPA3118和TPA3116的静态电流和静态功耗?

    1.如何测试TPA3118和TPA3116的静态电流和静态功耗? 2.测试时候需要带负载嘛?(是否需要接喇叭) 3.如果用万用表测试应该怎么测?
    发表于 10-12 06:54

    汽车异构硬件平台开发如何进行静态代码分析

    先进的静态代码分析工具,其新版本中引入的多CCT功能为开发人员提供了强大的支持,该功能不仅简化了多编译环境下的代码
    的头像 发表于 10-09 16:15 424次阅读
    汽车异构硬件平台开发如何进行<b class='flag-5'>静态</b><b class='flag-5'>代码</b><b class='flag-5'>分析</b>

    传感的动态特性和静态特性参数介绍

    传感的特性可以分为静态特性和动态特性两大类,这两类特性分别描述了传感在不同输入条件下的输出响应特点。下面将详细介绍这两类特性的主要参数。
    的头像 发表于 09-29 16:24 1027次阅读

    embOS的MISRA-C:2012一致性

    MISRA C是汽车工业软件可靠性协会(MISRA)开发的一套针对C编程语言的软件开发指南,目的是提升嵌入式系统的安全性和可移植性。2012发布的MISRA C第三版,称为MISRA
    的头像 发表于 08-20 11:35 398次阅读

    whitepaper-perforce-what-is-misra

    如果您熟悉嵌入式软件的世界,您可能听说过安全关键系统的MISRA编码准则和合规性。最初为在汽车嵌入式软件行业,MISRA C for C 和 C++ 被广泛使用嵌入式行业,从航空航天和国防到医疗设备。本文提供
    发表于 08-08 15:54 0次下载

    代码静态测试工具Klocwork 2024.2新发布

    Klocwork 2024.2 为现代 C/C++ 分析引擎引入了显着的准确性和性能改进。此版本还包括增强的安全性和身份验证功能以及改进的用户体验,以及 MISRA® 和 CERT 规则集改进、Java 语言增强功能以及 Kotlin 的新 CWE 映射。
    的头像 发表于 08-06 12:16 191次阅读
    <b class='flag-5'>代码</b><b class='flag-5'>静态</b>测试工具Klocwork 2024.2新发布

    DevOps中的质量门工作原理,以及静态代码分析Klocwork和Perforce Helix QAC在质量门中的实践应用

    如何使用静态代码分析工具(如Klocwork 和 Helix QAC)实现质量门。 什么是质量门? 质量门是在IT或开发项目中实施的检查点,这些检查点要求在进入下一个开发阶段之前达到最低标准
    的头像 发表于 07-29 15:12 298次阅读

    暂态稳定和静态稳定的区别是什么

    暂态稳定和静态稳定是电力系统稳定性分析中的两个重要概念,它们分别描述了电力系统在受到扰动后的动态响应和稳态运行状态。下面将介绍暂态稳定和静态稳定的区别,并从多个方面进行比较。 定义上的区别 暂态稳定
    的头像 发表于 07-26 09:41 1779次阅读

    Perforce静态代码分析专家解读MISRA C++:2023®新标准:如何安全、高效地使用基于范围的for循环,防范未定义行

    MISRA C++:2023——MISRA® C++ 标准的下一个版本来了!为了帮助您了解 MISRA C++:2023相比于之前版本的变化,我们将继续为您带来Perforce首席技术
    的头像 发表于 06-18 12:57 332次阅读

    MISRA-C-:2004中文版

    MISRA-C-:2004 中文版
    发表于 06-04 11:52 1次下载

    使用 MISRA C++:2023® 避免基于范围的 for 循环中的错误

    在前两篇博客中,我们 向您介绍了新的 MISRA C++ 标准 和 C++ 的历史 。在这篇博客中,我们将仔细研究以 C++ 中 for 循环为中心的特定规则。
    的头像 发表于 03-28 13:53 715次阅读
    使用 <b class='flag-5'>MISRA</b> C++:2023® 避免基于范围的 for 循环中的错误

    汽车电子行业的MISRA C标准解读

    之前分享了一些编程规范相关的文章,有位读者提到了汽车电子行业的MISRA C标准,说这个很不错。
    的头像 发表于 01-17 11:03 1105次阅读

    代码静态测试工具Helix QAC 2023.4新发布

    Helix QAC 2023.4 为新的 MISRA C++:2023 指南推出了 100% MISRA C++:2023® 规则覆盖率。此版本还包括扩展的 C++20 语言支持、数据流分析的性能改进以及整个产品中的许多产品体验
    的头像 发表于 01-13 12:25 419次阅读
    <b class='flag-5'>代码</b><b class='flag-5'>静态</b>测试工具Helix QAC 2023.4新发布

    Helix QAC—软件静态测试工具

    Helix QAC是Perforce公司(原PRQA公司)产品,主要用于C/C++代码的自动化静态分析工作,可以提供编码规则以及信息安全相关检查、
    的头像 发表于 01-10 17:35 615次阅读
    Helix QAC—软件<b class='flag-5'>静态</b>测试工具

    汽车行业软件代码满足功能安全与信息安全的最佳实践

    21434信息安全的必要性。这两种功能标准都需要使用诸如MISRA C或C++之类的编码标准。因此,我们将讨论最新的MISRA规则,以及如
    的头像 发表于 11-23 20:05 577次阅读
    汽车行业软件<b class='flag-5'>代码</b>满足功能安全与信息安全的最佳实践