|
Software system developed in an integrated manner,
ensures good co-ordination and communication with
heterogeneous hardware and software platforms,
writes Dr R Srinivasan
IT was mentioned in an earlier
article that three common concepts depicting anti-patterns
in software project development are - root causes
pinpointing the context and situations for detecting
anti-patterns; primal forces that influence the
decision making; and the model adopted in software
design based on the chosen architecture. Having
seen the first two in the previous articles, we
will now move to the third one.
The uniqueness of software architecture
is that it is distinct from software engineering,
programming and project management. It is the
software architect who is the balancing factor
to resolve design forces from many different angles
and perspectives. To illustrate this with an example
of an interactive system, if the architecture
is not well planned in advance, any future change
to UI will not be easy. It may also end up in
a chaotic situation, if the UI is tightly interwoven
with the functional core. Such a situation would
normally happen when a software system is developed
on a piecemeal fashion without conceptualizing
a proper architecture at design level. Such a
system will become unmanageable when enhancements
are attempted at a later date. As Brown, et al
says, "One of the key benefits of architecture
is the separation of concerns, which means, rather
than tackling all the problems at once, partitioning
the problem into solvable elements."
A typical model of a small software
system can be taken up to illustrate this concept.
The model comprises two levels, viz., the "application
level" and the "system level".
The former one includes the UI and associated
functionality to choose and drive the required
application. Normally, the applications that represent
the external model of the system contain the software
needed to address the functional requirements.
The internal model of the system, represented
by the system level, will demonstrate the interoperability
among the different applications and hence the
interface requirements needed for this purpose.
It is here that the importance of a good architecture
comes into the picture to provide highly reliable
communication and co-ordination among various
applications. In a good design, this concept has
to be extended to larger systems as well, where
the solutions span multiple systems across the
enterprise. Therefore the lesson is that, in the
design stage of a large system, a perfect architecture
has to be established such that appropriate solutions
are applied at the correct levels thereby we will
definitely end up with an effective maintainable
system.
Steve McConnell, in his book,
'Software project survival guide - how to be sure
your first important project isn't your last',
says that survival prospects for software projects
are often poor, but they do not need to be. He
adds that the first step in surviving a software
project is being sure to begin the project in
a civilized way and from that starting point,
much more than mere survival is possible. So,
as the saying goes, well begun is half done, decision
of a good design-level model based on a perfect
architecture is a must in a software development
project.
Experts in Patterns and Anti-Patterns
advocate a 7-level software design model, particularly
in the development of a large software system.
The very purpose of such a model,
based on pattern language, is to ensure that,
with well-defined priorities at each level, the
system is scalable with necessary enhancements
in future. To give a brief description of each
level, the objects and classes so that the matter
of future concern will only be code reuse rather
than design reuse. At the micro architecture level,
solution of recurring software problems are taken
care of by deploying suitable pattern-oriented
software that combine multiple objects or object
classes. The Gamma Pattern language of the famous
Gang of Four (GOF), comprising Eric Gamma, Richard
Helm, Ralph Johnson, and John Vlissides, illustrates
the development of effective design patterns for
applications at this level. The macro component
level is involved with the planning, organization
and development of application frameworks, sometimes
taking into account necessary input from one or
more micro-architectures.
The set of user requirements
and external inputs to be implemented on the system
are taken care of by the application level and
therefore its main objective is to implement the
set of functionality defined under SRS (Software
Requirement Specifications) of the customer. The
system level is designed to take are of interoperability
between the applications in addition to managing
certain life cycle issues such as modifications
and replacement of component applications. The
enterprise level ensures good co-ordination and
communication across an organization that could
be in a single location or spread around geographically
with heterogeneous hardware and software platforms.
The global level takes into account co-ordination
and communications across all organization that
participate in the development of a single large-scale
software project.
(To
be continued)
(The
author is Chief Technology Officer, Internet Component
Management Group, Bangalore and can be contacted
at: r.srinivasan@iCMGworld.com)
|