Quality is delighting customers
How does your team implement Test Driven Development throughout the Software Development Lifecycle?
Thank you. Should other types of tests be administered at this time, such as static analysis or flow analysis? Or do you think that this will hinder development?
Here is what I coach teams to do:
1) Product owner writes initial specification for a story in Gherkin format. This sort of elaboration takes place just a few days before the beginning of a Sprint.
2) When a developer is ready to begin working on the story, the developer, product owner, and tester have a brief meeting (not more than 20 minutes) to continue the elaboration. The tester helps introduce the boundary conditions and other things the product owner missed and the developers helps the trio understand what is possible. The outcome of this meeting is an agreement that the story is functionally complete when all scenarios described run successfully.
3) The tester begins automating those specifications using a tool like cucumber. Simultaneously, the developer begins development on the story. The tester and developer are in constant collaboration about what is being built (both production code and test code). The developer is using TDD (described above) to write his code. Some of the communication between the tester and developer is around where do some of the tests belong (unit or functional). When the tester us finished automating the scenarios the developer begins running those tests against the code on a fairly regular basis to determine how they are doing. Also, as the developer completes some of the components of the story the tester begins exploratory testing those components. The goal of this collaboration is for the tester and developer to deliver code that is defect free.
4) When the developer gets all of the automated specifications to pass then the story is ready for review by the product owner. This entire cycle should take a day or two.
This is what I call Acceptance Test Driven Development. We are using the Acceptance Tests (executable specifications) to drive what is being developed.