views:

57

answers:

3

I am currently working on a rather large project with a team distributed across the United States. Developers regular commit code to the source repository. We have the following application builds (all are managed by an application, no manual processes):

  1. Continuous Integration: a monitor checks to see if the code repository has been updated, if so it does a build and runs our unit test suite. On errors, the team receive email notifications
  2. Daily Build: Developers use this build to verify their bug fixes or new code on an actual application server, and if "things" succeed, the developer may resolve the task.
  3. Weekly Build: Testers verify the resolved issue queue on this build. It is a more stable testing environment.
  4. Current Release build: used for demoing and an open testing platform for potential new users.

Each build refreshes the database associated with it. This cleans data and verifies any databases changes that go along with the new code are pulled in. One concern I hear from our testers is that we need to pre-populate the weekly build database with some expected testing data, as opposed to more generic data that developers work with. This seems like a legitimate concern/need and is something we are working on.

I am tossing what we are doing out to see if the SO community sees any gap with what we are doing, or have any concerns. Things seems to be working well, but it FEELS like it could be better. Your thoughts?

+1  A: 

Hi,

this is pretty much the way we do it. The DB of the testers themselves is only reset on demand. If we would refresh this automatically every week then

  1. we would lose the references to bug symptoms; if a bug is found but a developer only looks at it a few weeks later (or simply after the weekend) then all eveidence of that bug may have dissapeared
  2. testers might be in the middle of a big test case (taking more than 1 day for instance)
  3. we have tons of unit tests which are running against a DB which is refreshed (automatically of course) each time an integration build is executed

regards,
Stijn

TheStijn
Hi Stijn, So how often is the tester's application re-built? How do you automatically manage database changes without refreshing the DB? A "diff" type functionality?
Jay
There is no fixed frequency; usualy this done when a production candidate has been built and there is a code cut-off. This candidate is then installed on an integration or QA environment which DB is then refreshed. We have a reference DB environment which contains all required and latest configuration. This DB is used a the refresh source.
TheStijn
+1  A: 

An additional step that is followed is that once the release build passes tests (say smoke test) then it is qualified as a good build (say a golden build) and you use some kind of labeling mechanism to label all the artefacts (code, install scripts, makefiles, installable etc.) that went into the creation of the golden image. The golden build may become a release candidate later or not.

Probably you are already doing this, since you don't mention I added what I had observed.

sateesh
yes good point, the build process does TAG versions in the repository.
Jay
A: 

I think you have a good, comprehensive process, as long as it fits in with when your customers want to see updates. One possible gap I can see is that it looks like you wouldn't be able to get a critical customer bug fix into production in less than a week, since your test builds are weekly and then you'd need time for the testers to verify the fix.

If you fancy thinking about things a different way, have a look at this article on continuous deployment - it can be a bit hard to accept the concept at first, but it definitely has some potential.

gareth_bowles