bannerb

This version of SWEHB is associated with NPR 7150.2B. Click for the latest version of the SWEHB based on NPR7150.2C

SWE-060 - Coding Software

1. Requirements

4.4.2 The project manager shall implement the software design into software code.

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      

     B      

     C      

   CSC   

     D      

   DSC   

     E      

     F      

     G      

     H      

Applicable?

   

   

   

   

   

   

   

   

   

   

Key:    - Applicable | - Not Applicable
A & B = Always Safety Critical; C & D = Not Safety Critical; CSC & DSC = Safety Critical; E - H = Never Safety Critical.

2. Rationale

This requirement begins the implementation section of the NPR 7150.2. It acknowledges that the project has the primary responsibility for producing the software code. The NPR notes that the "software implementation consists of implementing the requirements and design into code, data, and documentation. Software implementation also consists of following coding methods and standards. Unit testing is also a part of software implementation." Other guidance areas in this Handbook cover the requirements for data, documentation, methods, standards, and unit testing (see the table in the guidance section for this requirement).

3. Guidance

Once the software development team has completed the software architecture and the software detailed design, the exacting task of turning the design into code begins. The use and adherence to the project's software coding standards will enhance the resulting code and help reduce the coding errors (see SWE-061). In a team environment or group collaboration, the use of coding standards ensures uniform coding practices, it reduces oversight errors and the time spent in code reviews. When NASA software development work is outsourced to a supplier (see SWE-038), the agreement on of a set of coding standards ensures that the code produced by the contractor meets all quality guidelines mandated by NASA-STD-8739.8, Software Assurance Standard. 278

The software development team uses accredited tools to develop the software code (see SWE-136). This may include accredited tools that have not been previously used or adapted to the new environment. The key is to evaluate and then accredit the development environment and its associated development tools against other environment/tool systems that are accredited. The more typical case regarding new software development is using accredited tools in an accredited development environment that have not been used together previously, and thus are not accredited as an integrated system. Many NASA missions and projects have used modeling tools like Simulink and Matlab. Auto-generated code (e.g., code from generators like MatrixX and Real Time Workshop) has been successfully used in the past and is an important approach for developing software on current and future NASA projects. The potential for bugs, sometimes difficult to find, and the certification of the generated code are two problems the software development team needs to be aware of and plan for as the software coding occurs.

Smaller software work products can be completed with a few stand alone tools.  Larger software work products will benefit from the use of an integrated development environment (IDE) for producing the code. An IDE (also known as an integrated design environment) is a software application that provides comprehensive facilities to software coders and computer programmers for software development.

An IDE normally includes the following tools:

  • Source code editor (a text editor for editing the source code).
  • Compiler and/or an interpreter (a program (or set of programs) that transforms source code written in a programming language (the source language) into object code).
  • Build automation tools (activities or work aids that script or automate the wide variety of tasks that software developers do in their day-to-day activities).
  • Debugger (a program run on the software to surface coding errors or other software work product issues).

An IDE developed for a particular application may have more tools. The Process Asset Library (PAL) at the performing Center is the first place to search when looking for an existing IDE to use.

This Handbook, along with the Software Processes Across NASA (SPAN), accessible to NASA users from the SPAN tab in this Handbook, provides an extensive listing of individual tools that have been developed for particular applications (see section 5.1 of this SWE). The tool list contains both NASA and commercially developed products. SPAN has several examples of design environments. PALs from other Centers, easily located by NASA users through the NASA Engineering Network (NEN), are also good places to search for individual tools and developed IDEs.

Code generated by the use of an IDE results in output language from the compiler, usually the native machine language of the system. The work accomplished in this phase of the software life cycle includes the coding of the algorithmic detail that was developed during the component level design activities. This results in the coding needed for manipulating data structures, effecting the communications between software components across their interfaces, and implementing the processing algorithms allocated to each component of the software work product.

The software team performs code unit testing and debugging regularly to help find errors early in the coding cycle to avoid expensive and costly fixes in the systems and integration test case phases of the software life cycle. The use of unit testing is intended to confirm that the software work product performs the capability assigned to it, correctly interfaces with other units and data, and represents a faithful implementation of the unit design. Static analysis tools are used to help uncover a variety of problems in the code (dead code, security vulnerabilities, memory leaks, etc.)  Debugging can be done with various tools, but experienced and knowledgeable personnel often are needed when addressing the code that supports complex software architectures and designs. Code walk-through and inspections by peers can help identify and correct issues, and reveal opportunities for applying better coding practices.

Compiling may take one pass or it may take multiple passes. Compiling will generate optimized code. Often the execution of one pass through the compiler does not result in all the possible optimizations in the code. A good practice then would be to plan on multiple compiler passes to achieve the maximum amount of code improvements. However, optimization is but one of many desirable goals in software work product development, and is often at odds with other important goals such as stability, maintainability, and portability. At its most cursory level (e.g., efficient implementation, clean non-redundant interfaces) optimization is usually beneficial when applied.  But at its most intrusive (e.g., inline assembly, pre-compiled/self-modified code, loop unrolling, bit-fielding, superscalar and vectorizing) it can be an expensive source of time-consuming recoding, recompiling, and bug hunting.  Be cautious and wary of the cost of optimizing your code. 208

Additional guidance related to software coding may be found in the following related requirements in this handbook:

SWE-061

Coding Standards

SWE-062

Unit Test

SWE-063

Release Version Description

SVD

Software Version Description

SWE-135

Static Analysis

4. Small Projects

No additional guidance is available for small projects. The community of practice is encouraged to submit guidance candidates for this paragraph.

5. Resources


5.1 Tools

Tools relative to this SWE may be found in the table below. You may wish to reference the Tools Table in this handbook for an evolving list of these and other tools in use at NASA. Note that this table should not be considered all-inclusive, nor is it an endorsement of any particular tool. Check with your Center to see what tools are available to facilitate compliance with this requirement.

Tool nameTypeOwner/SourceLinkDescriptionUser

Zustre

Open Source

NASA Ames RSE Group

https://github.com/coco-team/zustre ...

Zustre is a modular SMT-based PDR-style verification engine for Lustre programs. It is also an engine to generate assume-guarantee style contract.

ARC

WonderWare™, Intouch GUI

COTS

WonderWare™, Intouch GUI

https://sw.aveva.com/monitor-and-control/hmi-supervisory-and-control/intouch-hmi-standard-edition ...

Stunning process graphics and out-of-the-box ready-to-use symbol library. Increase operator effectiveness with improved situational awareness. Make better decisions in real time. Increase operational and engineering productivity.

VxWorks

COTS

Wind River

http://www.windriver.com/products/vxworks/ ...

VxWorks is a flight operating system used on a lot of 582 missions; real-time operating system (RTOS).

GSFC, MSFC, LaRC, GRC, JSC

Visual Studio

COTS

Microsoft

https://visualstudio.microsoft.com/ ...

A rich, integrated development environment for creating stunning applications for Windows, Android, and iOS, as well as modern web applications and cloud services.

LaRC, KSC, GRC

STK

COTS

Analytical Graphics, Inc.

http://www.agi.com/products/stk/ ...

Systems Tool Kit (STK) is the foundation of AGI’s product line. This highly capable, free modeling environment is used by thousands of engineers, mission analysts, and software developers to model complex systems—such as aircraft, missiles, satellites and their sensors—analyze mission simulations and visualize dynamic datasets in 4D (X,Y,Z,Time).

LaRC

Simulink

COTS

MathWorks

http://www.mathworks.com/products/simulink/ ...

Simulink® is an environment for multidomain simulation and Model-Based Design for dynamic and embedded systems. It provides an interactive graphical environment and a customizable set of block libraries that let you design, simulate, implement, and test a variety of time-varying systems, including communications, controls, signal processing, video processing, and image processing.

IV&V, Stennis, GSFC, ARC, GRC, JPL, MSFC, KSC, JSC

SeaHorn

Open Source

NASA Ames RSE Group

http://seahorn.github.io ...

A fully automated analysis framework for LLVM-based languages. Takes an LLVM based program (e.g., C) input program and generates LLVM IR bitcode. Specifically, it performs the pre-processing and optimization of the bitcode for verification purposes. Takes as input the optimized LLVM bitcode and emits verification condition as Constrained Horn Clauses (CHC). The middle-end is in charge of selecting encoding of the VCs and the degree of precision. Takes CHC as input and outputs the result of the analysis. In principle, any verification engine that digests CHC clauses could be used to discharge the VCs. Currently, SeaHorn employs several SMT-based model checking engines based on PDR/IC3. Complementary, SeaHorn uses the abstract interpretation-based analyzer CRAB (A language-agnostic framework for abstract interpretation) for providing numerical invariants.

ARC

Ruby On Rails

Open Source

Ruby On Rails

http://rubyonrails.org ...

Rails is a web application development framework written in the Ruby language. It is designed to make programming web applications easier by making assumptions about what every developer needs. Version 5.2.0

KSC

RTI

COTS

RTI

http://www.rti.com/docs/RTIPro.pdf ...

RTI product suite for providing DDS middleware.

KSC

Rockwell, RSLogix 5000, 500, 5™

COTS

Rockwell, RSLogix 5000, 500, 5™

https://www.rockwellautomation.com/rockwellsoftware/products/rslogix.page? ...

Logix Designer application is a scalable application solution used to program and configure any of the Logix5000 family of controller products.

SSC, KSC

RSLinx Enterprise

COTS

Rockwell Automation

http://www.rockwellautomation.com/rockwellsoftware/products/rslinx.page ...

RSLinx® Enterprise is your preferred data server. It communicates via FactoryTalk® Live Data (our client/server communication protocol) with FactoryTalk products. FactoryTalk products and RSLinx Enterprise share FactoryTalk capabilities of security, diagnostics, audit, and redundancy.

KSC

RC Electronics, DataMax-II

COTS

RC Electronics, DataMax-II

http://www.rcelectronics.com/Products/9000/9017dtxProdDOverview.htm ...

The DTX-9000 series of data acquisition systems provide state-of-the-art signal processing for a variety of environmental test sensors along with embedded wideband data recording in a compact chassis. A comprehensive user GUI running on the embedded Windows OS can be used locally with the addition of a user keyboard, mouse and video terminal, or run remotely via the integrated Ethernet connection.

SSC

Rational Rose Realtime

COTS

IBM

http://www.interface.ru/rational/rose/rp5.htm ...

IBM Rational Rose Realtime is a Design & code development tool.

GSFC

Rational Requisite Pro

COTS

IBM

http://open-services.net/software/ibm-rational-requisite-pro/ ...

Rational RequisitePro helps project teams to manage their requirements, to write good use cases, to improve traceability, to strengthen collaboration, to reduce project rework, and to increase quality.

GSFC

PurifyPlus

COTS

UNICOM Systems, Inc.

https://teamblue.unicomsi.com/products/purifyplus/?cmmcuid=17201434002914876099162cmmcsid50200000=14 ...

Run-Time Analysis Tools for Application Reliability and Performance

LaRC,JPL

Proficy Machine Edition

COTS

GE

http://www.geautomation.com/products/machine-edition ...

Proficy Machine Edition automation software deploys HMI, motion and multi-target control and provides a common user interface, drag-and-drop editiing, and a set of development tools. By supporting Ethernet connectivity to global assets, Machine Edition allows users to view, troubleshoot, modify and validate applications regardless of location. It includes an intuitive, machine-level HMI for shop-floor devices, including PLCs, CNCs, motion controllers, and other machine level components.

KSC

PI660-Ready to Run DAQ

COTS

Pacific Instruments

http://www.pacificinstruments.com/data-acquisition-software.html ...

PI660 is a turnkey application that runs on Microsoft Windows Operating Systems. Pre-test operations include: system setup, test definition & tracking, system & transducer calibration. Real-time features include: display, acquisition & data distribution to display clients. Post-test functions include: data replay, plotting and export to 3rd party formats for analysis. When facilities choose PI660, setup time is greatly reduced, allowing users to focus on what matters most: testing, not writing software.

SSC, MSFC

PESA PERC2000™ software ©

COTS

PESA PERC2000™ software ©

http://www.pesa.com/portfolio/perc2000/ ...

PERC2000 is the latest system controller in the PESA family with 10/100 Ethernet capabilities for controlling routing switchers via an IP network.

SSC

PanelView©

COTS

Allen-Bradley

http://ab.rockwellautomation.com/Graphic-Terminals/2711P-PanelView-Plus-6-Terminals ...

Bulletin 2711P PanelView™ Plus 6 Graphic Terminals let you monitor, control, and display application status information graphically. These terminals offer the open-platform flexibility of the Windows® CE operating system.

SSC

OSComet

COTS

Peraton

https://www.peraton.com/oscomet-advanced-satellite-ttc/ ...

The OS/COMET solution offers design, development, installation, and testing of complete turnkey TT&C systems, eliminating the need to develop new or reconfiguring and integrating existing systems.

KSC

National Instruments Development Suite

COTS

National Instruments

https://www.ni.com/suite/ ...

NI Developer Suite offers substantial savings and provides regular software updates with the latest versions of your application software, including NI LabVIEW, LabWindows™/CVI, and Measurement Studio. NI Developer Suite is a modular product offering and, with it, you can select software components based on your application needs.

JSC

MySQL

COTS

MySQL

https://www.mysql.com/ ...

MySQL Enterprise Edition includes the most comprehensive set of advanced features, management tools and technical support to achieve the highest levels of MySQL scalability, security, reliability, and uptime. It reduces the risk, cost, and complexity in developing, deploying, and managing business-critical MySQL applications.

SSC

MPLAB

COTS

Microchip Technology

http://www.microchip.com/mplab/mplab-x-ide ...

MPLAB X IDE is a software program that runs on a PC (Windows®, Mac OS®, Linux®) to develop applications for Microchip microcontrollers and digital signal controllers. It is called an Integrated Development Environment (IDE), because it provides a single integrated "environment" to develop code for embedded microcontrollers.

ARC

ModelSim

COTS

Mentor Graphics

https://www.mentor.com/products/fpga/model/ ...

FPGA compiler, simulator

GSFC

Microsoft .NET Framework

Open Source

Microsoft®

https://www.microsoft.com/net/default.aspx ...

A comprehensive and consistent programming model for building applications that have visually stunning user experiences, seamless and secure communication, and the ability to model a range of business processes.

KSC

Microsoft Visual C™ IDE

COTS

Microsoft Visual C™ IDE

https://visualstudio.microsoft.com/downloads/ ...

The Visual Studio Integrated Development Environment (IDE) offers a set of tools that help you write and modify code, and also detect and correct errors

SSC

Microsoft Visual C

COTS

Microsoft Visual C++™

https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads ...

C++ compiler

SSC

Microsoft SQL Server

COTS

Microsoft®

https://www.microsoft.com/en-us/sql-server/default.aspx ...

SQL Server is Microsoft's relational database management system (RDBMS). SQL Server supports ANSI SQL, the standard SQL language. However, SQL Server also contains T-SQL, its own SQL implementation. SQL Server Management Studio (SSMS) (previously known as Enterprise Manager) is SQL Server's main interface tool, and it supports 32-bit and 64-bit environments.

KSC, SSC

Matlab

COTS

Mathworks

http://www.mathworks.com/products/matlab/ ...

MATLAB® is a high-level language and interactive environment that enables you to perform computationally intensive tasks faster than with traditional programming languages such as C, C++, and Fortran.

ARC, DFRC, GRC, GSFC, IV&V, JPL, MSFC, WFF, JSC, LaRC, SSC, KSC

Mathematica

COTS

Wolfram

http://www.wolfram.com/mathematica/ ...

Mathematica provides a single integrated, continually expanding system that covers the breadth and depth of technical computing.

LaRC

MathCAD

COTS

PTC

http://www.ptc.com/engineering-math-software/mathcad ...

PTC Mathcad is engineering math software that allows you to perform, analyze, and share your most vital calculations.

LaRC

Linux

Open Source

The Linux Foundation

https://www.linux.com/what-is-linux ...

Operating System

GRC

LabVIEW

COTS

National Instruments

http://www.ni.com/labview/ ...

LabVIEW is systems engineering software for applications that require test, measurement, and control with rapid access to hardware and data insights.

LaRC, GSFC, KSC, GRC, SSC, JSC

Jrebel

COTS

Zeroturnaround

https://zeroturnaround.com/software/jrebel/ ...

JRebel is a JVM Java Agent that integrates with application servers, making classes reloadable with existing class loaders. Only changed classes are recompiled and instantly reloaded in the running application.

JPL

Jprofiler

COTS

ej-technologies

https://www.ej-technologies.com/products/jprofiler/overview.html ...

JProfiler is a commercially licensed Java profiling tool developed by ej-technologies GmbH, targeted at Java EE and Java SE applications.

JPL

JPL C Coding Standard

SPAN - Accessible to NASA users via SPAN tab in this Handbook. By Request - Non-NASA users, contact User for a copy of this tool.

JPL

...

An example of a coding standard for programming in c. Search in SPAN: JPL__ST_20090303_C_Coding_STD

JPL

Jenkins Tool

Open Source

Jenkins

https://jenkins.io/index.html ...

Jenkins is an open source continuous integration software tool written in the Java programming language for testing and reporting on isolated changes in a larger code base in real time. The software enables developers to find and solve defects in a code base rapidly and to automate testing of their builds.

KSC, JSC, JPL

Jdeveloper

Open Source

Oracle

http://www.oracle.com/technetwork/developer-tools/jdev/overview/index-094652.html ...

Oracle JDeveloper is a free integrated development environment that simplifies the development of Java-based applications addressing every step of the application lifecycle.

JPL

Interactive Data Language (IDL)

COTS

Harris Geospacial

http://www.harrisgeospatial.com/IDL ...

IDL is a scientific programming language used across disciplines to analyze and to create visualizations out of complex scientific numerical data.

GSFC

Intel® Parallel Studio XE

COTS

Intel

https://software.intel.com/en-us/intel-parallel-studio-xe ...

Suite of development tools makes it simpler to build and modernize code with the latest techniques in vectorization, multithreading, multinode parallelization, and memory optimization.

LaRC

GLG Toolkit

COTS

General Logic, Inc.

http://www.genlogic.com/ ...

Real-Time Graphics, Data Visualization, HMI and custom GIS Solutions for software developers. Generic Logic's interactive Graphics Builder allows developers to rapidly create and prototype dynamic graphical displays and custom graphical components without writing low-level graphics code, saving months of development time and facilitating the components' reuse. GLG Toolkit is a powerful and flexible tool for creating custom HMI systems that can be deployed on a variety of software and hardware platforms, and on the Web.

GSFC

Gensym G2

COTS

gensym

http://www.gensym.com ...

Gensym’s® powerful real-time expert system G2 allows you to create, deploy and adapt real-time, rule-driven, mission-critical expert applications that automate decision making in telecommunications, finance, government,military, manufacturing, utilities, and transportation.

KSC

FORTRAN

COTS

FORTRAN

http://software.intel.com/en-us/fortran-compilers ...

The Intel® Fortran Compiler is the industry leader for building high performance applications.

SSC

FindBugs

Open Source

University of Maryland

http://findbugs.sourceforge.net ...

FindBugs, a program which uses static analysis to look for bugs in Java code. It is free software, distributed under the terms of the Lesser GNU Public License. The current version of FindBugs is 3.0.1, released on 13:05:33 EST, 06 March, 2015.

GRC (EVA Sim; EVA-Informatics), ARC, JPL, KSC

EDK/ISE

COTS

Xilinex

http://www.xilinx.com/products/design-tools/ise-design-suite.html ...

Xilinx ISE (Integrated Software Environment) is a package that contains the suite of programs needed for the entire FPGA development flow. Includes design entry, synthesis, P&R, device programming. Also simulation via modelsim, as an option.

GSFC

Eclipse IDE

Open Source

Eclipse Foundation

http://www.eclipse.org/downloads/ ...

An integrated design environment (IDE) tool for software development. Eclipse is an open source community, whose projects are focused on building an open development platform comprised of extensible frameworks, tools and runtimes for building, deploying and managing software across the lifecycle.

JPL

Coverity® Prevent and Extend™

COTS

Synopsys

https://www.synopsys.com/software-integrity/security-testing/static-analysis-sast.html ...

Static code analysis

JPL, IV&V

COSMOS

Open Source

Ball Aerospace

http://cosmosrb.com/ ...

COSMOS is a set of 15 applications that can be used to control a set of embedded systems. These systems can be anything from test equipment (power supplies, oscilloscopes, switched power strips, UPS devices, etc), to development boards (Arduinos, Raspberry Pi, Beaglebone, etc), to satellites.

LaRC

CodeHawk C Analyzer

COTS

Kestrel Technology

https://www.tekspedite.com/technologyprofile/30 ...

CodeHawk C analyzer is a software assurance tool capable of proving the absence of all memory access vulnerabilities in C source code by leveraging KT’s abstract interpretation engine, a static analysis technology able to mathematically model program behavior.

ARC

Code::Blocks

Open Source

Open Source

http://www.codeblocks.org/ ...

Code::Blocks is a free C, C++ and Fortran IDE built to meet the most demanding needs of its users. It is designed to be very extensible and fully configurable. Version 17.12

LaRC

CheckStyle

Open Source

SourceForge

http://checkstyle.sourceforge.net/ ...

Checkstyle is a development tool to help programmers write Java code that adheres to a coding standard. It automates the process of checking Java code to spare humans of this boring (but important) task. This makes it ideal for projects that want to enforce a coding standard.

KSC

Bugzilla

Open Source

Bugzilla

http://www.bugzilla.org ...

Bugzilla is a robust, featureful and mature defect-tracking system, or bug-tracking system. Defect-tracking systems allow teams of developers to keep track of outstanding bugs, problems, issues, enhancement and other change requests in their products effectively. Version 5.0.4.

ARC, GSFC

Ant™

Open Source

Apache

http://ant.apache.org/ ...

Apache Ant™ is a Java library and command-line tool whose mission is to drive processes described in build files as targets and extension points dependent upon each other. The main known usage of Ant™ is the build of Java applications. Ant™ supplies a number of built-in tasks allowing to compile, assemble, test and run Java applications. Ant™ can also be used effectively to build non-Java applications, for instance, C or C++ applications. More generally, Ant can be used to pilot any type of process which can be described in terms of targets and tasks. Jun 22, 2018 - Apache Ant 1.9.12 and 1.10.4 Released

JPL

6. Lessons Learned

No Lessons Learned have currently been identified for this requirement.

  • No labels