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

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

3天内不再提示

为何就一个编码标准很难达成共识

5RJg_mcuworld 来源:互联网 作者:佚名 2017-11-15 06:54 次阅读

美国国家航空航天局(NASA)开发人员的工作是编程界最具挑战性的工作之一。 他们编写代码并开发关键任务应用程序,安全是他们主要关注的重点。

在这种情况下,制定严谨的编码准则并遵循,对于他们来说十分重要。这些规则涵盖了软件开发的各个方面,如应该如何编写软件,应该使用哪些语言特性等等。

尽管很难就一个编码标准达成共识,NASA 的 JPL 首席科学家 Gerard J. Holzmann 还是制定了一套名为“发展安全关键代码的十大规则”的代码准则,由所有工作人员共同遵循。

由于 JPL 的工作内容与 C 语言相关,因此本指南主要关注用 C 编程语言编写的代码。但也可以灵活运用到其他语言上。

NASA 的十大编码准则:

1、简化控制流程:使用尽可能精简的控制流程构造编写程序 – 不要使用 setjmp 或 longjmp 构造、goto 语句,以及直接或间接的递归调用。

2、为循环使用固定次数上限:所有的循环必须有一个固定的上限。 必须可以被某个检测工具静态证实,该循环不能达到预置的迭代上限值。如果该上限值不能被静态证实,那么可以认为违背该原则。

3、不要在初始化完成后进行动态内存分配。

4、不使用冗长的函数:如果标准格式为一个语句一行、一个声明一行,那么函数的长度应在一张纸的范围内,即每个函数的代码行不能超过 60。

5、低断言密度:代码中断言的密度平均低至每个函数 2 个断言。断言被用于检测在实际执行中的异常情况。断言必须没有副作用,并应该定义为布尔测试。当一个断言失败时,应该执行一个明确的恢复操作,例如,把错误情况返回给执行该断言失败的函数调用者。对于静态工具来说,任何能被静态工具证实其永远不会失败或永远不能触发的断言违反了该规则(例如,通过增加无用的 assert(true) 语句是不可能满足这个规则的)。

6、以最小范围级别声明数据对象:该原则同时也是数据隐蔽(Data hiding)的基本原则。所有数据对象均必须以尽可能最小的范围级别进行声明。

7、检查参数和返回值:应在每次调用函数后检查非空函数的返回值,并在每个函数内部检查参数的有效性。

8、限制预处理程序的使用:处理器的使用仅受包含头文件和简单的宏定义的限制。符号拼接、可变参数列表(省略号)和递归宏调用不被允许。所有的宏必须扩展为完整的语法单元。通常不建议使用条件编译指令,但也不总是能够避免每次在代码中这样做的时候必须有基于工具的检查器进行标记,并有充足的理由。

9、限制指针的使用:具体来说,不允许有超过一级的解除指针引用。解除指针引用操作不可隐藏在宏定义或类型声明中。不允许使用函数指针。

10、编译所有代码:从开发工作第一天开始时,在编译器开启最高级别警告选项的条件下对代码进行编译。在此设置之下,代码必须零警告编译通过。代码必须通过源代码静态分析工具,每天检查一次以上,且零警告通过。

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

    关注

    5082

    文章

    19103

    浏览量

    304727
  • 大数据
    +关注

    关注

    64

    文章

    8882

    浏览量

    137389

原文标题:NASA顶级程序员是如何编程的?其实有十大准则

文章出处:【微信号:mcuworld,微信公众号:嵌入式资讯精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    以DENC区块链为例讲解共识机制

    ?所谓共识机制,实际上就是让区块链系统的每一个节点达成致的策略和方法。技术界大佬李开复就曾经有
    发表于 08-30 14:21

    以DENC区块链为例讲解共识机制

    ?所谓共识机制,实际上就是让区块链系统的每一个节点达成致的策略和方法。技术界大佬李开复就曾经有
    发表于 09-05 09:58

    GaN HEMT可靠性测试:为什么业界无法就种测试标准达成共识

    以确保其可靠性?要回答这个问题,我们首先可以看下两致力于高质量可靠性测试的委员会:JEDEC和AEC。 当前的测试标准:JEDEC和AEC电子设备工程联合委员会(JEDEC)负责为半导体电路和存储
    发表于 09-23 10:46

    鸿海郭台铭未与夏普达成共识 已经离开日本

    日本媒体报道,鸿海精密董事长郭台铭周四已经离开日本,但其此行并未能就富士康投资夏普事与后者达成共识。今年3月27日,富士康宣布以每股550日元的股价收购夏普9.9%的股价,交
    发表于 08-31 09:04 434次阅读

    种改进的区块链共识机制的研究与实现

    区块链作为比特币的底层技术,是种通过去中心化、去信任的方式集体维护可靠数据库的技术方案。共识机制是区块链的核心,解决了如何在
    发表于 01-10 14:24 1次下载
    <b class='flag-5'>一</b>种改进的区块链<b class='flag-5'>共识</b>机制的研究与实现

    共识”才是达成区块链应用落地的根本因素

    内部的规则、标准、流程都可能存在差异性,如果要按照同标准或原则去执行道工序,尤其是涉及到复杂业务的时候,达成
    发表于 06-22 11:55 500次阅读

    华为官方和UL就跑分作弊事件达成共识

    华为官方和UL联合发布声明,对此事进行了解释和澄清,双方就下步合作达成共识
    的头像 发表于 09-11 09:25 3698次阅读

    为什么共识算法对于加密货币至关重要

    共识算法可以被定义为使区块链网络达成共识的机制。公共(去中心化的)区块链是作为分布式系统来构建的,由于它们不依赖于中央权威,因此分散的节
    发表于 12-24 09:43 991次阅读

    共识算法可以解决哪些问题

    这是共识算法的三主要用例是高度相关的。例如,状态复制可以通过状态更改的适当顺序(即原子广播)来解决,而适当的领导人选举过程本身可能允许有序的原子广播(但是,在没有领导人选举过程的情况下,有达成相同结果的
    发表于 02-11 14:20 3592次阅读

    如何保证区块链网络达成正确的共识

    共识是指分布式网络中节点对某一事实达成致意见的过程。例如,比特币的共识就是指依据其规则和流程,网络中的节点对共享的交易记账结果达成
    发表于 04-02 10:14 778次阅读

    区块链共识的错误陈述

    共识协议解决了计算机科学中的经典问题:许多平等的参与者如何才能就事件的全局观点达成致?在区块链术语中,这意味着同意处理交易的特定顺序。
    发表于 04-08 11:38 958次阅读

    广濑电机和德国浩亭就单组差分信号用连接器开发达成共识

    广濑电机株式会社和浩亭电子 GmbH就单组差分信号(SPE)用连接器的共同开发、标准化以及销售推广达成共识
    发表于 04-19 09:18 1125次阅读

    区块链中的共识机制是什么

    所谓共识机制,是分布式系统中的过程,用于在涉及多个不可靠节点的网络中,在所有节点之间实现数据致性并对某个提案达成
    发表于 04-30 10:00 1052次阅读

    汽车产业大国为何突然在汽车电动化上达成共识

    在新能源汽车的技术路线上,全球汽车行业巨头们直存在着很多分歧,比如有的坚定选择纯电动,有的看好混动,还有的瞄准氢能。回顾刚刚过去的2020年,德日美中四汽车产业大国,突然在汽车电动化上达成
    的头像 发表于 02-18 15:03 1538次阅读

    中环股份携手TCL科技达成战略合作共识

    4月7日,TCL科技集团、中环半导体与内蒙古自治区、呼和浩特市举行合作协议签约仪式,就进步深化合作,推动重大项目建设,促进新能源产业高质量发展达成战略合作共识
    的头像 发表于 04-08 10:10 1810次阅读