Strategies for Achieving Dependability in Coalitions of Systems
“Dependability” 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), robustness, accuracy, and numerous other properties. Many aspects of dependability have been explored extensively in the context of individual software components. Modern software systems, however, are composed from multiple components and complex subsystems. 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, and they may be managed by different organizations. Further, the components may be data or services as well as code, and they are often distributed at various nodes of a network. 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.