The vision I'm trying to promote here, which has been used successfully many times before, is that of a very flexible, highly iterative, highly automated development process, where a small team (like ours) can produce high-quality code rapidly and reliably, without burning anybody out in the process. (Think Agile, as a pervasive, commoditized process.) Having just returned (17 October) from being in hospital due to a series of small strokes, I'm rather highly motivated to do this personally. It's also the best way I can see for our small team to honour our commitments.
To do this, we need to be able to:
- have development artifacts (code/Web pages) integrated into their own documentation, using something like Javadoc;
- have automated build tools like Ant regularly pull all development artifacts from our software configuration management tool (which for now is subversion)
- run an automated testing system (like TestNG) on the newly built artifacts;
- add issue reports documenting any failed tests to our issue tracking system, which then crunches various reports and
- automatically emails relevant reports to the various stakeholders.
The whole point of this is to have everybody be able to come into work in the morning and/or back from lunch in the afternoon and know exactly what the status of development is, and to be able to track that over time. This can dramatically reduce delays and bottlenecks from traditional flailing about in a more ad hoc development style.
Obviously, one interest is test-driven development, where, as in most so-called Extreme Programming methods, all development artifacts (such as code) are fully tested at least as often as the state of the system changes. What this means in practice is that a developer would include code for testing each artifact integrated with that artifact. Then, an automated test tool would run those tests and report to the Quality Engineering team any results. This would not eliminate the need for a QE team; it would make the team more effective by helping to separate the things which need further exploration from the things that are, provably, working properly.
Why does this matter? For example, there was an article on test-driven development in the September 2005 issue of IEEE Computer (reported on here) that showed one of three development groups reducing defect density by 50% after adopting TDD, and another similar group enjoying a 40% improvement.
All this becomes interesting to us at Cilix when we start looking at tools like:
- Cobertura for evaluating test coverage (the percentage of code accessed by tests)
- TestNG, one successor to the venerable JUnit automated Java testing framework. TestNG is an improvement for a whole variety of reasons, including being less intrusive in the code under test and having multiple ways to group tests in a way that makes it much harder for you to forget to test something;
- Ant, the Apache-developed, Java-based build tool. This is, being Java-based and not interactive per se, easy to automate;
- and so on, as mentioned earlier.