Three Problem Areas Common to Autonomous and Embedded System

Society depends increasingly on computers to perform tasks that affect and enrich our daily lives. These computers help run our power plants, monitor our heartbeat, drive our cars, cook our food, and detect strangers in our house. They enable us to install satellites in space and to build earthquake-sensitive buildings. Increasingly these computing systems are required to perform more complex tasks and to do so at greater and greater levels of autonomy. Each new generation of a system raises people’s expectations in terms of its functionality, performance, reliability, and safety. For many of these systems, software errors can result in loss of equipment or even human life. Our responsibility as computing professionals is to provide the best possible technology to ensure that people’s trust in these systems is justified. Assuring that autonomous and embedded systems will operate correctly and safely in all situations has become increasingly difficult for several reasons. To deal with a wider range of problems and operating conditions, the decision procedures and algorithms implemented in computer software have become much more sophisticated. Decomposition and modular design have led to complex multitasking systems wrought with all the difficulties that can arise in concurrent real-time systems. The environments in which the systems operate are more diverse, and each is more complex and less predictable. As we call on autonomous and embedded systems to perform more control functions, the effects these computing systems have on the environment and the environment’s subsequent reactions (the feedback loops) become more important in assessing the performance and safety of the system. Finally, these complex systems are usually not simply designed and deployed. They evolve continually. They are changed and modified to fix problems, to increase robustness, and to add new features that were never anticipated in the original design. All of these issues have contributed to a growing concern that current methods for designing and evaluating complex autonomous and embedded systems are inadequate. Indeed, the highly publicized failures of recent NASA missions have confirmed that system designers need new tools to be able to detect and debug problems before they lead to catastrophe. The degree of assurance we can provide today is based on extensive simulation and testing. The goal of simulation is to catch errors as early as possible in the design phase to reduce the need for more costly testing of the implemented system. In some cases, simulation is the only option; testing may be impossible because the system’s intended effect is irreversible, e.g., launching a spacecraft. Both simulation and testing suffer from being incomplete: each simulation run and each test evaluates the system performance for only a single set of operating conditions and input signals. For complex autonomous and embedded systems it is impossible to cover even a small fraction of the total operating space with simulations. Finally, testing is already too expensive; today building a test harness to simulate a component’s environment is more expensive than building the component itself. The focus of our proposed research is to complement the traditional methods of system validation through simulation and testing with formal methods, that is, with methods that evaluate the performance of a system over a large