Imagine it’s 2035. All of us have become increasingly dependent on ever larger and more complex software-reliant systems. How confident are we that these systems are going to function in the ways that we want? We’re entrusting them with our lives. Will they be predictable, maintainable, and safe? These kinds of questions are critical because we live in an age of software-enabled transformation. Software, and all the software engineering processes, practices, technologies and the scientific domains that support it, increasingly make everything in our world possible. Yet, as we ask more and more from these software systems and stack them with more and more capabilities, we may be creating an increasingly fragile infrastructure that will not be able to support the demands that come with future systems.
As a federally funded research center for the Department of Defense (DoD), we at the SEI research complex software engineering, cybersecurity, and AI engineering problems; create and test innovative technologies; and transition maturing solutions into practice. Consequently, we felt it was imperative to orchestrate the creation of a National Agenda for Software Engineering study, which has just been published, to identify which technologies and areas of research are most critical for enabling these future systems. As this blog post details, the resulting report and roadmap are intended to guide the research efforts of the software engineering community. As we developed this roadmap, we asked ourselves, “How do we ensure that future software systems will be safe, predictable, and evolvable?”
The Future of Software Engineering: A Guiding Vision and a Look at Possible Scenarios
Our guiding vision for the future, which we further describe in the findings of the report, is one in which the current notion of the software development pipeline is replaced by one where humans and software are trustworthy collaborators that rapidly evolve systems based on programmer intent. We explore how that might look in some scenarios we’ve imagined for the report (see page 19), and I want to include a few of those here because I think they point toward an exciting future.
For example, consider this scenario: The days of endless requirements and design reviews are gone. A joint team of aeronautical engineers, pilots, and software engineers together design the next space-capable craft by pitching ideas, which are turned into viable designs based on access to extensive codified knowledge about cyber-physical systems, as well as the limitations of physics. These designs are displayed in real time, and the team compares defensive and maneuverability capabilities on the fly using real-time simulations of representative missions. The final design is selected based on the most desirable balance of cost, capabilities, and timeline. Today’s notion of a software development lifecycle might seem almost archaic compared to this fluid, iterative process.
“Elegant software” will no longer refer to clever code, but will rather be the result as humans work with automated and AI systems to implement the best ideas humans can imagine in the most timely, affordable, ethical, and secure ways. Who can “program” and create complex systems will naturally expand as well. Our conversations with computers will take place in the language of our domains, with computational biologists, for example, developing software capabilities by talking about sequencing and genes, not by learning Python. Specialists of all types will be needed to inform the computer properly, and how they interact will look significantly different than it does today.
The use of simulation may turn today’s entire notion of test and evaluation into an immersive experience. Imagine that a new hardware configuration and software capabilities are planned for a series of space assets. In a fully immersive virtual reality environment, the changes are emulated with the full telemetry of the current assets feeding the environment. Engineers can view the new space configuration from any vantage point, and not only in a visual range. All the available data and metadata from the current environment is also presented in real time. Where the desired effect is not what was anticipated, the engineer makes changes and immediately sees the impact on the holistic space environment. Moreover, dozens or more additional engineers are observing and manipulating the same environment in a shared experience. Communication between the engineers, enabled by many types of media, and a shared decision process assure that the system as a whole has no unintended or undesired emergent behavior. This same environment will be used once the change is made to support operator training and real-time mission rehearsal.
Once deployed, systems will also be much more adaptable and integrated. Consider a scenario that involves a special forces team on a deployment, and imagine a firefight breaks out. The squad is caught off guard, communications have been disrupted, and they’re unsure of the weapons being used against them. Fortunately, they are teaming with a set of micro unmanned aircraft systems that proactively set up a mesh network using alternate communications channels to re-establish contact with headquarters. Once that network is established, the squad directs the devices to observe and profile the weapons on the battlefield covertly and provide mitigation options while they take cover. As a result, they are not only able to overcome the novel threat locally but also feed their real-time experience to other units at the tactical edge that could be at risk. To make this scenario a reality, software engineers will need to design architectures that are nimble and allow adjustments to systems based on data from operational sensors and other input from users in the field.
While the exact roles that intelligent algorithms and humans will have remains to be determined, the importance of software engineering to our vision is clear. As software engineers continually interact with smart software assistants, computers and humans will be able to do what they both do best. Working in this way, possibilities that we cannot even imagine today will become reality. The research in this report provides the essential groundwork for advancing the discipline of software engineering to ensure that the necessary framework is in place to maximize the advantages these future opportunities can provide.
To achieve this vision, we anticipate the need for new development and architectural paradigms for engineering future systems.
As discussed in Architecting the Future of Software Engineering: A Research and Development Roadmap, the SEI in close collaboration with our advisory board and other leaders in the software engineering research community, developed a research roadmap with six research focus areas. The following figure shows those areas along with a list of research topics to undertake, and then short descriptions of each of the research focus areas follow.
AI-Augmented Software Development. At almost every stage of the software development process, AI holds the promise of assisting humans. By relieving humans of tedious tasks, they will be better able to focus on tasks that require the creativity and innovation that only humans can provide. To reach this important goal, we need to re-envision the entire software development process with increased AI and automation tool support for developers. A key challenge will be taking advantage of the data generated throughout the lifecycle. The focus of this research area is on what AI-augmented software development will look like at each stage of the development process and during continuous evolution, where AI will be particularly useful in taking on routine tasks.
Assuring Continuously Evolving Software Systems. When we consider the software-reliant systems of today, we see that they are not static (or even infrequently updated) engineering artifacts. Instead, they are fluid—meaning that they are expected to undergo almost continuous updates and improvements and be shown to still work. The goal of this research area is therefore to develop a theory and practice of rapid and assured software evolution that enables efficient and bounded re-assurance of continuously evolving systems.
Software Construction through Compositional Correctness. As the scope and scale of software-reliant systems continues to grow and change continuously, the complexity of these systems makes it unrealistic for any one person or group to understand the entire system. It is therefore necessary to integrate (and continually re-integrate) software-reliant systems using technologies and platforms that support the composition of modular components. This is particularly difficult since many of such components are reused from existing elements that were not designed to be integrated or evolved together. The goal of this research area is to create methods and tools that enable the specification and enforcement of composition rules that allow (1) the creation of required behaviors (both functionality and quality attributes) and (2) the assurance of these behaviors.
Engineering AI-enabled Software Systems. AI-enabled systems, which are software-reliant systems that include AI and non-AI components, have some inherently different characteristics than those without AI. However, AI-enabled systems are, above all, a type of software system. These systems share many parallels with the development and sustainment of more conventional software-reliant systems.
This research area focuses on exploring which existing software engineering practices can reliably support the development of AI systems, as well as identifying and augmenting software engineering techniques for the specification, design, architecture, analysis, deployment, and sustainment of systems with AI components.
Engineering Socio-Technical Systems. Societal-scale software systems, such as today’s commercial social media systems, are designed to keep users engaged and often to influence them. A key challenge in engineering societal-scale systems is predicting outcomes of the socially inspired quality attributes that arise when humans are integral components of the system. The goal is to leverage insights from the social sciences to build and evolve societal-scale software systems that consider these attributes.
Engineering Quantum Computing Software Systems. Advances in software engineering for quantum are as important as the hardware advances. The goals of this research area are to first enable current quantum computers to be programmed more easily and reliably, and then enable increasing abstraction as larger, fully fault-tolerant quantum computing systems become available. A key challenge is to eventually fully integrate these types of systems into a unified classical and quantum software development lifecycle.
Research and Enactment Recommendations Catalyze Change
Catalyzing change that advances software engineering will lead to more trustworthy and capable software-reliant systems. The research focus areas shown in Figure 1 led to a set of research recommendations that are necessary to catalyze change, which are followed by enactment recommendations that focus on people, investment, and sustainment are needed.
The following research recommendations address challenges such as the increasing use of AI, assuring changing systems, composing and re-composing systems, and engineering socio-technical and heterogenous systems.
- Enable AI as a reliable system capability enhancer. The software engineering and AI communities should join forces to develop a discipline of AI engineering. This should enable the development and evolution of AI-enabled software systems that behave as intended and enable AI to be used as a software engineering workforce multiplier.
- Develop a theory and practice for software evolution and re-assurance at scale. The software engineering research community should develop a theory and associated practices for re-assuring continuously evolving software systems. A focal point for this research is an assurance argument, which should be a software engineering artifact equal in importance to a system’s architecture, that ensures small system changes only require incremental re-assurance.
- Develop formal semantics for composition technology. The computer science community should focus on the newest generation of composition technology to ensure that technologies such as dependency-injection frameworks preserve semantics through the various levels of abstraction that specify system behavior. This will allow us to reap the benefits of development by composition while achieving predictable runtime behavior.
- Mature the engineering of societal-scale socio-technical systems. The software engineering community should collaborate with social science communities to develop engineering principles for socio-technical systems. Theories and techniques from disciplines such as sociology and psychology should be used to discover new design principles for socio-technical systems, which in turn should result in more predictable behavior from societal-scale systems.
- Catalyze increased attention on engineering for new computational models, with a focus on quantum-enabled software systems. The software engineering community should collaborate with the quantum computing community to anticipate new architectural paradigms for quantum-enabled computing systems. The focus should be on understanding how the quantum computational model affects all layers of the software stack.
The above recommendations focused on scientific and engineering barriers to achieving change. The following enactment recommendations focus on institutional obstacles, including economic, human, and policy barriers.
- Ensure investment priority reflects the importance of software engineering as a critical national capability. The strategic role of software engineering in national security and global market competitiveness should be reflected in national research activities, including those undertaken by the U.S. White House Office of Science and Technology Policy (OSTP) and Networking and Information Technology Research and Development (NITRD). These research activities should recognize software engineering research as an investment priority on par with chip manufacturing and AI with benefits to national competitiveness and security. Software engineering grand challenges sponsored by DARPA, the National Science Foundation (NSF), and FFRDCs are also suggested.
- Institutionalize ongoing advancement of software engineering research. Sustained advancements in software engineering requires institutionalizing an ongoing review and reinvestment cycle for software engineering research and its impact on software engineering practice. Maintaining national software engineering proficiency requires research funding sources and institutes working with industry and government leaders in the software engineering community to periodically review the state of software engineering.
- Develop a strategy for ensuring an effective workforce for the future of software engineering. Currently, software engineering is performed by a broad collection of people with an interdisciplinary skill set not always including formal training in software engineering. Moreover, the nature of software engineering seems to be changing in reaction to the fluid nature of software-reliant systems, We need to better understand the nature of the needed workforce and what to do to foster its growth. The software engineering community, software industry, and academic community should create a strategy for ensuring an effective future software engineering workforce.
Architecting Future Systems Requires Software Engineering Advances
Due to the conceptual nature of software, it continues to grow, without bounds, in capability, complexity, and interconnection. There seems to be no plateau in the advancement of software. To make future software systems safe, predictable, and evolvable, the software engineering community—with sufficient investment from private and public sources—must work together to advance the theory and practice of software engineering strategically to enable the next generation of software-reliant systems.
As the Honorable Heidi Shyu, Under Secretary of Defense for Research and Engineering wrote in our report:
In the future, we will need rapid composition of new capabilities that can operate in a highly contested and denied environment. Integrating heterogeneous systems seamlessly and rapidly will enable us to stay ahead of threats. We will need to exploit the promise of artificial intelligence to increase capability not only in our fielded systems but also in our development systems. This research roadmap should serve as the starting point for a sustained effort to improve software engineering. The DoD will continue to look to the Carnegie Mellon University Software Engineering Institute as a leader in improving the state of the art and practice in software engineering.