Requirements are an often misunderstood necessity of software testing. Furthermore, the ways in which they are used changes depending whether you are using them in the context of classical or agile testing. Understanding Requirements aims to introduce the most common terms and concepts used in determining requirements, as well as their relationship to each other within classical and agile methodologies.
System engineering literature is filled with countless inconsistent terminologies and vocabularies concerning requirements. The overall goal of this document is to introduce some of the most common terms and concepts used in describing requirements in agile and classical system engineering. It is worth mentioning that we don’t intend to flood you with myriad examples, which by themselves are vague in nature; rather, we aim to emphasize the fundamental distinctions and relationships of requirements in both the classical and agile worlds. Bear in mind that the explanations given below are by no means the industry standard, insofar as a standard exists at all. This document should rather be viewed as a primary basis for creating a common understanding about requirements. Having that said, let us dive into the topic. A requirement in its most general form is defined as follows: