Chapter 3
Chapter 3
Requirement Elicitation
3.1 An Overview of Requirements Elicitation
A requirement is a feature that the system must have or a constraint that it must satisfy to be accepted by the
client. Requirements engineering aims at defining the requirements of the system under construction.
Requirements engineering includes two main activities; requirements elicitation, which results in the
specification of the system that the client understands, and analysis, which results in an analysis model that
the developers can unambiguously interpret. Requirements elicitation is the more challenging of the two
because it requires the collaboration of several groups of participants with different backgrounds. On the one
hand, the client and the users are experts in their domain and have a general idea of what the system should do,
but they often have little experience in software development. On the other hand, the developers have
experience in building systems, but often have little knowledge of the everyday environment of the users.
Scenarios and use cases provide tools for bridging this gap. A scenario describes an example of system use
in terms of a series of interactions between the user and the system. A use case is an abstraction that describes a
class of scenarios. Both scenarios and use cases are written in natural language, a form that is understandable to
the user.
In this chapter, we focus on scenario-based requirements elicitation. Developers elicit requirements by observing
and interviewing users. Developers first represent the user’s current work processes as as-is scenarios, then develop
visionary scenarios describing the functionality to be provided by the future system. The client and users validate the
system description by reviewing the scenarios and by testing small prototypes provided by the developers. As the
definition of the system matures and stabilizes, developers and the client agree on a requirements specification in the
form of functional requirements, nonfunctional requirements, use cases, and scenarios.
Requirements elicitation is about communication among developers, clients, and users to define a new system.
Failure to communicate and understand each others’ domains results in a system that is difficult to use or that simply fails
to support the user’s work. Errors introduced during requirements elicitation are expensive to correct, as they are usually
discovered late in the process, often as late as delivery.
Requirements elicitation focuses on describing the purpose of the system. The client, the developers, and the users
identify a problem area and define a system that addresses the problem. Such a definition is called a requirements
specification and serves as a contract between the client and the developers. The requirements specification is structured
and formalized during analysis (Chapter 5, Analysis) to produce an analysis model (see Figure 3-1). Both requirements
specification and analysis model represent the same information. They differ only in the language and notation they use;
the requirements specification is written in natural language, whereas the analysis model is usually expressed in a formal
or semiformal notation. The requirements specification supports the communication with the client and users. The
analysis model supports the communication among developers. They are both models of the system in the sense that
they attempt to represent accurately the external aspects of the system. Given that both models represent the same aspects
of the system, requirements elicitation and analysis occur concurrently and iteratively.
The FURPS+ model provides additional categories of requirements typically also included under the
general label of nonfunctional requirements:
• Implementation requirements are constraints on the implementation of the system, including the use of
specific tools, programming languages, or hardware platforms.
• Interface requirements are constraints imposed by external systems, including legacy systems and
interchange formats.
• Operations requirements are constraints on the administration and management of the system in the
operational setting.
• Packaging requirements are constraints on the actual delivery of the system (e.g., constraints on the
installation media for setting up the software).
• Legal requirements are concerned with licensing, regulation, and certification issues. An example of a legal
requirement is that software developed for the U.S. federal government must comply with Section 508 of
the Rehabilitation Act of 1973, requiring that government information systems must be accessible to people
with disabilities.
Nonfunctional requirements that fall into the URPS categories are called quality requirements of the
system. Nonfunctional requirements that fall into the implementation, interface, operations, packaging, and
legal categories are called constraints or pseudo requirements. Budget and schedule requirements are
usually not treated as nonfunctional requirements, as they constrain attributes of the projects (see Chapter 14,
Project Management). Figure 3-3 depicts the nonfunctional requirements for SatWatch.
Quality requirements for SatWatch
• Any user who knows how to read a digital watch and understands international time zone abbreviations should be able
to use SatWatch without the user manual. [Usability requirement]
• As the SatWatch has no buttons, no software faults requiring the resetting of the watch should occur. [Reliability
requirement]
• SatWatch should display the correct time zone within 5 minutes of the end of a GPS blackout period. [Performance
• SatWatch should display time correctly in all 24 time zones. [Performance requirement]
• SatWatch should accept upgrades to its onboard via the Webify Watch serial interface. [Supportability requirement]
Constraints for SatWatch
• All related software associated with SatWatch, including the onboard software, will be written using Java, to comply
with current company policy. [Implementation requirement]
• SatWatch complies with the physical, electrical, and software interfaces defined by WebifyWatch API 2.0. [Interface
requirement]
Figure 3-3 Nonfunctional requirements for SatWatch.
3.3 Additional Requirement elicitation concepts
Requirements are continuously validated with the client and the user. Validation is a critical step in the
development process, given that both the client and the developer depend on the requirements specification.
Requirement validation involves checking that the specification is complete, consistent, unambiguous, and
correct.
It is complete if all possible scenarios through the system are described, including exceptional behavior (i.e.,
all aspects of the system are represented in the requirements model). The requirements specification is
consistent if it does not contradict itself. The requirements specification is unambiguous if exactly one
system is defined (i.e., it is not possible to interpret the specification two or more different ways). A
specification is correct if it represents accurately the system that the client needs and that the developers
intend to build (i.e., everything in the requirements model accurately represents an aspect of the system to
the satisfaction of both client and developer). These properties are illustrated in Table 3-1 Above.
The correctness and completeness of a requirements specification are often difficult to establish, especially
before the system exists. Given that the requirements specification serves as a contractual basis between the client
and the developers, the requirements specification must be carefully reviewed by both parties. Additionally,
parts of the system that present a high risk should be prototyped or simulated to demonstrate their feasibility
or to obtain feedback from the user. In the case of SatWatch described above, a mock-up of the watch would
be built using a traditional watch and users surveyed to gather their initial impressions. A user may remark that
she wants the watch to be able to display both American and European date formats.
Three more desirable properties of a requirements specification are that it be realistic, verifiable, and traceable.
The requirements specification is realistic if the system can be implemented within constraints. The
requirements specification is verifiable if, once the system is built, repeatable tests can be designed to
demonstrate that the system fulfills the requirements specification. For example, a mean time to failure of a
hundred years for SatWatch would be difficult to verify (assuming it is realistic in the first place). A
requirements specification is traceable if each requirement can be traced throughout the software development
to its corresponding system functions, and if each system function can be traced back to its corresponding set
of requirements. Traceability includes also the ability to track the dependencies among requirements, system
functions, and the intermediate design artifacts, including system components, classes, methods, and object
attributes. Traceability is critical for developing tests and for evaluating changes. When developing tests,
traceability enables a tester to assess the coverage of a test case, that is, to identify which requirements are
tested and which are not. When evaluating changes, traceability enables the analyst and the developers to
identify all components and system functions that the change would impact.
Figure 3-5 Actors of the FRIEND system. FieldOfficers not only have access to different functionality, they use
different computers to access the system.
The first step of requirements elicitation is the identification of actors. This serves both to define the
boundaries of the system and to find all the perspectives from which the developers need to consider the system.
When the system is deployed into an existing organization (such as a company), most actors usually exist before
the system is developed: they correspond to roles in the organization.
During the initial stages of actor identification, it is hard to distinguish actors from objects. For example, a
• Which user groups perform secondary functions, such as maintenance and administration?
• With what external hardware or software system will the system interact?
In the FRIEND example, these questions lead to a long list of potential actors: fire fighter, police officer,
dispatcher, investigator, mayor, governor, an EPA hazardous material database, system administrator, and so
on. We then need to consolidate this list into a small number of actors, who are different from the point of
view of the usage of the system. For example, a fire fighter and a police officer may share the same interface to
the system, as they are both involved with a single incident in the field. A dispatcher, on the other hand, manages
multiple concurrent incidents and requires access to a larger amount of information. The mayor and the
governor will not likely interact directly with the system, but will use the services of a trained operator instead.
Once the actors are identified, the next step in the requirements elicitation activity is to determine the
functionality that will be accessible to each actor. This information can be extracted using scenarios and
formalized using use cases.
3.4.2 Identifying Scenarios
A scenario is “a narrative description of what people do and experience as they try to make use of computer
systems and applications” [Carroll, 1995]. A scenario is a concrete, focused, informal description of a
single feature of the system from the viewpoint of a single actor. Scenarios cannot (and are not intended to)
replace use cases, as they focus on specific instances and concrete events (as opposed to complete and general
descriptions). However, scenarios enhance requirements elicitation by providing a tool that is understandable
to users and clients.
Figure 3-6 is an example of scenario for the FRIEND system, an information system for incident response. In
this scenario, a police officer reports a fire and a Dispatcher initiates the incident response. Note that this
scenario is concrete, in the sense that it describes a single instance. It does not attempt to describe all
possible situations in which a fire incident is reported. In particular, scenarios cannot contain descriptions
of decisions. To describe the outcome of a decision, two scenarios would be needed, one for the “true” path,
and another one for the “false” path.
• What information does the actor access? Who creates that data? Can it be modified or removed? By whom?
• Which external changes does the actor need to inform the system about? How often? When?
• Which events does the system need to inform the actor about? With what latency?
Developers use existing documents about the application domain to answer these questions. These
documents include user manuals of previous systems, procedures manuals, company standards, user notes
and cheat sheets, user and client interviews. Developers should always write scenarios using application
domain terms, as opposed to their own terms. As developers gain further insight into the application domain
and the possibilities of the available technology, they iteratively and incrementally refine scenarios to include
increasing amounts of detail. Drawing user interface mock-ups often helps to find omissions in the specification
and to build a more concrete picture of the system.
In the FRIEND example, we identify four scenarios that span the type of tasks the system is expected to support:
• warehouseOnFire (Figure 3-6): A fire is detected in a warehouse; two field officers arrive at the scene
and request resources.
• fenderBender: A car accident without casualties occurs on the highway. Police officers document the
incident and manage traffic while the damaged vehicles are towed away.
• catInATree: A cat is stuck in a tree. A fire truck is called to retrieve the cat. Because the incident is low
priority, the fire truck takes time to arrive at the scene. In the meantime, the impatient cat owner climbs
the tree, falls, and breaks a leg, requiring an ambulance to be dispatched.
• earthQuake: An unprecedented earthquake seriously damages buildings and roads, spanning multiple
incidents and triggering the activation of a statewide emergency operations plan. The governor is notified.
Road damage hampers incident response.
The emphasis for developers during actor identification and scenario identification is to understand the
application domain. This results in a shared understanding of the scope of the system and of the user work
processes to be supported. Once developers have identified and described actors and scenarios, they formalize
scenarios into use cases.
3.4.3 Identifying Use Cases
A scenario is an instance of a use case; that is, a use case specifies all possible scenarios for a given piece of
functionality. A use case is initiated by an actor. After its initiation, a use case may interact with other actors,
as well. A use case represents a complete flow of events through the system in the sense that it describes a
series of related interactions that result from its initiation.
Figure 3-7 depicts the use case ReportEmergency of which the scenario warehouseOnFire (see Figure 3-6) is
an instance. The FieldOfficer actor initiates this use case by activating the “Report Emergency” function of
FRIEND. The use case completes when the FieldOfficer actor receives an acknowledgment that an incident
has been created. The steps in the flow of events are indented to denote who initiates the step. Steps 1 and 3 are
initiated by the actor, while steps 2 and 4 are initiated by the system. This use case is general and
encompasses a range of scenarios. For example, the ReportEmergency use case could also apply to the
fenderBender scenario. Use cases can be written at varying levels of detail as in the case of scenarios.
Figure 3-9 An example of a poor use case. Violations of the writing guide are indicated in italics in the right column.
The ReportEmergency use case in Figure 3-7 may be illustrative enough to describe how FRIEND supports
reporting emergencies and to obtain general feedback from the user, but it does not provide sufficient detail for
a requirements specification. Next, we discuss how use cases are refined and detailed.
3.4.4 Refining Use Cases
The use of scenarios and use cases to define the functionality of the system aims at creating
requirements that are validated by the user early in the development. As the design and implementation of the
system starts, the cost of changing the requirements specification and adding new unforeseen functionality
increases. Although requirements change until late in the development, developers and users should strive to
address most requirements issues early. This entails many changes and much validation during requirements
elicitation. Note that many use cases are rewritten several times, others substantially refined, and yet others
completely dropped. To save time, much of the exploration work can be done using scenarios and user
interface mock-ups.
3.4.5 Identifying Relationships among Actors and Use Cases
Even medium-sized systems have many use cases. Relationships among actors and use cases enable the
developers and users to reduce the complexity of the model and increase its understandability. We use
Figure 3-11 Example of communication relationships among actors and use cases in FRIEND (UML use case diagram).
The FieldOfficer initiates the ReportEmergency use case, and the Dispatcher initiates the OpenIncident and
AllocateResources use cases. FieldOfficers cannot directly open an incident or allocate resources on their own.
Figure 3-12 Example of use of extend relationship (UML use case diagram). ConnectionDown extends the
ReportEmergency use case. The ReportEmergency use case becomes shorter and solely focused on emergency reporting.
Many heuristics have been proposed in the literature for identifying objects. Here are a selected few:
FieldOfficer Police or fire officer on duty. A FieldOfficer can be allocated to at most one Incident at a
time. FieldOfficers are identified by badge numbers.
Incident Situation requiring attention from a FieldOfficer. An Incident may be reported in the system
by a FieldOfficer or anybody else external to the system. An Incident is composed of a
description, a response, a status (open, closed, documented), a location, and a number of
FieldOfficers.
There are unfortunately few systematic methods for eliciting nonfunctional requirements. In practice,
analysts use a taxonomy of nonfunctional requirements (e.g., the FURPS+ scheme described previously) to
generate check lists of questions to help the client and the developers focus on the nonfunctional aspects of the
system.