Agile Scrum, CMMi, Testing and Continuous IntegrationAt Codice software we use a combination of software development practices and organizational strategies. Specifically we use CMMi (we are level 2 certified) and Scrum. An unlikely pair as one of these aims tightens up the development environment with strictly defined rules and process while the other aims to loosen the development environment and allow change to flow more freely and quickly.
While these two methodologies may seem diametrically opposed they actually work together really well. Pablo Santos the CEO, spiritual leader and in house motorcycle aficionado has talked about the marriage of Scrum and CMMi in our internal process's before. Recently he has authored a white paper that talks about the testing environment at Codice and how CMMi and Scrum have impacted the way we test.
CMMi summarized in a few short words is about setting up a well defined process, well documented process that is rigorously enforced. Agile, to summarize, is about being lightweight and adaptable. A marriage of these two spawns a process that is lightweight, adaptable but provides a rigorously enforced development process.
Used to be, back in olden times of a couple years ago, that coders would code and testers would test. The onus was on the quality assurance department to discover bugs before they went out the door. In the modern era of today and tomorrow there has been a paradigm shift that puts the onus on coders to find bugs before they even get to the testers. The testers are still responsible for putting the final stamp of approval on things, doing integration testing and regression testing, but coders are now being asked to only commit bug free code, or as bug free as reasonably possible.
As a result of this automated testing tools have really been a booming industry. Codice uses a couple tools for managing testing. A modified NUnit (PNUnit), TestComplete and an internal work item system. It is important to use a wide range of test methods even an in agile environment, see Edward Correia's first of 10 Myths of Agile Testing. White box, unit and load testing are accomplished with PNUnit. Blox box, functional and behavioral testing are performed manually or with automation using TestComplete.
A few words on TestComplete. I have been working with and around automated testing tools since 2001. I am familiar with a whole lot of testing tools and the better one's came from IBM and Mercury (now HP). TestComplete may very well be the best tool on the market. It has appeal for software developers as well as QA testers. It's part of of the next generation of automated testing tools that that uses intelligent object recognition for testing playback. This is huge in an agile environment where change occurs rapidly and users don't want to spend all their time maintains the automated test scripts.
Pairwise testing is also important to the Codice testing environment. Agile is about speed and its not very practical to think you can run 10 hours of automated tests with every build. It also makes continuous integration nearly impossible. Pairwise testing is a way to break up testing responsibilities using a matrix so that you can get good coverage on all the major aspects of a product without having to cover every single combination of things. A simple example, Plastic runs on Windows and Linux with MySQL, MS SQL Server and FireBird. To test every version of Windows and Linux with every database supported by Plastic would lead to an enormous number of testing combination's. This is simplified by using the Pairwise technique so that we test every system once and every database once, but not every system and database combination.
The result is a rich testing environment that is very broad in scope but not too time consuming. A robust testing environment is one that takes advantage of many different disciplines like pairwise, unit, functional and manual testing. Too add a minor wrinkle; the most important features can be tested during continuous integration during sprints, its not necessary to run an entire suite of tests.
If you want to learn more about this read our white paper about the Codice testing environment.
To try it for yourself I recommend these four tools.
1.) Plastic SCM - for version control
2.) TestComplete - for automated functional testing
3.) VersionOne - for Agile project management
4.) CruiseControl - for Continous Integration
Plastic, TestComplete and VersionOne are all products developed by companies who know each other, integrate where possible, and specialize in the products they make. It's an ideal combination for an Agile shop looking for robust testing. Plastic offers integration into VersionOne and CruiseControl.