NASA’s 10 rules for developing safety-critical code

NASA been writing mission-critical software codes for space programs for years. The NASA Jet Propulsion Laboratory’s (JPL) Laboratory scientist Gerard J. Holzmann authored a paper and explained that the mass of existing coding guidelines is inconsistent! He said, Existing guidelines overwhelmed coders with vague rules, causing code quality of even the most critical applications to suffer.

Holzmann laid out 10 strict rules for developing software with code safety in mind. The rules were specifically written with the C language in mind (a language NASA recommended for safety-critical code due to its long history and extensive tool support), though the rules can be generalized for coding in any programming language.

1: Restrict all code to very simple control flow constructs. Do not use GOTO statements, setjmp or longjmp constructs, or direct or indirect recursion.

2: All loops must have a fixed upper bound. It must be trivially possible for a checking tool to statically prove that a preset upper bound on the number of iterations of a loop cannot be exceeded. If the loop-bound cannot be proven statically, the rule is considered violated.

3: Do not use dynamic memory allocation after initialization.

4: No function should be longer than what can be printed on a single sheet of paper (in a standard reference format with one line per statement and one line per declaration.) Typically, this means no more than about 60 lines of code per function.

5: The assertion density of the code should average a minimum of two assertions per function. Assertions must always be side effect-free and should be defined as Boolean tests.

6: Data objects must be declared at the smallest possible level of scope.

7 : Each calling function must check non-void function return values, and the validity of parameters must be checked inside each function.

8: Preprocessor use must be limited to the inclusion of header files and simple macro definitions. Token pasting, variable argument lists (ellipses), and recursive macro calls are not allowed.

9: The use of pointers should be restricted. Specifically, no more than one level of dereferencing is allowed. Pointer dereference operations may not be hidden in macro definitions or inside typedef declarations. Function pointers are not permitted.

10: All code must be compiled, from the first day of development, with all compiler warnings enabled at the compiler’s most pedantic setting. All code must compile with these setting without any warnings. All code must be checked daily with at least one—but preferably more than one—state-of-the-art static source code analyzer, and should pass the analyses with zero warnings.

Holzmann believes that complying with NASA’s rules, strict as they might be, can lessen the burden on developers and lead to better code clarity, analyzability and safety.

“The rules act like the seat belt in your car: Initially they are perhaps a little uncomfortable, but after a while their use becomes second-nature, and not using them becomes unimaginable.” He said

Replies

  • Koushal Patel
    Koushal Patel
    Adding an informative blog too which may be helpful while writing code -
    "What most young programmers need to learn" at #-Link-Snipped-#

You are reading an archived discussion.

Related Posts

i am proposing this project and i believe it will be a great break through in poultry production. as a matter of urgency i need guildaince and how to achieve...
I am fed up seeing the ads installed in my system. I see ads in browsers. The ad image has some text "Ad by XXXX". Every time I need to...
Inflation is a major cause to contribute to an economy's fall into a recession. Inflation occurs when there is a general rise in the prices of good and services over...
Have you ever gone through Traffic Police's website? Have you ever been caught breaking any of those traffic rules? Please go through the attachment which depicts certain situations which many...
Just little confusion in the logical equivalence of the 2 below logical expressions: 1. (p->r) AND(q->r)= (p OR q)->r 2. (p->r) OR (q->r)=(p AND q)->r In these expressions ,I am...