NASA的10条编码规则


关于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条编码规则的更多相关文章
- NASA的10条代码编写原则
NASA的10条代码编写原则 作者: Gerard J. Holzmann 来源: InfoQ 原文链接 英文原文:NASA's 10 Coding Rules for Writing Safety ...
- NASA关于如何写出安全代码的10条军规
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:NASA关于如何写出安全代码的10条军规.
- 更好的 SQL 模式的 10 条规则
更好的 SQL 模式的 10 条规则 2015-06-17 11:57:392353浏览1评论 在创建新表和数据仓库时,要做很多决定.一些在当时似乎无关紧要的地方,却让你和用户在数据库的生命期内感到痛 ...
- 【转】10条你不可不知的css规则
10条你不可不知的css规则 Posted on 2006-12-20 10:33 雨中太阳 阅读(343) 评论(1) 编辑 收藏 :[译]10条你不可不知的css规则正文: Published D ...
- UTF-8编码规则(转)
from:http://www.cnblogs.com/chenwenbiao/archive/2011/08/11/2134503.html UTF-8是Unicode的一种实现方式,也就是它的字节 ...
- UTF-8编码规则
UTF-8是Unicode的一种实现方式,也就是它的字节结构有特殊要求,所以我们说一个汉字的范围是0X4E00到0x9FA5,是指unicode值,至于放在utf-8的编码里去就是由三个字节来组织,所 ...
- UTF-8编码规则【转】
hz_chenwenbiao UTF-8编码规则(转) UTF-8是Unicode的一种实现方式,也就是它的字节结构有特殊要求,所以我们说一个汉字的范围是0X4E00到0x9FA5,是指unicode ...
- WEB前端 [编码] 规则浅析
前言 说到前端安全问题,首先想到的无疑是XSS(Cross Site Scripting,即跨站脚本),其主要发生在目标网站中目标用户的浏览器层面上,当用户浏览器渲染整个HTML文档的过程中出现了不被 ...
- 提高Axure设计效率的10条建议
http://www.woshipm.com/ucd/92153.html Axure 是创建软件原型的快速有力的工具.上手很容易,但是,其中存在一个危险.这款软件是如此的直观以至于很多用户可以在没有 ...
随机推荐
- 【剑指Offer面试编程题】题目1520:树的子结构--九度OJ
题目描述: 输入两颗二叉树A,B,判断B是不是A的子结构. 输入: 输入可能包含多个测试样例,输入以EOF结束. 对于每个测试案例,输入的第一行一个整数n,m(1<=n<=1000,1&l ...
- js实现深度拷贝
js实现拷贝,使用普通赋值对象,在操作其中一个对象值的时候,另一个也会更改,不符合需求 因此引入深度拷贝,以下为实现深度拷贝的几种法: Object.assign // 合并多个对象 var targ ...
- SIAMATIC S7-1200 中通过 Modbus RTU 如何读取地址范围 9999 到 65535 的输入字
原文地址 说明 除了需要 STEP 7 >= V13 SP1 (TIA Portal) 的软件,还需要 S7-1200 CPU 固件版本 >= V4 (文章编号: 6ES721x-1xx4 ...
- greenplum 存储过程 输出信息
raise notice 'just a simple output msg';
- STM32学习笔记:IIC通信协议详解(附带软件模拟源码)
什么是IIC(I2C)? IIC 即Inter-Integrated Circuit(集成电路总线),这种总线类型是由飞利浦半导体公司设计出来的一种简单.双向.二线制.同步串行总线.它是一种多向控制总 ...
- Tensorflow 将训练模型保存为pd文件
前言 保存 模型有2种方法. 方法 1.使用TensorFlow模型保存函数 save = tf.train.Saver() ...... saver.save(sess,"checkpoi ...
- NCSC敦促开发者淘汰Python 2
导读 Python 2.x即将结束生命,英国国家网络安全中心(NCSC)敦促开发人员尽快从Python 2.x迁移到Python 3.x.越快越好.Python 2.x将于2020年1月1日停止使用, ...
- C++面试常见问题——10派生类的构造与析构
派生类的构造与析构 派生类的构造 派生时构造函数与析构函数不会被继承,需要重新定义派生类的构造函数与析构函数.派生类对象包含了基类对象的值,创建派生类时首先会调用基类的构造函数,若派生类中含有其它类对 ...
- SmartAssembly .net混淆后,无法找到部分类型
两种解决方式: 1,在vs项目引用中,COM 嵌入互操作类型, 全部设为false. 2, 在混淆选项中,排除所有 引有的 外部COM类
- ②java基础——标识符、关键字和基础数据类型
Java标识符: 1.由英文字母.数字._(下划线)和$组成,长度不限.其中英文字母包含大写字母(A~Z)和小写字母(a~z),数字包含0到9 2.标识符的第一个字符不能是数字(即标识符不能以数字开头 ...