Of course you specify what your code needs to do before you build the implementation. Don't you?
Here are some possible ways that this may be done:
- Not at all. [Does anyone know how to get a list to start at 0?]
- Using notation (graphical, textual, mathematical) in a document, such as UML or Z.
- Using lightweight declarative programming constructs, such as DesignInIdl
- Using heavyweight declarative programming constructs, such as an Eiffel class with contracts fully defined on all its features.
- Using tools to describe the behavior required by the component, such as CodeUnitTestFirst.