As information technologies become increasingly distributed and
accessible to larger number of people and as commercial and government
organizations are challenged to scale their applications and services to
larger market shares, while reducing costs, there is demand for software
methodologies and appli- tions to provide the following features: Richer
application end-to-end functionality; Reduction of human involvement in
the design and deployment of the software; Flexibility of software
behaviour; and Reuse and composition of existing software applications
and systems in novel or adaptive ways. When designing new distributed
software systems, the above broad requi- ments and their translation
into implementations are typically addressed by partial
complementarities and overlapping technologies and this situation gives
rise to significant software engineering challenges. Some of the
challenges that may arise are: determining the components that the
distributed applications should contain, organizing the application
components, and determining the assumptions that one needs to make in
order to implement distributed scalable and flexible applications, etc.