...or, the Other Pipe Dream!
In a thread in the Requirements Management forum ("do you prefer Word interface or separate
application?") I responded with my definition of Requirements Engineering.
My basic thoughts have not changed much, but I wanted to extend them somewhat and
show more of CM's involvement in the Requirements process.
I have been involved in the software industry, formally and
informally, for over three decades. In that time I have had to do Requirements
Elicitation, Requirements Capture, Requirements Analysis, Requirements
Normalization, Requirements Traceability, and Requirements Management. I have
used ASCII documents, Word documents, Third-party hardcopy documents, Databases
of one flavor or another, and various proprietary tools. Here is my take on all
of this...
What Is Requirements Engineering?
Requirements Engineering consists of multiple roles,
responsibilities, skills, tools, etc. The following is my take on how
this breaks down.
- Requirements Elicitation:
The mechanism of prying the actual requirements from their source. This is
often undertaken by such various activities as dialog, meetings, email,
and RFCs. The skills involved are primarily being able to ask the right
questions and hear the real answers.
CM has no participation in Requirements Elicitation unless the discussion
is about CM tools, policies, processes, procedures, etc.
- Requirements Capture:
The mechanism of taking the elicited requirements and creating the initial
Requirements set. Note that I did not say document, though that is
generally the form the both the source (client, customer, whatever) and
other stakeholders expect and understand. A document by itself is a poor
choice for the Requirements Engineer. Many people feel that Use Cases,
Scenarios and the like can constitute requirements. I disagree. These are
soft tools used in the Requirements Elicitation process and while being
able to satisfy them may be a requirement of sorts, they are too complex
to be requirements in and of themselves (see my definition of a requirement below).
At this point, CM is involved in versioning the requirements as they are
developed. While the tools may differ from what is used by Development,
the requirements for tools do not. Each requirement needs to be versioned
independently if possible and if not, then the "document" including them
should be checked in often to keep the number of incremental changes
small. While branching and merging is rarely possible, the use of change
sets, electronic signatures and tags is not.
- Requirements Analysis:
The process of deriving secondary and implied requirements, determining and
resolving conflicting requirements, assessing risks and cost of achieving
(meeting) the requirements, etc. This also involves determining early
which requirements are subjective instead of objective, and which
requirements are not subject to testing or "proof."
This requires an attention to detail, an overall knowledge of the
application to be developed or modified and the ability to accurately
access risk factors. Since most projects rarely use the classic Waterfall
implementation model these days, it is generally at this phase that
requirements are identified as to which point release they will go into
effect (and which point release they will become obsolete in). This is the
step most often skipped in practice once the base requirements have been
captured as it only shows a return on investment (ROI) when a project
starts to get complicated or the potential for customer-vendor
disagreement is high. The result of the analysis process is normally not a document, but rather a list
of individual requirements that can be traced.
CM has no direct participation in this phase other than the continued
support of the requirements versioning process and tools.
- Requirements
Normalization: The process of removing duplicate requirements,
separating complex requirements into simpler "atomic" requirements, and
adjusting the type each requirement (Business, Technical, Functional,
Usability, etc.). It is also the phase where requirements are grouped
together to provide a framework for design. The skills required are
similar to those for Requirements Analysis with the addition of a
knowledge of the business needs of the vendor and some experience in how
the grouping and presentation of requirement to Design will affect the
resulting Design.
CM has no direct participation in this phase other than the continued
support of the requirements versioning process and tools.
- Requirements Traceability:
The establishment of the initial traceability matrix and the subsequent
management of it as development proceeds. The end goal of this
traceability matrix is to show that all of the requirements have been met
at project end. At a minimum, this should trace each requirement to some
mechanism to "prove" that it has been satisfied. It may do this by tracing
through development artifacts, but that is more of a
QA/QC/Development/Management issue than a Requirements Engineering one.
The skills involved in this are more the ability and desire to be a
nitpicking pain and the ability to keep a large view of the details of the
project in mind.
At this point, CM is involved in versioning the traceability matrix as it
is developed. While the tools may differ from what is used by Development
or indeed the individual requirements defined above, the requirements for
tools do not. Each line item in the matrix needs to be versioned
independently if possible and if not, then the "document" including them
should be checked in often to keep the number of incremental changes
small. Like captured requirements, branching and merging of a matrix is
rarely possible, though the use of change sets, electronic signatures and
tags is.
- Requirements Management:
This is where I differ the most from my previous response. The actual
management of the requirements and traceability matrix come into play at
this point. Inputs are taken from both Development and Quality Control
(QC) to update the matrix. Requirements may be "fine tuned" based on
implementation issues and they may be highly modified based on scope creep
and major problems encountered during implementation. This role also
provides oversight to ensure the design and implementation phases meet the
intention of the requirements as well as the letter of them. This means
that even in a classic Waterfall implementation model, Requirements
Management is a role that extends to the completion of the project.
CM's role during this phase is to continue the control of the physical
requirements repository and the enforcement of classic CM Version Control
and Release Management rules on each individual requirement and on the
traceability matrix.
What Is a Requirement?
Now that we have covered the basic definitions, roles, etc.
just what is a requirement? A requirement is a statement that is unambiguous,
simple (versus compound) and testable. It normally uses words like "shall" and
avoids words line "will" or "should." Being unambiguous is somewhat subjective
as readers of the various CMCrossroads forums can attest. The more we try to
nail down language, even to the point of defining a syntax and grammar all our
own, the more we tend to confuse both ourselves and others. There will always
be some level of connotation involved in the language describing a requirement.
Requirements should not make multiple statements such as, "the transaction
processing subsystem shall be able to execute 1000 transactions per second and
display a running status dashboard of them in real time." Not only does this
present testability and traceability problems, it tends to send Design down the
wrong path by artificially coupling the two base requirements. And finally,
requirements should be objectively testable. Statements like, "the User
Interface shall update at an appropriate rate," is open to interpretation by
both the Development group and the end customer. Most likely they will each
define "appropriate" to their own advantage.
It should be understood that there will be some fuzzy
requirements just because that is the best that can be done with them. They
should, however, be in the minority.
What
Form Should Requirements Take?
As I said earlier, most end-users and stakeholders want to review and approve
requirements based on some form of documentation. This is just the way they think
and the way most of them were taught. It can also be thought of as a common
denominator between the various audiences. This implies that regardless of how
the requirements are maintained internally starting at the Requirements
Analysis phase, they will have to produce a document from them that is
provably the same as the requirements they are maintaining internally.
There are a few tools on the market that attempt to make a bidirectional
translation from a requirements document to a requirements matrix and back to
an updated document, but most of the vendors admit that it doesn't really work
well unless you want a hierarchical list of bullets or have active links into a
document for every requirement in the
matrix. This last is where the problems start as is the function of the
Analysis and Normalization phases to break these requirements down, rearrange
them, etc.
It has been a few years since I had to actually use Requisite Pro, but I
remember that it could take a Word document and import a requirements "base"
from it. Maintenance going forward was more difficult and often resulted in
having to play major games with the Word document to keep it "looking nice."
Regardless, at the time I thought it was the neatest thing since sliced bread.
Notice that I started with a document, captured the requirements, and then went
into a maintenance mode. I skipped a lot of the steps of Requirements
Engineering that I went through earlier, but then the project was of a
manageable complexity and only had one iteration.
On another project, I started with having to go from one stakeholder to another
performing verbal Requirements Elicitation, capturing the requirements as I
went along. I then had to reconcile them, normalize them, etc. Then I
had to create a working document that would be used to negotiate the final
requirements set along with which release each requirement would have to be
implemented by. I used a database to store the individual requirements that
would version each of them as they were updated, and that would allow them to
be grouped together in various ways. Using that to manually produce a document
was painful. Updating them based on changes to the document was even more so,
but this was considered part of the Management role and could not be avoided.
The expression on the reviewers faces if I had presented the database / matrix
itself instead of a document, however, would have been priceless.
Summary
- Requirements need to be
individually versioned and "released." They should be kept internally
either in a tool that does this or in a database where the versioning is
programmed to automatically occur. A spreadsheet is a poor man's method of
accomplishing this, but is not suitable for large requirements sets.
- If the requirements are
captured from, and intended for review by, technical people that can
understand line-item and or matrix presentations of requirements, then
this method is least ambiguous.
- If the requirements need to
be reviewed by people who need documentation, then documentation should be
supplied.
- If documentation is generated
from a requirements tool or database, then it should be done so
automatically or programmatically. Manual generation should be a last
resort.
- A fully integrated tool is
the best of all worlds.
I have said in various threads that I consider
Requirements Management a part of CM. I have always meant, but may not have
been clear, that Requirements Management is used in the above sense. CM may not
do the actual job if Requirements Engineering exists, however they are responsible
setting the minimum requirements for CM compliance. I have also said or implied
that the Requirements Traceability role is a part of CM, but what I really
meant is that the role may be delegated to CM since they often "own" both the
tools and data necessary to do the job.
Why do I consider this a pipe dream? Because unless it is understood by
Management going into a project that either they cannot avoid doing
Requirements Engineering/Management or the project is going to be controversial
and agreement between vendor and customer is needed to keep from getting into a
constant rework situation, then requirements are often skipped or treated
informally. Lacking clear requirements, Design will base their deliverables
more on what they want (or want to do) rather than what the customer expects.
This in turn can lead Development into spending time and money on something the
customer may reject when they get a good look at it. QC, lacking clear
requirements, can only test for technical faults and subjective feel. Good
requirements cost money, time and resources that may not be available.
Ben Weatherall is currently based in Fort Worth, Texas where
he practices Practical CM on a daily basis using a combination of CVS
and custom tools to support a modified Agile-SCRUM development
methodology. He is a member of IEEE, ASEE (Association of Software
Engineering Excellence – The SEI’s Dallas based SPIN Affiliate), NTLUG
(North Texas Linux Users Group), and PLUG (Phoenix Linux Users Group).
Trackback(0)
|