Safari Books Online is a digital library providing on-demand subscription access to thousands of learning resources.
The previous chapter discussed the changing characteristics of application systems. Technology advances lead us to conclude that future software-intensive solutions in almost all domains will be distributed across many sites, access data from multiple sources, and have web-based interfaces [1, 11]. Furthermore, users expect robust, high-performance systems in the face of constant change of underlying technologies, reconfiguration of the system, and the occasional failure of any pieces of the system. These expectations are coupled with the parallel need for reducing overall development and maintenance costs, typically by consuming more third-party software rather than building all software in-house from scratch for each new project. Consequently, traditional approaches to software development and maintenance are under increasing pressure to evolve in ways that provide better support for these kinds of needs.
Unfortunately, even relatively recent innovations such as rapid application development (RAD) and object-oriented analysis and design (OOAD) are falling short of the mark. They have much to offer in support of many kinds of application development, but exhibit a number of limitations when faced with challenges such as modeling externally-developed pieces of a system, facilitating flexibility in the design of system architectures, and encouraging reuse of analysis patterns, design templates, and code fragments.