Montag, 13. August 2012

No coffee today, a report of the Munich 08/12 test automation code retreat

The retreat started nicely. The coffee thing just broke. No coffee!
The organizers, Markus and Meike, were nervous about getting chairs, cables and flip charts installed.
Only around 10 people showed up at first!
On top the organizers told the gathered bunch that it probably wont be smooth:
We do the format for the first time!

Wrong! Wrong! Wrong!

The code retreat was well done. Kudos to the organizers.

Introduction round

I liked the Continuum introduction round where people had to form a line with the ones with most unit test experience at one end and the ones with the least at the other. Markus asked some guys from various positions on the line to tell the group what their exact experience was.
Then Mr. Gaertner asked to form another Continuum line on acceptance test experience; again asking some about their experiences.
The last Continuum question and experience talk of some was on software development.

As a result people were introduced through experiences not names.
Nice.

First iteration and some suggestions to the organizers

As in my last code retreat the first iteration was spent with some setup tasks as I heard in the retrospective.
In the preparation for the retreat I had tried to figure out what to install to provide as a basis for the iterations. I am really inexperienced with web acceptance testing and the choice of a classic selenium+eclipse java setup was a good one.
I suggest to the organizers to provide a list of some valid setup combinations for the retreat. This gives people the chance to validate if their setup choice has a chance of success in the retreat. Or in my case, if you dont know what to bring, you can default to one item on that list.
Adding to that some were surprised that the retreat was testing against a web application on the web thru HTTP and you dont have the source code! A paragraph in the event summary clarifying this would be helpful I guess.
Also I would recommend to the inexperienced like me to try to not only setup for instance selenium Webdriver with junit, but also to write like three tests against a web app on the web as a preparation to the code retreat.
This helped me a lot in the iterations being able to focus on something like page objects instead of Webdriver API details.

My pair in the first iteration did cucumber. The web app to test was about calculating parking rates at an airport. We came up to the point where we could enter a starting and end date for the parking and validate the rate.
I was amazed that he was really productive with this though having installed it for the first time the night before.
After the iteration all code was deleted.

Iteration(s) before Lunch

In one of the next iterations I was pairing with a guy who did the iterations with a groovy based acceptance test framework.
The cleanliness of the dsl for testing was amazing.
He was just typing out the tests at top speed and put in and pulled off the data on the web page in no time. In the end we had a table of some six tests and we were about to write a table automation for the tests.
But then the bell rang - All code was deleted.

Strange was that the guy though knowing his tool really well was reluctant to switch from a FirefoxDriver to the much faster HtmlUnitDriver. He rightfully pointed out that at his work place the FireFoxDriver was always needed as their applications were heavy with JS.
For the code retreat I was happy to have on my machine HtmlUnitDriver running with a much better round trip time. But this guy I think made it up double or three times with his superior tools eliminating pretty much all boiler plate code.

Lunch and the Go Game

During lunch decent pizza and pasta was served; compliant with Corey Haines' rules about code retreats this was all free. Thanks again to the sponsor and organizers for doing this.

Just after lunch Meike gathered the crowd to play a small game to free up our brains. It is called "Go". People form a circle and some arbitrary guy A starts pointing at another guy B, when the guy B says "Go", guy A walks to and finally takes the place of guy B.
The catch is that guy B needs to get out of his place before A reaches him. To do that he points at a guy C. When C says "Go", B can start walking towards C avoiding guy A. With guy C the game starts again, he has to point at D waiting for a "Go", etc.
It is a cooperative game with no winner else than the group. The rules are really simple but people and me just dont do it right the first time starting to walk without a "Go" for instance.
We did it for some 10 minutes and it really did the job of freeing our minds from software development brain cycles.

The last three iterations

In the fourth iteration I was pairing with the cucumber expert, but as he had done cucumber like two or three iterations he wanted to see something different.
Well, I told him we will write a lot of boiler plate in java that you even do not need to think about in ruby. But he was still interested to see it all done manually and he did not know Java as he claimed.
I was typing away trying to get some simple tests working. As well I wanted to extract a page object in the end with some better abstractions than in my previous iterations. We should have changed the keyboard every three edited lines but I was ignoring that to get thru.
The rubyist was watching and I explained a little of what all this boiler plate code did. I guess he was neither shaken nor stirred. After the session he said that he was glad not to do testing in Java. True.
Then all code was deleted.

The fifth iteration was with a really experienced Java guy who knew his refactorings. The only thing he was fighting against was my Mac asking how to type curly braces and the like.
I learned quite a lot how to be better at refactorings and we were philosophizing about how to "smoothly" do TDD right.
The fifth iteration had the focus of implementing the application outside in. Basically, we were just doing pure java development TDD style with no web app at all.
All code was deleted.

In the sixth iteration I was toast. I could just see that my group of three was trying some new cucumberish framework that was Java based but I could not follow anymore.
Was code deleted? I cant remember.

Having a long way home I walked out early during the retrospective of the last iteration and so was not able to attend the biergarden part.
Alas!

Thanks to the organizers and the people I paired with I learned a lot.
And now please delete all your code.