Strategies for Achieving Robustness in Coalitions of Systems
“Robustness” is an overarching property of software systems that includes, to various viewers and to various extents, elements of correctness, reliability, fault-tolerance, performance, security, usability (without surprises), accuracy, and numerous other properties. Robustness is a form of dependability that focuses on resilience to failures. Many aspects of dependability and robustness have been explored extensively in the context of individual components. Modern software systems, however, are composed from multiple components. Often these components have not been designed to operate together. Increasingly these components are legacy code or even applications that can operate alone as well as in concert. Further, the components may be data or services as well as code. The challenge of individual components lies in understanding and managing the code, but the major challenge of modern systems lies in understanding and managing the interactions among the components. Large-scale system integration encounters new sources of problems, such as architectural mismatch, cross-platform portability, and side effects of evolution of the computing infrastructure. This new setting qualitatively changes the nature of the software development and integration process.