August 20, 2004
One of the new (as in the last twenty years) practices in software development is the use of 'continuous integration'. The idea is that you basically integrate your application in frequent builds that build all source modules, build the installer, and install and deploy the application to a test site that then runs smoke tests with each new little release. The testing strategies have also advanced to the point that I think the average software developer knows that writing test cases is a good idea before the code or during the code. I have understood these ideas in principle before, but recently while working on a large system that went through very little step integration and almost no testing I have come to understand it practically.
The basic advantage as I see it is you kill risk. When you build large parts of the system and integrate them at the end, there is a risk that there are huge misconceptions about semantics over the interfaces or responsibilities, etc. This advantage is obvious. Another more subtle advantage is that you learn from your mistakes if you build, test, and run your application as you are still building it. There are numerous bugs in this large system that are repeated over and over across modules and across subsystems that would have been caught had the very first week's work been run through a good test suite and integrated with the rest of the overall application. This extra scaffolding would have taken a couple of weeks to build at the least, but would have saved the last eight months of defect fixes - Period.
August 20, 2004 02:42 PM