NASA 顶级程序员是如何编程的?这里有十大准则

原创 2017年11月14日 10:09:08

美国国家航空航天局(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、编译所有代码:从开发工作第一天开始时,在编译器开启最高级别警告选项的条件下对代码进行编译。在此设置之下,代码必须零警告编译通过。代码必须通过源代码静态分析工具,每天检查一次以上,且零警告通过。

关于这些准则,NASA 这样评价到:

这些准则就像要求你坐车的时候必须系上安全带一样,刚开始可能会让你觉得不舒服,但之后你就会慢慢习惯,并开始无法接受没有它的日子。

编译自:techaed

版权声明:本文为博主原创文章,未经博主允许不得转载。

NASA顶级程序员编程十大原则

你知道 NASA 顶级程序员如何编写关键任务代码么?为了确保代码更清楚、更安全、且更容易理解,NASA 的喷气推进实验室制定了 10 条编码规则。...
  • linuxprobe2017
  • linuxprobe2017
  • 2017年11月06日 21:00
  • 211

十条准则帮助你像 NASA 顶级程序员一样编程!

引言: 你知道 NASA 顶级程序员如何编写关键任务代码么?为了确保代码更清楚、更安全、且更容易理解,NASA  的喷气推进实验室制定了 10 条编码规则。 NASA 的开发...
  • linuxprobe2017
  • linuxprobe2017
  • 2018年01月05日 09:15
  • 23

Google用户体验的十大准则,你知道…

Google用户体 验团队致力于创建有用的(useful)、快速的(fast)、简单的(simple)、有吸引力的(engaging)、创新的( innovative)、适合大众的(universal...
  • yihu0817
  • yihu0817
  • 2014年12月16日 20:39
  • 437

NASA 的十大编码准则

NASA 的十大编码准则: 1、简化控制流程:使用尽可能精简的控制流程构造编写程序 – 不要使用 setjmp 或 longjmp 构造、goto 语句,以及直接或间接的递归调用。 2、为循环使用...
  • Wahuqeirdace
  • Wahuqeirdace
  • 2017年11月13日 16:00
  • 38

NASA 的 10 大编程规则

第 1 条规则 — 简单的控制流用非常简单的控制流结构体来编写程序 — 不要用 setjmp 或者 longjmp 结构体,goto 语句,以及直接或间接的递归调用。理由:简单的控制流能够提高代码的清...
  • ysu108
  • ysu108
  • 2016年08月05日 14:16
  • 578

程序员必须克服的十大编程禁忌

程序员在编程的时候难免会犯错误,但如果不从错误中吸取教训,那么习惯成自然,你会经常犯错的。从错误中不断的学习,锻炼好的行为习惯有助于事业上的稳定。 程序员在编程的时候难免会犯错误,但...
  • u011916318
  • u011916318
  • 2014年07月24日 22:49
  • 1032

程序员的十大谎言

1.  我们已经在做Beta测试了2.  我不了解市场3.  我会写代码注释的,以后的维护人员可以通过这些注释理解这些代码4.  我们的框架是弹性的5.  这些代码支持业界标准6.  我们能够在完成W...
  • westhdd
  • westhdd
  • 2006年05月13日 16:48
  • 546

中国都有哪些顶级优秀的程序员?

中国都有哪些顶级优秀的程序员?
  • jhope
  • jhope
  • 2017年11月15日 21:05
  • 881

程序员进阶之路:如何从零开始成为技术大神

知乎上有人问,成为顶尖的程序员是否需要学会武术,获赞最多的评论是一定要会武术,而有必要在公司年会上表演出来。 什么单手开砖,空手道,双截棍等均可,因为这样的话产品在提需求的时候一定会非常小心谨慎,也保...
  • u011606348
  • u011606348
  • 2015年07月17日 11:49
  • 2807

健康十大准则

据路透社报道,怎样准确描述人体的健康状况呢?世界卫生组织现在规定了十大准则,以衡量一个人是否健康。     世界卫生组织(WHO)提出的健康新概念是:所谓健康,并不仅仅是不患病,还应包括心理健康以及社...
  • a5174
  • a5174
  • 2007年04月10日 15:56
  • 355
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:NASA 顶级程序员是如何编程的?这里有十大准则
举报原因:
原因补充:

(最多只允许输入30个字)