I just had lunch with Joe Walnes, Martin Gill and Jeff Santini where we were discussing knowledge, learning and TDD.
I read that software is frozen knowledge. It got me thinking about software development and learning.
Behaviour and Test Driven Development first involve coming up with a behaviour / test results, then modelling software to satisfy the behaviour / test, then running the behaviour / test and finally comparing the actual results to the expected results. This is done repeatedly adding more behaviours / tests. The behaviours / tests provide the context within which the software (model) is valid.
This is analogous to learning (Kolb's model). We start with a concrete experience. We model the experience. We then run our model and test our model results against our concrete experience and then reflect on the results. Over time, we add more experiences that may result in our upgrading our model. Just think flat earth, sun revolves around earth etc.
As we add more tests or experiences, we find that our model of software / reality is no longer valid. Good developers will create a new model (refactor) whereas poor developers will add hacks to the code to make it work. When we test our model we might find that some of our behaviours / tests no longer pass. It might be that they are no longer relevant or that our model does not capture everything. The most valuable aspect of the system is not the model but the sets of behaviours / tests that provide the context within which the system works. Given the context (behaviours / tests), any number of models could be developed that satisfy it.
Now lets look at what happens with Analysis. Traditionally, business analysts will take concrete business experiences and create a model. They will then test this model against the business experience and reflect on whether its output matches. After a few iterations around the learning loop, the model is signed off by the business and passed to the developers. Unfortunately, the most valuable information, the context, is not recorded and is lost as a result. The context allows us to change the model but still satisfy the business requirement. What we need to do is specify our requirements in the form of tests / behaviours as well as models. Unfortunately I am not aware of any software that supports the specification of a system using behaviours / tests. Anyone care to develop an open source version for me? I think something halfway between FIT and JBehave is needed.
Posted by chrismatts at August 13, 2004 12:35 PM