|
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 cognisance of what
are called as patterns and anti-patterns in general, but specifically
with respect to an organisation 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 contexts, 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, USA.
He
says, Each pattern describes a problem which occurs over and
over 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 - Organisational 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.
They 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
theorising about them. The aim should be to recognise 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)
Recognise 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.
|