... the only software documentation that actually seems to satisfy the criteria of an engineering design is the source code listings.I love it and quote it often. He goes on to assert
We in the software business are close to being engineers, but we need a couple of perceptual changes. Programming and the build/test cycle are central to the process of engineering software. We need to manage them as such. We need to manage them as such. The economics of the build/test cycle, plus the fact that a software system can represent practically anything, makes it very unlikely that we will find any general purpose methods for validating a software design.
Put these two together, and the engineering design includes the build code, the test code, and the source code that automates the builds and the tests.
In my experience, if the build and test cycles are too expensive, then developers will try to do the design without including the results of the build and test cycles in their analysis. Every meeting I have ever been in with QA, someone always says "we need to get QA involved early in the process". This can only happen if the cost of building and testing software is cheap.
Here is the point I have been dancing around. If you have to ask someone to "build the product" for QA, and then have to ask QA to run this or that test, developers are going to avoid doing it. If you want QA involved in the Design Process, then building and testing must be automated. Every developer must be able to build the entire system and run any or all of the tests himself.
It doesn't have to be cheap to make the tests, making good test is often harder than writing the code, but it must be inexpensive to actually run the tests or it won't happen as part of the design cycle. Developers will delay paying that cost as long as possible.
Continuos integration tools like cruise control can help, but only if you commit your code often.
This more than just Test First Design. I am encouraging the automation of the entire build and test cycle as much as possible.