I haven’t found any good intro to this online (only parts of it), so I will give my best to describe the process I took here.
The goal is, to create a ClickOnce installer for a .NET project,
which contains a dependency to a COM object. The quirk here is, that we have to deploy this COM object with
the project and we have no control over it. We just have been given a DLL, which in turn is a native COM object.
This year for the first time, I attended the SoCraTes (stands for Software Craftsmanship and Testing Conference) in Soltau, Germany.
It is organized by the Softwerkskammer, the Software Craftsmanship Communities in Germany.
I’m a member of this community since over 2 years now and heard a lot of good things about this conference. This year I finally had the time and was also lucky enough to grab a ticket (yes you have to hurry, as the number of participants is limited).
So let me give you some impressions of this awesome event:
This was as quite interesting experience, so here is a little braindump from me.
Why
In many companies a huge amount of time is wasted by fear and politics. That can range from fear about the own job, the position to things like “watermelon reporting” (all green on the outside, but don’t look inside). All this interferes an open communication.
Effective teamwork needs trust and trust brings saftey which leads to a more open and therefore efficient communication, because if you trust each other, there is no more any need to question everything oneself or the others have to say, there is no need for politics and fear.
This saves time, increases bandwith (by exchanging meaning and not just information). You also have more options in situations where you have to decide about things, because one knows about the otherwise hidden knowledge and skills of the other team members.
This week, at the meetup of my local software craftsmanship group, we did a mini code retreat
with the FizzBuzz kata. In advance I had a discussion with Benjamin, that this Kata could be a bit to easy for a code retreat. My point was here, that IMHO is not done completely. Most people stop on a function like this:
This is fine, as long you don’t want to extend the kata with different rules.
Imagine you got up to this point and now you get a new requirement:
Extend the Translation function so it prints
“Bang” for all values divisible by 7
“FizzBang” for values divisible by 3 and 7
“BuzzBang” for values divisible by 5 and 7 and
“FizzBuzzBang” for values divisible by 3, 5 and 7
Surely you could just add another if statement but how ugly is that.
This is the point, where the TDD-Part of the kata converts to a refactoring kata.
Here you can see my take on this kata.
It features a solution completely free of if statements and is quite good extendable. The resulting Translator class must never been touched anymore. All you have to do for different rules is to write a different RuleFactory. If you want to play you could even implement a RuleFactory which reads its rules from an XML file.
The purpose of these 12 questions is a test, if a company is able to create quality software.
12 years is a long time and as a Software Craftsman I dont’ agree with all of these questions anymore. So here is an updated proposal:
This is the video store refactoring kata from the book “Refactoring: Improving the Design of Existing Code” by Martin Fowler, Kent Beck, John Brant and William Opdyke.
The project file for IntelliJ IDEA resides on http://github.com/magicmonty/videostore
You can get the music under http://www.jamendo.com/de/track/72960/w.-a.-mozart-1756-1791-sonata-in-c-major-k.-521-for-piano-four-hands