Introduction
Run this activity as a way to perform a goal-based planning and execution. Work is taken on by developers and work
progress is tracked based on the goals achieved using the designed, developer-tested, and integrated source code.
Context of what is being developed
A context can be specified when a requirement is assigned to be developed, thus specifying how broadly a requirement is
to be developed in a iteration. Development may focus on a layer (such as the user interface, business logic, or
database access), on a component, and so on.
Whether a context is specified or not, the developer's responsibility is to create a design and implementation for that
requirement, and also to write and run developer tests against the implementation to make sure it works as designed,
both as a unit and integrated into the code base.
Overview of workflow
Typical changes require some effort in designing the solution before moving into the implementation, even if it is only
a mental exercise that results in no long-term work product. Trivial changes to the existing implementation to support
some requirement might have their design self-evident in the context of the existing architecture and design.
Once the organization of the technical solution is clear, developer tests are defined that will verify the
implementation. This test-driven approach enforces that design considerations have been done before the solution is
coded. The tests are run up front and, in failing, clearly define the criteria to determine if the implementation works
as intended.
Failed tests lead to the implementation of the solution which upon completion causes the tests to be run again. This
innermost loop is repeated until the tests pass.
Passing the tests does not necessarily mean that the solution is a high-quality, appropriate solution. It is proper to
revisit the design at this point. That path loops back through the process since any changes to the design could affect
the developer tests and implementation.
Once the tests are passing and the design of the solution is deemed appropriate, there is one more possible loopback.
It is best to keep the test-driven, evolutionary design inner loops as tight as possible. Come up with some small-scale
design solution for a part of the work item, define a test or two for the implementation of one part of the solution,
pass that test, verify the quality, and then continue on in a test-first manner until that part of the design is
working. Then in the outermost loop go back to the work item and design another chunk to get closer to completion.
|