Requirements analysis

Requirements analysis, in software engineering, is a term used to describe all the tasks that go into the instigation, scoping and definition of a new or altered computer system. Requirements analysis is an important part of the software engineering process; whereby business analysts or software developers identify the needs or requirements of a client; having identified these requirements they are then in a position to design a solution.

Requirements analysis is also known under other names:

During most of the history of software engineering it has been considered to be a relatively easy part of the process. However, in the last decade or so, it has become increasingly recognised as being the most vital part of the process; given that the failure to properly identify requirements makes it virtually impossible for the finished piece of software to meet the needs of the client or be finished on time.

Contents

The challenge

Successfully completing a "requirements analysis" task is a challenge. In the first place, it is not easy to identify all the stakeholders, give them all an appropriate form of input, and document all their input in a clear and concise format. And there are constraints. The requirements engineer is expected to determine whether or not the new system is:

In the rush of enthusiasm associated with a new project, there is always a temptation to downplay the importance of requirements analysis. However, studies of previous projects reveal that costs and technical risks can be reduced through rigorous and thorough up-front requirements engineering.

General problems

The general difficulties involved with requirements analysis are increasingly well known:

Stakeholder issues

Steve McConnell, in his book Rapid Development, details a number of ways users can inhibit requirements gathering:

Developer issues

However, developers are equally at blame; and given they are being paid to supply the solution the stakeholder(s) want they have far less excuse. Typical problems caused by software developers are:

Solutions

One of the solutions to this problem has been recognising that requirements analysis is a specialist field best carried out by experts, i.e. business or system analysts, who could bridge the gap between the business and IT (Information Technology) worlds. While this approach has helped, it has proved difficult to find staff who possess equally good people and technical skills. In addition, the techniques used to analyse requirements have not proved sufficiently effective.

Modern techniques introduced in the 1990s like Prototyping, UML, use cases, and Agile software development seem to offer more promise.

Main Techniques

Requirements analysis can be a long and arduous process. The requirements specialists do their work by talking to people, documenting their findings, analyzing the collected information to discover inconsistencies and oversights, and then talking to people again. This process can go on for a while, and may continue throughout the life cycle of a system.

New systems change the environment and relationships between people, so it is important to identify all the stakeholders, make sure you take into account all their needs; and ensure they understand the implications of the new systems. Frequently, this objective is not met because:

To keep all these discussions well organized and efficient, the evolving requirements must be documented.

Analysts can employ several techniques to get the requirements from the customer. Historically this has included such things as holding interviews, or holding focus groups (more aptly named in this context as requirements workshops) and creating requirements lists. More modern techniques include Prototyping, and use cases. Hopefully, via a process employing many of these methods, the exact requirements of the stakeholders will be established, so that a system that meets the business needs is produced.

Stakeholder interviews

Stakeholder interviews are obviously necessary in requirement specification. However, in any large system a number of individuals need to be interviewed, which increases the time and cost; but more importantly almost always this reveals major discrepancies with regard to how the existing business process works and how it should work in the future. Also different users might have differing or even contradictory requirements.

Requirement workshops

Therefore where systems are complex the usual method is to use requirement workshops, where the analyst brings the main stakeholders in the system together in order to analyse the system and develop the solution.

Such workshops are ideally carried out off site, so that the stakeholders are not distracted. They usually have a facilitator to keep the process focused, a scribe to document the discussion, and usually make use of a projector and diagramming software. Often multiple workshops are required to bring the process to a successful conclusion.

Requirements workshops are considered to be a very useful technique which can save significant time. However, it can be hard to get all the required stakeholders together at one time.

A more general weakness is that some stakeholders do not contribute forcefully enough in workshops and their requirements will not receive the appropriate attention, inevitably producing a limited solution. Additionally, while requirement workshops are an excellent technique for modelling the existing system, they are not so useful for defining the nature of the solution.

Contract style requirement lists

The most common way of documenting requirements has been contract style requirement lists. In a complex system such requirements lists can run to hundreds of pages. An appropriate metaphor would be an extremely long shopping list. Such lists are very much out of favour in modern analysis; as they have proved spectacularly unsuccessful at achieving their aims; but they are still seen to this day.

Strengths:

Weaknesses:

Prototypes

Main article: Prototyping

In the mid-1980s, prototyping became seen as the solution to the requirements analysis problem. Prototypes are mock ups of the screens of an application which allow users to visualize the application that isn't yet constructed. Prototypes help users get an idea of what the system will look like, and make it easier for users to make design decisions without waiting for the system to be built. When they were first introduced the initial results were considered amazing. Major improvements in communication between users and developers were often seen with the introduction of prototypes. Early views of the screens led to fewer changes later and hence reduced overall costs considerably.

However, over the next decade, while proving a useful technique, it did not solve the requirements problem:

Use cases

Main article: Use case

A use case is a technique for capturing the potential requirements of a new system or software change. Each use case provides one or more scenarios that convey how the system should interact with the end user or another system to achieve a specific business goal. Use cases typically avoid technical jargon, preferring instead the language of the end user or domain expert. Use cases are often co-authored by software developers and end users.

During the 1990s use cases have rapidly become the most common practice for capturing functional requirements. This is especially the case within the object-oriented community where they originated, but their applicability is not restricted to object-oriented systems, because use cases are not object orientated in nature.

Each use case focuses on describing how to achieve a single business goal or task. From a traditional software engineering perspective a use case describes just one feature of the system. For most software projects this means that multiple, perhaps dozens, of use cases are needed to fully specify the new system. The degree of formality of a particular software project and the stage of the project will influence the level of detail required in each use case.

A use case defines the interactions between external actors and the system under consideration to accomplish a business goal. Actors are parties outside the system that interact with the system; an actor can be a class of users, roles users can play, or other systems.

Use cases treat the system as a "black box", and the interactions with system, including system responses, are as perceived from outside the system. This is deliberate policy, because it simplifies the description of requirements, and avoids the trap of making assumptions about how this functionality will be accomplished.

A use case should:

Use cases can be very good for establishing the functional requirements; however they are not suited to capturing non-functional requirements.

Stakeholder identification

A major new emphasis in the 1990s has been a focus on the identification of stakeholders. This first step is now seen as critical. In the early days systems were built for the projects sponsor(s), who were usually management types. Many systems have been designed by managers with little or no contributions from the eventual users; these systems have tended to fail horrendously. So within the field of software engineering, in the 1970s and 1980s, the understanding of the term stakeholder widened to first the main users of the system, and then peripheral users. However, in the 1990s the search for stakeholders is taking on a more whole system approach. It is increasingly recognised that stakeholders do not just exist in the organisation the analyst is hired by. Other stakeholders will include:

Successful identification of the stakeholders ensures that analysis will take into account the right elements.

Literature

See Also

External links

See also: Requirements analysis, 1970s, 1980s, 1990s, Agile software development, Business Process Reengineering, Computer system, Constraint, Cost, Domain expert