Tao in the Art of the Minimal Test Case

Wednesday, October 21st, 2009

An approach for untangling

The phrase ‘Minimal Test Case’ (MTC) often comes up in problem solving discussions in the TiddlyWiki community. TiddlyWiki is an open source software project which means that the code for the product is freely available to view and to adapt. Like many other open source projects, the majority of users are often software amateurs trying to develop their own adaptions from a core code for their own particular use, sometimes struggling to learn about the technology and methodologies with which the software is made as they continue with their day jobs.

A community forms around software projects when experts or professionals also using the technology generously and patiently give assistance and advice to the amateurs, who then in turn start to answer questions they once asked, and this is definitely the case with TiddlyWiki and a key factor in the project’s success.

The use of a the MTC is something that someone unacquainted with software development is likely not to have come across but I think it can be one of many creative cow paths over which the amateur has to learn to trudge in order to learn a technology, but I think it may have wider applications which I will describe later. It all about stating the problem clearly.

Concept

The MTC is not a particularly difficult concept to understand: remove all the complexity and isolate the problem. But it is often more difficult than it first appears and can be highly frustrating. It can also take a long time to express the problem in a way which others can understand. I have found the exercise is very rewarding though, almost certainly because of the design of TiddlyWiki and how it encourages hypertext writing in a way that allows one to quickly fold complexity into easy to manage chunks. Formulating and communicating the problem is becomes easier.

AHA!

Minimal Test Case Reverie

In some ways I find making a MTC like practicing guitar; playing scales, bending strings, trying different types of vibrato and open tunings. The process of doing the activity somehow becomes secondary and another more abstract problem can seem to melt into a solution to an emerging subconscious problem.

The Aha Reaction – what Wolfgang Kohler refers to as a’ sudden insight that often accompanies the exclamation ‘aha!” [1] – in the my case of the MTC followed defining the problem and presenting it in an easy to read and easy to navigate fashion. I think that my latest TiddlyWiki test case has sparked some personal learning which I can apply outside of the solving of a technical problem concerning Javascript. Perhaps it might be worth while attempting to explain something about the problem. It was one about grammar, language and data structure.

Tiddlers, tags and tangles.

There is an object. An object in TiddlyWiki is called a Tiddler and it contains text. A Tiddler can be tagged with keywords. It can also have ‘custom fields’ which are like tags but in other dimensions. The problem for me was to know how to retrieve the name a custom field which was also a tag for a tiddler and convert it into a hypertext link. But before I could make the statement in the previous sentence, I had to work it out from the real life project in which the problem occurred. Part if this sub problem is converting the language of the problem into the technical language.

If you have read this far, you might well be confused. It is difficult quite to write about relationships in a prose – the keeping track of which ‘this’ refers to which ‘that’ -  but hypertext is a language which overcomes these problems. It is easier to describe the problem in hypertext, and the place in which the problem occurred was in a hypertext environment, I think there has been a synergy between tool and mind to produce learning. The three strengths of the TiddlyWiki are the speed in which hypertext can be produced, shared and the ways in which texts can be structured to incrementally unravel the bird’s nest before the reader without overwhelming him or her.

An Unintended Experiment

I started this blog post right after I had produced a MTC and posted it to the Tiddlywiki group. I hoped to write a blog post then return to my task in which the problem existed. The MTC linked to above describes the Tidders, tags and tangles problem in a clearer way. The problem was solved quicker than I imagined, quicker than the time I intended to spend on this blog post.

To me the evidence of the efficacy of the MTC is easy to see in the timestamps from the TiddlyWiki Google in the Timestamp box below. It is of course not a scientific measure but a solution and explanation in half an hour highly responsive, especially to a problem to which I would never have found a solution. Experience and observation has shown me that such problems can take days to solves as users posting questions refine their questions and respondents answer the problem they wrongly perceive to the the issue in focus.

Timestamp Box

Oct 20, 8:29 pm- Question and MTC posted
Oct 20, 9:09 pm- Question answered, solution provided.

Balancing learning with doing

My problem for which the MTC was required was part of  an important problem holding back in a larger project. The risk to me was to balance the time spent writing a MTC or finding another way round. I consider the effort I put in has shortened the overall project time and produced some learning. Its a balance between the ‘just do it’ approach and the do it ‘properly and learn why’ method.

But it is this following comment which leads me to believe that my MTC was a success. In fact it made me so happy, that I am wondering if MTCs could have some kind of therapeutic value.

Feedback on a minimal test case from a problem solver

Your MTC was A+!!!!  You started with a default tiddler that explained what you were trying to do and how the test case was set up (which
tiddlers, etc).  Then, you clearly defined your goals in visual terms, by simulating the desired result through hand-edited TW formatting and went step by step through the various ‘minimal’ cases, building up to the point of error.
Thanks so much!  That was a pleasure to read!  Now… here’s some answers:

In future posts I hope to get its author Eric Shulman, who has kindly helped me and many other over quite a period of time to contribute to some thoughts to thuis this blog. Looking at the link above, it becomes clear that Eric and the Unamesa charity with which he is involved  are involved in a wider project concerning education and learning.

Reflections

I think that somewhere in the learning methodology in communities like TiddlyWiki can transfer to settings outside of software development. The minimal test case is reductionism in practice so hardly a new idea, but I think the writing of hypertext in small chunks makes it easier on the eye and the mind to keep the requisite complexity the situation in mind at the right time. I believe this helps clear thinking and has its own rewards. In my case is has lead to happiness and satisfaction and a abstract feeling of things being a little more ordered.

[1] Statt, D., 1981. A dictionary of human behaviour, London ;San Francisco: Harper & Row.

Photo Credit
http://www.flickr.com/photos/zen/ / CC BY-NC-SA 2.0

Have your say

* Required. Email address not visible on post

3 Responses to “Tao in the Art of the Minimal Test Case”

  1. [...] This is the first in a series of posts looking at some of the analogies between software development and the entrepreneurial act of starting a business. These posts were inspired by Alex Hough’s great post yesterday about Test Driven Development (Tao in the art of the Minimal Test Case) [...]

  2. Much to ponder on. Thanks Alex.

    MTCing (accidental pun as well) seems to show how we might make sense of Open Innovation, and the high-velocity of innovative actions and learning of a creative network or community.

    In medieval times there were linear stage gates …the MTC would be a bit of stuff within a stage. In New product work I’ve written about getting from idea to product in a bottle. You’ll find other versions in related design/invention fields.

    • I’m very glad to see you promoting the value of minimal test cases, Alex!
      I also agree that this approach is valuable beyond software.

      However, just to play devil’s advocate here, your TiddlyWiki document there is not what I’d consider a minimal test case.
      By including the problem description and exploration path in the same document, you introduce additional factors to be taken into account. Even if it’s idle content, this does introduce a certain cognitive overhead – a brief look at the number of tiddlers in the Timeline or All tab supports this perception.
      (Obviously I’m a purist – don’t let that discourage you.)