Software Requirements Definitions
Before talking about the requirement process in
general and discussing different tools and techniques used for developing a
good set of requirements, let us first look at a few definitions of software
requirements.
Jones defines software requirements as a statement
of needs by a user that triggers the development of a program or system.
Alan Davis defines software requirements as a user
need or necessary feature, function, or attribute of a system that can be
sensed from a position external to that system.
According to Ian Summerville, requirements are a
specification of what should be implemented. They are descriptions of how the
system should behave, or of a system property or attribute. They may be a
constraint on the development process of the system.
IEEE defines software requirements as:
- A condition or capability needed by user to solve a problem or achieve an objective.
- A condition or capability that must be met or possessed by a system or system component to satisfy a contract, standard, specification, or other formally imposed document.
- A documented representation of a condition or capability as in 1 or 2.
As can be seen, these definitions slightly differ
from one another but essentially say the same thing: a software requirement is
a document that describes all the services provided by the system along with
the constraints under which it must operate.
Importance
of Requirements
Many of the problems encountered in SW development
are attributed to shortcoming in requirement gathering and documentation
process. We cannot imagine start building a house without being fully satisfied
after reviewing all the requirements and developing all kinds of maps and
layouts but when it comes to software we really do not worry too much about
paying attentions to this important phase. This problem has been studied in
great detail and has been noted that 40-60% of all defects found in software
projects can be traced back to poor requirements.
Fred Brooks in his classical book on software
engineering and project management “The Mythical Man Month” emphasizes the
importance of requirement engineering and writes:
“The hardest single part of building a software
system is deciding precisely what to build. No other part of the conceptual
work is as dificult as establishing the detailed technical requirements,
including all the interfaces to people, to machines, and to other software
systems. No other part of the work so cripples the system if done wrong. No
other part is more dificult to rectify later.”
Let us try to understand this with the help of an
analogy of a house. If we are at an advanced stage of building a house, adding
a new room or changing the dimensions of some of the rooms is going to be very
difficult and costly. On the other hand if this need is identified when the
maps are being drawn, one can fix it at the cost of redrawing the map only. In
the case of a software development, we experience the exact same phenomenon -
if a problem is identified and fixed at a later stage in the software
development process, it will cost much more than if it was fixed at and earlier
stage.
This following graph shows the relative cost of
fixing problem at the various stages of software development.
Boehm (1981) has reported that correcting an error
after development costs 68 times more. Other studies suggest that it can be as
high as 200 times. Since cost is directly related with the success or failure
of projects, it is clear from all this discussion that having sound
requirements is the most critical success factor for any project.
Role of
Requirements
Software requirements document plays the central
role in the entire software development process. To start with, it is needed in
the project planning and feasibility phase. In this phase, a good understanding
of the requirements is needed to determine the time and resources required to
build the software. As a result of this analysis, the scope of the system may
be reduced before embarking upon the software development.
Once these requirements have been finalized, the
construction process starts. During this phase the software engineer starts
designing and coding the software. Once again, the requirement document serves
as the base reference document for these activities. It can be clearly seen
that other activities such as user documentation and testing of the system
would also need this document for their own deliverables.
On the other hand, the project manager would need
this document to monitor and track the progress of the project and if needed,
change the project scope by modifying this document through the change control
process.
The following diagram depicts this central role of
the software requirement document in the entire development process.
Levels of
Software Requirements
Software requirements are defined at various levels
of detail and granularity. Requirements at different level of detail also mean
to serve different purposes. We first look at these different levels and then
will try to elaborate the difference between these with the help of different
examples.
1. Business Requirements:
These are used to state the high-level business
objective of the organization or customer requesting the system or product.
They are used to document main system features and functionalities without
going into their nitty-gritty details. They are captured in a document
describing the project vision and scope.
2. User Requirements:
User requirements add further detail to the
business requirements. They are called user requirements because they are
written from a user’s perspective and the focus of user requirement describe
tasks the user must be able to accomplish in order to fulfill the above stated
business requirements. They are captured in the requirement definition
document.
3. Functional Requirements:
The next level of detail comes in the form of what
is called functional requirements. They bring-in the system’s view and define
from the system’s perspective the software functionality the developers must
build into the product to enable users to accomplish their tasks stated in the
user requirements - thereby satisfying the business requirements.
In the last section we defined a software
requirement as a document that describes all the services provided by the
system along with the constraints under which it must operate. That is, the
requirement document should not only describe the functionality needed and provided
by the system, but it must also specify the constraints under which it must
operate. Constraints are restrictions that are placed on the choices available
to the developer for design and construction of the software product. These
kinds of requirements are called Non-Functional Requirements. These are used to
describe external system interfaces, design and implementation constraints,
quality and performance attributes. These also include regulations, standards,
and contracts to which the product must conform.
Non-functional requirement play a significant role
in the development of the system. If not captured properly, the system may not
fulfill some of the basic business needs. If proper care is not taken, the
system may collapse. They dictate how the system architecture and framework. As
an example of non-functional requirements, we can require software to run on
Sun Solaris Platform. Now it is clear that if this requirement was not captured
initially and the entire set of functionality was built to run on Windows, the
system would be useless for the client. It can also be easily seen that this
requirement would have an impact on the basic system architecture while the
functionality does not change.
Some Risks
from Inadequate Requirement Process
From the above discussion, it should be clear that
the requirements play the most significant role in the software development
process and the success and failure of a system depends to a large extent upon
the quality of the requirement documents. Following is a list of some of the
risks of adopting an inadequate requirement process:
Sufficient
user involvement leads to acceptable products.
If input from different types of user is not taken,
the output is bound to lack in key functional areas, resulting in an
unacceptable product. Overlooking the needs of certain user classes (stake
holders) leads to dissatisfaction of customers.
Creeping
user requirements contribute to overruns and degrade product quality.
Requirement creep is one of the most significant factors in budget and time
overruns. It basically means identifying and adding new requirements to the
list at some advanced stages of the software development process. The following
figure shows the relative cost of adding requirements at different stages.
Ambiguous
requirements lead to ill-spent time and rework.
Ambiguity means that two different readers of the
same document interpret the requirement differently. Ambiguity arises from the
use of natural language. Because of the imprecise nature of the language,
different readers interpret the statements differently. As an example, consider
the following Urdu Phrase: “Rooko mut jane doo ”. Now, depending upon where a
reader places the comma in this statement, two different readers may interpret it
in totally different manner. If a comma is palced after “Rooko ”, the sentence
will become “Rooko, mut jane doo ”, meaning “don ’t let him go ”. On the other
hand if the comma id placed after “mut ”, the sentence will become “Rooko mut,
jane doo ”, meaning “let him go ”. Ambiguous requirements therefore result in
misunderstandings and mismatched expectations, resulting in a wasted time and
effort and an undesirable product.
Let us
consider the following requirement statement:
The operator
identity consists of the operator name and password; the password consists of
six digits. It should be displayed on the security VDU and deposited in the
login file when an operator logs into the system.
This is an example of ambiguous requirement as it
is not clear what is meant by “it” in the second sentence and what should be
displayed on the VDU. Does it refer to the operator identity as a whole, his
name, or his password?
Gold-plating by developers and
users adds unnecessary features.
Gold-plating refers to features are not present in
the original requirement document and in fact are not important for the
end-user but the developer adds them anyway thinking that they would add value
to the product. Since these features are outside the initial scope of the product,
adding them will result in schedule and budget overruns.
Minimal specifications lead to missing key
requirements and hence result in an unacceptable product.
As an example, let us look at the following
requirement. The requirement was stated as: “We need a flow control and source
control engineering tool.” Based upon this requirement, system was built. It
worked perfectly and had all the functionality needed for source control
engineering tool and one could draw all kinds of maps and drawings. The system
however could not be used because there was there was no print functionality.
Let us now look at the following set of requirement
statements for another system:
The system should maintain
the hourly level of reservoir from depth sensor situated in the reservoir.
The
values should be stored for the past six months.
AVERAGE: Average command
displays the average water level for a particular sensor between two times.
This is another case of minimal requirements – it
does not state how the system should respond if we try to calculate the average
water level beyond the past six months.
Incompletely defined requirements make accurate
project planning and tracking impossible.
I found this article very useful.
ReplyDeletei think this is the very very important phase of SDLC so very good article on this phase in detail
ReplyDeleteIn product development and process optimization, a requirement is a singular documented physical and functional need that a particular design, product or process must be able to perform.
ReplyDelete