2019独角兽企业重金招聘Python工程师标准>>>

导读 引言: 你知道 NASA 顶级程序员如何编写关键任务代码么?为了确保代码更清楚、更安全、且更容易理解,NASA 的喷气推进实验室制定了 10 条编码规则。

NASA 的开发者是编程界最有挑战性的工作之一。他们编写代码并将开发安全的关键任务应用程序作为其主要关注点。

在这种情形下,遵守一些严格的编码规则是重要的。这些规则覆盖软件开发的多个方面,例如软件应该如何编码、应该使用哪些语言特性等。

尽管很难就一个好的编码标准达成共识,NASA 的喷气推进实验室(JPL)遵守一个编码规则,其名为“十的次方:开发安全的关键代码的规则”。

由于 JPL 长期使用 C 语言,这个规则主要是针对于 C 程序语言编写。但是这些规则也可以很容地应用到其它的程序语言。

该规则由 JPL 的首席科学家 Gerard J. Holzmann 制定,这些严格的编码规则主要是聚焦于安全。

NASA 的 10 条编写关键任务代码的规则:

1.限制所有代码为极为简单的控制流结构 — 不用 goto 语句、setjmp 或 longjmp 结构,不用间接或直接的递归调用。

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

3.在初始化后不要使用动态内存分配。

4.如果一个语句一行、一个声明一行的标准格式来参考,那么函数的长度不应该比超过一张纸。通常这意味着每个函数的代码行不能超过 60。

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

6.必须在最小的范围内声明数据对象。

7.非 void 函数的返回值在每次函数调用时都必须检查,且在每个函数内其参数的有效性必须进行检查。

8.预处理器的使用仅限制于包含头文件和简单的宏定义。符号拼接、可变参数列表(省略号)和递归宏调用都是不允许的。所有的宏必须能够扩展为完整的语法单元。条件编译指令的使用通常是晦涩的,但也不总是能够避免。这意味着即使在一个大的软件开发中超过一两个条件编译指令也要有充足的理由,这超出了避免多次包含头文件的标准做法。每次在代码中这样做的时候必须有基于工具的检查器进行标记,并有充足的理由。

9.应该限制指针的使用。特别是不应该有超过一级的解除指针引用。解除指针引用操作不可以隐含在宏定义或类型声明中。还有,不允许使用函数指针。

10.从开发的第一天起,必须在编译器开启最高级别警告选项的条件下对代码进行编译。在此设置之下,代码必须零警告编译通过。代码必须利用源代码静态分析工具每天至少检查一次或更多次,且零警告通过。
关于这些规则,NASA 是这么评价的:

这些规则就像汽车中的安全带一样,刚开始你可能感到有一点不适,但是一段时间后就会养成习惯,你会无法想象不使用它们的日子。

作者简介:

Adarsh Verma 是 Fossbytes 的共同创始人,他是一个令人尊敬的企业家,他一直对开源、技术突破和完全保持密切关注。可以通过邮件联系他 — adarsh.verma@fossbytes.com

via: https://fossbytes.com/nasa-coding-programming-rules-critical/

作者:Adarsh Verma 译者:penghuster 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

原文来自: http://www.linuxprobe.com/program-principle.html

转载于:https://my.oschina.net/ssdlinux/blog/1563114

NASA顶级程序员编程十大原则相关推荐

  1. 漫画图解:程序员编程十大原则

    1.想清楚,再动手写代码 刚入行的新手,为了展示自己的能力,拿到需求迫不及待地就开始上手写代码,大忌! 2.不交流,就会头破血流 不爱说话和沟通,需求都理解错误了,最后做出来才发现,只能加班返工! 3 ...

  2. 程序员编程10大原则,请牢牢记住

    1.想清楚,再动手写代码 刚入行的新手,为了展示自己的能力,拿到需求迫不及待地就开始上手写代码,大忌! 2.不交流,就会头破血流 不爱说话和沟通,需求都理解错误了,最后做出来才发现,只能加班返工! 3 ...

  3. 程序员编程10大原则,请牢牢记住!

    全世界只有3.14 % 的人关注了 数据与算法之美 1.想清楚,再动手写代码 刚入行的新手,为了展示自己的能力,拿到需求迫不及待地就开始上手写代码,大忌! 2.不交流,就会头破血流 不爱说话和沟通,需 ...

  4. 程序员编程10大原则,请牢牢记住!事半功倍,不扯皮

    1.想清楚,再动手写代码 刚入行的新手,为了展示自己的能力,拿到需求迫不及待地就开始上手写代码,大忌! 2.不交流,就会头破血流 不爱说话和沟通,需求都理解错误了,最后做出来才发现,只能加班返工! 3 ...

  5. 程序员编程10大原则,请牢牢记住!事半功倍,还不扯皮

    1.想清楚,再动手写代码 刚入行的新手,为了展示自己的能力,拿到需求迫不及待地就开始上手写代码,大忌! 2.不交流,就会头破血流 不爱说话和沟通,需求都理解错误了,最后做出来才发现,只能加班返工! 3 ...

  6. 初级程序员 高级程序员_程序员的十大电影

    初级程序员 高级程序员 In this article I have collected the best programming movies that every programmers must ...

  7. 凉哥核心圈程序员必备十大图书推荐(一)

    写在前面 凉哥核心圈程序员必备十大图书推荐(一),各位伙伴应该一目了然了哈,没错凉哥准备出一系列图书推荐的文章,其实很多朋友在私下问凉哥除了大学的课程外自己要不要读一些技术类的书籍呢,答案当时要的,但 ...

  8. 程序员的十大级别--看看你是哪个级别

    [讨论]程序员的十大级别 - 看看你是哪个级别 第一级:神人,天资过人而又是技术狂热者同时还拥有过人的商业头脑,高瞻远瞩,技术过人,大器也.如丁磊,求伯君. 第二级:高人,有天赋,技术过人但没有过人的 ...

  9. 改变程序员的十大电影与科普视频

    改变程序员的十大电影与科普视频 大家好,我是迪巴哥,是一个每天都在改bug的java码农,今天我给大家推荐程序员必看的十大电影以及一些有趣实用的计算机科普视频,保证干货满满,听说先赞后看的人都升职加薪 ...

最新文章

  1. centos7下搭建git和gitlab版本库
  2. wince6.0远程控制工具_【创新创效】门架业务主动监测工具和远程控制电源开关...
  3. 2020-11-17(补码的非)
  4. 自定义标签报 无法为TAG [my2:hello]加载标记处理程序类[null]
  5. 软件体系结构课后作业03
  6. Oracle primary,unique,foreign 区别,Hibernate 关联映射
  7. linux3.4.2移植总结(s3c2440)
  8. oracle之单行函数之多表查询值之课后练习
  9. 前端学习(235):css HACK
  10. RabbitMQ事务和Confirm发送方消息确认——深入解读
  11. Activity生命周期(略记)
  12. Custom Components 翻译
  13. pythonplatform标识_Python utils.platform方法代码示例
  14. 使用struct与typedef定义结构体
  15. HTML5+CSS简单的期末大作业:体育运动主题网站设计——羽毛球网页(5页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 大学生毕设网页设计
  16. python图像锐化滤波_Laplacian滤波器实现并用于图像锐化
  17. Vscode的beautify插件使用
  18. phpstudy mysql建表_MySQL_总结MySQL建表、查询优化的一些实用小技巧,MySQL建表阶段是非常重要的一 - phpStudy...
  19. QT 交叉编译 ARM / CSKY
  20. jspdf添加宋体_JSPDF支持中文(思源黑体)采坑之旅,JSPDF中文字体乱码解决方案...

热门文章

  1. Hadoop学习第一章:Hadoop概述
  2. 刘韧:煮知识 论英雄
  3. 奥扬科技IPO被终止注册:年营收8亿 苏伟持有67.5%股权
  4. 杰理之MIDI音乐实现【篇】
  5. 【转发】JS实现密码加密
  6. vue项目中动态显示时间
  7. 计算机网络 思科模拟器进行交换机端口隔离,跨交换机实现vlan实验
  8. 数字图像处理第三章<一>、灰度变换
  9. MCE | 间歇性禁食增强抗癌疗效
  10. 《像神一样玩转金融》公益免费课持续分享!