GETTING THE REQUIREMENTS RIGHT
A PROFESSIONAL APPROACH
The following document is a copy of a paper presented by Dr Brian Hunt, FBCS, M Inst P, MACM, at the 1997 IEEE conference on Software Technology and Engineering Practice (STEP '97,) held at the Holiday Inn, Kings Cross, London, UK on 14-18 July 1997.
Engineers and system analysts are continually
inundated with demands to adopt this design methodology or that implementation
support tool. There is no shortage of options. However, unless it is very clear
what it is that is supposed to be designed and/or implemented, such techniques
and tools are likely to be wastefully employed producing the wrong thing. It is
incumbent upon all professional engineers, before committing other people's
money and resources, to be able to confirm that they are setting to work with a
good requirement specification.
What is a 'good' requirements specification and how
may we ensure that we have one?
This paper describes a radically new approach to producing re-usable requirements specifications that achieves levels of clarity and precision hitherto unattainable. Above all the approach provides the ability to demonstrate clearly to a client the actual content of a specification as opposed to its supposed content - in an information sense. Such ability is vital if the professional engineer is to be able to carry his client with him or if the client is to be convinced when changes are required - before any serious commitment to consequential or candidate design is made.
1 INTRODUCTION
All design and engineering activity should proceed
from a clear, quality assessed, statement of requirements. When embarking upon
the production of a system whose requirements need to be formally stated,
either as a basis for inviting tenders, responding to tenders or as the
starting point for design or implementation, one cannot overestimate the importance
of producing a good requirements specification document or the importance of
ensuring its completeness, consistency and correctness or of the impact of all
three attributes on long term costs and productivity.
Errors in requirements are pervasive, dangerous and
costly [Faulk,1995]. It is beginning to be appreciated that the majority of
errors are introduced during the requirements definition phase of any project
[GAO, 1992]. There is also growing evidence that errors in requirements can be
the cause of serious accidents. A 1992 study concluded that the major source of
software related errors in NASA's Voyager and Galileo spacecraft were errors in
functional and interface requirements [Lutz, 1993]. If requirements errors are
not corrected until the system has been implemented the cost can be extremely
high. It has been estimated [Boehm, 1981 and Fairley, 1985] that correcting
requirements errors during implementation can cost up to 200 times as much as
if they were corrected during requirements definition.
Given the high incidence of requirements errors, the
seriousness of accidents that may be caused and the high cost of late
corrections, techniques for improving the quality of requirements documents,
and for early detection of requirements errors, are crucial.
This paper describes some of the fundamental
concepts that underlie the Generic-Model Approach to Requirements Capture (G-MARC).
These concepts were developed and integrated into a requirements engineering methodology
[Hunt,1992] by a team of professional software and system engineers for use by
the same kind of people. This methodology is now commercially available and is
supported by a sophisticated software package whose use ensures adherence to
the methodology and without which the associated manual workload would be
impossibly complex.
The importance of the investment involved in the production of a Requirements Specification is almost invariably underestimated - to the ultimate detriment (in both financial and performance terms) of the system concerned. With modern, highly complex systems the need for properly structured, carefully controlled specifications, which are internally correct, consistent and complete and which adequately satisfy the requirement, is vital. Further there is a need to ensure that such specifications can be readily modified and re-used without incurring both too much consequential effort and delay and without introducing spiralling increases in cost and complexity. In order to approach this virtual Nirvana, automated support is essential. This is the case primarily because of the enormous decrease in routine manual calculation and information sorting that is thereby achieved. The human participants in the process are correspondingly relieved of the error-prone, tedious and, more often than not, fruitless series of trial solutions that are nearly always necessary in order to generate an adequate context for balanced judgements to be made during the development of a system specification.
2 PROBLEM AREAS
Aside from the usual project management issues there
are a number of other areas of consideration that need to be taken into account
by the professional engineer when setting up the conceptual framework that
defines a particular task. Three of the most important of these areas are:
-
Psychological
-
Philological
-
Acceptance
Firstly, Psychological considerations involve a
proper understanding of the limitations to which everyone's thinking is
subject. These limitations become manifest when attempting to describe a new
idea during the process of passing it on to someone else - as in a requirements
specification. We are all constrained in this context by our previous
experience. As a consequence we tend to describe things in terms of our
previous experience and, in so doing, we inadvertently close the door to other
possibilities. The professional engineer needs to be aware of such issues in
order to be able to take appropriate precautionary measures during the process
of interpreting incoming information.
Another area of psychological difficulty is the
problem that everyone has to confine any given set of comments to the same
level of detail. Again and again in almost any technical description that may
be selected it will be found that there are passing comments and observations
which properly belong to some other level of detail. The presence of such
passing comments, far from improving clarity, only serves to divert attention
from those issues that should be being addressed at the current level of
detail.
Secondly, Philological considerations include all
those difficulties that arise when setting down natural language descriptions
of anything. Formal, mathematically provable, languages are not sufficiently
useful. This is because it has been finally demonstrated that it is not
possible to use mathematically provable languages for open systems [Hogan,
1995]. Open systems are those that incorporate non-deterministic processes –
i.e. all natural systems!
We are all encouraged to make our documents
'readable'. Thus, it is hoped, others will find it easy to read such documents
and will thereby be encouraged to learn more about the subject matter. The
problem with readable documents is that they encourage a narrative style that
leads to compound and complex sentences. An example of a compound sentence in
this context is:
The system will exchange
invoices, receipts and special billing instructions with regional offices.
This sentence is compound because it can readily be
rephrased in the form of three simple sentences; one referring only to
'invoices', one to 'receipts' and one to 'special billing instructions'. Such
simple sentences are referred to as 'atomic' sentences. Complex sentences on
the other hand are not capable of being so easily decomposed. Complex sentences typically need to be
completely rephrased in order to make their meaning unambiguous and in order to
be able to decompose them into atomic components.
Non-atomic sentences can be, and indeed are, difficult
to assign contractual liability to in a precise manner. This is because their meaning is
obscured by grammatical complexity. Professional engineers should employ their
utmost endeavours to eliminate spurious complexity of this kind if they are to
minimise and manage the real complexity of any consequential design. By so doing the opportunity for error
is minimised and long-term costs are reduced. All of this surely must be in the interests of the client
and therefore of the professional engineer.
Another philological problem is the cavalier
over-use of certain words to which we are all prone. We all use the same word to mean many different things (e.g.
the word 'system') and we often use different words to refer to the same
thing. Such looseness inevitably
introduces confusion into descriptions that need to be, by virtue of the
financial consequences of misinterpretation, as precise and unambiguous as we
can possibly make them.
Thirdly and finally - acceptance
considerations. Every
specification document that the author of this paper has examined to date has
been found to contain a large number of subjective requirements. These are
requirements whose intention is inevitably subject to interpretation by the
reader. Examples of such
requirements are:
- The system must be user
friendly.
- The hardware must be easy to
maintain.
- Rapid response is essential.
The ultimate realisation of requirements of this
kind, in the system that is being specified, is incapable of being verified in
any objective manner without recourse to other more definitive
information. If such information
is not provided, or referred to, then uncertainty will exist and there is
potential for error. The above
examples are necessarily rather obvious - in order to make the point. In practice much more subtle forms
exist to plague the activities of the professional engineer intent on
identifying a particular need.
Another important aspect of acceptance is that
associated with the dynamic viability of the system being specified. This issue
is associated with the problem of demonstrating that the given specification
will lead to the realisation of a system that will perform in the correct manner. That is: does the requirement call for
something which is dynamically viable - and if not why not?
All the above issues - and more - are capable of being addressed and resolved prior to any commitment to design [Collins, 1994]. Therefore, if the ability exists, it must surely be in the interests of the client (and therefore the professional engineer) to carry out such resolution - at least to some extent.
3 THE METHODOLOGY
3.1 General
The previous section has outlined just a few of the
problems that beset the professional engineer's attempts to obtain a clear and
objective statement of requirements.
In this section the G-MARC approach to resolving such problems is
introduced.
All good engineers know that, when first presented
with any new body of information, a valuable first step is to attempt to
identify patterns and/or structure in the raw information. The presence of such application
structure invariably improves the ability to process and relate information
content - one component with another - and, consequently, to identify
omissions, inconsistencies and errors as well as carry out many other processes
of a similar nature.
How should we go about identifying application
structure and adequate content in a statement of requirements? In order to answer this question we
need firstly to have identified some form of generalised framework - upon which
each application can be hung - and secondly we need to identify the components
of the given application in order that we can categorise them using the framework. Once they have been categorised the
components can thereby be readily compared and related both to each other and
to generic forms. Such generic
forms develop with time and constitute the application area expertise
repository or knowledge base. The
professional engineer often has an informal knowledge base of this kind in his
head where it is invisible to others.
GMARC provides the ability to capture generic knowledge explicitly and
thereby make it available to other practitioners [Peltu, 1995]. As a result the opportunity for mutual
benefit and consensus is dramatically improved.
3.2 The Basic Framework
The research that formed part of the G-MARC development work led to the conclusion that there is a fundamental and generally applicable framework into which all requirements information can be sorted prior to identifying and analysing the structure of the system being specified. In order to get a feel for the nature of this framework let us imagine that we can define a three-dimensional array where the three dimensions are:
-
Application
Aspect
-
Support Layer
-
Detail Level
Figure 3.2:1 below illustrates a simple example
where the three dimensions have each been assigned three category names. As can be seen the category names can
be interpreted as defining an array of small rectangular cells, each such cell
corresponding to a particular combination of category names.
Having identified a framework, let us now turn to
the components that we wish to arrange within this framework. Firstly let us imagine that all the
sentences in a given specification document have been reduced to a set of
atomic requirements - as indicated in Section 2 above. Every member of this set of atomic
requirements may be categorised by assigning to it a three-digit code (where
each digit is either a 0,1 or 2) and where each digit indicates a category name
(attribute) in the corresponding dimension. Thus the code 112 for example would be assigned to any
atomic requirement that is able to be described by means of the following three
category names:
Function,
Facilities,
Component.
When each requirement has been assigned an appropriate categorisation code, it will have been effectively assigned to one of the small rectangular cells illustrated in Figure 3.2:1. Some of the cells will be empty, some will have a few entries and some will have a lot. The 'density distribution' of requirements in the array will then be found to reveal some very interesting facts about the document - but see Section 4.

Figure 3.2:1 THREE DIMENSIONAL ARRAY
It has been established in fact that there are four
dimensions rather than three, the fourth one being 'Viewpoint'. The
corresponding four-dimensional array is illustrated in Figure 3.2:2 below. Therefore, to fully categorise each
atomic requirement, we actually need to attach to it a four-digit code of the
form 0112. This particular code
means any requirement that is able to be described by means of the following
four category names:
Operations,
Function,
Facilities,
Component.

Figure 3.2:2 FOUR DIMENSIONAL ARRAY
We are able, of course, to define any number of
category names in each dimension and Figure 3.2:3 below indicates a possible
framework in which six category names are employed in each case.
There is no reason why the number of category names needs to be the
same in each dimension and, in practice, it is often the case that they are
indeed different as we will illustrate later in this paper.

Figure 3.2:3 GENERIC FRAMEWORK
3.3 Evolution
Perhaps one of the most important aspects of any
specification is the extent to which it is re-usable. All professional
engineers should be concerned to maximise the re-usability of the results of
their efforts. This applies equally well to specifications as much as it does
to designs and to implementation.
Any set of requirements can be divided into two
subsets: those that identify goals and those that identify constraints. The Goals are the aspirations of the
system specifier. They refer to
things that need to be achieved - even though some of them may come into
conflict with each other. The
Constraints are the limitations imposed upon the Goals by virtue of real world,
environmental or implementation considerations. It is the constraints that
realise a particular instance (ie an application) of a given set of Goals. Different sets of constraints realise
different instances of the set of concepts, or pivotal model, identified by the
Goals. Any pivotal model can be
used to generate a multitude of variants - each variant dependent upon its own
particular set of constraints.
As an example of a goal consider the following
requirement:
'Any record must be able to be retrieved from the
database within 5 seconds'.
An example of an associated constraint could be:
'All database records must be held on
magnetic tape units - type xyz'.
These two requirements would doubtless come into conflict with each other for databases of any useful size. All such clashes would eventually need to be detected and reconciled - preferably before embarking on any consequential design.
The set of goals for any system (the pivotal model)
constitutes the only truly portable (re-usable) part of the system by virtue of
its constraint-free nature. Figure
3.3:1 below illustrates the separation of Goals and Constraints into separate
locations for the purpose of being able to identify and possibly reconcile any
adverse effects of one upon the other.
The extent to which a set of constraints causes a pivotal model to
change is the extent to which the resulting system is not re-usable under
different circumstances.

Figure 3.3:1 SEPARATING GOALS FROM CONSTRAINTS
The Pivotal Model should initially be produced in
isolation in order to obtain a constraint-free view of the structure of the
system being specified. If we consider
only one layer at a time, starting at the highest, then the constraints should
be applied to each layer, one detail level at a time (top down) to produce a
constrained specification for the layer.
At each level of detail, in each layer, it will be possible to make
informed decisions as to which course to pursue as the reconciliation process
unfolds - modifying as necessary or, at least, drawing attention to
consequences in each case.
The major advantage that results from the production
of the pivotal model first, and then the application of the constraints to it,
is the fact that the impact of the constraints becomes highly visible and, in
particular, those constraints that cause unacceptable changes to the pivotal
model can be rapidly identified and, if necessary, removed or modified. It is precisely these constraints that
impair re-usability. Of course it
is not possible to eliminate the effects of all constraints - otherwise the
system would not be realisable.
But we frequently have the power to change their form or to ameliorate
their influence when it impacts on the re-usability of any module.
The above argument applies equally well to each one
of the support layers and thus, as we progress down the development path, and
each support layer moves into the foreground of consideration, we are able to
review re-usability in the above way and in the light of knowledge gained from
preceding layers. When every layer
of the specification has been processed we should not only have a complete and
well-structured specification, we should also have one in which the re-usable
components have all been clearly identified.
As an illustration of what happens during conventional progressive evolution, let us consider the all-too-typical situation where the goals have not been separated from the constraints at specification time. Therefore the impact of either set on the behaviour and fabric of the resulting system is not able to be separately identified. Imagine also that the first implementation has been a success. So much so that the manufacturer (or the client) is encouraged to develop a variant for another situation. Imagine finally that the goals for the second variant remain more or less the same, thus it is only the constraints that change.
What actually happens in practice is that the
system, as designed and built for the first variant, is modified - to save time
and resources. The outcome is that
the fabric and the behaviour of the new variant has influences built into it
which not only result from the set of system goals and the new set of
constraints, but also from the old and now out of date constraints from the
first variant (V1). These out-of-date constraints come into conflict with the
new V2 constraints in quite invisible ways and, consequently, debugging of
development changes takes longer than expected because the system reacts to
such changes in a slightly unpredictable manner. Nevertheless the resulting V2 performs reasonably well and
the client (or manufacturer) is subsequently encouraged to consider investing
in a further (V3) variant.
V3 suffers from similar debugging difficulties to
those experienced when producing V2.
However in this case the problem is much more pronounced and debugging
takes much longer. We now have
three sets of constraints built invisibly into the fabric and behaviour of V3 -
two of them inappropriate!
If the above process is continued, with each new
variant utilising the previous one (to take advantage of the most recent
thinking and technology), it will not be long before the debugging process
becomes so lengthy that everyone involved will become afraid to make any change
at all. This is because each
change causes so many unpredictable consequences that the time required to
arrive at a stable state each time becomes unacceptably high and the associated
resource costs too great.
The history of Software and System engineering is littered with examples of situations of the above kind ranging from mainframe operating systems, through stock exchange applications, to fighter aircraft autopilots. After a number of evolutionary steps, these systems became so fragile that all development had to be terminated. It is believed that a major contribution to this result was, in each case, that rapid obsolescence was unavoidably, and invisibly, built into the development process by a failure to dissociate constraints from goals at specification time. Re-usability consideration must not be left until design time. If it is then it will be too late.
4 A REAL APPLICATION
In this section we take a brief look at the results
of subjecting a real requirements specification document to the classification
process described in Section 3.2 above.
The application chosen to exemplify the process is a
military air traffic control system.
The document used was part of an Invitation To Tender that was put out
to a worldwide bidding contest by the air force of a European country. Figure 4.1:1 below contains part of the
result of subjecting the document to G-MARC classification. Only the Operations viewpoint is
presented in Figure 4.1:1 and, as can be seen, only four support layers, five
application aspects and six levels of detail were employed. The numbers in the boxes represent the
numbers of goals and the number of constraints that were assigned the
corresponding set of attributes.
Thus, for example, in the Use layer, in the Function column and in the
fourth level of Detail, there are 91 goals and 48 constraints ie 139
requirements in total.

Figure 4.1:1 REQUIREMENTS DENSITY MATRIX
The most obvious benefit arising from Figure 4.1:1
is that it provides a succinct view of the coverage of the subject provided by
the document. In addition
attention is drawn to a multitude of features of the information in the
document that would otherwise not be visible. For example it is clear that the thinking of the person (or
persons) who wrote the document is dominated by previous experience. We can see
this because the largest proportion of the requirements are positioned in the
Function Aspects column with very few in the Purpose Aspects column. This implies that the specifier knows,
from previous experience, 'how' the system should work but not 'why'. Inevitably, therefore, we are impelled
to ask how can it be verified that the system is appropriate to the task?
Similarly it is clear that the specifier is a low
level details type person. In the
User layer (as mentioned above) there are 139 function requirements at the 4th
level of detail but not a single one in either the zero level or the first
level of detail. This implies the
conclusion that the writer does not know what the overall function of an Air
Traffic Control System is - nor indeed what are the functions of the major
subsystems. This conclusion is
hardly credible in a document of this stature. Nevertheless this is the actual
content of the document.
We may also ask why there are no requirements at all
in the Infrastructure layer. This
situation may be perfectly valid and the subject may have been intentionally
left for one of the other viewpoints to handle. On the other hand there may be a genuine oversight here.
In addition, it is rather alarming to note - with so
much functionality having been specified - that so few Performance Aspects have
been specified. Referring to the
139 Function Aspects, we are able to see that there are only 3 associated
Performance Aspects.
There are many more questions of a similar nature
that it is possible to raise as a result of the way that the information is
presented in Figure 4.1:1 - and this is just one viewpoint. The essential point that this paper
draws attention to is the huge increase in visibility that results from the
production of a G-MARC requirements density matrix.
Having separated the requirements, in each location
of the requirements density matrix, into goals and constraints, it is then
possible to group similar requirements together to identify re-usable
objects. Figure 4.1:2 illustrates
an object hierarchy that could typically be developed from say the four levels
of functional aspect requirements that are present in the User layer of Figure
4.1:1. A similar hierarchy could
then be developed for the constraints.
Overlaying the two hierarchies draws attention to any obvious
differences and/or conflicts.
Figure 4.1:2 portrays the object hierarchy for just one layer. Such object hierarchies exist for all
the other layers. All of these
layers are inter-linked linked by virtue of the Support paradigm that is used
during their development. Objects
in lower layers are there to provide support for higher layer objects. Objects in higher layers may require
particular lower layer objects to provide the environment in which they are intended
to exist. No lower layer object
should exist which cannot be linked to a higher layer object – otherwise we are
impelled to enquire what purpose does it serve. However the converse is not necessarily true. Higher layer objects may be specified without
necessarily defining associated lower layer support facilities. This is because there are invariably
locations in every specification below which the specifying authority does not
wish to descend.
Each level of detail in any functional aspects hierarchy is capable of being expressed as a behavioural model of the system being specified. The G-MARC toolset enables its Users to automatically create and animate the functional aspects models, at any selected level of detail, in order to explore the dynamic viability of the specification at that level of detail. In fact the G-MARC toolset contains many more facilities of this kind - including knowledge accumulation and direct elicitation of knowledge from the minds of its users. However these are subjects of other papers in this series.

Figure 4.1:2 OBJECT HIERARCHY
5 CONCLUDING COMMENTS
This paper is aimed at drawing attention to the fact
that it is possible to considerably improve the quality of a requirement
specification prior to its formal adoption. In particular it is suggested that the professional software
engineer has a duty to his client to ensure the production of such high quality
specifications prior to the commitment of resources to design and
implementation. There is a great
deal that it is possible to achieve in this context. However there is - perhaps understandably - detectable
reluctance to expend resources on specification improvement. There is reluctance by procurement
organisations - who wish to pass on to their suppliers as much responsibility
as possible - and there is reluctance by supplier organisations - who wish to leave
the door open for possible price increases (as a result of changes) at a later
date. In addition, few will want
to spend time improving a specification until they have been awarded the
contract. After contract award all
the pressure is then devoted to producing the system as quickly as possible. Such pressures have always held back
the development of high quality specifications. Nevertheless, with the increasing move towards fixed price
contracts, it is becoming more important to initiate projects with
specifications that are consistent, complete, coherent and correct if overall
risk is to be minimised.
It is also important to recognise that, if
indefinite evolutionary potential is ever to be achievable, the professional
engineer must encourage his clients, when specifying a variant of a system, to
recognise the need to return each time to the basic set of the goals before
applying a new set of constraints.
This process will not only encourage the re-use of requirements
information it will lead to the identification of really re-usable design components
and really re-usable products [Hugo, 1995].
Finally this paper draws attention to the fact that, due to the rising perception of the need to produce improved specifications, appropriate tools are now being developed. The professional engineer should be aware of these tools and their capabilities. At this point in time there are very few tools that directly address the issues of quality and reusability of requirements. G-MARC is one of the first.
6 REFERENCES
1. Boehm, B.W. (1981), Software Engineering
Economics, Prentice Hall, Eaglewood Cliffs, N.J.
2. Collins, A (1994), Systems Disasters can be
avoided; Computer Weekly, 08-12-1994.
3. Faulk, S.R. (1995), Software Requirements: A
Tutorial. Tech. Rep. NRL-7775, Naval Research Laboratory, Washington D.C.
4. Fairley, R. (1985), Software Engineering
Concepts, McGraw-Hill, New York.
5. GAO (1992), Mission Critical Systems: Defence
attempting to address major software challenges, Tech. Rep. GAO/IMTEC-93-13,
U>S> General Accounting Office, Washington, D.C. Dec.
6. Hunt, L.B. (1992), G-MARC - Final Report of
Project IED4/1/1151. Produced under the auspices of the Department of Trade
& Industry's Information Engineering Advanced Technology Programme (IEATP)
of the Joint Framework for Information Technology (JFIT).
7. Hugo, I (1995), Back in circulation; Computing,
17-08-1995, page 16.
8. Hogan, J (1995), From Complexity to Perplexity;
Scientific American, June 1995, pages 74-79.
9. Lutz, R.R. (1993), Targeting safety related
errors during software requirements analysis. In Proceedings of the First ACM
SIGSOFT Symposium on the Foundations of Software Engineering (Los Angeles,
Cal., Dec.), ACM, New York.
10. Peltu, M (1995), Make yourself re-useful; Computing, 09-02-1995, page 40.
CSA/080155299.htm/46w