This topic addresses the purpose of the NASA software improvement efforts and provides an overview of the activities for software process improvement.
Software engineering is a core capability and a key enabling technology for NASA's missions and supporting infrastructure. “The Agency makes significant investments in software engineering to support the Agency’s investment areas: Space Flight, Aeronautics, Research and Technology, Information Technology (IT), and Institutional Infrastructure. NASA ensures that programs, projects, systems, and subsystems that use software follow a standard set of requirements. One of the goals of this [initiative] is to bring the Agency's engineering community together to optimize resources and talents across Center boundaries. For engineers to effectively communicate and work seamlessly among Centers, a common framework of generic requirements is needed”.
NASA's software development activities began with the earliest projects headed to space (Gemini, 1962
The early occurrence and recognition of software issues (software faults caused computer restarts during the Apollo 11 lunar landing in 1969
From these initial activities came the impetus for the NASA Software Engineering Initiative (NSEI) at the beginning of the new century. NSEI came into existence as one of three basic components of NASA's Engineering Excellence Initiative (EEI). (Systems Engineering and Project Engineering are the other two main components.)
In 2004, the NASA Software Assurance Research Program (SARP) Software Research Infusion Initiative began.
NPR 7150.2 is written in "shall" statement format with supplemental information in the form of accompanying notes and appendices. While these were included to help explain the meaning of each requirement, it was recognized that additional detail on the scope and the applicability of each SWE would increase the speed of cultural change and adoption of these software requirements. This Handbook, NASA-HDBK-2203, was established in wiki format to help achieve the above goals.
During the development of the NPR 7150.2, there was an intentional effort to minimize the size of the document by keeping it focused on the requirements. However, the 7150 team had developed a large amount of additional guidance material for the NPR, which they decided could be more effectively utilized in a NASA Handbook rather than in the NPR itself. Therefore, after the OCE released NPR 7150.2A, the effort to develop this electronic Handbook in wiki format was initiated.
2. NASA Software Engineering Initiative
Software engineering is a core capability and a key enabling technology necessary for the support of NASA's Enterprises. Surveys and assessments identified and documented many software challenges within the Agency. Additionally, continuing exponential growth in the scope, complexity, and importance of software within NASA systems challenged the Agency's ability to manage it effectively. As a result, the NASA Headquarters OCE formed the NASA Software Engineering Initiative
- A NASA-wide comprehensive approach for improving software engineering processes and technology.
- To meet the challenges facing NASA in software engineering (schedule, cost, meet project commitments, and ensuring the use of best practices).
- The integration of sound software engineering principles and standards.
- Enhancing software engineers' knowledge and skills.
- The use of Software Engineering Institute's Capability Maturity Model as a benchmark for assessments.
- Software engineering tool infusion.
- Software metrics.
The following key principles guide NASA's software improvement activities:
- Reduce risk of software failure - Increase mission safety.
- Improve how defects are found and remove the defects early in the development cycle.
- Improve processes based on best practices in Industry and Government.
- Provide more predictable software cost estimates and delivery schedules.
- Create smarter buyers for contracted out software projects.
- Educate the NASA workforce on best practices in Software Engineering.
- Reduce duplication of efforts between projects in the area of software.
- Increase NASA’s ability to meet the challenges of evolving software technology.
This initiative covers software process improvement, as well as items related to software research: software safety, reliability, and quality; attraction and retention of software engineers, and improvement of NASA's software engineering knowledge and skills. It applies to both mission-critical and non-mission-critical software.
The initiative provides:
- Technical support for NASA project issues and special studies.
- Serves as Agency & NESC subject matter experts for the software technical discipline.
- Recommends, reviews, and maintains software requirements, policies, processes, standards, best practices, and handbooks.
- Maintains NASA internal and external assessments (CMMI) of software development organizations.
- Maintains and supports reporting on the state of the software discipline.
- Coordinates external NASA interfaces for software engineering.
- Maintains a list of top software engineering discipline topics and or challenges.
- Collects and analyses project software engineering metrics and proactively identify discipline issues & concerns that require additional investigation (identification of trends) .
- Supports/lobbies for continued funding of Center Software Improvement Programs.
- Promote/integrate continuous improvement of software processes.
- Maintains a software Community of Practice site and knowledge management for the software community.
Ensuring the quality, safety, and reliability of NASA software is of paramount importance in achieving mission success for the Agency's programs and projects. The NASA Software Process Improvement Initiative brings together an integrated spectrum of software engineering professionals, researchers, trained practitioners, improved processes, ratings and appraisal systems, accredited tools, and numerous engineering productivity tools to promote software improvement and overall excellence.
5. Lessons Learned
A documented lesson from the NASA Lessons Learned database notes the following:
Independent Verification and Validation of Embedded Software, Lesson Number 0723: Besides the recognition of the need for extensive project retesting (see the Introduction section for computer restarts