Continuous Integration

Objective: replace the old practice of applying quality control after all development has been completed by continuous processes, as small pieces of effort, applied frequently. The advantage of the continuous minimal effort is finding bugs earlier, which results in less effort in correcting them.

A Continuous Integration approach could be built like so:
  1. Hudson automates the build extracting the code from RedMine.
  2. Every build runs tests to determine if the last commit breaks old code. This is part of Quality Assurance, just done earlier.
  3. Note that for proper tests we'll need to deal with the database. Real tests can and must have effect on the database, because they simulate user action. Failed tests may leave the database status dirty or broken. Successful tests need to clean up their inputs. To deal with this, we may:

A possible structure for the environment:

The selenium and hudson servers can coexist. The test server and test clients also can coexist. The four can even all coexist on one pc to start with.

The approach is not intended to be a full scale, up front effort. Rather, we can introduce first the selenium tests, basically reproducing what the testers do every time there's a change. Automating many of the testers actions results in a more complete QA coverage: the testers normally don't run all the tests after a change, but only those related to the new development. This however may result in a bug in an apparently unrelated functionality of the site .

An automated build can either green (success), or red (failure), and generates report pages. If a build fails, it can't be deployed. If a build succeeds, it passes to QA and may then be deployed. The advantages? The cons? Other possible tools I'm researching: Some useful references: