Requirements
The first step in any project is to define
the functional and non-functional requirements. Lack of proper
definition will lead to a product that is developed to meet
the standards and needs of the software development team. Since
they are most often not the target audience, the product will
not meet the needs of the clients.
The formal means of achieving this is through
the use of Use Case Analysis. This technique allows both technical
and non-technical professional to communicate their requirements.
Should the client be unreceptive to the use of UML, the behavior
must be defined in a informal manner. This can be achieved
through a series of personal meetings.
Before designing the system, you must know
the core requirements. You must be able to explain to the
client what they have in mind. If you can achieve this, you
can safely begin the development. If not, you must be vigilant
in your continued information gathering.
This analysis also plays a pivotal role in
future evolutions of your product. If you are able to envision
the maximum amount a uses prior to design, you can create
a system that has is able to adapt to future needs with the
least amount of headache. Imagine the following; you are designing
a means of communication between two applications. You originally
envisioned the system to work locally, so you achieved IPC
using a named pipe. You've successfully produced your new
com system, and are showing off your months of work. To your
horror, you are informed that the functional requirements
have changed. It has to work both locally and remotely, as
well as a yet un-drafted proprietary communications format.
Flashback to the original design date. Instead
of hard-coding the pipe IPC system, you instead create a lower
level layer of abstraction to represent the communications
channel (my personal hero is the c#/java interface). When
you are presented with a change in spec, you only have to
create a new implementation of your com channel. You have
achieved an appropriate level of decoupling. You can now add
new communications channel with ease and without the infinite
level of regressions that come with modifying a tightly coupled
system.
|