Requirements Engineering for Software and Systems

Agile methodologies are a family of nontraditional software development stratgies that have captured the imagination of many who are leery of traditional, process-laden approaches. Agile methodologies are characterized by their lack of rigid process, though this fact does not mean that agile methodologies, when correctly employed, are not rigorous nor suitable for industrial applications they are. What is characteristically missing from agile approaches, however, are "cookbook" approaches (for example, those prescribed in the Project Management Body of Knowledge) and are therefore sometimes called "lightweight" approaches.
Agile methodologies are traditionally applied to software engineering, and while there are elements that can be applied to the engineering of systems that are not pure software (in particular, the human considerations), they are not typically applied to pure hardware systems. This is so because agile methodologies depend on a series of rapid, non-throwaway prototypes, an approach that is not often practical in hardare-based systems. In any case, the non-software engineer can still benefit from this chapter because agile methodologies are increasingly being employed, and because the mindset of the agile software engineer includes some healthy perspectives.
In order to fully understand the nature of agile methodologies, we need to examine a document called the Agile Manifesto and the principles behind it. The Agile Manifesto was introduced by a number of leading proponents of agile methodologies in order to explain their philosophy (see Figure 7.1).
Signatories to the Agile Manifesto include many...