Documents/NITRD2012/1: WeCompute/1.5: Software

1.5: Software

Engineering Complex and Sophisticated Software

Other Information:

Engineering Complex and Sophisticated Software -- 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, cost-effectiveness, and sustainability 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):