The Many Faces of Complexity in Software Design.-Simplicity and Complexity in Programs and Systems.-Conquering Complexity.-Separating Safety and Control Systems to Reduce Complexity.-Conquering System Complexity.-Accomdating Adaptive Systems Complexity with Change Tolerance.-You Cant Get There From Here! Large Problems and Potential Solutions in Developing New Classes of Complex Computer Systems.- 99% Biological Inspiration.-Dealing With Complexity in Agent-Orientated Software Engineering: The Importance of Interactions.-Service-Orientation: Conquering Complexity with XMDD.-Ten Commandments of Forman Methods...Ten Years On.-Conquering Complexity via Seamless Integration of Design-Time and Run-Time Verification.-Modelling Temporal Behaviour in Complex Systems with Timebands.-Software and System Modeling: Structured Multi-view Modeling, Specification, Design and Implementation.-Conquering Complexity through Distributed, Intelligent Agent Frameworks.-Customer-Orientated Business Process Management: Vision and Osbtacles.-On the Problem of Matching Database Schemas.
Software has long been perceived as complex, at least within Software Engineering circles. We have been living in a recognised state of crisis since the first NATO Software Engineering conference in 1968. Time and again we have been proven unable to engineer reliable software as easily/cheaply as we imagined. Cost overruns and expensive failures are the norm.
The problem is fundamentally one of complexity: software is fundamentally complex because it must be precise. Problems that appear to be specified quite easily in plain language become far more complex when written in a more formal notation, such as computer code. Comparisons with other engineering disciplines are deceptive. One cannot easily increase the factor of safety of software in the same way that one could in building a steel structure, for example. Software is typically built assuming perfection, often without adequate safety nets in case the unthinkable happens. In such circumstances it should not be surprising to find out that (seemingly) minor errors have the potential to cause entire software systems to collapse.
The goal of this book is to uncover techniques that will aid in overcoming complexity and enable us to produce reliable, dependable computer systems that will operate as intended, and yet are produced on-time, in budget, and are evolvable, both over time and at run time. We hope that the contributions in this book will aid in understanding the nature of software complexity and provide guidance for the control or avoidance of complexity in the engineering of complex software systems.
Significant insights into sources and causes of complexitySignificant contributions towards controlling complexity authored by world-class authoritiesAccessible to both researchers and practitioners alikeWith exclusive Foreword by Sir Roger Penrose