TDA, test driven analysis

Recently one of our clients had a big problem on production, having to restart a critical application a couple of times in two days, with few hours of service outage.We have been asked to investigate where the problem was and in order to figure it out we wrote few tests around the legacy application.The finger was pointed to a Bash script launching a Java class that has been written in the past without any test coverage, as soon as we covered the code with tests we gave the unit test reports to the client analysts.The test methods names were of course specifying how the obscure code was behaving in the very common (at least inside ThoughtWorks) way
Should...()    
{       
   Given...       
   When...       
   Then...    
}
Test driven development is important not only to drive the design but also to have an executable, up to date documentation, if there's a lack of tests I can't think on anything better rather that writing tests around a legacy system in order to understand it and documenting it.

Qi4j: an implementation of Composite Oriented Programming

Many thanks to Dan that pointed out on our internal ML to Qi4J. Quoting from the home page: Principles
- Composite Oriented Programming builds on some principles that are not addressed by Object Oriented Programming atBeruhmte http://www.neucasino.de/jackpot-regeln.html. all.
- Behavior depends on Context
- Decoupling is a virtue
- Business Rules matters more.
- Classes are dead, long live interfaces.

Are you alreadyRed toques polifonicos gratuitos gratis para nokia tons para celular Gratis. worried that they're using xml to do this?
Qi4j is trying to address the flaws of OOP and introduce Composite Oriented Programming to the world, without introducing new programming languages, or awkward constructs. Heck, we don't even use any XML.
Definitely interesting.

bye bye London

Well, with a flight and an hotel booking in my bag I think it's enough official, I'm moving to China, Hong Kong more precisely (there's Beijing planned in 3 months but that's another story). Playing for a while again (after a good year spent with (alt).Net) with old good Java Code and financial sfuff like Fix, Securities and Fidessa. I've the feeling that's gonna be fun and I'll meet few fellow Twers there aka AgileHongKong Crowd :-) Going East has been an objective in my life since I've read a Fortune Teller Told me, will I ever come back to Europe? We'll see. :-)

Some stuff you might try in your retrospectives

The title of the previous post "Some stuff you might try in your team" perhaps was catchy or maybe finally I wrote something interesting since I've got a big jump of visits, so I go on with a similar title, talking about retrospectives and let's see how it goes :-) There are two things that I'm doing right now when I run a retrospective: The short version of the prime directive, aka the Toni Directive and a bit of time boxing. The original version of the prime directive says:
Regardless of what we discover, we understand and truly believe that everyone did the best job they could, given what they knew at the time, their skills and abilities, the resources available, and the situation at hand.
It's too long! It takes ages to read it and in my opinion is less effective than a simple, concise, direct:
  1. No blame thanks
  2. We are all sure that every one did his best
That's it, I was bored when listening to the orginal, long version, I didn't see any blame running retros with this version neither people judging. You can try and let me know. What about time boxing? Well it cames after a (too) long retrospective run by me, The Kua came and told me, why not time boxing the next one? So right now we are trying to fit our weekly/2 weeks retrospectives in half an hour, of course for an end of project retro this might be not enough. But as a general recommendation, keep an eye on the clock, try to stop people when the conversation goes too long without adding any value, try to find an action quickly and effectively.

Limoncello recipe

It Looks like on the web there's no English version of the Limoncello recipe, so since it's easy to prepare, here the translation. (Beer is good but traditional south Italy liquor...) In order to make one and a half litres of Limoncello you need these ingredients: - 10 medium size organic lemons - 1 litre of pure alcohol at 90° - 400 grams of sugar - half a litre of water Wash the lemons well. Peel them and separate the zest (the yellow bits) from the pith (the white bits). Be extremely careful not to cut the white part as they become extremely bitter. Put all the zest on a chopping block and cut them into small pieces. Put the lemon zest in an airtight glass jar, add the litre of alcohol, close it and wait for 15 days... After 15 days, prepare the sugar and water syrup. Combine the sugar and water together in a small pot, heating gently until the sugar is dissolved. Once the sugar has dissolved, allow the syrup to cool. Now add the sugar syrup to the alcohol and lemon zest mixture, stirring well. Pour this new mixture into a new jar, filtering it using a funnel coated with gauze or filter paper. Repeat this operation another time, this time squeezing the rest of lemon zest. Thanks to Pat for the help with the translation (Pat became a Limoncello drinker after xp2007 :-D and I am not helping him to quit with this...)

Panopticode: a good tool from a good collegue

Panopticode - Overview It provides a set of Ant build files to simplify configuring many of the most popular tools. ... The whole thing can be easily done in 5 minutes. If you have a fast internet connection you could probably pull it off in 2 minutes :) Now when you run your build using the metrics target you will get: * Emma - Unit test code coverage. By changing one line in your build file this can be switched to Cobertura. * CheckStyle - Validates that your code follows Sun's standards for Java. If you want to use a different set of rules you only need to change one parameter in your build file. * JDepend - Sophisticated OO quality metrics and package dependency checking. * JavaNCSS - Cyclomatic Complexity and size (NCSS) metrics. * Volatility - Measure change within your projects. Currently this only works with Subversion, but support for other SCM repositories is planned. * Duplicate Code - Using Simian. NOTE: If your project is not open source you must purchase a license for Simian after your free 15 day trial. * Panopticode Aggregator - Generates an XML file that integrates ALL of the information gathered above * Panopticode Reports o Powerful visualizations, such as TreeMaps, that allow you to see the overall picture and an amazing amount of detail in a single view. o Metric Correlation o Historic Data

And what is JCruiseMonitor?

This is the best system tray for cruise control, wrote by a collegue of mine (rick grundy, TW). Unfortunately since as he wrote on the website "This is currently a work in progress and is not intended for general use" there are no links at the moment on the web :-D By the way since it's the best ever seen, is time that people knows that it exists, and it works well. 
A Windows system tray application to help monitor your CruiseControl server http://rickgrundy.googlepages.com/jcruisemonitor

A good start

Tomorrow I'll start my adventure in London, in TW, It will be a good start, Marco has organized the first meeting of the apln-london
APLN London is a local chapter of the Agile Project Leadership Network (APLN), which is a non-profit organization that looks to enable and cultivate great project leaders by focusing on:
  • Value
  • Customers
  • Teams
  • Individuals
  • Context
  • Uncertainty
Mike Cohn will be the special guest talking about Agile Planning and Tracking... QL no?