A requirement can be defined as a condition or capability that is necessary for a system to meet its objectives.  This definition is purposely broader than some definitions of a requirement.  Many software designers use the term "requirements" to mean the "user requirements."  The above definition is intended to include not only the traditional user requirements, but also other categories of requirements such as technical design and operational requirements.  The IEEE Standard Glossary of Software Engineering Terminology [Ref 4] includes definitions of six different types of requirements -- functional, design, implementation, interface, performance, and physical.

It should be emphasized that there are frequently important differences between different types of requirements.  Many problems occur, for example, when developers do not properly distinguish between user requirements and technical design requirements.  For purposes of sizing, however, there is value in being able to size each type of requirement with the same measure.  The above definition of requirements thus includes all types of requirements.  

Most methodologies analyze requirements in a top-down fashion through a Requirements Hierarchy.  Requirements at the lowest level of the hierarchy are called Testable Requirements.