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”. 083
NASA's software development activities began with the earliest projects headed to space (Gemini, 1962 408). Usually, the software activities were project-specific and were created with a particular project in mind. Often, the spacecraft design dictated the size and shape of the computer. New software development was required because software adaptation and reuse were essentially non-existent, because of unique platforms, individual programming styles, and the relative non-existence of other software.
The early occurrence and recognition of software issues (software faults caused computer restarts during the Apollo 11 lunar landing in 1969 409), as well as the increasing costs of software development, encouraged NASA to address the software engineering approaches used in the Agency. In 1976, the first NASA Software Engineering Workshop was held to address these issues. In the late 1980s, NASA followed up these efforts with the kickoff of a Software Management and Assurance Program (SMAP).
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 the 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. 204 This initiative encourages the uptake of new research results within real NASA missions. A key success feature is realized when a NASA Center adds the research product resulting from an initiative to its list of recommended practices. Also in 2004, the Office of the Chief Engineer (OCE) conducted the first annual software inventory and issued the initial version of NPR 7150.2. The Office of Safety and Mission Assurance (OSMA) completed the updates to NASA-STD-8719.13, Software Safety Standard, 271 and NASA-STD-8739.8, Software Assurance Standard. 278 )
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 teams 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 205 in 2002. In coordination with Center software engineering improvement activities, the OCE defined a NASA-wide comprehensive approach for improving software engineering to quantifiable maturity levels commensurate with mission criticality to meet the software challenges of NASA.
- What is it?
- A NASA-wide comprehensive approach for improving software engineering processes and technology.
- Why are we doing it?
- To meet the challenges facing NASA in software engineering (schedule, cost, meet project commitments, and ensuring the use of best practices).
- What are the elements of OCE’s approach?
- The integration of sound software engineering principles and standards.
- Enhancing software engineers' knowledge and skills.
- The use of the Software Engineering Institute's Capability Maturity Model as a benchmark for assessments.
- Software engineering tool infusion.
- Software metrics.
- Who is deploying it?
- OCE in collaboration with each Center and the NASA Engineering and Safety Center (NESC).
- NASA Software Working Group.
- Center projects, organizations, and working groups.
The following key principles guide NASA's software improvement activities:
- Reduce the 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.
- CMMI Development Team (2010). "CMMI for Development, Version 1.3: Improving processes for developing better products and services,"CMMI Development Team (2010). CMU/SEI-2010-TR-033, Software Engineering Institute.
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.
5. Lessons Learned
5.1 NASA Lessons Learned
A documented lesson from the NASA Lessons Learned database notes the following:
Independent Verification and Validation of Embedded Software, Lesson Number 0723 518: Besides the recognition of the need for extensive project retesting (see the Introduction section for computer restarts 409), this lesson learned indicates the need for independent verification of performance results because of recognition of earlier problems, e.g., failure to perform IV&V for software projects could result in software system weaknesses, performance of unintentional functions, and failure of the system and the mission. Anything less than a methodical, systematic rigorous treatment of IV&V could cause loss of mission, life, and valuable resources.
5.2 Other Lessons Learned
No other Lessons Learned have currently been identified for this requirement.