Posts tagged ‘Testing’

Programmierkatas

Auf den XP-Days Germany 2009 fand ein Format namens “TDD mit den Profis” statt. Die Idee ist, dass Paare bestehend aus einem TDD-Profi und einem nicht so erfahrenen TDDler gegeneinander antreten. Die Paare führen in kurzer Zeit TDD und Pair-Programming vor. Bei den XP-Days hatten die Paare in der Vorrunde 5 Minuten Zeit und im Finale 8 Minuten.
Ich bin mit meiner Pair-Partnerin ins Finale gekommen, musste mich dort aber mit dem zweiten Platz zufrieden geben.

In der Vorrunde konnten sich die Paare sehr frei aussuchen, was sie vorführen. Im Finale gab es vorgegebene Code-Katas (siehe Konzept der Code-Katas siehe Wikipedia). Für die Vorrunde hatten wir mehrere Tage für die Vorbereitung Zeit, für das Finale 2 Stunden.

Code-Katas hatte ich vorher bereits programmiert. Allerdings nicht so, wie es für die XP-Days-Sessions notwendig war. In der Kürze der Zeit lässt sich nur dann sinnvoll etwas zeigen, wenn man die Übung auswendig und flüssig vorführen kann. Und dafür muss man sie einüben. Und das bedeutet, die Kata in der Vorbereitung mehrfach zu programmieren und immer wieder zu variieren, um den besten Ablauf zu finden.

Und dieses mehrfache Programmieren derselben Aufgabe war entgegen meinen Erwartungen nicht langweilig, sondern sehr interessant und lehrreich. So haben wir auf der Konferenz meine Finalaufgabe (Primfaktorzerlegung) nochmal während des Community-Day programmiert (im Rahmen eines Coding Dojos) und auf der Rückfahrt von Karlsruhe mit der Bahn nach Hamburg haben Bernd Schiffer und ich die Code-Kata nochmal programmiert.

Robert Martin hat die Code-Kata sogar zu Musik vorgeführt und damit Programmierung in die Nähe einer Kunstform gebracht.

November 29, 2009 at 9:36 pm 2 comments

Lernen im dritten Quartal 2009

Damit habe ich mich im dritten Quartal 2009 beschäftigt:

  • Ich habe das Buch Subject to Change gelesen. Meine Eindrücke habe ich bereits im Blog beschrieben: Es geht darum, wie heute Produkte und Services entwickelt werden müssen. Das ganze passt wenig überraschend mit agilen Ansätzen wie Scrum ganz wunderbar zusammen.
  • Dann habe ich mich ziemlich intensiv mit Prolog beschäftigt und einige Beiträge in diesem Blog darüber veröffentlicht. Das war allemal horizonterweiternd – Prolog ist eben doch sehr anders als andere Programmiersprachen. Ich finde es nach wie vor Schade, dass Prolog heute ziemlich tot zu sein scheint und die Sprache nicht ernsthaft weiterentwickelt wird. Relektionen über Prolog.
  • In Prolog habe ich ann auch gleich ein kleines BDD-Framework gebaut und damit mein BDD-Verständnis verbessert.
  • Joseph Pelrine ist dafür verantwortlich, dass ich noch etwas über Teamdynamik gelernt habe: Hochproduktive Teams kochen.
  • Von einem Kunden habe ich mich belehren lassen, was die mögliche Produktivität verteilter Teams anbelangt.
  • Ein ganz kleines bisschen Perl habe ich gelernt. Und zumindest für kleine Skripte kann ich nicht erkennen, was an Perl schlecht sein soll.
  • In einem Projekt habe ich Selenium RC eingesetzt und den designierten Nachfolger Google Web-Driver.
  • Ich habe meine Rails-Kenntnisse deutlich vertieft. Dazu habe ich das Buch Rapid Web Development mit Ruby on Rails gelesen. Das ist nicht mehr ganz aktuell, aber ich hatte es ohnehin noch im Bücherregal stehen und für einen Überblick war es OK. Anschließend habe ich begonnen, eine echte (kleine) Anwendung in Rails zu programmieren und bin davon ganz angetan. Nur mit der Installtion unter Ubuntu hatte ich anfänglich einige Probleme.
  • Im Rails-Zusammenhang habe ich mich auch mit RSpec, Cucumber und Webrat beschäftigt. Auch das sieht für mich alles sehr schön und elegant aus. Das Oberflächentesten mit Webrat ist z.B. sehr schön einfach und schnell.
  • Bei einem Kunden habe ich mich etwas mit TestNG beschäftigt. Naja. Für TDD kann ich gegenüber JUnit keine Vorteile erkennen.
  • Ich habe mit dem Buch SOA in Praxis ein weiteres Buch aus dem Regal geholt, dass dort schon eine Weile stand. Mein Review dazu habe ich im Blog beschrieben. Das Buch war durchaus lohnenswert, auch wenn ich kein SOA-Fan bin.
  • Bei einem Kunden durfte ich erleben, wie Kanban in der Praxis eingesetzt wurde – zumindest anfänglich auch mit interessanten Schwierigkeiten.
  • Neben CSM-Kursen biete ich inzwischen auch CSPO-Kurse an. Bei der Vorbereitung des CSPO-Kurses habe ich viele Dinge über Product-Owner-Arbeit reflektiert und neu gelernt.
  • Und zum Beweis, dass ich noch nicht vollkommen Plem-Plem bin, habe ich auch etwas im Bereich außerhalb der IT gemacht. Ich habe beim Windsurfen Racejibe und Sinkerwende gelernt. OK, Racejibe geht bisher nur rechtsrum, aber das wird noch. Ich hoffe, auf einen milden und windreichen Jahresausklang.
  • Und dann habe ich mir von meinem kleinen Bruder zeigen lassen, wie Brustschwimmen und Kraulen richtig funktioniert. Und siehe da: Das einzige, was ich bisher richtig gemacht habe, dass ich eine Badehose anhatte. Immerhin erklärt es, warum ich so ein schlechter Schwimmer bin. Jetzt muss ich die richtige Technik “nur” noch üben.

Damit habe ich von dem, was ich mir für das dritte Quartal vorgenommen habe, fast alles geschafft. Nur Scala habe ich mir nicht angesehen. Ich fand es dann doch spannender einfach Rails zu programmieren und aus demselben Grund werde ich wahrscheinlich auch im vierten Quartal nicht dazu kommen, mir Scala anzusehen.

October 14, 2009 at 5:45 pm Leave a comment

XP-Days Germany am 26-28.11.09 in Karlsruhe

XP Days Germany ist die größte deutschsprachige Konferenz zur agilen Softwareentwicklung. Sie findet dieses Jahr vom 26. bis 28. November in Karlsruhe statt.

Einige Highlights:

  • Keynote von Alistair Cockburn
  • Zwei Halbtagestutorials mit begrenzter Teilnehmerzahl
  • Vier parallele Tracks am Hauptkonferenztag
  • Mehrere Pecha-Kucha-Blöcke
  • Community Day mit Open Space und World Cafe

Das detaillierte Programm,den Link zur Anmeldung und zahlreiche weitere Informationen gibt es auf http://www.xpdays.de

Laufende Neuigkeiten über Teilnehmerzahlen, freie Plätze, Programmänderungen etc. werden über Twitter verbreitet. Informationen dazu gibt es hier: http://xpdays.de/2009/twitter.html

Ich selbst werde mit einem Vortrag zum inkrementellen Entwurf und einem Pecha-Kucha-Vortrag zu Stop-the-Line vertreten sein.

Ich hoffe, wir sehen uns auf den XP-Days.

September 18, 2009 at 8:17 am 1 comment

XP-Days Germany 2009

Das Programm der XP-Days Germany 2009 ist jetzt online: http://xpdays.de/2009/programm.html

Ich selbst bin am Freitag mit einem Vortrag über “Inkrementelles Design” vertreten. Da ich ein Verfechter kurzer Vorträge bin, habe ich das Thema als 30-Minuten-Vortrag eingereicht. Einige der Reviewer hatten Zweifel, ob das Thema in 30 Minuten untergebracht werden kann. Das ist gut. Ich mag Herausforderungen.

Am Donnerstag halte ich eine Pecha-Kucha-Session zum Thema “Stop the Line in der Softwareentwicklung”. Pecha-Kucha ist ein modernes Vortragsformat, in dem genau 20 Folien für jeweils genau 20 Sekunden gezeigt werden. Der ganze Vortrag dauert dann exakt 6:40 Minuten. Bei der JAX 2009 haben wir das bereits einmal ausprobiert. Naja, ok: Ich habe ausprobieren lassen und mich auf die Organisation beschränkt. Auf den XP-Days muss ich jetzt selbst zeigen, ob ich das Format gut ausgefüllt bekomme.

Auf der JAX 2009 hatte mein Kollege Bernd Schiffer einen Pecha-Kucha-Vortrag über “Inkrementelles Design” gehalten, der jetzt auch als Video verfügbar ist. Für alle, die bei den XP-Days (oder der W-JAX oder sonstwo) einen Pecha-Kucha-Vortrag halten, ist das Video sicher eine ganz gute Inspiration und es zeigt auch, dass 20 Sekunden je Folie manchmal ziemlich lang sein kann 🙂

August 21, 2009 at 7:46 am Leave a comment

BDD for Prolog: How To

ProSpec is a RSpec (http://rspec.info) inspired BDD framework for Prolog. I created it during my experiments with Prolog. I suspect that I did some strange things. I would be pleased by any feedback on how to improve ProSpec or the examples. Send me an E-Mail: stefan AT stefanroock DOT de

Every ProSpec specification starts with describe(FixtureName) and ends with end_describe. Within these two predicates every specification is declared with it(SpecName/SpecCode).

We start with a very simple BDD spec for bowling.

bowling_spec.pro:

:- ensure_loaded('ProSpec.pro').
:- ensure_loaded('bowling.pro').

:- describe('Bowling'). 

generate_bowling_hits(_, 0).
generate_bowling_hits(Hit, Count) :- bowling_hit(Hit), Count2 is Count-1, generate_bowling_hits(Hit, Count2).

:- it('should score 0 for gutter game'/(
	generate_bowling_hits(0, 20),
	bowling_score(Score),
	assert_that(Score, equals:0)
)). 

:- end_describe.

bowling.pro:

bowling_hit(Count).
bowling_score(0).

With “run_specs.” the BDD spec runs:

Bowling...
...should score 0 for gutter game (passed)
Passed:1

1 specs passed

In the next step with specify the next behaviour increment:

bowling_spec.pro:

:- ensure_loaded('ProSpec.pro').
:- ensure_loaded('bowling.pro').

:- describe('Bowling'). 

generate_bowling_hits(_, 0).
generate_bowling_hits(Hit, Count) :- bowling_hit(Hit), Count2 is Count - 1, generate_bowling_hits(Hit, Count2).

:- it('should score 0 for gutter game'/(
	generate_bowling_hits(0, 20),
	bowling_score(Score),
	assert_that(Score, equals:0)
)). 

:- it('should sum hits of a game'/(
	generate_bowling_hits(2, 20),
	bowling_score(Score),
	assert_that(Score, equals:40)
)). 

:- end_describe.

“run_specs.” shows that this spec fails:

Bowling...
...should score 0 for gutter game (passed)
...should sum hits of a game
	Expected 40 equal to 0

We extend the bowling implementation:

bowling_hit(Count) :- assert(bowling_hit_def(Count)).

bowling_score(Score) :- 
	findall(Hit, bowling_hit_def(Hit), Hits),
	sumlist(Hits, Score).

Now the spec succeeds, but only once. The reason is the growing number
of “bowling_hit_def” facts. To avoid this problem ProSpec offers “setup_spec”.

bowling_spec.pro:

:- ensure_loaded('ProSpec.pro').
:- ensure_loaded('bowling.pro').

:- describe('Bowling'). 

generate_bowling_hits(_, 0).
generate_bowling_hits(Hit, Count) :- bowling_hit(Hit), Count2 is Count - 1, generate_bowling_hits(Hit, Count2).

:- dynamic(setup_spec/0).

setup_spec :- 
	retractall(bowling_hit_def(_)).

:- it('should score 0 for gutter game'/(
	generate_bowling_hits(0, 20),
	bowling_score(Score),
	assert_that(Score, equals:0)
)). 

:- it('should sum hits of a game'/(
	generate_bowling_hits(2, 20),
	bowling_score(Score),
	assert_that(Score, equals:40)
)). 

:- end_describe.

Now the spec succeeds every time.

There is a bunch of other assert_that predicates in ProSpec.pro. Have a look
and proceed: http://github.com/stefanroock/ProSpec/

July 27, 2009 at 5:05 pm Leave a comment

Tippfehler in Fit/Fitnesse-Artikel

Im Artikel zu FIT/Fitnesse habe ich im Fixture-Code einen Tippfehler. Die Diffferenz-Methode darf natürlich nicht so aussehen:


public class TaschenrechnerFixture extends ColumnFixture {

    public int Zahl1, Zahl2;
    private Taschenrechner taschenrechner;

    public int Summe() {
        return taschenrechner.addiere(Zahl1, Zahl2);
    }

    public int Differenz() {
        return taschenrechner.addiere(Zahl1, Zahl2);
    }
}

Stattdessen muss es natürlich lauten:


    public int Differenz() {
        return taschenrechner.differenz(Zahl1, Zahl2);
    }

Danke an Sebastian für den Hinweis.

July 20, 2009 at 8:37 am Leave a comment

Automatisierte Akzeptanztests mit Fit/Fitnesse

Im Java-Spektrum ist ein Artikel von mir zum Thema “Akzeptanztests mit Fit/Fitnesse” erschienen. Dieser Artikel ist jetzt auch Online als PDF verfügbar.

July 17, 2009 at 7:30 am 1 comment

Older Posts Newer Posts