Developing Functional
Requirements
for ITS Projects

US Department of Transportation
By Mitretek Systems, Inc.
This document is one of a series of
monographs that introduce systems engineering topics to transportation and
transit engineers involved in Intelligent Transportation Systems (ITS)
projects. Other monographs in this
series include:
·
Building Quality Intelligent
Transportation Systems Through Systems Engineering
·
Understanding Software
Development: A Primer for ITS Public Sector Managers
·
A Guide to Configuration
Management for Intelligent Transportation Systems
This monograph focuses on the development of
functional requirements for ITS projects and is intended for the following
audience:
·
ITS
project managers
·
ITS
project team members
·
ITS
project Contractors and staff
·
Transportation
system planners
·
Anyone
else interested in writing quality functional requirements to support project
implementation
The monograph is primarily geared to ITS
project managers and system engineers on ITS projects, who are the front-line
people that convert high-level goals and plans into implemented ITS systems.
What Are Functional Requirements?
Functional requirements are statements of the
capabilities that a system must have (“functions”), geared to addressing the business
needs that a system must satisfy. Business
needs are mission-oriented objectives of the organization for which the
system is built. For example, a business
need of a Traffic Management Center (TMC) could be to manage incidents
(e.g., accidents, hazardous materials spills on the roadway) that occur within
the TMC’s area of operation. Good
functional requirements are written without specifying implementation
details. The organization for which
the system is being built should describe what must be done. It’s up to the implementer of the system to
decide how that function should be implemented, given the constraints of
time and money that have been established.
Well-written functional requirements should
have the following characteristics:
Good functional requirements
are essential to good systems. Studies
done to assess why software projects have failed or have not been completed
have shown that the cost to fix an error that occurs during the project’s
requirements phases goes up dramatically in each later stage. Figure ES-1 below illustrates this study’s
findings.
Figure
ES-1
Relative
Cost to Fix an Error, by Project Phases

What can be a small cost during the
Requirements phase of a project is up to 1000 times greater once the system
goes into operation. Even during the
Acceptance Testing phase the cost can be 30 to 70 times higher. So potential savings in project cost is one
reason to get requirements right.
Functional Requirements and
Systems Engineering
Requirements analysis is a phase within all system development
life cycle models. The phase may not
have that explicit name in all models, but it’s recognized as a key part of the
system development process. The systems
engineering approach starts with high-level requirements, usually derived from
the Concept of Operations for the system and then continually refines and
expands on these requirements descriptions until a sound set of system
requirements are developed. The process
of developing functional requirements is illustrated in Figure ES-2.
Requirements review is a critical component
in the process and the last step prior to iterating. This step means that you, as the ITS Project Manager, bring your
stakeholders together, along with any contractors that you may have brought in
to help you develop your system, and go through each requirement – in detail –
to ensure that everyone has the same understanding of what the requirement
means and what impact implementing the requirement will have on the overall
system.
It’s important to ensure that you, your
stakeholders, and your contractor(s) agree on what the requirements are and
what they mean. Implementing a system
and then having the users tell you that you misinterpreted their needs means
that you’ve wasted valuable time and money.
You’ll either then go over budget to correct your mistakes or you’ll
have a “white elephant” system that won’t provide much utility.
Functional Requirements, the National ITS Architecture, and Regional
ITS Architectures
The National ITS Architecture was developed
to address user needs that were ultimately articulated as User Service
Requirements. User Service Requirements
are high-level functional requirements and the various elements of the National
ITS Architecture deal with ways of satisfying them. Since User Service Requirements are included in the distribution
media for the National ITS Architecture material, you can compare them to the
functional requirements your own users provide, to see if your users may have
overlooked any important requirements.
However, the National ITS Architecture may address requirements that
your region doesn’t have. For example,
a rural area may not have the same requirements for transit information as does
an urban area.
The ruleES-1
enacted by the U.S. Department of Transportation (DOT) on conformity with the
National ITS Architecture requires regions to develop a regional ITS
architecture, i.e., a local implementation of the National ITS Architecture,
within four years after the region’s first ITS project advances to final design.
All subsequent ITS projects in the
region must adhere to that regional ITS architecture. This makes the regional ITS architecture, once it’s developed,
the driving force for all ITS projects in the region. Regional users of ITS systems must define their high-level
functional requirements as part of the process of developing a well-defined
regional ITS architecture.
Using Functional Requirements on an ITS Project
Functional requirements serve as the basis
for the system to be built. In this
capacity, they help you:
·
Determine
whether to build or buy a system component.
·
Interface
subsystems or components.
·
Conduct
performance testing of subsystems and systems.
·
Conduct
acceptance testing of the final system.
You can also use functional requirements to
define enhancements to existing systems and to develop statements of work for
contractors. When you compare the
functional requirements for an enhanced version of a system to its existing
capability, it helps you develop a migration plan or route to follow in
implementing the desired enhancements.
The migration plan also points out which parts of the system you can
leave untouched, because there will be no changes to functionality in them. Writing a Statement of Work (SOW) for a
contractor’s effort is easier when you can spell out the functionality that
you’ll want the contractor to implement.
(Don’t forget, however, that you still need to conduct a requirements
walkthrough, even if you have an SOW with written functional requirements.)
Requirements Tracing
One of the key items that you’ll create as
part of your requirements package is a requirements traceability matrix. A requirements traceability matrix maps
requirements that you’ve written against the components and subsystems in which
you expect to satisfy them. It is
helpful in developing tests and test plans, since you know which requirements
you need to test when a part of the system has been developed. But, in addition, the requirements
traceability matrix also helps you make sure that you don’t overlook any
requirements. If you can’t trace,
through this tool, a requirement to a system component, it clearly hasn’t been
addressed.
Managing Requirements
After you have a set of requirements that you
and your stakeholders have agreed upon, one of your next major tasks is keeping
those requirements under control. Good
systems development practice calls for systems to be built in small increments
that you can control and manage effectively.
This means that you won’t implement all of the functionality of a system
all at once, unless the system is very simple and small.
This fact, and other external factors, leads
to changes in system requirements. One
goal of an ITS project manager should be to keep the requirements change
process under control, not to avoid making changes. Change is a natural and healthy aspect of system
development. Uncontrolled
change, however, is disastrous. You
want to control change, through the process known as “configuration
management.”
Configuration management is a process that applies to more than just
requirements management. The process is
described in more detail in a companion monograph in this series, A Guide to Configuration Management for
Intelligent Transportation Systems. The key point for this monograph, however,
is that configuration management provides a process that allows you to make
changes to your requirements after you’ve considered and evaluated the impact
of those changes on the overall project, its costs, and the schedule for
completing it. You make changes only
after you know the expected effect of those changes.
Functional requirements are an important part
of the design of any information system, not just ITS systems. An advantage that you have as an ITS project
manager is the availability of the National ITS Architecture to help you
develop functional requirements.
Software tools exist that you can use to develop and maintain functional
requirements. None of these tools deal
solely with functional requirements; usually, they are part of an overall
Computer Assisted Software Engineering (CASE) package.
We hope that this monograph also serves as a
useful tool in determining how to develop and use functional requirements for
ITS projects.
This
document is one of a series of monographs intended to introduce topics that can
help transportation and transit engineers involved in Intelligent
Transportation Systems (ITS) projects.
Other monographs in this series include:
·
Building Quality Intelligent
Transportation Systems Through Systems Engineering
·
Understanding Software
Development: A Primer for ITS Public Sector Managers
·
A Guide to Configuration
Management for Intelligent Transportation Systems
This
document focuses on the development of functional requirements as a basis for
ITS projects. We’ll examine the
National ITS Architecture, which contains representative functional
requirements for ITS systems, as a tool for identifying the types of
requirements that we must establish to guide ITS project development and system
implementation. Then we’ll discuss how
to go about developing good functional requirements and what they are.
The
audience for this document includes the following:
·
ITS
project managers
·
ITS
project team members
·
ITS
project Contractors and staff
·
Transportation
system planners
·
Anyone
else interested in writing quality functional requirements to support project
implementation
We’ve
primarily geared it, however, to ITS project managers and system engineers on
ITS projects, who must convert high-level goals and plans into requirements
documents that become the basis for ITS system implementation. The combination of good system engineering
practices and good functional requirements help project managers succeed in
their efforts. Of course, there is no
“magic bullet” that guarantees success in any project; external factors can
always cause a project to fail. And
there is no single formula that, when applied mechanically, guarantees you can
produce good functional requirements; in this area, as in many others,
experience and judgment are very important.
However, there are general guidelines we can give you to use. We’ll also provide some examples you might
use to your benefit. Experience shows
that failure to write good functional requirements often leads to serious
project problems, possibly even to project failure. Having good functional requirements, while it may not guarantee
success, gives you a better chance to succeed.
Let’s
begin by looking at what functional requirements are all about.
When
working on an ITS project, you should have a clear idea of what your project is
to accomplish, and what the system you’re going to implement should do when
completed. From the people who want the
system, you’re going to get some “high-level” goals and objectives and some
“requirements.” These goals,
objectives, and requirements specify what
is to be accomplished, but they may not give you a sound basis for planning and
executing your project. What you must
do is translate the initial set of information that you receive into functional requirements, which are
statements of the things the system you’re implementing must do, in enough
detail to guide you in designing a system that meets those requirements.
Our primary focus in this
document is on functional requirements, and we’ll define what we mean by
functional requirements a few pages from now. But functional
requirements aren’t the only type of system requirements that you’ll need. In addition, you usually find three other
types of system requirements defined (and there may be more types defined as
well). The three key types of system
requirements usually developed, in addition to functional requirements, are:
· Performance requirements
· Interface requirements
· Human-Machine interface requirements
Before we discuss functional
requirements, let’s take a quick look at these other types of system requirements and explain them.
Performance Requirements. This type of system requirement states the performance parameters of some
capability within the system. Our
example comes from the State of Maryland’s Chesapeake Highways Advisory Routing
Traffic (CHART) software requirements document. In it, the following requirement for the Device Control Subsystem
appears:
The
Maryland Transportation Authority’s (MdTA’s) Device Control Subsystem must be …
designed to allow for expansion of up to 10,000 devices and 100 protocols.
The device control subsystem
has a requirement that it be capable of handling up to 10,000 devices and 100
protocols. This requirement sets a
performance limit (it does not need to handle 10,001 devices nor need it handle
101 protocols) and a performance goal (if the subsystem cannot handle 9,999 or
99 protocols, it fails to meet this performance requirement). Is the requirement testable, i.e., can you
determine whether it’s been met? With a
little work, probably. You may need to
simulate devices to get the test device count up to 10,000 -- depending on how
many devices the current system has. As
far as the 100 protocols are concerned, you may need to define this element
more precisely (what constitutes a “different” protocol such that it would be
included in the count), but you should still be able to come up with a test
suite.
Interface Requirements. We’re distinguishing here between
“interfaces” with users (Human-Machine Interface, which we’ll cover next) and
“interfaces” with other systems. Most systems interact with other systems,
either already deployed or being deployed.
In general, you must work out the interface between any two systems
carefully and specify it (or them, if there are several interfaces between two
systems) in considerable detail[1]. Sometimes, these requirements
go beyond functionality and border on detailed design, including language that
mentions specific manufacturer’s parts.
You may have requirements both for external interfaces, i.e., other
systems with which your system must interact, and for internal interfaces,
i.e., subsystems within your main system interacting with each other. An example of an external interface is a
toll collection system that connects to systems at financial institutions to
initiate transfer of money. An internal
interface might be the interface between high-speed video cameras and a real‑time
video storage device. Interface
requirements are sometimes hard to work out, particularly with external
systems. You frequently must establish
a working relationship with the “owner” of the external system to work out all
of the detail of making your system interface with the other.
Human-Machine Interface Requirements. The way that a user interacts
with a system strongly influences what the user thinks about the system
capabilities. A system could be a high‑quality,
well performing system, but if the user interface is poor, that’s not the way
it’s perceived. Getting these
requirements right might not be the most important thing you do on a project,
but it ranks up there among the top five.
It’s not just important from a user satisfaction point of view; user
interfaces can affect how well the system is operated. There are many horror stories about poorly
designed human-machine interfaces causing system failures. Sometimes, the failures can lead to fatalities. The airplane crash that killed singer John
Denver was attributed to a poor interface design that required the pilot
(Denver) to turn around while seated to reach a key control. However, the cockpit design caused him to
press on the rudder pedals, sending the plane into a fatal spin. Another, more recent example of poor human
interface design is the “butterfly” ballot used in Florida for the 2000
Presidential election. Controversy over
how voters interpreted those ballots led to weeks of uncertainty regarding the
final outcome of that election. A third
example of a poor human interface was the design of the control room indicators
at the Three Mile Island nuclear facility.
When the reactor started to overheat, the operators didn’t notice the
malfunction until far along in the cycle, when it was almost too late to
prevent a full meltdown. While we don’t
expect similar extreme results from poor human-machine interface design on an
ITS project, we do recommend that you place a high priority on getting these
right.
So, after that brief
digression, let’s define what we mean by a functional requirement.
Martin[2]
defines functional requirements as follows:
(1)
the necessary task, action, or activity that must be accomplished, or (2) what
the system or one of its components must do
A
key aspect of the functional requirement is that it addresses what a
system must do, but does not address how the system should accomplish
the what. In other words, a
functional requirement should not go into the details of how to implement the
function. This is key to writing good
functional requirements.
There’s
a second aspect of functional requirements that is important. Functional requirements are geared to the business needs a system must satisfy,
i.e., they must address those activities that constitute the mission or
business objectives of the organization that wants the system; they’re not
there to provide “bells and whistles.”
We’ll expand on this point later.
Some
authors include design constraints in
the list of functional requirements. Design constraints are requirements
imposed by factors outside of your control.
For example, if you have a requirement to install new hardware in an
existing vehicle as part of the implementation of an ITS system, one design constraint that you’ll face is
the capability of the power source available to run the hardware along with
other vehicle hardware. If you place
too high a power drain on the vehicle’s power supply with your new hardware,
you risk failure in other important vehicle systems. As long as you state the design
constraint as “what” needs to be done and not “how” it needs to be done, it
fits in with the definition of functional
requirement.
The requirements for a system drive its design and development. Functional requirements are major drivers
because they define what the system must do, but obviously they’re not
the only drivers. One way of seeing the
impact of requirements on the final system is to look at how all of the
front-end activities in the system development effort affect the later stages
in the system’s evolution. We can see
this impact easily by using a model or depiction of the systems engineering process
known as the “V” (or “VEE”) model.
The “V” model, illustrated in Figure 1, shows the early stages in
building a system as steps along the left leg of the “V,” the decomposition leg
of the process. The steps on the
decomposition leg break the system down into its pieces, proceeding from
development of a Concept of Operations[3] for the system, through the
definition and refinement of the system’s requirements (going from high-level
to detailed requirements), to the system design stage, which also goes from
high-level to detailed design. On the
right-hand leg of the “V,” we have the re-composition steps, where we take and
test all of the parts of the system we’ve built and also put them together. As we proceed up the right-hand leg, we
combine the system’s building blocks into larger and larger pieces, until we
have finally assembled and installed the complete system.
The “V” model also helps us understand the relationships between the
work done on each side of the “V,” as follows:

Conception (Concept of
Operations stage) vs. Operations and Maintenance. During the Conception stage of the system
life cycle, you create a Concept of Operations for the system. The Concept of Operations should describe
how the system will work once it’s built.
Therefore, it relates directly to the Operation and Maintenance stage,
during which the system’s Concept of Operations is realized.