17. November 2008 23:25 by David in
On December 17 Gojko, Chris Roff and myself will be presenting an introduction in using Test Driven Development within a Microsoft .NET environment.
The talk will feature:
- A quick overview of TDD
- Differences between Verification/Validation
- Unit testing frameworks that are available
- Acceptance testing frameworks that are available
- Lots and lots of code/demos
I hope to see you there...
http://skillsmatter.com/event/open-source-dot-net/test-driven-development-in-dot-net
16. November 2008 22:48 by David in
A common theme within my posts is how Iteration and Feedback is the life blood of an agile project. A project consists of a repeating series of sprints. Sprints consist of goals/user stories to be implemented. Within each sprint there are planning sessions, retrospectives and milestones/tasks. Tasks in turn can be designed/implemented using a Test Driven Development or Acceptance Driven Development approach which are often described using the Red, Green, Green analogy.
- Red - Create a test to flesh out the public interface/the expected output of the component
- Green - Develop code that implements the public interface and fixes the test
- Green - Refactor the code so that it is simpler or more maintainable
Its clear that there are iterations within iterations within iterations. In this regard Agile projects are fractal like in nature with the entire SDLC consisting of self similar behaviour across the time axis. Recently I have found it useful to generalise each of the iterations (no matter what level of abstraction we are dealing with) to the following:
- Envisage
- Innovate
- Stabilise
Envisage (Analysis hat)
verb: This is similar to imagine; it means to form a mental picture of something which may one day exist.
The Envisage phase is primarily concerned with asking the following questions:
- What is the project/sprint/goal/milestone/user story/component trying to achieve?
- How will be different post iteration?
- What is the success criteria for completing the iteration?
- Are there any edge cases that need to be investigated?
Phase is being performed incorrectly when:
- More time is spent discussing the solution's implementation as opposed to problem definition
- Only the Happy Path is analysed
- Tests are written that make assumptions about the implementation
Innovate (Creative hat)
verb: to introduce something new; make changes in anything established. (www.Dictionary.com)
I have purposely chosen the word innovate over implement or build to describe this phase. Being innovative implies that we can experiment, prototype, flesh out and most importantly make mistakes. Its concerned with:
- Solving the indentified problem
- Plumbing and Infrastructure
Phase is being performed incorrectly when:
- More time is spent getting to Green than finding new edge conditions
- More time is spent Refactoring than writing new code
- More time is spent working on plumbing than solving the identfied issue
Stabilise (Engineering hat)
Once the problem has been solved its time to switch focus to strengthening the quality of the solution. This entails:
- Writing more tests
- Refactoring
- Ensuring that all edge conditions are accounted for
- Change/Risk reduction
Phase is being performed incorrectly when:
- New tasks are continually being found (implies team is still in Innovate stage)
- Changes are introducing bugs
- Features are being added
Conclusion
By generalising all Iterations to Envisage -> Innovate -> Stabilise its becomes very easy to determine what type of activity should be performed. For example I only allow infrastructure or plumbing changes to occur early in a sprint so that there is ample time for stabilisation.
13. November 2008 07:38 by David in
One of Scrum's great strengths is that it promotes transparency.
The daily stand-up ensures that team members understand what their
peers are working on. It also helps to quickly identify cards
(tasks) that were underestimated or when a particular team member or
pair have become stuck and aren't making progress.
Unfortunately while SCRUM is great at managing the project it can be
more difficult to present the progress to senior management.
For example which of the following metrics should be used as the
public face of the SCRUM.
Originally my team was only using a burn down chart for reporting
but in the last couple of sprints we have added the concept of Sprint
Milestones. A Milestone is
Once all of the cards in the Milestone have been complete we move
the Milestone card from Scheduled to Complete. When reporting a
Milestones progress we list the number of cards completed over the
total number of cards (i.e. 2/6).
The following is an example of the type of information that
is placed in the fortnightly progress report that is presented to my
projects steering committee.
Sprint: 1
Sprint Goal: Integration
between Eagle and Bloomberg
Sprint duration: (3/11 - 22/11)
Milestones:
Bloomberg
market data transformed into Internal schema (3/8) - GREEN
Market data
loaded into Eagle (2/5) - GREEN
Bloomberg
data exported to down stream systems (0/5) - YELLOW
Sprint
complete (5/18)
- YELLOW
Burn down chart:
<image
here...>
Issue List:
<table of
outstanding issues/external factors that are blocking the team>
In many ways you can think of Milestones being an aggregated view
of the user stories and tasks within a sprint. The most
important criteria for determining if an item should be wrapped
within an Milestone is whether it needs to be publicly reported on or
whether it contains integration points with other teams and so needs
to be carefully managed.