Wednesday, October 31, 2007

Continuous builds and Continuous Smoke Tests

Continuous builds and Continuous Smoke Tests - developers and testers perspective:

What is the purpose of continuous builds ?

1. To check if the source files are compiling properly as they are checked in by the team of developers. This does not seem to add value to the development methodology.
2. Is it to check if the unit tests are executing successfully ? Well certainly unit tests add a lot of value during development to test a successful integration. But consider during the initial stages of development (I will not talk about Iterations or Sprints), where developers are working on requirements and checking-in sources to the repository. This way the developers are adding functionality piece-by-piece in iterations and one is not able to complete the functionality end to end. Unit testing and coding are a developer's responsibilty.

But having continous builds and tests as part of the builds isin't going to add MUCH value to the overall development methodology. Yes, it is certainly going to help the developers a lot with their code integration. We (stakeholders) keep asking to involve testers right throughout the development phases. How can this happen ?

In Agile and RUP, functionality gets added in iterations and phases or in Sprints.
Does it mean we ignore the testing of the Project or Product until some of the initial functionality has been developed and marked done by the developer ?
Well, I am talking of the initial stages...Take for e.g (a trivial one) a login screen has been developed by developer D1 and where one has to enter a user ID, but no password is required to login into the application or product. The reason, is that the developer D1 or Developer D2 will work on the Password stuff later on in the coming iterations.

So what ?

Well, I do see we already started our continuous builds ( maybe three to four builds a day) and I see that the Application or the product has some working functionality as per the requirements and some shape is taking place with some other bits of functionality (NOTE: as per the requirements, well you do not throw away what you have developed so far).

So what is new ?

My thoughts are dragging towards the 'Smoke test(s)' that should be in place. I would recommend one smoke test a day very early in the project/product development.
Smoke tests are by definition are correct but interpreted with a narrow mind by managers and testers. Smoke tests must be manual ( DO NOT Automate Smoke tests in first release or milestone).

Why ?

This is where tester(s) get a chance to understand and see visually what is being developed from on paper. Is that all ?

No, testers get a chance to:


1. Understand the requirements and coordinate with the developers. Improved and better communcation.


2. Will be able to provide feedback on the developed functionality. This is a significant point where the testers get a chance to check back with the requirements if 'we are doing the right thing'. Discuss and refine the developed functionality sitting across the table with the developers.




3. Once we are done with smoke tests , testers will benefit from the interaction while functional testing. This sort of interaction would provide the testers better insight into the functionality and the requirements.




4. Testers get a chance to provide a feedback on 'future enhancements' , specially useful in case of product development.




Overall this improves and adds vaue to the development methodology.




Later and after the first milestone or even after the first major release, we can automate the smoke tests for the current release and execute these in the coming milestones, releases or phases.