热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MISRAC:2004学习记录(2019/11/08)

MISRA-C适用范围-语言:CC++-不提供主观性约束和建议:代码编码规范、静

MISRA-C适用范围

- 语言:C/C++

- 不提供主观性约束和建议:代码编码规范、静态检查工具

- 应用于汽车工业嵌入式领域

- "free-standing"

- 阅读此标准需先具备ISO-C语言

- C++,C++并非C的super-set,C++代码检查完全遵守ISO C标准且不允许C++注释出现在ISO C中

- 对于自动生成代码要谨慎选择有验证功能的自动生成工具,并与人工代码遵守相同规则


MISRC-C的使用

C源码正式培训内容包括:

- C在嵌入式场景下的使用

- C在高一致性和安全性场景下的使用

- 静态检查工具的支持


代码风格

需要明确定义内部代码风格,该风格与源码准确性无关,只是作为公司内部的统一源码风格。其中大部分为建议,只有少部分是强制的。

- 代码布局和缩进

- "{ }"布局和代码块结构

- 语句的复杂度

- 命名规范

- 注释内容的使用

- 公司名称、版权及其他标准的头文件信息


工具的选择与验证

- 符合ISO C规范的编译器的输出应该与编译器说明文档一致。

- 静态检查工具应该能够强制检测尽可能多的在本文档中描述的规则,并能够全局检测整个工程而非单个文件。

- 通常,编译器和静态检查工具被认为是可信赖的。

- 静态检查工具自身提供版本控制:记录代码检查中出现的问题和修改记录:

  1. 用户上报错误的记录

  2. 已知问题要及时通知到用户

  3. 在下一个release中及时修复这些问题

开发者可以采用以下方法去验证检测工具是否值得我们信赖:

- 执行文档中描述的测试测试

- 直观参与到检测工具的开发中

- 定期回顾检测工具的性能

需要提醒是链接器、加载器、编译器以及静态检查工具的版本需要保持兼容或一致。


源码复杂度指标

复杂度指标用于防止由于代码隐晦和不可测试性带来的超越已建立的检测规则的情况。大部分静态检测工具都具有生成指标数据的能力。


测试覆盖度

代码功能的预期应该在设计和编写之处就应该被考虑周全,测试用例能够覆盖所有代码声明的功能。"Design For Test"的理念应该深入到结构、电气和电子工程等领域。所有与该领域相关的测试用例都应该在代码设计之初就被考虑到如何进行测试。


模块化(Use of a subset)可以实现高内聚和松耦合,使代码的集成和测试更加容易。


以下内容可作为评估代码功能覆盖度的指标:

- 代码大小

- 网络复杂度

- 静态路径数


采用分组

- 生成用于声明各个规则如何加强的柔度矩阵

- 生成偏差程序

- 同质量管理团队一同规范化工作实践


柔度矩阵,通过多种静态检查工具确定所有规则均没有被破坏,必要时还要求人工参与

表1 柔度矩阵

开发者有额外的本地限制,这些同样要被添加到柔度矩阵中进行判别。当有明确的限制被忽略掉时,必须要有充分的理由去说明。这些判别需要有专业的C语言专家同经理级别的管理者一同参加评审。


偏差程序

针对一些权威认证的偏差(不在这些规则中的,而非程序员自身随意决定是否跳过的规则)需要经由每个权威专家去sign-off确认。通常这些偏差的确认流程由质量管理系统来负责。

项目偏差:

- 偏差的细节描述

- 这些偏差引起的上下文环境

- 偏差造成的潜在后果

- 安全性保证的展示


在开发后期产生的偏差,软件开发者需要提交一份“Specific Deviation Request”:

- 偏差的细节描述

- 偏差造成的潜在后果

- 对偏差的评判

- 安全性保证的展示


质量系统的形式化

将上述的静态检测工具、偏差处理文档化。以供内、外部质量系统的审计保持高度的一致性。


遵守声明

该遵守(MISRA-C)可以仅限于产品而并非组织。


持续改进

通过对各种指标的不断的提高软件的开发流程。



推荐阅读
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • MyBatis错题分析解析及注意事项
    本文对MyBatis的错题进行了分析和解析,同时介绍了使用MyBatis时需要注意的一些事项,如resultMap的使用、SqlSession和SqlSessionFactory的获取方式、动态SQL中的else元素和when元素的使用、resource属性和url属性的配置方式、typeAliases的使用方法等。同时还指出了在属性名与查询字段名不一致时需要使用resultMap进行结果映射,而不能使用resultType。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • Google在I/O开发者大会详细介绍Android N系统的更新和安全性提升
    Google在2016年的I/O开发者大会上详细介绍了Android N系统的更新和安全性提升。Android N系统在安全方面支持无缝升级更新和修补漏洞,引入了基于文件的数据加密系统和移动版本的Chrome浏览器可以识别恶意网站等新的安全机制。在性能方面,Android N内置了先进的图形处理系统Vulkan,加入了JIT编译器以提高安装效率和减少应用程序的占用空间。此外,Android N还具有自动关闭长时间未使用的后台应用程序来释放系统资源的机制。 ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 有没有一种方法可以在不继承UIAlertController的子类或不涉及UIAlertActions的情况下 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
author-avatar
全都变了吗
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有