upgrading in response to error reports. Replacing an old component with its
new version usually requires rewriting part of the integrating code and
probably replacing other components which are not compatible with the
Choosing to follow the mainstream of reuse-based software development
requires the application developer to answer the question of whether to
exploit an existing middleware framework or to build everything from
scratch. Usually, the answer lies between the two extremes. In order to
answer this question, the application developer should identify existing
middleware frameworks and compare their specifications against the require-
ments of the application at hand.
From the application developer's viewpoint, the user requirements speci-
fication should be analysed by having in mind which components are
already available for reuse, what integration effort they require, and whether
to reuse them as they are or to build new components from scratch.
According to Boehm (1995), “in the old process, system requirements
drove capabilities. In the new process, capabilities will drive system require-
ments ... it is not a requirement if you can't afford it”.
For distributed system development, the application developer should
evaluate the middleware against the specific architectural model and
distribution paradigm it supports.
Distributed architecture models
The architecture of a distributed system is described in terms of identified
system components (the applications or parts of them), how they are con-
nected (the relationships among the components), and the nature of the
connections (the mechanisms used to establish the relationships). Three
architectural models are described in the following.
In OO programming, interactions between two objects are implemented as
operations on one of the two: the object that performs the operations is
called the “server”, while the object that requests an operation and uses its
results is called the “client” (Lewandowsky 1998). When both the client and
the server reside in the same address space (i.e. they are part of the same
single program), the client holds a reference to the server (its memory
address) to invoke its operations. When the client and the server reside on
remote computers, a middleware infrastructure allows them to exchange
data and services through the network.
The three-tier model
Designing a client
server system requires the system's functionality to be
split between the clients and the servers. The question is whether to have fat