2004 Steve Easterbrook DRAFT PLEASE DO NOT CIRCULATE page 1 C H A PTER 2 What are requirements The simple question what are requirements turns out not to have a simple answer In this chapter we will explore many of the key ideas that underlie requirements engineering We will spend some time looking at two fundamental principles in requirements engineering 1 that if we plan to build a new system it is a good idea to describe the problem to be solved separately from particular solutions to the problem and 2 that for most systems this separation is impossible to achieve in practice The tension between these two principles explains some wildly different perceptions of RE We will break down the idea of a problem description into three components the requirements which are things in the world we would like to achieve the domain properties which are things that are true of the world anyway and specifications which are descriptions of what the system we are designing should do if it is to meet the requirements and show how these are inter related Throughout the chapter we will emphasize that we are primarily concerned with systems of human activities rather than software or computers Our aim in this chapter is to introduce a number of key ideas and distinctions that will help you understand what requirements engineering is all about By the end of the chapter you should be able to Distinguish between requirements and specifications and describe the relationship between them Explain how a system can meet its specification but still fail Give examples of how misunderstanding of the domain properties can cause a system not to meet its requirements Explain why any specification is likely to be imperfect Distinguish between verification and validation and give criteria for performing each Explain the different perspectives of the systems engineer and the software engineer Give examples of how the systems engineer can move the boundary between the application domain and the machine to change the design problem List the principal parts of a design pattern and explain why a clear understanding of the requirements is needed to select appropriate design patterns Use problem frames to describe the differences between major problem types such as control systems information systems and desktop application software 2 1 Requirements Describe Problems In chapter 1 we introduced the idea of capturing the purpose of a software intensive system To identify the purpose we need to study the human activities that the system supports because it is these activities that give a system its purpose Suppose we are setting out to design a new system or perhaps to modify an existing system Presumably we have perceived an opportunity to use software technology to make some activities more efficient or more effective or perhaps to enable some new activities that are not currently feasible But what precisely is the problem we are trying to solve If we want to understand the purpose of the new system then we need to be clear about what problem it is intended to solve 2004 Steve Easterbrook DRAFT PLEASE DO NOT CIRCULATE page 2 Problem Situation Problem Statement Implementation Statement System Figure 1 Separating the problem statement from the solution statement adapted from Blum 1992 2 1 1 Separating the Problem from the Solution The first key insight of requirements engineering is that it is worthwhile to separate the description of a problem from the description of a solution to that problem For a software intensive system the solution description includes anything that expresses the design the program code design drawings the system architecture user manuals etc The problem description is usually less well documented for some projects it may be captured in a concept of operations document or a requirements specification For other projects it may exist only in notes taken from discussions with customers or users or in a collection of user stories or scenarios And for some projects there is no explicit statement of what the problem is just a vague understanding of the problem in the minds of the developers A basic principle of Requirements Engineering is that problem statements should be made explicit Separating the problem from potential solutions and writing an explicit problem statement is useful for a number of reasons To create a problem statement we need to study the messy real world ask questions about the activities that the new system should support decide a suitable scope for the new system and then write a precise description of the problem This allows a designer to properly understand the nature of the problem before considering how to solve it The exercise of analyzing the real world problem situation will reveal many subtleties that might be missed if the developer launches straight into designing a solution It might reveal that the most obvious problem is not really the right one to solve The problem statement can be shared with various stakeholders to initiate a discussion about whether their needs have been adequately captured The problem statement can be used when comparing different potential designs and when comparing design trade offs 2004 Steve Easterbrook DRAFT PLEASE DO NOT CIRCULATE page 3 Problem situation change System Abstract model of problem situation implementation statement problem statement Figure 2 Delivering the completed system inevitably changes the problem Making the problem statement explicit makes it much easier to test the system a candidate solution is only correct if it solves the problem as stated Of course the solution might still be unsatisfactory because we might have made a poor job of writing down the problem statement or we might have focused on the wrong problem In other words we need to check both that the solution is correct according to the problem statement and that the solution statement corresponds to the real world needs of the stakeholders see figure 1 But we have gained something by breaking this down into two separate steps we can ask the question of whether the problem statement is adequate independently from the question of testing whether a proposed design solves the problem as stated 2 1 2 Intertwining of Problems and Solutions The second key insight of requirements engineering is that this separation of problem statement from solution statement cannot really be done in practice The real world in which human activities take place is complex and any
View Full Document
Unlocking...