The IEEE glossary of software terms defines "Specification" as a document that describes requirements. So technically, a "Specification" is a collection of Requirements.
A Requirements Specification describes the behavior of the system from the problem domain’s perspective.
A Requirements Specification does NOT describe how to implement the system in the machine domain!
Requirements can be written in natural language or formal language. Natural language has the advantage of being readable by all parties, but the disadvantage of being somewhat vague and imprecise. Formal language has the advantage of being precise, but the disadvantage of requiring special knowledge to read and understand the requirements. Formal language is primarily intended for use in design architecture and design description documents, rather than in software requirements specifications. |
True Horror Story
If a customer is asked "what do you need?" they will generally reply with an implementation that they have envisioned - not with the actual business need.
I was visiting a jail in a major U.S. city while gathering requirements for their jail management software. We were replacing an older system, whose requirements gathering had begun with "We need a database to..." Their vendor had been asked for a database, and they wrote a great database. Unfortunately, it did not match the jail's workflow. The result was roughly a threefold increase in the prisoner escape rate! The increase was entirely attributable to the vendor's inability to automate the jail's actual workflow, which had forced the jail to change their workflow to match the software. |