On IFM, alongside the application development, we develop a suite of tools to enable versioning, releasing and unit testing.
IFM is a complete Internet banking front end, implemented using Microsoft's DNA toolset. It consists of several layers of processing, and UI elements. A core project that implemented the majority of functionality is then customised and extended for each client in separate implementation projects.
The development model is loosely based on xProgramming and jUnit. In practice this consists of a modular processing tool to build and unit test the system directly out of source control. The build tool runs several stages of processing to merge customer specific features & design with core functionality, apply UI templates, compile C++ and VB6 code, produce documentation and initial configuration and finally generate a completely automated deployment package.
The next stage of the build tool is unit testing. There are several classes of unit tests: Install routine tests, back end server tests, business logic object tests, database tests and the most recent addition: a programmable http spider to test the system via the web UI.
A dedicated server continuously runs build/test cycles on all projects and reports any regressions (usually caused by development). A developer must then review these and either fix the code or the test.
Key benefits of this approach are:
- 95% of Regression testing, a repetitive, boring and error prone task is automated and can be repeated often
- A high level of confidence exists before any manual testing is undertaken; this shortens the number of test/debug cycles.
- The System wide impact of changes can be seen immediately
- The exact differences between any two versions can be mapped precisely.
There are of course costs. In addition to the fixed overhead in creating the build tool, there is the cost of maintaining the individual test scripts. This can be as much as 20% of development time. However, the benefits easily outweigh the costs.
In practice very little manual testing is required to maintain high quality of deliverables. Development cycles are shorter and there is no bottleneck for testing. The testing is mostly the developer's responsibility; the people who work most closely with the system. Testing becomes an interesting and challenging job instead of a dull, repetitive one. As a result it is much more likely to be done, and done well.