FoRE Chapter03 v8 Engineering
FoRE Chapter03 v8 Engineering
C H A PTER 3
What is Engineering?
In this chapter we explore the context in which requirements engineering takes place.
We start with an analysis of engineering itself, and compare the engineering of software-
intensive systems with other types of engineering. An engineering discipline captures and
codifies the knowledge and practices needed by engineers to design complex devices. It
also seeks to use experience from past projects so that engineering practice can be
continually improved. To understand how an engineering project forms the context for RE,
we need to understand how engineering know-how is applied in a systematic way as a
project unfolds. We will examine two types of model: lifecycle models and process models.
Lifecycle models are ecological descriptions of the stages that an engineering project goes
through, much as we may observe and describe the stages in the lifecycle of a butterfly.
As there are a large variety of species of engineering project, so there are a large variety
of lifecycle models. Lifecycle models are useful for comparing project types, but are too
simplistic for the management tasks of measuring and controlling a particular project, and
for assessing where new techniques and tools may be applied. Detailed process models
address this need, and so we will briefly examine the idea of process modeling and
improvement.
By the end of the chapter you should be able to:
• Define the term engineering, and distinguish engineering from science.
• Distinguish between normal design and radical design.
• Explain why systems engineering is fundamentally about radical design.
• Identify the attributes of software that make software engineering significantly
different from engineering of physical devices.
• Summarize the basic tenets of an engineering code of ethics.
• Evaluate the ethical issues in any given requirements engineering activity.
• Describe the ways in which a manager can control an engineering project.
• Differentiate between types of engineering project based on the existence (or
otherwise) of a customer before and during the project.
• Discuss how the idea of a product family affects the way in which requirements are
identified and prioritized.
• Critique the use of design considerations arising from reuse of existing components
to constrain the requirements.
• Summarize the strengths and weaknesses of the waterfall model with respect to
requirements engineering issues.
• Describe the differences between a phased and an iterative development model.
• Summarize the key stages in the lifecycle of a requirement.
• Contrast process modeling and improvement with agile development and give
examples of the types of project for which each is appropriate.
3.1. Engineering
Requirements Engineering is a collection of activities that only make sense as part of a larger
engineering project. The requirements activities will play a significant role in scoping and guiding
the overall project, but the overall project will also constrain and guide the RE activities. As we saw
©2004 Steve Easterbrook. DRAFT – PLEASE DO NOT CIRCULATE page 2
in the first chapter, there are a huge variety of different kinds of engineering project in which RE
will play a role. Later in this chapter, we will examine this variety, so that we can compare different
projects both in terms of how they are initiated, and how they are organized. Before we get there,
we will examine engineering itself.
to resolve the remaining design decisions. This is not to say that such requirements analysis is easy;
it is however much more tightly constrained than requirements analysis for radical design.
Software engineering, and especially software engineering education, has been criticized for
focusing too much on radical design. Students of software engineering are taught to develop
systems from scratch, solving each problem as though that problem had never been solved before.
This criticism is usually followed by a call for software engineering to become more like other
engineering disciplines, by codifying well-known solutions to routine design problems, so that
software development becomes normal design. Whether you believe such criticism is valid depends
on whether or not you think software engineering (and, as we shall see, systems engineering) should
be like other engineering disciplines.
One of the reasons that we have used the term ‘device’ to describe the things that engineers
design is so that we can contrast ‘devices’ with ‘systems’. By device, we mean an entity whose
properties and design principles are well-known. By system, we mean an assembly of devices
brought together to solve a complex (and perhaps poorly understood) design problem. The
behaviour of individual devices may be well understood, but the system itself is not. In particular,
systems tend to have emergent properties that are not at all obvious from a consideration of the
component devices. If we build enough similar systems, we may come to understand the principles
involved, such that they can be codified into a normal design. To keep the terminology consistent,
we can say that in this case we can eventually start to treat a well-understood system as a device.
Recent advances in software engineering indicate that some parts of software engineering are
moving towards normal design. The characterization of architectural patterns for certain kinds of
system, and the analysis of the design principles needed to apply such patterns, indicate that
software engineering (as a discipline) is beginning to turn some of its systems into devices. For
example, the architecture and design principles of compilers are now sufficiently well understood
that we can consider them to be devices. On the other hand, many of the software-intensive systems
that we described in the last chapter continue to defy such codification into normal design, and
perhaps always will, because of the complex nature of the human activity systems in which they are
enmeshed. Just as we think we might understand how to engineer some business information
system, advances in technology and changing user perceptions will change the problem so much
that we can’t just re-use a standard design from last year’s solution.
With respect to this discussion, systems engineering would appear to be an anomaly as an
engineering discipline, because its concern is with complex systems, rather than devices. By
definition, systems engineering can never be codified into the kinds of normal design that dominate
other engineering disciplines. Indeed, as soon as such codification occurs, the resulting devices will
no longer be the concern of systems engineers – they become the concern of one of the other
engineering disciplines that systems engineers rely on. However, this does not mean that the set of
problems that systems engineers tackle will shrink over time. On the contrary, the trend is to
attempt to exploit software-intensive technologies to solve ever more complex problems, and to
combine software components (‘devices’) into new systems in ever more inventive ways.
It therefore seems likely that systems engineering, and perhaps many areas of software
engineering, will always be very different from other engineering disciplines, because they are
concerned with the radical design of complex systems. Because of this, analysis of requirements for
both systems and software engineering will remain a major challenge. In this book we will address
requirements engineering both for radical design and for normal design, although the former will
occupy us for longer, as it offers a much greater challenge.
©2004 Steve Easterbrook. DRAFT – PLEASE DO NOT CIRCULATE page 5
continuous evolution of both software systems, and the requirements on which they are based, in
chapter 18.
PRODUCT
Software engineers shall ensure that their products and related modifications meet the highest
professional standards possible.
JUDGEMENT
Software engineers shall maintain integrity and independence in their professional judgment.
MANAGEMENT
Software engineering managers and leaders shall subscribe to and promote an ethical approach to the
management of software development and maintenance.
PROFESSION
Software engineers shall advance the integrity and reputation of the profession consistent with the public
interest.
COLLEAGUES
Software engineers shall be fair to and supportive of their colleagues.
SELF
Software engineers shall participate in lifelong learning regarding the practice of their profession and shall
promote an ethical approach to the practice of the profession.
For full version, see http://www.acm.org/serving/se/code.htm
©2004 Steve Easterbrook. DRAFT – PLEASE DO NOT CIRCULATE page 7
There are several key issues to do with professional conduct that are particularly relevant to
requirements engineering:
Competence – A central part of any code of ethics concerns the appropriate use of good
engineering practice, and the competence of engineers to do so. For example, professional
engineers should never misrepresent their level of competence, nor should they knowingly
accept work that demands skills beyond their competence.
Confidentiality – Engineers are bound to respect the confidentiality of employers and clients,
irrespective of whether a formal confidentiality agreement has been signed. Requirements
analysts often need to interview and collect data from a wide variety of stakeholders, and
appropriate steps need to be taken to protect confidentiality of all such stakeholders.
Intellectual property rights – Engineers need to be aware of local laws governing use of
intellectual property, such as patents, and copyright protection. Information collected during
requirements gathering may be protected in various ways.
Data protection – Many countries now have data protection laws that restrict how data held in
computer systems can be used, and create rights for people to access (and correct mistakes in)
data that refers to them. Compliance with such laws is an important requirement for any
information system, and requirements analysts need to be familiar with the appropriate laws and
the scope of the jurisdictions in which they apply.
Although a code of ethics describes a set of basic principles, application to any given situation
can be difficult, as ethical questions often occur where two or more principles come into conflict
with each another. For example, having interviewed a number of employees in a client’s
organization, and agreed to keep their responses confidential, a requirements analyst may discover
that the data collected reveal that employees (individually or collectively) are acting in ways that
management is not aware of. If they are ignoring safety standards or fiddling the accounts, say, the
right course of action might be obvious.
More commonly, there is no obvious course of action. The analyst may be working in a
situation where there is an existing conflict between the interests of different groups (for example,
employees versus management, one customer versus another, etc), or between different engineering
principles. Two examples should illustrate the point:
A requirements analyst is conducting an observational study of new accounting software at a
large consultancy company. Staff have consented for their interaction with the software to be
recorded while they carry out their work. They have been told that it is not them, but the
software that is being evaluated, and that their anonymity will be protected. During the study, it
becomes clear that many of the junior consultants are making a series of systematic data entry
errors, thus causing the company to lose profit. Company policy clearly states that in such
cases, employees should have their salaries docked to cover the shortfall. Should the
requirements analyst report the errors (thus potentially breaking confidentiality promised in the
study), or should she cover up the problem (thus potentially falsifying the data)?
A requirements analyst is analyzing the requirements for the personnel office of a small
manufacturing plant. Her initial specification includes fairly stringent security requirements,
reflecting the sensitivity of the data to be stored, as it includes employee performance
evaluations, medical histories used in insurance claims, and so on. Her client deletes these
requirements from the specification, arguing that it will be too expensive to meet them.
However, without these requirements, it may be relatively easy for employees to figure out how
to access one another’s records, and the system may be easy to hack into from outside the
company. She tries to explain these risks to the managers, but the head of personnel and the
director of computing regard the security requirements as “gold plating”, and hence
unnecessary. What should she do?
©2004 Steve Easterbrook. DRAFT – PLEASE DO NOT CIRCULATE page 8
Defects – how many errors are we making? What proportion of those errors are we detecting?
How does this compare to our quality goals?
It shouldn’t be hard to see that each of these four measures connects directly with a
corresponding project variable, while focusing on things that are relatively easy to measure. Too
often, projects are managed on the basis of only two of these metrics: Effort and Time. Lawrence
Putnam likens this to flying an aircraft using only a fuel gauge and a stopwatch. Without data on the
size and quality of the system being built, a manager has no sound basis for making adjustments.
Another common mistake is to confuse one of these measures with another. For example, when
asked how big the system they are developing is, some managers answer in terms of ‘man-months’
(i.e. effort) instead of some measure of functionality. This is because we do not yet have good
metrics for the size of complex software-intensive systems. This is an important question for
requirements engineering, because a statement of the requirements is often the only benchmark
available for assessing the size of a proposed system.
At the beginning of a project, the project manager needs good estimates of effort, time, size
and risk, in order to plan good use of project resources. Good estimates of risk are especially
important for assessing how much flexibility there is when adjusting the plan. As the project
proceeds, measures of progress can be compared with the estimates on a regular basis, to find out
whether the project is proceeding according to the plan. If they are diverging, either the plan or the
project will need adjusting.
Good estimation depends on two things: accurate data from previous projects, and a clear
understanding of the requirements. Initial estimates of size of the system to be built can be obtained
from a consideration of the number of requirements, and the anticipated difficulty in meeting them.
Time and effort can then be derived from size using data from similar projects in the past. Risk can
be assessed by considering the importance attached to each requirement and the consequences of
not meeting it.
The relationship between requirements engineering and good project management should now
be clear. The requirements act as the basis for estimation and planning; without them a project may
simply be unmanageable.
already available); in others the product must create its own market. For market-driven projects,
a marketing team may act as a substitute for a real customer, as they investigate the market
opportunities, and determine which features will improve marketability.
Community-based – some projects are targeted neither at specific customers, nor at particular
markets. Rather, such projects are intended as a general benefit to a broad community, whether
through creation of free services or infrastructure, or the creation of new knowledge. Many
open source and free software projects fall into this category – they are funded through the
donation of the developers’ time, and provide a benefit to a large (but ill-defined) community.
Systems created for scientific exploration also fall into this category – for example spacecraft
for exploring the solar system, or systems for collecting data about climate change. Such
projects may be funded by governments or research agencies, but these act as enablers rather
than customers if they do not have a direct stake in shaping the requirements.
Hybrid – various combinations of customer-specific, market-based and community-based
projects are possible. For example, a system might be developed for a specific customer, but
with an intention to market the system more widely once it is developed. Or a government
agency may act as a customer for a community-based project for which it is also the major
funder. In these cases, there may be a tension between the competing goals – making a system
fit well to a specific customer’s needs may make it too specific for the more general
marketplace, or make it less useful to a target community. Relative priorities of the competing
goals need to be understood when determining the importance of different requirements.
Problem-driven, customer-specific projects are perhaps the best understood, and were the
target of much of the research in requirements engineering in the 1970’s and 80’s. Here, the key
challenge is how to analyze the problem to discover the customer’s real needs, and how to negotiate
a suitable scope so that a satisfactory system can be delivered within the agreed constraints.
Expectation management is also important – the requirements processes help to set the customer’s
expectations for what will be delivered, and hence have an impact on customer satisfaction. The
challenges involved in balancing these concerns become particularly difficult as projects increase in
scale and complexity.
Through the 1990’s, as software technology became cheaper and more widely available, other
types of project increased in prominence, especially market-based, opportunity-driven, and
community-based projects. In such projects, the absence of a specific customer with a well-defined
problem adds significant new challenges for the requirements analyst. Such projects tend to be
smaller in scope than customer-specific projects, but the problems are complex because they
involve more stakeholders, with greater diversity, and greater potential for conflicting needs.
requirements will be derived almost entirely from an analysis of the systems that are to be
integrated.
If the project is intended to replace a system that is now considered obsolete, then analysis of
the existing system is still important. Such analysis can help to avoid the weaknesses of the current
system, and can identify opportunities for improvements. Although a project may have been
initiated with a clear idea of what was wrong with the old system, the requirements analyst must
still investigate the old system. Different users may disagree about what is good or bad about the
old system, and there may be features of the old system that nobody realizes are important until they
are removed.
Finally, some projects are intended to introduce software-intensive technology where none has
been used before. In such cases it may seem like there is no existing system to study. However,
using the human-centered perspective we described in chapter 1, it should be clear that there is still
an existing human activity system to study, as people carry out some existing functions manually,
or develop coping strategies to deal with the limitations of an entirely manual operation. A
systematic analysis of these activities may reveal places where automation would be a mistake, and
other places where a software system could make a dramatic improvement.
1
From Jackson’s lexicon of practice, principles and prejudices book.
©2004 Steve Easterbrook. DRAFT – PLEASE DO NOT CIRCULATE page 13
requirements
design
code
test
integrate
maintain
Level of abstraction
system system
requirements integration
software acceptance
requirements test
preliminary software
design integration
“analyse “test
and detailed component and
design test integrate”
design”
time
Figure 2: The V model.
phases, this looks like a backwards step on the waterfall model. In contrast, on the V model, vertical
jumps make complete sense – for example during the requirements phase, it might be necessary to
jump down to the detailed design phase to conduct a feasibility study on a particular technology;
likewise, during detailed design, it might be necessary to jump up to the requirements level to revise
part of the requirements. Such steps are moves only in the vertical dimension – they need not be
seen as impeding the progress of the project.
Specify full
design code test integrate
requirements
Figure 3: The prototyping cycle
©2004 Steve Easterbrook. DRAFT – PLEASE DO NOT CIRCULATE page 16
Release 1
design code test integrate O&M
release 2
Requirements
requirements engineering in more detail in chapter 16. For now, we will just note two problems
often associated with prototyping:
Customers (and even developers!) may fail to understand the difference between a prototype
and a production quality system. Unlike prototypes for physical systems (a prototype car for
example), these differences are invisible. The result is that a prototype that was intended as a
rough mock up of a particular conception of the system often evolves into the delivered system,
without proper attention to good design. The lack of principled design results in a system that is
hard to understand, hard to maintain, and inflexible in the face of changing requirements.
A prototype typically only covers some aspects of the requirements, most typically those related
to how the user interface will work. This means that undue attention on the prototyping process
can mean other requirements are ignored or forgotten.
In chapter 16 we examine some of the ways in which prototyping can be used as part of a
requirements process.
version 1
reqts design code test integrate O&M
lessons learnt
version 2
reqts design code test integrate O&M
lessons learnt
version 3
reqts design code test integrate
Figure 5: Evolutionary development. Each version incorporates lessons learned from earlier
versions.
©2004 Steve Easterbrook. DRAFT – PLEASE DO NOT CIRCULATE page 17
4
- s3
es
str
Con
3
tiv
es
ri
ts ana sk
tiv
na
ain
2
lys
er
na
es
ive -
is
a t ern
tiv
alt
er na ints risk 2
s2
r
alt
t
e analy
alt stra
Al
sis
n
co
1
budget4 budget3 budget2 budget1 prototype1 prototype2 prototype3 prototype4
requ concept of
me e
s
d
ire ar
ire
nt
lifec ments,
aile
ign
operation
w
re soft
ycle
sig r e
det
des
dev plan
w a
qu
elo
n
ft
pm
ent ated
so
int
de
egr pla
n valid ents
ati irem
de
on requ
co
and
tes ed,
tp dat it
lan vali esig
n un t
i f i ed d te
s Develop
ver em
Plan syst and
impleme accept an ce t e st
ntation
plan test
test
but still suffers from the assumption that all the requirements can be known at the beginning of the
project, and will not change subsequently.
Figure 5 shows an evolutionary development lifecycle. Here, instead of attempting to identify
the requirements for all the releases initially, just enough requirements analysis is performed to
permit development of a first version of the system. Each subsequent version then begins with
another requirements phase, in which experience with earlier versions and changing needs can be
taken into account. The difficulty with this model is that it is harder to plan the versions, and hence
correspondingly harder to decide how to scope the requirements for each version. Also, if the
development phases for each phase overlap, the lessons from the one version may be learnt too late
to be incorporated into the next version.
Collect
User stories
Planning
game
Release
Write test
code cases
integrate
test
There are several variants of the spiral model available in the literature. The version shown in
figure 6 still includes some remnants of the waterfall model, because each iteration is associated
with a major phase in the original waterfall model. The difference, of course, is that now each
waterfall phase is embedded in an explicit risk reduction process, allowing re-planning and re-
focusing between phases. However, the explicit requirements phase shown in the second loop of the
spiral now represents only a small fragment of requirements activities, concerned with writing and
validating specifications. Many aspects of the planning, evaluation, risk analysis and prototyping on
each iteration are also requirements engineering activities.
Specification
complete Agreement
fair common
view
personal
view
vague
Representation
informal semi-formal formal
Figure 8: Pohl’s 3 dimensions of requirements engineering
implementation. Test cases are written before the program code, and programming itself is
conducted with a daily integration and test schedule. Programming is carried out in pairs, with the
assumption that paired programmers produce higher quality programs than single programmers.
In agile development, the requirements engineering activities are not limited to a particular
phase, but are carried out continuously. Mistakes are likely, but each mistake is treated as an
opportunity for learning. An on-site customer representative provides continuous feedback, to guide
this learning process. Above all, agile development relies on people rather than documents to
convey an understanding of the requirements. Clearly, this type of project is appropriate for some
types of system (e.g. small projects, where there is a great deal of uncertainly about the
requirements), and is inappropriate for others (e.g. large safety-critical systems).
Prior Knowledge
(e.g. customer feedback)
Observe
(what is wrong with
the current system?)
Model
Intervene
(describe/explain the
(replace the old system)
observed problems)
Design
(invent a better system)
identify and scope the problem, decompose it into manageable pieces, and manage the changes as
the problem (and our understanding of it) evolves.
So, even if we cannot describe a single process model for requirements engineering, can we
still identify lifecycle models for the requirements themselves (as opposed to the project in which
they are embedded)? One of the simplest characterizations of a requirements lifecycle is the
distinction between early and late requirements, first introduced by Mylopoulos and colleagues.
Early requirements are concerned with understanding the problem context: modelling the
organization in which the problem exists, and the goals of and dependencies between the various
stakeholders. Late requirements are concerned with pinning down the desired functions of the
system-to-be-built.
Another view of the requirements lifecycle is the model described by Pohl, as shown in figure
8. Pohl identifies three dimensions over which a requirement ranges during its life:
Specification – initially each requirement is likely to be vague, but the eventual goal is to attain
a complete specification of it.
Agreement – initially each requirement is likely to be just a personal view of a single
stakeholder, but eventually the aim is to reach agreement among all stakeholders
Formality – initially each requirement is likely to be stated informally, perhaps in sketches and
words, but the eventual goal is a precise formal statement of the requirement.
The trajectory of each requirement along these three dimensions will vary; figure 8 shows one
possible path. The destination in the upper right hand corner is just an ideal. It might not be reached
by all requirements, because attaining complete specification, agreement and formality may be too
expensive.
By contrast, the inquiry cycle model shown in figure 9 equates the requirements with a theory
about the nature of the problem to be solved. This model is based on (an idealized version of)
scientific investigation: scientists develop theories to explain observed events, and then design and
conduct experiments to test their theories. In this model, requirements engineering covers the first
three boxes. Using both prior knowledge and observation of the current system, the requirements
analyst builds models that represent the best current theory of what the problem is that needs
solving. Based on this theory, a software-intensive system can be designed and installed, to test the
©2004 Steve Easterbrook. DRAFT – PLEASE DO NOT CIRCULATE page 21
theory. Observations of this new system in use then become the first step in the next iteration of the
cycle: the requirements models are adjusted to capture what has been learnt about the problem, and
the next version of the system can be designed and installed.
The challenge then, was to get organizations to document their development processes carefully,
use statistical measurement techniques to identify places in these processes where the most design
defects occur, and to use this information to re-design the process itself. The payoff is potentially
large, because instead of just fixing defects in individual products, it may be possible to prevent the
defect for all subsequent products, by redesigning the development step that causes the defect in the
first place.
These ideas form the centerpiece of the Capability Maturity Model (CMM), developed by
Watts Humphrey and colleagues at the Software Engineering Institute in Pittsburgh. The CMM is
an assessment tool, used to determine how mature a particular company’s software development
processes are, by assessing how well that company measures and improves them on a routine basis.
The CMM places software development companies at one of five levels:
Initial – in which development is entirely ad hoc;
Repeatable – in which the same development process is used in different projects, but such
repetition is dependent on individuals;
Defined – in which the development process is documented, and institutionalized;
Managed – in which measurement techniques are used to quantify the process so that
improvements can be made; and
Optimizing – in which improvements are continually fed back into the process.
The CMM has led to significant quality improvements in some parts of the software industry,
particularly those involved with large, safety-critical systems. Versions of the CMM have also been
adapted for use in systems engineering, and a number of other engineering disciplines. The same
ideas are also captured in the ISO9000 series of international standards, which are applicable across
a wide range of industries.
One of the key ideas underlying the CMM is that each organization must understand its own
processes, and a process that works for one organization may not work for another. Hence, neither
the CMM nor the ISO9000 standards prescribe any particular development process. Instead, they
insist that each organization should be aware of what process it is using, and should work to
continually improve it. Most importantly, assessment and comparison between organizations is with
respect to their relative maturity in understanding and managing their processes, and does not
involve any comparison of their actual process models. In fact, comparison of the process models
themselves would be counter-productive, as it may work against the goal of these models being an
honest appraisal of actual development processes.
Finally, we should note that although there is empirical evidence that initiatives such as the
CMM have had a positive impact on some of the organizations that have applied them, there has
also been a backlash within some parts of the software industry, in response to the demand for a
process-heavy approach. The value of documenting the development process, and then managing to
this defined process is only of use if the various projects conducted by a company are sufficiently
similar to one another for the same process to apply repeatedly. For some companies, this is clearly
not true. In particular, small companies involved in very innovative projects may find that very few
aspects of their development process carry over from one project to the next. For example, Agile
development methods projects do not document development processes, and do not use process
models as a way of managing the project. Instead, they rely on highly skilled individuals, and good
quality direct communication between the customer and the development team to keep the project
on track. However, such methods only really work well for small dynamic project teams.
system, and include information about scheduling and resources for each step, along with
dependencies between steps. They are intended as a tool for managing projects, and as a structure
for statistical analysis of defects, used for process improvement. Lifecycle models, on the other
hand, are very generalized descriptions of the phases that a project goes through, and are intended
for understanding and comparing different species of project. The analogy with the lifecycle models
used in biology is helpful – a description of the lifecycle of a butterfly is useful for getting the
overall understanding, and for comparison with lifecycles of other types of insect. However, it
doesn’t tell you how exactly a butterfly manages to mutate from one stage to the next, nor does it
contain any data on how various factors (temperature, food supply, predator density, etc) will
impact the development stages of a particular butterfly.
Lifecycle models are so abstract that they are almost useless for management purposes.
However, they are a useful pedagogical tool – in this book, we use them to help us understand the
role of requirements engineering in different types of project.
Project Initiation: An interesting paper exploring how projects get started is Bergman and
Mark’s paper on project selection at NASA, “In Situ Requirements Analysis: A Deeper
Examination of the Relationship between Requirements Determination and Project Selection”,
which appeared in RE’03.
Lifecycle models: Any good textbook on Software Engineering has a summary of lifecycle
models. For a discussion of the difference between lifecyle models and process models, see Walt
Scacchi’s entry “Process Models in Software Engineering” in the Encyclopedia of Software
Engineering (2nd edition), 2001.
Agile Models: Recent books on Agile Methods and Extreme Programming are too numerous
to mention. Kent Beck’s “Extreme Programming Explained” is probably as good a place as any to
start. For thoughts on Requirements Engineering and Agile Methods, read Ben Kovitz’s paper
“Hidden skills that support phased and agile requirements engineering” in the Requirements
Engineering Journal, volume 8, 2003.
Requirements Lifecycle: The distinction between Early and Late Requirements was first
introduced by John Mylopoulos – see for example the paper “Towards Requirements-Driven
Software Development Methodology: The Tropos Project," by Castro, Kolp and Mylopoulos, in
Information Systems, June 2002, The Klaus Pohl’s three dimension are described in his paper “The
three dimensions of Requirements Engineering: a framework and its applications” in Information
Systems vol 19, 1994. The inquiry cycle was first introduced by Colin Potts and colleagues in their
paper “Inquiry-based Requirements Analysis”, IEEE Software, November 1994.
Capability Maturity Model: Information about the capability maturity model can be found on
the SEI website at http://www.sei.cmu.edu/cmm/ An empirical study of the benefits of the CMM
was conducted by Jim Herbsleb et al in 1994, and is available as report CMU/SEI-94-SR-013 on the
SEI website.
3.7. Exercises
TBD