A requirement is something the customer mandates. If you do not meet the requirements then there will be penalties. Penalties can be things like a cancellation of the contract, a large monetary transfer, pain of death, or nothing at all.
[Actually, this verges on a definition for "Constraint", rather than "Requirement". See below.]
This covers a lot of areas that can not be expressed in code. For example:
Constraint (definition from PlanguageConceptGlossary by TomGilb)
Any real system has
Note that, for Gilb, systems are supposed to evolve in response to the pressure exerted on them by their requirements [he says nothing so fatuous, but it's a fair indication of his view, I hope]. A single EvoStep? plans to make maximum progress towards meeting stakeholder requirements with the allotted resources (typically 2% of the total budgets, including elapsed time, man-hours and cash). Therefore, requirements are defined in terms of a range that would typically include "Survival", "Fail", and "Goal" levels, and may also include "Stretch" and "Wish" levels. (All of these can be qualified with, for example, Time, Place and Event conditions, so today's "Fail" level may be tomorrow's "Survival" level. The trick is to keep moving towards the "Goal" levels of all requirements while keeping ahead of the "Survival" and "Fail" levels!) With this view, RequirementDefinition is clearly a (strategic) business management activity, not a SoftwareEngineering task. The engineer's responsibility is to come up with good ideas for making the desired progress, make them happen at the appointed time and, where appropriate (which depends on the nature of the measure), demonstrate what progress has actually been made (as opposed to intended).