1.5: Software
Enabling Complex and Sophisticated Software Other Information:
Like networking technologies, software makes the digital world possible, directing the functioning of computers and devices
and providing the electronic instructions for the applications of computing that shape our lives. For example, NASA spaceflight
software controls a preponderance of overall system functionality. A complex software system can be defined as a system comprising
interacting “simple” software modules that, working together, exhibit a high degree of complexity resulting in a higher-order
behavior. The more complex the software system is, however, the greater the chance for unpredictable emergent behavior, which
increases the risk of system failure with potentially significant impacts to the businesses, services, equipment, or users
depending on the systems. Where we are now: Critical U.S. defense, security, health care, and economic capabilities depend
on complex software-based systems that must remain operational, useful, and relevant for decades. Today’s software design
and development tools and practices can make any of these goals difficult to achieve. For example, consider keeping software
relevant for decades: the requirements originally used to design the software often change multiple times during the development
phase, then many more times during the continued use of the software system. How can the need to keep the software relevant
and useful be balanced with the need for software that is well defined, tested, and meets evolving operational requirements?
The persistent and widening gap between the quality of hardware and that of software continues to burden systems development
and broader efforts to innovate in networking and information technologies. Research needs: The tradition of incremental changes
in software development provides an inadequate basis to address the complexity of contemporary critical systems. Improving
the quality and cost-effectiveness of this software constitutes a core technical challenge that requires breakthrough innovations,
ranging from the fundamental science and engineering of software to the application level. Research is needed to rethink software
design – from the basic concepts of design, evolution, and adaptation to advanced systems that seamlessly integrate human
and computational capabilities. New practices, technologies, tools, and measurement methods are required that can reduce the
errors, defects, and vulnerabilities that occur during software development. Specific research topics include: * Foundational
principles for software design * Formalized science-based software architectures and design methods * Tools and principles
to build, maintain, and expand ultra-large-scale software systems * Programming languages, tools, and practices for modeling,
designing, developing, testing, and validating software * Tools and practices for improving the interoperability and usability
of software applications * Repositories of software design and development knowledge and reference software * Improved software
assurance that reduces or eliminates software defects, weaknesses, and vulnerabilities through improvements in automated test
methods, measurement methods, technology and tools, and guidance and standards for development of trustworthy systems * Parallel
programming languages, compilers, operating systems, environments, and models * Software for computation- and data-intensive
applications * Software effectiveness metrics * Highly user-friendly and interactive software systems
Indicator(s):
|