Unit-testing – Agile development deployment process. Where do QA and Business Owners test

deploymentgitsvntestingunit testing

I've been reading up a lot lately on various web application deployment processes using SVN or GIT, with a view to redesigning how we currently deploy where I work.

As is the way with many flavours of Agile, it's assumed that anything committed to master or trunk is production ready. Both GitHub and Etsy, http://codeascraft.etsy.com/2010/05/20/quantum-of-deployment/ say that they work on this basis (although Etsy actually have a staging environment).

This process assumes all unit test and CI tests have been run. You run the tests locally and on CI and then commit to trunk. SO, at this point your code is technically sound.

Your code may be technically correct, but user/functional testing may unearth more bugs, particularly when it comes to front end testing.

My question is this. Where do QA and Business owners test the feature changes you have implemented? On your local development machine before you commit to trunk, or on a QA/staging machine?

If you have a staging machine that runs off trunk, and you assume that all code committed to trunk is production ready … eh .. then at what point is the code signed off and good to go into production from both a technical and business perspective? If you have only one staging machine, many developers and that is where the code is to be QA'd, then how can you deploy from trunk as many developer changes can be waiting for sign off.

I'd be interested to hear how others have approached this?

Best Answer

For better or worse I usually see this done where the testing is done against the branch base and the business sign off is what the checkpoint is to merge to the deploy main.

I have seen this done both with development on "main" with a separate "deployed" branch or a development "feature" branch with a main as "deployed".

the workflow ends up looking something like this:

  • code something
  • run local tests
  • check in to working branch
  • (optional) build server builds ant tests
  • QA/Business testing
  • bugfixes (loop back to top)
  • merge to deploy branch
  • deploy

Some folks work out of a single branch, but if you are going to have manual testing that gets difficult. Most people I have encountered that work on the assumption that anything can be deployed on commit that also work out of a single trunk are doing something small, or have a HUGE amount of automated testing, OR they consider the "deploy" in this conversation to be a build to a testing server and the process of QA that happens between the testing server and production is handled separately.

Related Topic