关于NASA的10条编程规则,他们曾表示:这些规则的作用就像汽车上的安全带:最初,它们可能有点不舒服,但过了一会儿,它们的使用就变成了第二天性,而没有使用它们就变得不可想象。


Gerard J. Holzmann

10条规则的力量是由NASA / JPL可靠软件实验室的Gerard J. Holzmann于2006年创建的。这些规则旨在消除某些使代码难以查看或静态分析的C语言编程实践。

这些规则是对MISRA C规则的补充,并已合并到更大的JPL编码标准集中。

10条编码规则

1、避免使用复杂的流程构造,例如goto和recursion

2、所有循环都必须有固定的边界(这可以防止代码错乱)

3、避免堆内存分配

4、将函数限制为单个打印页面

5、每个函数至少使用两个运行时断言

6、将数据的范围限制在尽可能小的范围内

7、检查所有非void函数的返回值,或将其强制转换为void以指示该返回值无用

8、谨慎使用预处理器

9、将指针使用限制为单引用,并且不使用函数指针

10、编译所有可能的警告活动;所有的警告都应该在软件发布之前解决

这些规则是为C语言定义的,但是其中一些规则也可以在现代Web或移动项目中使用。以下是我的挑选的部分适用规则,供大家参考。


#1.避免使用复杂的流程构造,例如Goto和递归

recursion如果不需要执行简单任务for可以完成的任务,我将不会使用递归的方式。在你无法直接访问机器的地方,例如在火星,月球或海底,进行递归是非常危险的行为!

#2.所有循环必须有固定边界(这可以防止代码错乱)

与第一个规则类似,我将使用固定范围的循环来防止无限循环或代码错乱。

#4.将函数限制为单个打印页面

将函数的长度减少到一页,可以更轻松地掌握程序特定例程的所有功能。

如果超过此长度,则表明你在代码中添加了太多冗余的内容。

另一个问题可能是你没有将函数分割为更小的函数防止代码重复。

#6.将数据范围限制到最小

如果你正在使用JavaScript那就永远不要使用var -总是喜欢使用let来防止变量泄漏或覆盖,甚至重影。

其他语言也应该这样做,比如c#。对变量使用最受保护和最小的作用域,例如private或protected。

对于其他语言也应该遵循这样的规则,例如C#。对变量使用最大保护和最小作用域,例如private或protected。

#10.编译所有可能的警告活动;所有的警告都应该在软件发布之前解决

使用JavaScript,你将无法编译代码,但可以轻松使用ESLint或类似工具从代码中获取警告。

然后,即使你认为它们没有用,但也应删除并修复它们。现在我们已经准备好将我们的代码发射到火星了!


原文链接:https://medium.com/better-programming/the-power-of-10-nasas-rules-for-coding-43ae1764f73d

欢迎点击“京东云”了解更多精彩内容

以上信息来源于网络,由“京东云开发者社区”公众号编辑整理,不代表京东云立场。

NASA的10条编码规则的更多相关文章

  1. NASA的10条代码编写原则

    NASA的10条代码编写原则 作者: Gerard J. Holzmann 来源: InfoQ 原文链接 英文原文:NASA's 10 Coding Rules for Writing Safety ...

  2. NASA关于如何写出安全代码的10条军规

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:NASA关于如何写出安全代码的10条军规.

  3. 更好的 SQL 模式的 10 条规则

    更好的 SQL 模式的 10 条规则 2015-06-17 11:57:392353浏览1评论 在创建新表和数据仓库时,要做很多决定.一些在当时似乎无关紧要的地方,却让你和用户在数据库的生命期内感到痛 ...

  4. 【转】10条你不可不知的css规则

    10条你不可不知的css规则 Posted on 2006-12-20 10:33 雨中太阳 阅读(343) 评论(1) 编辑 收藏 :[译]10条你不可不知的css规则正文: Published D ...

  5. UTF-8编码规则(转)

    from:http://www.cnblogs.com/chenwenbiao/archive/2011/08/11/2134503.html UTF-8是Unicode的一种实现方式,也就是它的字节 ...

  6. UTF-8编码规则

    UTF-8是Unicode的一种实现方式,也就是它的字节结构有特殊要求,所以我们说一个汉字的范围是0X4E00到0x9FA5,是指unicode值,至于放在utf-8的编码里去就是由三个字节来组织,所 ...

  7. UTF-8编码规则【转】

    hz_chenwenbiao UTF-8编码规则(转) UTF-8是Unicode的一种实现方式,也就是它的字节结构有特殊要求,所以我们说一个汉字的范围是0X4E00到0x9FA5,是指unicode ...

  8. WEB前端 [编码] 规则浅析

    前言 说到前端安全问题,首先想到的无疑是XSS(Cross Site Scripting,即跨站脚本),其主要发生在目标网站中目标用户的浏览器层面上,当用户浏览器渲染整个HTML文档的过程中出现了不被 ...

  9. 提高Axure设计效率的10条建议

    http://www.woshipm.com/ucd/92153.html Axure 是创建软件原型的快速有力的工具.上手很容易,但是,其中存在一个危险.这款软件是如此的直观以至于很多用户可以在没有 ...

随机推荐

  1. Mp3下载

  2. 【剑指Offer面试编程题】题目1510:替换空格--九度OJ

    题目描述: 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 输入: 每个 ...

  3. Android之系统自带的文字外观设置及实际显示效果图

     android:textAppearance xml布局里面设置文字的外观: 如“android:textAppearance=“?android:attr/textAppearanceLargeI ...

  4. 常用命令提示符(cmd)

    MS-DOS(Microsoft Disk Operation System)命令提示符(cmd) 启动: win+ R 输入cmd回车切换盘符   盘符名称:进入文件夹   cd 文件夹名称进入多级 ...

  5. WebEx如何录制电脑内的声音

    WebEx如何录制电脑内的声音     事情是这样的,我需要参加一个网络课程,视频讲课的,但是呢,又因为自己白天需要干别的事,就想着怎么把视频录下来晚上回去看,找了WebEx录屏软件,尝试了下,录屏听 ...

  6. 87)PHP,PDO的预编译技术

    (1) 比如以下的语句: insert into biao1 values(‘李宁’,‘’): insert into biao1 values(‘安踏’,‘’): insert into biao1 ...

  7. 在Anaconda3环境下安装并切换 Tensorflow 2.0 环境

    背景 Anaconda切换各种环境非常方便,现在我们就来介绍一下如何使用anaconda安装tensorflow环境. anaconda v3.5 from 清华镜像站 tensorflow v2.0 ...

  8. 如何修改 app.config 的配置信息

    如何修改 app.config 的配置信息 收藏 最问这个问题的人有点多,其实 .Net 提供了这样的功能我们可以在 app.config 中 userSettings 节点中保存我们的应用程序设置信 ...

  9. dubbo 相关面试题 有用(转)

    调用关系说明: · 0. 服务容器负责启动,加载,运行服务提供者. · 1. 服务提供者在启动时,向注册中心注册自己提供的服务. · 2. 服务消费者在启动时,向注册中心订阅自己所需的服务. · 3. ...

  10. Metasploit学习笔记——情报搜集技术(只记录与metasploit有关的)

    1.外围信息搜集 1.1whois域名注册信息查询 示例代码如下 msf > whois testfire.net 1.2网站的目录结构 示例代码如下 msf > use auxiliar ...