|
In software development process
each pattern describes a problem which occurs
over and over again and then provides the core
of the solution, explains Dr
R Srinivasan
"A
pattern conveys a proven solution to a recurring
problem in a given context amidst competing concerns"
In the few articles over the
last 19 weeks, we have been concentrating on the
development practices being adopted and executed
by software development houses all over the world.
But the big question mark is whether we have been
100% successful in our development efforts. The
definition of success depends on what you had
planned in the beginning of the project and what
you have achieved in terms of schedules, cost,
quality, support, etc. The recent trend to make
software development more successful is to take
cognizance of what are called as patterns and
anti-patterns in general, but specifically with
respect to an organization under the practices
and methodologies it follows in software development.
Initially we will concentrate on patterns and
later move to describe anti-patterns.
Many authors describe patterns
depending upon the context and environment in
which they are seen. Generally speaking, a pattern
is a recurring solution to a standard problem;
this means a pattern comprises a problem solution
pair. As mentioned, patterns are described under
different context, viz. design patterns, architecture
patterns, project management patterns, analysis
patterns, etc. The concept of employing the methodology
of patterns in software development was derived
from the discoverer of patterns, Professor Christopher
Alexander, a brick-and-mortar kind of architect
from the University of California, Berkeley, and
USA.
He says, "Each pattern
describes a problem which occurs over and again
in our environment, and then describes the core
of the solution to that problem, in such a way
that you can use this solution a million times
over, without ever doing it the same way twice."
Alexander effectively conveyed the standard and
successful methodologies in design and construction
of buildings to many trained and untrained individuals.
Typical example of deployment of patterns is in
automobile industry where designers reuse standard
designs, with successful track records. The principle
is, if you could remember the details of the previous
problem and how you solved it, then you could
reuse the experience instead of rediscovering
it. David Dikel, et al, in their book 'Software
Architecture - Organizational Principles and Patterns',
say that pattern is also a named "nugget"
of instructive insight, conveying the essence
of proven solution to a recurring problem in a
given context amidst competing concerns. This
means that patterns capture experience.
It is to be stressed upon that
to make pattern-oriented methodology to be successful
in software development, documentation of the
problem-solution pair is very vital. Douglas Schmidt,
et al, in their guest editorial for the Communication
of the ACM (vol. 39, No.10, Oct. 1996), illustrate
five important values that motivate the people
who document patterns. The are:
1) Success is more important
than novelty - the longer a pattern has been used
successfully, the more valuable it tends to be.
Finding a pattern is more of discovery and experience
and not invention.
2) Emphasis on writing and clarity
of communication - recurring solutions under patterns
are documented using standard format so that writing
patterns will be like catalogue entry. Well-written
pattern descriptions improve communication between
developers through well-structured documentation
of solutions to common problems.
3) Qualitative validation of
knowledge - to qualitatively describe concrete
solutions to common problems rather than qualifying
or theorizing about them. The aim should be to
recognize and reward the creative process used
by the developers in building high quality software
systems.
4) Good patterns arise from
practical experience - valuable patterns written
by experienced developers must be shared by all,
but at the same time experience of all software
developers must be valued rather than resorting
to the idea that few people have patterns and
others just sit and learn them.
5) Recognize the importance
of human dimensions in software development -
it is to be remembered that the purpose of patterns
is not to replace the creativity of the developer.
(To be continued)
(The
author is Chief Technology Officer, Internet Component
Management Group, Bangalore and can be contacted
at: r.srinivasan@iCMGworld.com)
|