1. Requirements
3.3.2 The project shall ensure that software coding methods, standards, and/or criteria are adhered to and verified.
1.1 Notes
NPR 7150.2, NASA Software Engineering Requirements, does not include any notes for this requirement.
1.2 Applicability Across Classes
Classes F and G are labeled with "X (not OTS)." This means that this requirement does not apply to off-the-shelf software for these classes.
Class |
A_SC |
A_NSC |
B_SC |
B_NSC |
C_SC |
C_NSC |
D_SC |
D_NSC |
E_SC |
E_NSC |
F |
G |
H |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Applicable? |
|
|
|
|
|
|
|
|
|
|
|
|
|
Key: A_SC = Class A Software, Safety-Critical | A_NSC = Class A Software, Not Safety-Critical | ... |
- Applicable |
- Not Applicable
X - Applicable with details, read above for more | P(C) - P(Center), follow center requirements or procedures
2. Rationale
NASA programs and projects have multiyear life cycle times. Often the software personnel who develop the original software work products move on to other projects. These developers are then backfilled on the team by other developers for the remainder of development, for operations, maintenance, and disposal phases of the life cycle. This personnel turnover process may occur several times during the project's life cycle. The use of uniform software coding methods, standards, and/or criteria ensures uniform coding practices, reduces errors through safe language subsets, and improves code readability. Verification that these practices have been adhered to reduces risk of software malfunction for the project during its operations and maintenance phases.
3. Guidance
Coding standards are used to prevent or reduce unsafe coding practices. Planning for the adoption and use of coding standards at the beginning of a software development activity sets the right tone and approach for the development team.
Software coding standards are classified by language, usage, and severity levels. Language specific rules and best coding practices are usually determined by experts in the particular language [e.g., C++, ADA] and tailored as needed by the project. Usage types and severity levels are set by the user. 326
To assist you in fulfilling this requirement, interpret the text in section 1 as "software coding methods," "software coding standards," and "software coding criteria." Also, interpret the terms "methods" and "criteria" as being indictive of the style of the software developer.
Over time, correlations between bugs and coding practices resulted in a set of rules that helped to prevent coding errors from occurring. 326 These activities resulted in recommendations to develop and use coding standards.
"A comprehensive coding standard encompasses all aspects of code construction. ...Properly completed source code reflects a harmonized style, as if a single developer wrote the code in one session. At the inception of a software project, a coding standard is established to ensure that all developers on the project are working in concert. When the software project incorporates existing source code, or when performing maintenance on an existing software system, the coding standard states how to deal with the existing code base.
"The readability of source code has a direct impact on how well a developer comprehends a software system. Code maintainability refers to how easily that software system can be changed to add new features, modify existing features, fix bugs, or improve performance. Although readability and maintainability are the result of many factors, one particular facet of software development upon which all developers have an influence is coding technique. One of the easiest methods to ensure a team of developers will yield quality code is to establish a coding standard, which is then enforced at routine code reviews". 161
In a team environment or group collaboration, the use of coding standards ensures uniform coding practices, reduces oversight errors, and the time spent in code reviews. When NASA software development work is outsourced to a supplier (see Topic 7.03 - Acquisition Guidance), having a set of coding standards in place helps to ensure that the code produced by the contractor meets quality requirements mandated by NASA in the NASA Software Assurance Standard, NASA STD 8739.8. 278
A coding standard document may be written as a general document that is independent of any project. Project-specific needs are then added as amendments to the document. Note there is an important difference between a coding style and a coding standard. A coding style specifies how you indent lines or employ tabs and spaces to make the code easier to read by the software development team. A coding standard, which often includes a coding style, goes beyond just how to name a variable. It tells you how that variable is to be treated and when it is to be used (and not used). 006 Use of these standards will help the developer avoid actions that are not a smart practice to get into. They may also restrict coding statements to language statements from national or international standards.
One way to tell the difference between a coding style element and a coding standard element is to compare the functionality of the resulting code if either element is removed or changed. For example, if the style element is not followed in the software work product, the code should still work exactly the same way, with exactly the same behavior and safety checks. However, if a coding standard element is removed or altered, it is likely that the the code's "safety" and/or functionality is changed. That is the difference between the two. A coding standard is obviously more important than a coding style. 326
How Coding Standards are Classified
Software coding standards are classified by language, usage, and severity levels. Language specific rules and best coding practices are determined by industry experts in that particular language. Usage types and severity levels are set by the user.326
Coding standards should address (for all the languages used):
- Code structure: Includes overall project layout (files, and so on), classes, resources, and other source file types.
- Error handling: Describes how objects handle errors, reporting, and logging.
- Limiting the size of modules.
- Using library routines, especially the following:
- Operating system routines.
- Commercial library routines (e.g., numerical analysis).
- Project-specific utility routines.
- Defining constants and data types.
- Using global data.
- Using compiler-specific features not in the language standard." 077
The following items may be an integral part of the coding standard to the extent their implementation actually affects the outcome of the execution of the software. Otherwise they are part of the coding style.
- Formatting: Includes the use of white space, indentation, and length of statement lines in code. Some standards might include, for example, common editor setup and handling for tabs versus spaces for indentation.
- Naming conventions: Specifies how developers name their methods, classes, variables, events, and parameters.
- Comments: An English description in the code that explains the logic of the code. (Quality code is usually self-documenting by default.) The use of quality commenting gives quality code better maintainability and easier understandability.
Adherence and Verification
Assuring the adherence of the developed software to the coding standards provides the greatest benefit when followed from software development inception to completion. Coding standards are selected at the start of the software development effort. Verification activities of the software work products (see SWE-028) include reviews, such as peer reviews and inspections (see SWE-087), and assessments of how the coding standards are used to develop the software work products. The use of automated tools for assessing adherence to standards at appropriate reviews, or even on a batch mode run overnight, will assist the project team in adherence and verification.
How to Interpret the "and/or" Phrase in the Requirements Statement
The "and/or" in the text of the requirement statement is meant for flexibility in tailoring the requirement to the needs of the project. In appropriate settings (e.g., less "critical") a subset of this list (the "or" in "and/or") would be sufficient and compliant. For human-rated applications, the project would want to cover each of the items (methods, standards, criteria) in the statement (the "and" in "and/or"; e.g., the use of Klockwork tool as part of the "method," MISRA-C (software development standard for the C programming language developed by MISRA (Motor Industry Software Reliability Association).) "standards," avoidance of the project's restricted language constructs "criteria," etc).
Additional guidance related to the planning and control of software coding standards, and where they may be used, may be found in the following related requirements in this Handbook:
Corrective Actions | |
Detailed Design | |
Coding Software | |
Release Version Description | |
Static Analysis | |
Validate Software Tools |
4. Small Projects
Smaller projects may consider using previously developed/tailored coding methods, standards and guidelines, rather than developing their own. These standard applications may be available in the software Process Asset Libraries (PAL) of other Centers, if not available at the performing Center.
5. Resources
- (SWEREF-006) Twine, J.R. (2003).
- (SWEREF-007) WBS Checklist Tool, NASA Goddard Space Flight Center (GSFC), 2007. This NASA-specific information and resource is available in Software Processes Across NASA (SPAN), accessible to NASA users from the SPAN tab in this Handbook.
- (SWEREF-077) ESA PSS-05-05, Issue 1, Revision 1, ESA Board for Software Standardisation and Control, 1995. The PSS family of standards was the ESA internal set of standards which was replaced by ECSS. It inluded a software engineering standard and a set of guides. This page contains the cited resource as well as others in the collection.
- (SWEREF-161) MSDN Library, 2003. Accessed May 23, 2011 from http://msdn.microsoft.com/en-us/library/aa291591%28v=vs.71%29.aspx. Checked 6/10/2019, document retired and no longer available, need to find suitable replacement
- (SWEREF-162) Milan Malkani, 2011. Accessed May 20, 2011 at http://ezinearticles.com/6122965.
- (SWEREF-197) Software Processes Across NASA (SPAN) web site in NEN SPAN is a compendium of Processes, Procedures, Job Aids, Examples and other recommended best practices.
- (SWEREF-199) MISRA Consortium, ISBN 0 9524156 2 3 (paperback), ISBN 0 9524156 4 X (PDF), October 2004.
- (SWEREF-278) NASA-STD-8739.8B, NASA TECHNICAL STANDARD, Approved 2022-09-08 Superseding "NASA-STD-8739.8A"
- (SWEREF-326) Software Coding Standards Parasoft®. This document is not available but other development resources may be found at http://www.parasoft.com
- (SWEREF-476) Michael Aguilar, NASA Engineering and Safety Center, October 21, 2014.
- (SWEREF-477) Klaus Havelund and Gerard J. Holzmann Laboratory for Reliable Software (LaRS) Jet Propulsion Laboratory, California Institute of Technology 4800 Oak Grove Drive, Pasadena, California, 91109-8099.
- (SWEREF-510) Public Lessons Learned Entry: 590.
- (SWEREF-526) Public Lessons Learned Entry: 838.
- (SWEREF-563) Public Lessons Learned Number: 24503, Lesson Date 2018-08-23, Submitting Organization: NESC,
- (SWEREF-695) The NASA GSFC Lessons Learned system. Lessons submitted to this repository by NASA/GSFC software projects personnel are reviewed by a Software Engineering Division review board. These Lessons are only available to NASA personnel.
5.1 Tools
Tools to aid in compliance with this SWE, if any, may be found in the Tools Library in the NASA Engineering Network (NEN).
NASA users find this in the Tools Library in the Software Processes Across NASA (SPAN) site of the Software Engineering Community in NEN.
The list is informational only and does not represent an “approved tool list”, nor does it represent an endorsement of any particular tool. The purpose is to provide examples of tools being used across the Agency and to help projects and centers decide what tools to consider.
6. Lessons Learned
The NASA Lessons Learned database contains the following lessons learned related to coding standards:
- Software Design for Maintainability. Lesson Number 0838. NASA has long recognized that software maintenance is a large cost driver in its software systems. Early planning for maintenance, which includes the use of appropriate and consistent coding standards, coding styles, and software configuration management systems, helps hold down software maintenance costs over the software life cycle. The lessons learned citation given below provides additional information on this topic of coding standards. 526.
- Mars Pathfinder Flight Software Development Process (1997). Lesson Number 0590. The software developer should also recognize that there is benefit to using coding standards dedicated to the project at hand. As this set of lessons learned derived from the Mars Pathfinder project shows, even though the coding standards and styles were tailored for the project, maintaining the set of derived coding standards for future upgrades and improvements will assure cost control 510.
The reader of this lessons learned can also derive the warning that use of tailored coding standards for a new project raises the potential for error if extensive reuse of software work products is anticipated.


