People
working in the software development realm are well aware that many factors can
affect the development process, including unexpected budget cuts, time pressure
from upper management, personnel turnover and bugs in the code. But above all,
it is changes in requirements that are typically the most disruptive,
problematic and costly factor. While
quality requirements management practices have become top of mind for many
companies developing software, the ability to get requirements right the first
time continues to be a monumental challenge for both business and IT.
Why is this? In most cases, it's because existing
processes for establishing requirements are ad-hoc and inefficient, leading to
miscommunication and poorly defined requirements, and ultimately, excessive
rework, delays, and products that fail to achieve full customer satisfaction.
However, many of these pitfalls can be avoided when requirements are defined
clearly and collaboratively at the onset of a development project, by focusing
on the requirements definition (RD) process.
It's been well documented that catching and fixing problems at the
requirements definition stage of the development lifecycle has a significantly
greater impact on improving the final software product than changes made later
in the process. In fact, studies have found that the theoretical cost of $1 to
fix a defect found in the requirements phase rises to $2-3 in the design phase,
$5-6 in coding, $18-20 in testing, and $100-110 if the change is made once the
software application is released.[1]
Unfortunately, most companies don't follow this rule and let the
requirements process be driven mainly by the business analysts, who define and
communicate their vision of the application's inputs and outputs using text
documents, spreadsheets or even e-mail messages, with no central monitoring or
file repository for the vetting process. Key stakeholders are then expected to
read, comment and revise these cumbersome documents and hope a set of
requirements magically emerges from the chaos.
There is a
better way. This article provides an overview of the key requirements issues
that affect nearly every software and systems development process, and offers a
four-step process for RD that all software organizations should follow to
reduce rework, speed development and deliver dramatic time and cost savings.
Four-Step Process for Effective
Requirements Definition
The
implementation of a reliable and consistent RD process allows workgroups to
collaborate on activities that ensure requirements are accurately defined,
communicated and approved by all stakeholders from the outset of a software
project. An
effective RD process should include the following four critical requirements
process areas: elicitation, analysis, specification and validation.
Requirements
Elicitation
As the first step in the RD process, all the individuals involved
in defining the requirements should collaborate to outline their needs visually
and determine what business flows the application will deliver, who the users
will be, and how they will utilize the software.
- Elicit the Details: Business stakeholders and development teams
often speak very different languages. So if we start with a handoff of a
requirements document, we often find out - much too late - that what we
thought they wanted and what they actually wanted are very different
things. By getting involved in the elicitation process, developers can
ensure that the project team is using as many ways possible to ensure that
everyone is speaking the same language.
- Ask
Questions: When defining requirements,
there are two key questions that must be addressed: What is the
application supposed to do and how is it going to do it? Often teams focus
only on one. Or, worse, some stakeholders can be focused on the question
of "what" while the others are focused more on the
"how." This inevitably leads to shortcomings in the finished
application. The methods that can be used for requirements elicitation and
gathering depend on the extent that various groups will agree to be
involved. Workshops, where stakeholders explore user scenarios and use
cases, can work well when user representatives are available. In
situations where there are many different stakeholders, questionnaires and
surveys may be the way to go. Individual interviews with subject matter
experts are also useful as are building interactive prototypes. The more
of these vehicles you can get involved in, the more discussion takes place
upfront. This gives you the opportunity to ask more questions, clarify and
ensure that there is truly understanding between what the business is
saying it wants, and what it is you can actually build for them.
- Create
User Scenarios: Discussions
that focus on users and how they're going to use a product, application,
or system generally yield great results. Users and business stakeholders
generally find it more natural to describe their business tasks and usage
goals than to define all of the functionality they expect to see in a
product. Use cases, scenarios, and user stories are related terms that are
frequently used to describe a system's user requirements. Use cases don't
replace the need to define the detailed functional requirements that will
ultimately be implemented. However, exploring use cases or user scenarios
can help ensure that the requirements you implement will ultimately allow
users to accomplish their goals.
Requirements
Analysis
Once the business flows are collected, the development and IT
teams must perform a reality check, ensuring that they understand what's needed
and can deliver it, based on the resources at their disposal. This helps verify
the feasibility of the plan and catch any serious problems or inconsistencies
early on.
- Create Analysis Models: The natural language requirements found in
the average specification document are full of ambiguities, redundancies
and gaps. To decompose high-level requirements into detailed, specific
functional requirements, it can be helpful to build analysis models.
Analysis models are graphical diagrams that visually outline requirements.
This makes it easier to uncover missing or redundant requirements by
taking away the tedious and error-prone tasks of reading through piles of
text. While you may immediately be thinking that this is something that
you can do using UML, it's likely that you'll need to create models for
this stage of the process at an even higher level of abstraction to ensure
that the business user can get the big picture.
- Build and evaluate prototypes: A prototype provides opportunities to
interact with a simulation or portion of the final system. Basically,
prototypes bring use cases to life. A prototype or set of screen designs
doesn't show the business logic happening behind the scenes or illustrate
the complete behavior of the application in all scenarios. It can't
indicate how all exceptions and error conditions are going to be handled.
However, when used with the right audience, a prototype can be invaluable
in helping everyone get on the same page about existing requirements for a
new system.
- Prioritize Requirements: Every software
development organization has limits around resources and time. Therefore
every team needs to determine which of its allocated requirements are most
important. Prioritizing requirements allows teams to implement the right
sets of user functionality in the right sequence. Prioritization should be
a collaborative process that involves both a customer and a technical
perspective to balance customer value against cost and technical risk.
Requirements
Specification
As the requirements take shape, this step enables stakeholders to
add detail through expanded use cases, business rules, business models and
prototypes. It also involves documenting the requirements, establishing the
management protocol to be followed and determining the way the project
integrates with exiting applications and processes.
- Look for ambiguities: Requirements
written in natural language are filled with ambiguity. Negative
requirements, sets of vague and subjective terms, complex logic,
omissions, synonyms, and adverbs lead to multiple interpretations by
different readers. It is cheaper to correct ambiguities in the
requirements phase than to deal with disappointed customers. As a result
teams should establish an agreed upon vocabulary prior to writing
requirements.
- Store Requirements in a Database: By storing
requirements in a commercial requirements management tool, teams can
overcome many of the limitations imposed by textual documents.
Requirements management tools make it easy to store additional information
and attributes about different classes of requirements information. They
facilitate tracking requirement status and provide a mechanism for
retaining requirements that have been rejected or approved, and later
deleted from a baseline. The tools also make it easier to work with groups
of requirements that are intended for multiple future releases. In
addition, organizations that keep requirements in a shared online database
can better facilitate communication and collaboration among distributed
teams.
- Trace Requirements into Design, Code and Tests: It is valuable to
be able to link each software functional requirement back to its origin,
so teams should embrace traceability information that connects functional
requirements to associate design elements, code segments and tests to
accelerate debugging and software maintenance. Requirements management
tools can be a great aid to managing traceability data.
Requirements
Validation
Once all the requirements are specified and the stakeholders
validate that their initial vision is in fact reflected in the flows and that
all details are accurate and complete, business analysts can then interactively
review the scenarios to ensure they deliver the desired results. Test cases and
release criteria are established based on these requirements.
- Review the Requirements: The best quality
practice available to software teams is formal peer review of requirements
documents. Peer review provides an indication of how well others
understand the requirements and ensure that they communicate clearly,
effectively and efficiently to the various stakeholders. The analyst
should create complementary views of the requirements selected from
textual requirements, analysis models, scenarios, prototypes, tests and
other representations - all of which can be reviewed concurrently. All
project stakeholders should review the requirements to ensure accuracy,
completeness, and the optimal level of detail to deliver software that
truly meets the business needs.
- Create tests cases from requirements: Teams should begin
testing as soon as they have some requirements in hand. Deriving test
cases from use cases and scenarios is a valuable way to find problems in
the use cases themselves.
By following this four-step process for RD, software teams are
able to collaborate simply and effectively, bridging the communication gap
between business and IT and helping to ensure the eventual success of software
projects. (See following graphic)
Benefits of Getting Requirements Right
from the Start
When requirements are defined accurately and ratified by all
stakeholders before the development team begins work, the following
efficiencies accrue throughout the project's lifecycle:
- The design and
coding tasks can follow the models already agreed upon by the business
analysts, user and IT staff, so misunderstanding and miscommunications are
dramatically reduced;
- Because there will
be fewer clarification and adjustments later on, rework is reduced;
- Features are
developed with respect to priority, so unnecessary or superfluous elements
are less likely to bog down the projects progress;
- Testing and QA can
be carried out directly against the requirements; there's no opportunity
for the quality teams to be focused on the wrong test cases;
- Testing and QA can
be performed more quickly and efficiently - earlier in the lifecycle and
as development progresses - saving time and money over the traditional practice
of testing the finished code against requirements; and
- End user
satisfaction rises, because the finished product matches the initial
expectations and requests.
A thorough and effective
RD process that ensure that requirements are established and defined by the
right parties and approved by all stakeholders can provide companies with
dramatic time and cost savings in the design phase, during development and
throughout the testing and quality assurance processes - and can ultimately be
the difference between the success and failure of a software development
project.
Rob
Apmann is Senior Product Manager for Requirements Definition &
Management (RDM) Solutions at Borland. Rob has worked in the
Requirements Management arena for over 10 years, both as a vendor of
RDM solutions at IBM-Rational Software and Borland, and as a Business Analyst
and end-user of RDM tools building applications designed to satisfy
customer needs.
[1] Source:
Hewlett-Packard, "Applications of Software Measurement Conference," 1999
Trackback(0)
Comments 
Write comment
 |