<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>.NET Stories: Digitale Erfahrungen &#187; ALT.NET</title>
	<atom:link href="http://www.gmbsg.com/tag/altnet/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.gmbsg.com</link>
	<description>So einfach wie möglich. Aber nicht einfacher.</description>
	<lastBuildDate>Tue, 31 Aug 2010 22:21:29 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Me Likes Community Events</title>
		<link>http://www.gmbsg.com/me-likes-community-events/</link>
		<comments>http://www.gmbsg.com/me-likes-community-events/#comments</comments>
		<pubDate>Tue, 31 Aug 2010 22:19:19 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Topthema]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[4.0]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Code Review]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Dojo]]></category>
		<category><![CDATA[MSBuild]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[Unit Test]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=1299</guid>
		<description><![CDATA[Die Zeiten sind auf Community Events geeicht. Oder soll ich besser sagen Community Conference? Ich bleibe vorerst mal bei Community Conference. Eines dieser Community Conferences war letztes Wochenende: die See#. 
See#
Das von der .NET Usergroup Konstanz-Kreuzlingen organisierte Event hatte eine ...]]></description>
			<content:encoded><![CDATA[<p>Die Zeiten sind auf Community Events geeicht. Oder soll ich besser sagen Community Conference? Ich bleibe vorerst mal bei Community Conference. Eines dieser Community Conferences war letztes Wochenende: die <a href="http://www.seesharpparty.de/de/Start/page38393.htm">See#</a>. </p>
<h3>See#</h3>
<p><img src="http://www.gmbsg.com/wp-content/uploads/2010/08/seesharplogo.png" alt="seesharp" title="seesharp" width="252" height="94" class="alignright size-full wp-image-1304" />Das von der .NET Usergroup Konstanz-Kreuzlingen organisierte Event hatte eine eine sehr ansprechende Agenda und hochkarätige Speaker zu bieten. Meine Sessionliste:</p>
<ul>
<li>Windows Phone 7 Applications mit Silverlight, <a href="http://geekswithblogs.net/lbugnion/Default.aspx">Laurent Bugnion</a></li>
<li>IronRuby für .NET Developer, <a href="http://dotnet-forum.de/blogs/thorstenhans/">Thorsten Hans</a></li>
<li>ADO.NET Entity Framework in N-Tier Applikationen integrieren, <a href="http://sqlpractice.wordpress.com/">Robert Meyer</a></li>
<li>Code-Generierung mit dem Text Template Transformation Toolkit (T4), <a href="http://www.dnug-bern.ch/">René Leupold</a></li>
</ul>
<p>Besonders schade fand ich, dass ich in Ermangelung meiner Parallelisierungsfähigkeiten bei folgenden Sessions nicht dabei sein konnte, denn sie hätten mich brennend interessiert:</p>
<ul>
<li>Powershell für Entwickler, <a href="http://www.thomas-krause.de/">Thomas Krause</a></li>
<li>UI/UX &#8211; Grundlagen für Entwickler, <a href="http://www.roland-weigelt.de/">Roland Weigelt</a></li>
<li>Framework Design Guidelines &#8211; Wiederverwendbare Frameworks in C#, <a href="http://www.software-architects.com/Blogs/tabid/72/BlogID/5/Default.aspx">Rainer Stropek</a></li>
</ul>
<h3>SL4@WP7</h3>
<p>Naja, nicht so schlimm, denn ich wurde von meiner Sessionwahl keineswegs enttäuscht. Den Anfang machte Laurent mit Windows Phone 7 Entwicklung. Angenehm: er spricht deutsch! Er gab einen guten Überblick über die Funktionen des neuen WP7 und die Programmiermöglichkeiten, darunter Silverlight. Highlight hierbei ist sicherlich, dass Laurent live in der Session gegen ein echtes Device die Programmierbeispiele ausgeführt hat und mit der Webcam dem Publikum gezeigt hat. Nice!</p>
<h3>IR</h3>
<p>Danach ging es schon weiter. Thorsten Hans zeigte in seiner IronRuby-Session wirklich beeindruckend, dass das .NET Framework mit der CLR und DLR eine revolutionäre Programmierplattform ist. Er ging zunächst auf die DLR und deren Komponenten ein und steigerte während seiner Session stetig den Geekfaktor. Zunächst zeigte er, wie man mit IronRuby umgeht &#8211; das Handwerkszeug sozusagen. Danach wurde es schon cooler: .NET-Assemblies und IronRuby im Zusammenspiel: IronRuby-Skripte (mit Scope &#038; Context) aus .NET-Anwendungen aufrufen und vice versa. Als Beispiel zeigte Thorsten eine in Ruby geschriebene Validierung einer Kunden-Registrierung eines .NET-Programms. Ich war beeindruckt! Doch Thorsten ließ nicht locker und haute zum Schluß noch einen richtigen Knaller raus: Unit Testing einer .NET-Komponente mit IronRuby &#038; RSpec!</p>
<p>Gut, dass danach die Mittagspause anstand, dass musste ich erst mal verarbeiten :) In der Pause hatte ich dank Basti auch die Gelegenheit, den von <a href="http://blog.thomasbandt.de/39/2361/de/blog/sony-vaio-vpcs12v9eb-review.html">Thomas getesteten Sony Vaio VPCS12V9E/B</a> selbst einmal &#8220;anzutesten&#8221;. Ich muss sagen, dass Thomas die Messlatte ganz schön hoch legt, denn für meinen Geschmack ist die Verarbeitung des Sony wirklich gut. Das Gehäuse ist kein Shiny-Alu-Guß, aber auch kein Plastik. Die Chiclet-Tastatur ist ok, der Druck relativ sensibel. Performance gut, Display in Ordnung.</p>
<h3>EF4</h3>
<p>Nach der Mittagspause ging es zu Robert&#8217;s Entity Framework Session. Er ging zunächst auf die &#8220;Schwierigkeiten&#8221; der ersten Version des Entity Frameworks ein, um danach gleich mit den Neuerungen von EF4 nachzulegen. An seinem Vortrag besonders gefallen haben mir die vielen kleinen Beispiele aus der Praxis, mit denen Robert seine Expertise in diesem Bereich einmal mehr zu unterstreichen wusste. In der zweiten Hälfte der Session widmete er sich den neuen Features wie (echten) POCO-Support, Domain-First-Design und natürlich dem IObjectSet&lt;T&gt;. Robert ging auch auf Testbarkeitskriterien von EF4-Lösungen ein und nennte einige Leitfäden zum Testing. Fazit: eine guter EF4 Überblick mit wertwollen Praxisbeispielen vom Experten.</p>
<h3>T4</h3>
<p>Die letzte Session hatte es in sich: T4. René zeigte zunächst die Grundlagen. Was ist T4, Wieso T4. Aufbau, Architektur, Anwendung. So einfach kann eine Einführung sein. Doch dann ließ es sich auch Rene nicht nehmen, in die Tasten zu greifen. Exemplarisch an Anwendungsbeispielen wie z.B. EF-Templates oder Templates für Unit Testing ging er auf die Features der T4-Engine ein. Bemerkenswert: René lässt sich auch durch kleinere technische Probleme nicht aus dem Konzept bringen. Er hatte wirklich eine Fülle von Beispielen parat, mit denen er reichhaltigen Funktionalitäten von T4 erläuterte. Ein Text- und Code-Jongleur, kann ich da nur sagen.</p>
<p>Trotz dieser guten Sessions war mein Eindruck von See# nicht ganz perfekt &#8211; doch daran war ich selbst schuld. Durch die lange Anreise habe ich die Keynote von <a href="http://www.des-eisbaeren-blog.de/">Golo</a> verpasst. Die lange Reisezeit war schlußendlich auch der ausschlaggebende Faktor, warum ich leider nicht mehr bei der Grillparty und dem .NET Coding Dojo mit <a href="http://www.lieser-online.de/blog/">Stefan</a> dabei sein konnte. Sehr schade. Nichtsdestotrotz konnte ich wieder auf dem Event wirklich tolle neue Entwickler-Kollegen kennenlernen, darunter <a href="http://www.aspnetzone.de/blogs/peterbucher/">Peter Bucher</a>, <a href="http://www.aspnetzone.de/blogs/robertobez/">Roberto Bez</a>, <a href="http://www.aspnetzone.de/blogs/juergengutsch/">Jürgen Gutsch</a> und <a href="http://dotnet-forum.de/blogs/thorstenhans/">Thorsten Hans</a>. Für mich hat sich dadurch die Teilnahme an See# doppelt gelohnt.</p>
<h3>Let&#8217;s go to NRWConf!</h3>
<p><img src="http://www.gmbsg.com/wp-content/uploads/2010/08/banner125x125.gif" alt="nrwconf2010" title="nrwconf2010" width="125" height="125" class="alignleft size-full wp-image-1303" />Kaum ist die eine Community Conference zu Ende, steht die nächste schon vor der Tür &#8211; die <a href="http://www.nrwconf.de/2010/">NRWConf 2010</a> am 9./10. September steht an. Wenn man sich die <a href="http://www.nrwconf.de/2010/Event/Agenda">Agenda der NRWConf</a> ansieht, dann klingt das überaus vielversprechend. Also ich werde mir definitiv wieder eine Menge Sessions so zu Gemüte führen und vieles dazu lernen. Am Abend gibt es &#8211; wie auch bei der See# &#8211; ein .NET Coding Dojo. Diesmal jedoch mit meiner Wenigkeit als Operator. Ich denke es wird nicht nur eine Menge Spaß machen, sondern wieder einmal erkenntnisreich sein ;-)</p>
<p>Ich freue mich!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/me-likes-community-events/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Räumliche Nähe wird unterschätzt</title>
		<link>http://www.gmbsg.com/raumliche-nahe-wird-unterschatzt/</link>
		<comments>http://www.gmbsg.com/raumliche-nahe-wird-unterschatzt/#comments</comments>
		<pubDate>Fri, 20 Aug 2010 13:54:23 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Aktuell]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[Anforderungen]]></category>
		<category><![CDATA[Pair Programming]]></category>
		<category><![CDATA[Projektmanagement]]></category>
		<category><![CDATA[Prozess]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Team]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=1262</guid>
		<description><![CDATA[Mit Interesse habe ich den Artikel von Golo über Scrum-Teams und seine Meinung zu räumlicher Nähe in agilen Teams gelesen. Der Titel seines Artikels ist durchaus provokant: &#8220;Räumliche Nähe wird überbewertet&#8220;. 
Nun, dem muss ich deutlich widersprechen. Genau das Gegenteil ...]]></description>
			<content:encoded><![CDATA[<p>Mit Interesse habe ich den Artikel von Golo über Scrum-Teams und seine Meinung zu räumlicher Nähe in agilen Teams gelesen. Der Titel seines Artikels ist durchaus provokant: &#8220;<a href="http://www.des-eisbaeren-blog.de/post/2010/08/19/Raumliche-Nahe-wird-uberbewertet.aspx">Räumliche Nähe wird überbewertet</a>&#8220;. </p>
<p>Nun, dem muss ich deutlich widersprechen. Genau das Gegenteil ist der Fall &#8211; und sowohl sein Artikel als auch die Kommentare dazu sind in meinen Augen eine Bestätigung: Räumliche Nähe wird einfach noch viel zu oft unterschätzt!</p>
<h3>Professional Engineering</h3>
<p>Ich möchte das Beispiel von Golo aufgreifen, in dem er die gute Zusammenarbeit zwischen ihm und Peter schildert:</p>
<blockquote><p>&#8220;&#8230; Peter Bucher und ich sind ein solches Team. David Tielke und ich sind ein solches Team. Beide habe ich in meinem Leben noch nicht all zu oft getroffen – jeden von beiden höchstens fünf Mal. Und dennoch harmoniert die Zusammenarbeit in einem Ausmaß, das für Außenstehende nicht nachvollziehbar ist.</p>
<p>Auch wenn uns hunderte von Kilometern trennen, führen wir regelmäßig Programmieren in Paaren durch – per Skype und Teamviewer. Und die Zusammenarbeit funktioniert einwandfrei. Keiner von uns käme auf die Idee, zu sagen, dass wir effektiver oder effizienter sein könnten, wenn wir gemeinsam vor einem PC arbeiten würden.</p>
<p>Vermutlich wären wir dies noch nicht einmal, weil dann nicht jeder seine vertraute Arbeitsumgebung hätte, in der er sich rundum wohlfühlt&#8230;. &#8220;</p></blockquote>
<p>Das Beispiel ist ein Zeugnis von professioneller Software-Entwicklung. Da arbeiten offensichtlich zwei Profis zusammen. Sehr gut. Golo leitet daraus ab, dass es nicht zwingend notwendig sei, Teammitglieder an einem Ort, in einem Gebäude, in einem Raum zu haben, um effektiv ein &#8220;Team&#8221; zu sein. Nun, das mag ja schön und gut sein. Aber Golo: Hast Du denn Vergleiche? Und wenn ja, hast Du gemessen, wie &#8220;effektiv&#8221; denn beides ist? Ich befürchte nein. Wäre dem so, dann wäre mit großer Wahrscheinlichkeit Dein Fazit anders ausgefallen.</p>
<p>Was ich damit zum Ausdruck bringen will, ist, daß Golo und Peter wohl nie in einem Raum über längere Zeit zusammen gearbeitet haben. Ich unterstelle das jetzt einfach einmal Golo & Peter; bitte korrigiert mich und verzeiht mir, wenn dem nicht so ist. Es dient mir zur Illustration meiner Perspektive zum Thema.</p>
<p>Also, wäre dem so, so hätte Golo gar keinen Vergleich der Effektivität &#038; Effizienz des Teamgefüges zwischen ihm und Peter. Beide sind ausgewiesene Profis in der Software-Entwicklung und schaffen aus der Distanz gemeinsam gute und effiziente Teamarbeit. Der Artikel von Golo beweist es. Man stelle sich nur vor, welche Produktivität und Ingenieursleistung möglich wäre, wenn zwei solche Profis an einem Tisch arbeiten würden. Wow.</p>
<p>Damit sind wir auch schon an einem wichtigen Punkt. Agile Software-Entwicklung und deren Verfahrensweisen behaupten nicht, dass es notwendig sei, ein Team an einem Fleck zu haben, um (gut) Software zu entwickeln. Aber sie behaupten, dass sich spätestens mittelfristig die Produktivität &#038; Effizienz eines Teams steigert, wenn sie an einem Fleck miteinander zusammenarbeiten. Diese Behauptung ist kein Wunschtraum, sondern messbar &#038; belegbar.</p>
<p>Doch es gibt noch einen weiteren, ganz entscheidenden Aspekt der Forderung nach Teamnähe in der Agilität. Golo überspringt in seiner Betrachtung meines Erachtens die Interdisziplinarität agiler Teams. Das ist für mich besonders verwunderlich, zumal er in seinem gelungenen Artikel über die <a href="http://www.des-eisbaeren-blog.de/post/2010/08/18/Featurebezogene-Entwicklung.aspx">Feature-Orientierung in agilen Methoden</a> sich selbst genug Indizien gibt, die interdisziplinäre Aufstellung von Teams zu fordern &#038; zu fördern.</p>
<h3>Agile Teams sind Interdisziplinär</h3>
<p>Was heisst das? Das heisst, erst einmal, das Entwickler alleine kein Team sind. Zumindest mal in der agilen Software-Entwicklung nicht. Ein agiles Team ist ein Team, welches eigenständig dazu in der Lage ist, das geforderte Produkt bzw. deren Features ausliefern zu können. Manchmal &#8211; besser gesagt: eher selten &#8211; reichen dazu Entwickler. Doch meist braucht es mehr, viel mehr. Es braucht Produktmanager, Systemingenieure, Usability-Experten, Designer, Tester und manchmal sogar noch mehr, um ein Feature eines Produktes wirklich fertigstellen zu können.</p>
<p>Ein agiles Team ist ein Team, welches all diese Rollen und Aufgabenbereiche berücksichtigt und mit den Teammitgliedern umsetzen kann. Dass heisst nicht unbedingt, dass Designer ein &#8220;fester Bestandteil&#8221; des Teams sein muss, wenn er nur zwei Websites designen soll, das Produkt aber weitaus mehr darstellt (z.B. im Backend oder durch Dienste). Doch wichtig ist hier die Erkenntnis, dass ein agiles Team interdisziplinär ist; idealerweise sogar mit dem Kunden (oder Kundenvertreter) an seiner Seite.</p>
<p>Vor diesem Hintergrund macht die Forderung nach räumlicher Nähe von Teammitgliedern in einem Team noch viel mehr Sinn. Leider gibt es noch viel zu oft die Situation, dass Entwickler von der Marketing-Abteilung die Anforderungen über ein Feature (&lt;Ironie&gt;als &#8220;Story&#8221; natürlich, haha&lt;/Ironie&gt;) in einem &#8220;agilen&#8221; Ticketsystem vorgesetzt bekommen. Die Entwickler &#8220;sprinten&#8221; dann und liefern das Ergebnis an die Testabteilung, um danach ein Paket der Infraktruktur bzw. Installation-Engineers &#8220;über den Zaun&#8221; zu werfen. In meinen Augen haben es solche Teams echt schwer, denn sie sind nicht agil, sondern fragil.</p>
<h3>Keine Scheu vor Transparenz</h3>
<p>Die Emergenz, die durch interdisziplinare Teams entsteht, ist nämlich erst dann wirklich mess- und spürbar, wenn die Kommunikationsmittel als auch die Kommunikationsbarrieren untereinander so gering wie möglich ist. Doch nicht nur gute Kommunikation ist ein Ziel der Co-location. Ein aus meiner Sicht wesentlich wichtigerer Faktor ist der Faktor der Transparenz.</p>
<p>Durch die Nähe zueinander sieht man auch, was der andere so macht. Soll heissen, man lernt seinen Tagesablauf, seine Aufgaben, seine Tools, seine Herausforderungen &#8211; na eben das ganze Arbeitsumfeld. Umgekehrt sehen andere, mit welchen Dingen man selbst tagtäglich konfrontiert ist und was es tatsächlich bedeutet, Software zu entwickeln. Durch die Transparenz entsteht mehr Verständnis zu der Aufgabe und der Leistung des anderen Teammitglieds. Man versucht sich gegenseitig zu helfen und aufzubauen. Das wiederum hilft der Kommunikation und der Produktivität im Team.</p>
<p>Abschließend kann ich nur sagen, dass ich nicht nur ein Befürworter von räumlicher Nähe bin, sondern als Agilist versuche, so nah wie möglich an meinen Teammitgliedern und dem Kunden dran zu sein. Manchmal macht man es sich meiner Meinung nach zu einfach, wenn man Distanzen unter gemeinsam arbeitenden Kollegen als gegeben hinnimmt.</p>
<h3>Be Agile!</h3>
<p>Ich möchte in diesem Zusammenhang gerne nochmal an zwei Punkte des <a href="http://agilemanifesto.org/">agilen Manifests</a> erinnern: People over Process (and Tools), sowie Collaboration over Contracting. Für mich steht fest: wer von sich behaupten möchte, agile Software-Entwicklung zu betreiben, der wird früher oder später die Vorteile von räumlicher Nähe von Teams erkennen und versuchen, diese Nähe von Teams so gut wie möglich herzustellen. Alles andere sind in meinen Augen nur Lippenbekenntnisse und Halbwahrheiten über Agilität.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/raumliche-nahe-wird-unterschatzt/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>.NET Coding Dojo @ Avanade</title>
		<link>http://www.gmbsg.com/dotnet-coding-dojo-avanade/</link>
		<comments>http://www.gmbsg.com/dotnet-coding-dojo-avanade/#comments</comments>
		<pubDate>Sun, 08 Aug 2010 22:50:11 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Aktuell]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[3.5]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[Code Kata]]></category>
		<category><![CDATA[Code Review]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Dojo]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=1245</guid>
		<description><![CDATA[Es war ein grandioses .NET Coding Dojo in München am letzten Mittwoch. Wir waren zu Gast bei Avanade und haben uns von der ersten bis zur letzten Minute sehr wohl gefühlt. Dank der tollen Organisation gab es nichts zu bemängeln ...]]></description>
			<content:encoded><![CDATA[<p>Es war ein grandioses .NET Coding Dojo in München am letzten Mittwoch. Wir waren zu Gast bei <a href="http://www.avanade.com/de">Avanade</a> und haben uns von der ersten bis zur letzten Minute sehr wohl gefühlt. Dank der tollen Organisation gab es nichts zu bemängeln und vieles zu bestaunen. Den Anfang machte da das reichhaltige Empfangsbuffet, welches einen geschmackvollen Beitrag für eine angenehme und gelassene Atmosphäre leistete.</p>
<p>Wohl nicht zuletzt durch diese &#8220;Stärkung&#8221; zu Beginn war die Teilnehmerschaft bei diesem Dojo besonders motiviert. Nach der obligatorischen Begrüßung ging es auch schon an die Wahl des Modus und des Kata&#8217;s. Wir haben uns nach Abstimmung für den <a href="/dotnet-coding-dojo/modes">Prepari-Modus</a> entschieden und uns wieder einmal an das sagenumwobene <a href="http://codingdojo.org/cgi-bin/wiki.pl?KataBankOCR">Kata BankOCR</a> ausgesucht. Auf Grund der Teilnehmerzahl haben wir auch die Gruppe in zwei Teams und separate Räumlichkeiten aufgeteilt. </p>
<div style="float:right; padding-left:8px;">
<object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13984765&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=ffffff&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=13984765&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=ffffff&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object>
<p><a href="http://vimeo.com/13984765">munich .net coding dojo @ avanade</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
</div>
<p>Dabei gab es diesmal einige Besonderheiten. Bei Avanade haben die Meetingräume Namen von berühmten Münchener Persönlichkeiten &#8211; so kam es auch, dass wir den Teams auch diese Namen gaben. Darüber hinaus haben beide Teams eigene &#8220;Operator&#8221; und &#8220;Coder&#8221; gehabt. Für das Team &#8220;<a href="http://de.wikipedia.org/wiki/Leo_von_Klenze">Von Klenze</a>&#8221; war der Operator diesmal Christian; die Macht über die Tasten hatte Tom. Das Team &#8220;<a href="http://de.wikipedia.org/wiki/Oskar_von_Miller">Von Miller</a>&#8221; wurde durch den Operator Andreas unterstützt, während Dimi über die Kontrolle über den Rechner hatte.</p>
<p>Nach der Teamaufteilung ging es schon los. 45 Minuten lang wurde kräftig designed, diskutiert und programmiert. Bei beiden Teams war das TDD schon in Fleisch und Blut übergegangen, denn schließlich hatten beide zur 5 minütigen Pause schon Tests und Code aufzuweisen. Zuversichtlich ging es dann auch schon in die zweiten 45 Minuten. Mein persönlicher Eindruck war, dass gerade diese zweite Runde viele Aha-Effekte auslöste damit den Erfahrungsaustausch besonders förderte.</p>
<p>Den Abschluß des Dojo&#8217;s machte eine (diesmal etwas längere) Retrospektive. Die Teilnehmer gaben Feedback zum Code, zur Teamleistung und zur eigenen Perspektive. Wiederum bemerkenswert war die allgemeine Zufriedenheit über den Ablauf des Dojo und die geleisteten Resultate. Nach ein paar Schlußworten meinerseits ging es dann noch (mit nahezu gleicher Teilnehmerzahl) in ein Bistro in der Nähe auf eine ausgedehntere Nachbesprechung eines der besten .NET Coding Dojo&#8217;s, die ich jemals erlebt habe. Vielen Dank an alle Teilnehmer und an Avanade!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/dotnet-coding-dojo-avanade/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ratatouille Estimation Scale</title>
		<link>http://www.gmbsg.com/ratatouille-estimation-scale/</link>
		<comments>http://www.gmbsg.com/ratatouille-estimation-scale/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 18:19:56 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Topthema]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[Anforderungen]]></category>
		<category><![CDATA[Projektmanagement]]></category>
		<category><![CDATA[Prozess]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[Software-Entwicklung]]></category>
		<category><![CDATA[Team]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=1158</guid>
		<description><![CDATA[Manchmal ist es nicht einfach, umzudenken. Manchmal will man verstehen, tut sich aber schwer. Mir ist das schon einige Male passiert. Ich denke, jedem passiert das ab und an einmal.
So oder ähnlich erging es auch dem ein oder anderen beim ...]]></description>
			<content:encoded><![CDATA[<p>Manchmal ist es nicht einfach, umzudenken. Manchmal will man verstehen, tut sich aber schwer. Mir ist das schon einige Male passiert. Ich denke, jedem passiert das ab und an einmal.</p>
<p>So oder ähnlich erging es auch dem ein oder anderen beim jüngsten Estimation Meeting, welches wir in einem Projekt durchgeführt haben. Für einige war es das erste Schätzmeeting, bei dem nicht einfach so Manntage herausposaunt wurden, sondern das von agilen Methoden wie XP oder Scrum bekannte schätzen in <a href="http://de.wikipedia.org/wiki/Extreme_Programming#Aufwandsabsch.C3.A4tzung">Relationsgrößen (z.B. Story Points)</a> umgesetzt wurde.</p>
<p>Für den Anfänger ist der Zeitbezug im Schätzungsverfahren meist so manifestiert, dass er sich schwer tut, überhaupt anders denken und schätzen zu können. Die erste, wichtige Hürde hin zum relativen schätzen ist eine klare Vorstellung davon, was nun der Unterschied zwischen größenorientiertem Umfang und zeitorientiertem Aufwand ist. Um den Teilnehmern und Neulingen im agilen Schätzzirkus den Einstieg zu erleichtern, habe ich mich einer kleinen Metapher bedient:</p>
<p><a href="http://www.gmbsg.com/wp-content/uploads/2010/07/ratatouille_scale.jpg"><img src="http://www.gmbsg.com/wp-content/uploads/2010/07/ratatouille_scale.jpg" alt="ratatouille_scale" title="ratatouille_scale" width="700" height="495" class="aligncenter size-full wp-image-1161" /></a></p>
<p>Da ist er, der „<strong>Ratatouille Estimation Scale</strong>“. Klassisch, einfach. Fibonacci und am Ende Hightower-Zahlen. Das war’s. Doch es ist mehr dahinter als nur die blanken Zahlen. Es ist die Metapher, die Schätzen besonders geholfen hat.</p>
<p>Denn der Film „<a href="http://disney.go.com/disneyvideos/animatedfilms/ratatouille/">Ratatouille</a>“ und die Liebe zu Gaumenschmaus ist ein schönes Beispiel, an dem sich größenorientiertes Schätzen erklären lässt. Bei der Menge der Köstlichkeiten geht es nämlich nicht darum, wie „schnell“ man diese Leckereien herunterwürgen kann. Es geht auch nicht darum, einfach wahllos seinen Hunger zu befriedigen. Nein, es geht darum, den <a href="http://www.youtube.com/watch?v=wlCAq45TcxU">Umfang und Wert der Köstlichkeiten zu erfassen</a> ;-) </p>
<p>Nur ein Häppchen? Wohl eher eine 1 oder 2. Ein echtes Stück Käse? Eher die 5. Viel Käse und Trauben dazu? Lecker. An die 20. Kistenweise Käse, Gemüse, Obst und Wein? Wow. 50 oder mehr!</p>
<p>Die Besonderheit dabei: Es wird schnell deutlich, dass es nicht um die Zeit geht. Schließlich kann man ein Stück Käse sicherlich in ein paar Stunden „abfrühstücken“ – oder aber scheibchenweise über eine Woche lang genießen. Mit steigendem Umfang wird es allerdings schwerer. Denn jetzt kommen andere Lebensmittel hinzu, die vielleicht andere Haltbarkeitsmerkmale aufweisen oder aber besondere Behandlung bzw. Lagerung benötigen. Das ist ein relativ schönes Bild für den Begriff der “Komplexität im Umfang“.</p>
<p>Den Neulingen im Estimation Meeting hat diese Metapher sehr geholfen, denn schon nach den ersten paar Schätzrunden war die &#8220;Zeit&#8221; in der Besprechung der Features „wie verschwunden“ :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/ratatouille-estimation-scale/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Unit Tests sind immer dabei</title>
		<link>http://www.gmbsg.com/unit-tests-sind-immer-dabei/</link>
		<comments>http://www.gmbsg.com/unit-tests-sind-immer-dabei/#comments</comments>
		<pubDate>Sun, 11 Jul 2010 23:20:17 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Aktuell]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[Anforderungen]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[Code Kata]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Dokumentation]]></category>
		<category><![CDATA[Objekt-Orientierung]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Unit Test]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=1133</guid>
		<description><![CDATA[Vor knapp einer Woche stellte Stefan die Frage „Wohin mit den Tests?“ gestellt. Er selbst schreibt, er trenne die Implementierung und deren Tests strikt, ließ sich allerdings zu einem Experiment hinreißen, in dem er Implementierung und Tests in einem einzigen ...]]></description>
			<content:encoded><![CDATA[<p>Vor knapp einer Woche stellte Stefan die Frage „<a href="http://www.lieser-online.de/blog/?p=235">Wohin mit den Tests</a>?“ gestellt. Er selbst schreibt, er trenne die Implementierung und deren Tests strikt, ließ sich allerdings zu einem Experiment hinreißen, in dem er Implementierung und Tests in einem einzigen Projekt ließ. Alles in einer Assembly also. Motiviert wurde er wohl durch meine Aussage, dass es <a href="http://www.gmbsg.com/auf-dem-eisberg/">schlichtweg einfach nicht mehr zeitgemäß</a> ist, Tests vom SUT zu trennen.</p>
<p>Und genau so ist es auch. Zumindest für mich. Ich habe lange Zeit Tests und Implementierung in separaten Projekten entwickelt. Bis ich bemerkt habe, dass es mir nicht hilft, sondern mich eher bei meiner Entwicklung stört. Seitdem halte ich Tests und Implementierung immer ganz nah beieinander, sozusagen „Seite an Seite“. Ich möchte in diesem Post meine Beweggründe &#038; Konsequenzen für Side-by-Side-Specs (oder Near-Specs, wie ich es gerne nenne) schildern, und somit meine Antwort auf Stefan’s Frage geben.</p>
<p>Nun zunächst einmal beschränke ich mit bei den Near-Specs auf Unit Tests. Ganz klassisch im Sinne des TDD. Integrationstests sind bei mir nach wie vor Far-Specs, also separate Projekte. Doch es soll ja um die Unit Tests gehen, besser gesagt um Tests, die aus dem Test-First-Ansatz heraus entstehen. Das können Tests bei TDD oder aber auch Specs bei BDD sein. Ergo: Tests, mit denen ich meinen Code designe &#038; entwickle, halte ich sehr nah am Code.</p>
<h3>Verhalten greifbar formen</h3>
<p>Doch wieso sind bei mir die Tests nun an der Implementierung dran? Es gibt einen ganz einfachen und für mich auch unschlagbar effektiven Grund: Die Tests sind greifbar. Sie sind dort, wo ich sie brauche, nämlich an dem Verhalten, für das ich sie zur Spezifikation gebraucht habe. Seit dem ich die Tests an der Implementierung habe, „forme“ ich auch mehr und öfter. Soll heissen: Ich führe öfter und effizienter Refactorings durch. Nicht nur vom SUT, sondern natürlich auch von den Tests selbst.</p>
<p>Überhaupt ist es mit den Tests im Implementierungsprojekt ein ganz anderes, viel effizienteres arbeiten. Wenn ich nach einiger Zeit wieder einmal in einem Projekt etwas zu tun habe, schaue ich mir die Tests an. Das Schöne bei den Near-Specs ist jetzt, dass ich sehr schnell zwischen Spezifikations- und Implementierungssicht wechsle und deutlich zügiger navigieren kann. Das fällt mir besonders bei Tests mit mehreren Abhängigkeiten / Mocks auf.  Ich komme mit dieser Art von „Code lesen“ viel besser zurecht als vorher mit dem hin- und herspringen zwischen mehreren Projekten.</p>
<p>Zugegeben, anfangs tat ich mir noch ein wenig schwer, denn schließlich ist die Anzahl der Testklassen &#8211; genereller: die Menge an Testcode &#8211; für ein SUT meist deutlich mehr. Neben der Umgewöhnung des „nicht mehr über Assembly-Boundaries“ hinweg arbeitens hatte ich das Gefühl, dass mich der Testcode „stört“ oder mir „im Weg steht“. Doch dieses Gefühl war schnell wieder weg, als ich das Prinzip auf größere Projekte angewendet habe und immer wieder die Tests für die Spezifikation und das Codeverständnis gebraucht habe. Spätestens dann war bei mir die Erkenntnis da: Side-By-Side-Specifications Rule!</p>
<p>Doch mit dieser „Colocation“ der Tests an die Implementierung tauchen neue Fragen auf. Eine ganz besonders oft gestellte Frage ist die der Auslieferung der Tests in Release-Assemblies. Es ist schließlich erstrebenswert, nur das in ein Release einfliessen zu lassen, was auch wirklich vom Benutzer gebraucht wird: die Funktionalität. So stand ich auch vor dieser Aufgabe, welches sich aber sehr schnell und vor allem einfach bewältigen ließ.</p>
<h3>Reduce to the Max</h3>
<p>Die Idee ist denkbar einfach: Wenn ich Tests und Implementierung zur Entwicklungszeit nicht trenne, dann trenne ich sie eben später, undzwar zur Auslieferungszeit. In einfachen Worten: der Build muss diese Aufgabe erledigen. Da ich sowieso meinen Code über Build-Skripte bauen lasse, lag es sehr nah, diese Skripte einfach anzupassen. Für meine eigenen Projekte habe ich oft ein kleines Powershell-Skript. Bei größeren Projekten oder CI-Umgebungen ist der Aufruf eines eigenen Post-Clean-Events vor dem Build ein guter Extension-Point.</p>
<p>Als ich die Menge und den Inhalt der Kommentare bei Stefan’s Post gesehen habe, dachte ich mir nur: warum schreiben so viele darüber und finden es „schwierig“ oder „unsauber“, ohne es offensichtlich einmal probiert zu haben? Ich habe es probiert und ich fand es überhaupt nicht schwierig – ganz im Gegenteil. Jetzt ist das für mich eine viel angenehmere, effizientere und vor allem intuitivere Arbeitsweise. Das Build-Skript zum filtern der Testartefakte ist denkbar einfach, bei mir sind das meistens nur so 10 bis 20 Zeilen. Schließlich ist es ja auch „nur“ ein Release-Build. Ich rufe es nicht die ganze Zeit auf wie ein CI-Build, und CD mache bzw. brauche ich derzeit auch nicht.</p>
<p>„Soooo lange, wie ich brauche, diese Kommentare überhaupt zu lesen, brauche ich nicht einmal, wenn ich sogar das Build-Skript per TDD erstelle“ war mein Gedanke, als ich mit dem Lesen der Kommentare fertig war. Und da ich ein Freund von <a href="http://twitter.com/ilkerde/status/18264412106">empirischen Erkenntnissen</a> bin, dachte ich mir: „Auf geht’s, das machst Du jetzt!“. Gesagt getan. Das <a href="http://github.com/ilkerde/funbench/tree/master/codekatas/fizzbuzz/fizzbuzz-sidebyside/">Ergebnis</a> kann man sich auf github ansehen. Erkenntnis: Die Entwicklung des Build-Skripts (ohne TDD Framework und mit meinen „bescheidenen“ Powershell-Kenntnissen) hat etwas mehr als eine Stunde gedauert. So lange habe ich in etwa auch zum Lesen der Kommentare gebraucht ;-)</p>
<h3>Separation of Concerns</h3>
<p>Doch zurück zum Thema. Beim Lesen der Kommentare ist mir auch aufgefallen, dass man öfter das Argument der „Separation of Concerns“ (SoC) gegen die Zusammenführung von Tests und Implementierung anbringt. Es sei im Sinne der SoC, Tests von der Implementierung zu trennen. Auch gute Freunde von mir, wie z.B. <a href="http://twitter.com/tehlike">Tehlike</a> – für den ich im Übrigen diesen Post <a href="http://www.gmbsg.com/to-whom-it-may-concern/">auch auf Englisch verfasst habe</a> &#8211; entgegneten mir das gleiche Argument. Dazu mein Statement:</p>
<p><strong>Tehlike, yanılıyorsun! ;-)</strong><br />
<i>(Auf deutsch: Tehlike, Du irrst Dich!)</i></p>
<p>Ja, ich denke diejenigen irren sich, die SoC als Argument für eine Trennung von Tests &#038; Implementierung anbringen. Sie irren sich meiner Meinung nach sogar gewaltig. Denn SoC ist in meinen Augen bei genauerer Betrachtung sogar ein Argument für die Zusammenlegung von Tests und Implementierung.</p>
<p><a href="http://en.wikipedia.org/wiki/Separation_of_concerns">Separation of Concerns</a> besagt nämlich, dass unterschiedliche Zuständigkeiten eines Objekts voneinander getrennt werden sollten. Zuständigkeiten sind im Sinne der Domänenmodellierung und Systemanalyse Aspekte von Verhalten und Funktionalität. Ergo: Unterschiedliche Zuständigkeiten eines Verhaltens sollten voneinander getrennt werden. Ein schönes Beispiel ist der Taschenrechner. Die Funktionalität des Addierens des Taschenrechners gestaltet sich aus dem Tastenfeld, der Recheneinheit, und der Anzeige. All das sind Aspekte der Funktionalität, die in eigenständige Zuständigkeiten münden. Im Sinne der „Separation of Concerns“ sind diese Aspekte zu trennen und damit die Komponentenorientierung und Wiederverwendbarkeit zu stärken.</p>
<h3>Completeness of Concern</h3>
<p>So weit, so gut. Doch Separation of Concerns bedeutet für mich im Umkehrschluß auch, dass man eine Zuständigkeit einer Funktionalität auch zusammenhalten sollte. Ein einziger „Concern“ sollte in sich geschlossen sein. „Das ist er doch automatisch“ denkt man sich. Naja, ganz so einfach ist es meiner Meinung nach nicht. Denn eine Zuständigkeit einer Funktionalität findet man in der Software-Entwicklung oftmals nicht als „ganze Einheit“ an einem Fleck, sondern überall verteilt.</p>
<p>So wird z.B. in der klassischen Softwareentwicklung die Zuständigkeit in den Requirements erfasst. Man findet sie in der Use-Case-Dokumentation und in UML-Diagrammen wieder, diesmal mit ein oder zwei Szenarien. Natürlich wird das Verhalten und dessen Aspekt auch in den Tests manifestiert – dazu sind sie ja da. Und – wer hätte das gedacht – die Funktionalität findet man auch im Code wieder. Resultat: Ein einziger Concern, der im Entwicklungsprozess an allen möglichen Stellen auftaucht. In einem solchen Szenario ist es für den Entwickler meistens wie ein Puzzle, bei dem die Puzzlestücke überall sind – nur nicht auf dem Tisch.</p>
<p>Es ist also für die „Vollständigkeit einer Zuständigkeit“ nicht hilfreich, Tests und Implementierung voneinander zu trennen. Weiterhin hat das Trennen von Tests und Implementierung nichts mit Separation of Concerns zu tun, denn schließlich geht es sowohl bei den Tests als auch bei der Implementierung um einen einzigen Concern – dem Aspekt der Funktionalität, die das SUT eben abbilden soll.</p>
<p>Es ist gerade die Fraktion der BDD-Anhänger, die genau diesem Umstand mit all Ihren Argumentationen und Prinzipien hervorheben möchten. Sie reden nicht von Tests, sondern von Spezifikationen, sie reden nicht über Verifikation, sondern über Verhalten. Ja, sie gehen sogar soweit und reden im Sinne der Context-Specifications von „Concerns“, also „Zuständigkeiten“. Das alles sind klare Hinweise, das die Spezifikation eines Verhaltens und deren Umsetzung als unzertrennliches Paar zu betrachten sind. Übrigens ist diese „Expressivität“ auch ein Grund, warum „BDD“ so gut geeignet ist für Einsteiger in TDD bzw. Test-First.</p>
<h3>Feels just like it should</h3>
<p>Wenn man mal eine gewisse Zeit per TDD/BDD entwickelt, dann fällt einem oft auf, dass man bei jeder Änderung mindestens zwei Dinge ändert. Man ändert oder erweitert die Tests und man ändert oder erweitert die Implementierung. Ein Verhalten, eine Zuständigkeit, doch zwei Perspektiven, zwei Änderungspunkte. </p>
<p>Das ist bei Far-Specs, (also getrennten Tests und Implementierung über Assembly-Boundaries) genauso wie auch bei Near-Specs (Tests &#038; Implementierung Seite-An-Seite). Doch bei Near-Specs ist es einfacher, schneller und intuitiver, Änderungen am System durchzuführen. Darüber hinaus wird das Streben nach „Vollständigkeit eines Verhaltens und deren Zuständigkeit“ gestärkt. Das wiederum zahlt auf Lesbarkeit, Wartbarkeit und Flexibilität ein.</p>
<p>Seit nun seit knapp 3 Monaten entwickle ich Unit Tests, TDD &#038; BDD ausschließlich per „Side-By-Side-Specifications. Diese „andere“ Art der Codeorganisation ist für mich äußerst angenehm und effektiv gleichermaßen. Für mich ist es ein stückweit näher dran am „TDD-Spirit“, dem test- bzw. spezifikationsgetriebenen designen und entwickeln von Software. Mit Tests &#038; Implementierung nebeneinander fühlt es sich so an, wie es eigentlich sein sollte. </p>
<p>Also: <a href="http://www.youtube.com/watch?v=9LCEsRno1cg">Feels just like it should</a> ;-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/unit-tests-sind-immer-dabei/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>To Whom It May Concern ?!?</title>
		<link>http://www.gmbsg.com/to-whom-it-may-concern/</link>
		<comments>http://www.gmbsg.com/to-whom-it-may-concern/#comments</comments>
		<pubDate>Sun, 11 Jul 2010 23:16:33 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[Anforderungen]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[Code Kata]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Dokumentation]]></category>
		<category><![CDATA[MSBuild]]></category>
		<category><![CDATA[Objekt-Orientierung]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=1144</guid>
		<description><![CDATA[Note: Diesen Artikel gibt es auch auf Deutsch
It’s been something like a week since Stefan asked a provoking question in his blog (german): „Where to put the Tests?” He wrote that he’s strictly separating tests from their implementation in separate ...]]></description>
			<content:encoded><![CDATA[<div style="background-color: #dedede;margin:2px;"><small>Note: <i>Diesen Artikel gibt es auch auf <a href="http://www.gmbsg.com/unit-tests-sind-immer-dabei/">Deutsch</a></i></small></div>
<p>It’s been something like a week since Stefan asked a provoking question in his blog (german): „<a href="http://www.lieser-online.de/blog/?p=235">Where to put the Tests?</a>” He wrote that he’s strictly separating tests from their implementation in separate projects. However, motivated by a statement of me, he gave the idea of having tests &#038; implementation in the same project a try. Wow, all code in one assembly. He as well as a punch of commentators on his blog came to the conclusion, that separating tests from implementation using separate projects is better. I argue the converse.</p>
<p>It’s simply <a href="http://www.gmbsg.com/auf-dem-eisberg/">old-fashioned style to separate tests &#038; implementation with separate projects</a>. I did separate my tests from implementation code for years. However, about half a year ago, I realized that this separation doesn’t help me much. Instead, it hinders my development process. Since then I keep tests &#038; implementation together in one project. They are located as near to each other as possible. Let’s name this “side-by-side” residency. In this post I want to show and explain the main reasons, consequences and experiences in favor of “side-by-side specifications” or “near specs”.</p>
<p>Well, first of all, I reduce the practice of „near specs” to unit tests only. Just as in classical sense of TDD. Integration tests and verification-driven tests are located in separate projects (thus being “far specs”), as usual. For me, putting tests and implementation altogether in one project makes sense in test-first approaches. That is, TDD testing or BDD specifications. Ergo: It’s about tests I use to drive my implementation. Tests, which I’m using to design and develop the desired functionality.</p>
<h3>The grip of behavior</h3>
<p>So, what’s the point then to put tests and implementation side-by-side? In my opinion there’s a quite naive, yet effective reason: You get grip of your tests. The tests are simply there. They’re where I need them; they’re there where I expect them. They are right there where the behavior is. Since I keep tests next to my implementation, I’m just better able to “put them in shape”. Means: I do refactorings a lot more effective and frequent. Naturally not only on SUT, but tests as well.</p>
<p>Generally speaking, it’s a kind of different, more efficient style of development to work with implementation &#038; tests right at hand. Coming back to projects after some time makes it a breeze. I just look and read the tests. Then, I navigate frequently between tests and implementation to understand the details. “Near specs” make it less painful and more pleasant to read the code. This is especially the case for tests where several dependencies / mocks exist. No jumps through projects, no loading of solutions here and there. Just reading, that’s it.</p>
<p>To put it candidly, it was hard at start. The number of test classes – or the amount of test code in general – is quite a lot compared to implementation code only. I had to get used to it somehow. From time to time, I had a strange feeling that my tests are distracting me. It was so unusual for me that I felt that my tests “messed up” my organization in my “production” project. It didn’t last long though. As I continued to keep my tests right where my implementation is, I more and more realized how cool and beneficiary it is to do so. Especially as I utilized this approach on a larger codebase. Since then, it’s clear for me: putting specifications/tests side-by-side rules!</p>
<p>Wait, the world’s not shining always. New questions arise with this new “colocation” of tests right where the implementation is. Probably the most often asked is how the release assemblies of such applications look like. Needless to say, it’s desirable to let release assemblies contain only what the customer actually needs: the functionality. However, with tests in same assembly, how would you achieve this?</p>
<h3>Reduce to the Max</h3>
<p>The solution is quite simple: If tests and implementation are no longer divided in design- or development-time, then the split-up needs to take place later on, at delivery-time! Simply put, the build needs to take care of this task. Since I’m used to use build scripts for my projects, it’s quite a common thing for me to adjust end enhance my scripts to filter out the test classes and test-related references. For my own tiny projects, I most often use powershell scripts. At larger contexts with CI and Buildsystems, a call to a cleanup extension is an obvious, handy task.</p>
<p>Back to Stefan’s post. As I read through comments, I thought to myself: Why do so many people write so much about it and judge this approach as “tricky” or “dirty” without obviously not having tried it once? I did give it a try and I’m feeling very fine with it. It’s neither difficult, not dirty at all. The contrary is the case. Now that I use „near specs“, my daily TDD and development life is more pleasant and effective than before. Building a filter for test-related artifacts is an easy task. In my scripts, I usually need about 10 lines for this. Moreover, it’s worth to keep in mind that filtering is “only” needed for release builds. No CI build whatsoever affected.</p>
<p>Once read through the whole thread, I just said to myself: „I even would build my build script test-first faster than reading all this”. As some of you know me as a <a href="http://twitter.com/ilkerde/status/18264412106">friend of empiric results and measurement</a>, it’s obvious that I needed to check if my statement really would turn out true. Just do it and see if it’s really that fast and easy. No sooner said than done! I pushed the <a href="http://github.com/ilkerde/funbench/tree/master/codekatas/fizzbuzz/fizzbuzz-sidebyside/">results to my github repository</a>. Brief summary: Even without test-framework and with my „limited“ powershell knowledge, I was able to build my test-artifact filtering in about the same amount of time I spent to read the blog. ;-)</p>
<h3>Separation of Concerns</h3>
<p>Another argument quite often rose against putting tests and implementation together is “Separation of Concerns” (SoC). “Partitioning tests and implementation in separate projects is following this principle”, it’s being said. Even good friends of mine, like <a href="http://twitter.com/tehlike">Tehlike</a> bring SoC onto the table against “near specs”. By the way, I specially write this article in <a href="http://twitter.com/tehlike/status/18223527988">English for Tehlike</a>, and therefore:</p>
<p><strong>Tehlike, yanılıyorsun! ;-)</strong><br />
<i>(In english: Tehlike, you are mistaken!)</i></p>
<p>Yes, I think that those are mistaken who think that SoC is a reason to split tests and implementation. From my perspective, the opposite is the case. SoC is – once considered to look at it carefully &#8211; even a reason to put tests and implementation side-by-side.</p>
<p>The essence of <a href="http://en.wikipedia.org/wiki/Separation_of_concerns">Separation of Concerns</a> is quite easy: diverse perspectives, say „concerns“, of a behavior of an object should be separated. „Concerns“, in context of domain modeling and system analysis, are aspects of behavior and functionality. Take the calculator example. The functionality of „addition“ of a calculator has different aspects. You need to enter the numbers through keys, the calculation unit needs to add the numbers, and the sum needs to be displayed. All concerns – better: different concerns – of one functionality. With respect to „Separation of Concerns“, those aspects need to be separated. In consequence, a component-oriented and reusable solution is fostered.</p>
<h3>Completeness of Concern</h3>
<p>So far, so good. But wait. For my understanding, Separation of Concerns means by implication, that a single concern should strive towards entirety. That is, one single concern ideally should aim completeness. „Isn’t this automatically the case?“ you might think. Mhh, not really, in my opinion. Most often, one concern is located on very diverse and unusual locations within a software development process.</p>
<p>Take the „classical“ software engineering scenario as an example. A behavior and its concern is described in requirements documentation. You can find different, mostly edgy details of the same concern in UML diagrams and Use Case documents. Of course, tests reflect the concern again. Well crafted, tests most likely specify the concern at its best. Naturally, the concern is in production code, implanted as final functionality of the system. And what’s the result now? Straight answer: The result is a mess. Most often, a developer finding himself in such a situation is faced with puzzle pieces everywhere – but not on the table. </p>
<p>Hence, for me it’s obvious that partitioning tests and implementation in separate projects is not helping me to strive towards „Completeness of Concern“. Moreover, splitting up tests an implementation is not related to Separation of Concerns. Both tests and implementation care about the same concern, that’s the simple truth.</p>
<p>BDD lovers in the wild will clap their hands. The abovementioned is more or less the same they proclaim over and over. They don’t talk about tests; they care about “specs”. They don’t talk about verification; they care about “behavior”. Yes, they even care about concerns, drivers and observations. Altogether, this is even for beginners quite a good hint towards a mindset, where tests and implementation build a chained, inseparable pair.</p>
<h3>Feels just like it should</h3>
<p>Let’s face it. Once developing a reasonable time in TDD/BDD style, you clearly realize one thing: Whenever you need to change or extend the system, you have at least two „changepoints“. First, you change tests. Right afterwards, you change your implementation. One single behavior, one single concern. But two perspectives, two edits. That’s the case for „far specs“ (that is, tests located in a separate project) as well as for “near specs” (that is, tests residing in the same project along with the implementation “side-by-side”).</p>
<p>The difference: With near specs, you change and develop the system faster, &#038; easier. It’s simply more efficient and intuitive. Near specs foster „Completeness of Concern“. This essentially contributes to better readability, maintainability and flexibility of the overall system.</p>
<p>It’s been more than 3 months now since I started to structure my unit tests strictly side-by-side along to my implementation. For me, this “different” style of code organization is absolutely pleasant and effective. Right now, I can’t think of switching back. In my opinion, putting tests and implementation as near as possible is in favor of the “TDD spirit”. With tests and implementation being at the same place, for me TDD now more and more “<a href="http://www.youtube.com/watch?v=9LCEsRno1cg">feels just like it should</a>” ;-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/to-whom-it-may-concern/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Auf dem Eisberg</title>
		<link>http://www.gmbsg.com/auf-dem-eisberg/</link>
		<comments>http://www.gmbsg.com/auf-dem-eisberg/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 14:47:20 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Aktuell]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Code Kata]]></category>
		<category><![CDATA[Code Review]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Dojo]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[Software-Entwicklung]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Team]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=1118</guid>
		<description><![CDATA[Ich bin auf dem Eisberg. Ich bin alleine. Doch zunächst geht es hier nicht um mich, sondern um die „Community“.
In vielen Kommentaren und Blog-Posts wurde die jüngste Bewegung über .NET Coding Dojo’s als „für die Community nicht hilfreich“ tituliert. Jetzt, ...]]></description>
			<content:encoded><![CDATA[<p>Ich bin auf dem Eisberg. Ich bin alleine. Doch zunächst geht es hier nicht um mich, sondern um die „Community“.</p>
<p>In vielen Kommentaren und Blog-Posts wurde die jüngste Bewegung über .NET Coding Dojo’s als „für die Community nicht hilfreich“ tituliert. Jetzt, wo es zwei verschiedene „Stile“ von .NET Coding Dojo’s gäbe, sei auch noch ein entscheiden und ein „was ist nun besser“ hinzugekommen. Den Meinungen kann ich mich größtenteils anschließen. Doch ich möchte noch etwas hinzufügen: Das philosophische, frenetische, ja fast religiöse Reden und Ausarbeiten dieser „Stilunterscheidung“ zwischen Schwarm und Latifa ist mir doch deutlich zu krass und hat mich über die letzten Tage mehrheitlich nur dazu gebracht, beim Lesen der Meinungen immer wieder zu denken: „<a href="http://www.youtube.com/watch?v=xvk2eLbnh0c">Hääh, oder wie oder wat?</a>“</p>
<h3>Eine Bereicherung</h3>
<p>Insofern finde ich es ein schlechtes Signal und eine besorgniserregend überspannte Kommunikation, von „<a href="http://ralfw.blogspot.com/2010/06/zeig-mir-deinen-code-und-ich-nenn-dir.html">der Teilung der Dojo-Welt</a>“ oder der „Trennung der Community in zwei Lager“ zu sprechen. Das Gegenteil ist der Fall, die „Community“ wird bereichert. Sie wird bereichert um andere Sichtweisen, um andere Vorgehensweisen und andere Menschen – ganz unabhängig davon, ob die Bereicherung nun als gut oder schlecht zu bewerten ist.</p>
<p>Darüber hinaus ist es schlichtweg überzeichnet, wenn man sich so massiv mit der „Gestaltung von Coding Dojo’s“ auseinandersetzt und die „Stilrichtungen“ oder “Schulen“ miteinander in fast religiös ausufernder Manier differenziert. Coding Dojo’s sind bei weitem nicht das einzig wichtige für einen Software-Entwickler, zumindest für mich. Ich mache Coding Dojo’s aus Spaß &#8211; in meiner Freizeit. Andere machen es vielleicht aus einer anderen Motivation heraus. Aber das in letzter Zeit ist mir deutlich zu viel des Guten, wenn es überhaupt dem Attribut gutwillig genüge träge. Es gibt auch noch andere Dinge, also sollte man das ganze <a href="http://de.wikipedia.org/wiki/Tohuwabohu">Tohuwabohu</a> um die .NET Coding Dojo’s relativieren.</p>
<p>Ich bin mir durchaus bewußt, das die <a href="http://www.gmbsg.com/lerne-lehre-ilker-net-coding-dojo-latifa-stil/">Erhebung meines „Latifa“-Stils</a> ein Treiber in dieser Entwicklung war, wenn auch nicht der einzige. Jedoch war es nicht meine Motivation, irgendwelche „Lagerschaften“ zu erarbeiten. Nein, vielmehr ist diese Formalisierung der Regeln aus der Erfahrung des Coding Dojo’s bei den dotnetpro.powerdays entstanden. Meine Wahrnehmungen waren nämlich deutliche Divergenzen zwischen dem Verhalten einzelner Teilnehmer und den als „Latifa“ titulierten Werten.</p>
<h3>Latifa ist tot, es lebe Latifa</h3>
<p>Ich denke auch, dass die Werte-Prinzipien sowie auch andere Prinzipien, auf die ich hier nicht näher eingehen werde, nicht als spezifisch für ein Coding Dojo reduziert werden können. Ich denke, die „Latifa-Werte“ sind über ein Coding Dojo hinaus auch im täglichen Miteinander und Arbeiten beachtenswert. Deswegen – und wegen der für mich zu konterkarierenden Darstellung der Stilisierung von Dojos – werde ich die Latifa-Werte nicht mehr ausschließlich im Kontext von Coding Dojo’s anwenden. Es gibt kein „Latifa-Coding-Dojo“ mehr. Weil für mich diese Werte &#038; Prinzipien nicht nur für Coding Dojo’s gelten, sondern in meiner Welt Anspruch auf Allgemeingültigkeit erheben.</p>
<h3>Schwarm drüber?</h3>
<p>Also, alles wieder gut, alles wieder lustig und soz. „<a href="http://ralfw.blogspot.com/2010/06/kollektiv-intelligent-codieren.html">Schwarm</a> drüber“? Nein, ist meine klare Antwort. Jedenfalls nein für mich. Es ist ja auch meine Perspektive, die ich hier schildere. Ich habe für mich erkennen und lernen dürfen, dass ich offensichtlich eine eingeschränktere Menge an Gemeinsamkeiten mit Meinungen, Verfahrensweisen, und Prinzipien anderer habe. Besonders ist mir aufgefallen, dass ich &#8211; für mein eigenes Bedauern &#8211; mit <a href="http://ralfw.blogspot.com/">Ralf</a> und <a href="http://www.lieser-online.de/blog/">Stefan</a> weniger Gemeinsamkeiten habe als ich zunächst vermutete. </p>
<p>Ich habe den Eindruck, dass meine Ansichten &#038; Werte sich von den Werten &#038; Prinzipien von Ralf &#038; Stefan auf fachlicher Ebene deutlich unterscheiden. Meine Wahrnehmung ist weiterhin, dass die Unterschiede zwischen mir und Ralf/Stefan auf persönlicher Ebene noch deutlicher sind. Für mein Empfinden ist für diese Relation der Begriff des „<a href="http://de.wikipedia.org/wiki/Diametral">diametralen entgegen stehens</a>“ durchaus treffend.</p>
<h3>Das .NET Coding Dojo für „Profi’s“ ist Schwarm ?!?</h3>
<p>Ein Beispiel dafür ist für mein Empfinden die Zielsetzung bei Coding Dojo’s. Ich mache Coding Dojo’s in meiner Freizeit und ich möchte in meiner Freizeit Spaß haben. Das ist für mich soetwas wie ein Primärziel. Diesen Eindruck habe ich von der Zielsetzung von Ralf nicht. Für mich stellt sich die Zielsetzung von Ralf als zielorientiert und leistungsorientiert dar. Bei Ralf geht aus meiner Sicht deutlich mehr um „professionelles Lernen“.</p>
<p>Ein weiteres Indiz ist sicherlich die unterschiedliche Betrachtungsweise von „professioneller &#038; moderner Softwareentwicklung“. Für mein Empfinden genügen doch eine ganze Menge an Ansichten und „Lehren“ von Ralf &#038; Stefan nicht mehr meinem Anspruch der professionellen &#038; modernen Softwareentwicklung. </p>
<p>Das fängt für mich schon bei unnötigem <a href="http://ralfw.blogspot.com/2010/06/zeig-mir-deinen-code-und-ich-nenn-dir.html">Sauberkeitsfetisch wie dem Trennen von Tests und Produktionscode in verschiedene Projekte</a> an. Das ist für mich ja schon fast wie jeden Tag das Auto durch die Waschanlage zu fahren. Zum Einen, weil der Code ein kleines Code Kata im Coding Dojo ist und keine Mission-Critical-Anwendung. Zum Anderen, weil es schlichtweg nicht mehr zeitgemäß ist, Tests vom SUT zu trennen. Je näher sie zueinander stehen, um so besser. </p>
<h3>Frankreich wird Fußballweltmeister</h3>
<p>Ich könnte jetzt weitermachen und „weiterwettern“, z.B. das für mein Dafürhalten das von Ralf &#038; Stefan transportierte „TDD“ mit der Anleitung des „vorher die Lösung auf Papier erfassen“ und dann „gestärkt und mit klarem Kopf Tests programmieren“ so viel mit TDD zu tun hat wie Frankreich mit der Fussballweltmeisterschaft <i>(Anmerkung des Autors für den &#8220;ernsthaften&#8221; Leser: Das war ein kleiner übertriebener Witz am Rand. Bitte schmunzeln, Danke.)</i></p>
<p>Doch ich werde dieser Versuchung widerstehen, denn ich habe für mich erkannt, dass es eben verschiedene Ebenen und subjektive Wahrnehmungen von professioneller &#038; moderner Software-Entwicklung gibt. Ich hatte schon im meinem Artikel über „<a href="http://www.gmbsg.com/lerne-lehre-ilker-net-coding-dojo-latifa-stil/">mein .NET Coding Dojo</a>“ (ergo: meine Perspektive eines Coding Dojo’s) schon angedeutet, dass ich mich gerade mit dem Thema <a href="http://www.gmbsg.com/tdd-ist-keine-wissenschaft/">TDD</a> &#038; Planung noch deutlich sowie ausführlich äußern möchte und werde. Zurück zur Professionalität &#038; Modernität.</p>
<p>Meine Wahrnehmung der unterschiedlichen Grade und Auffassungen von fachlicher sowie persönlicher Professionalität &#038; Modernität zwischen dem nun nicht mehr vorhandenen „Latifa-Dojo“ und dem „Schwarm-Dojo“ ist es auch, die mich dazu veranlasst, ab heute auch bestimmte Begriffe bei meiner Kommunikation mit .NET Coding Dojo’s explizit auszuschließen. Dazu zählen „Lerne &#038; Lehre“, „Professionell“ &#038; „Modern“.</p>
<p>Das heisst nun keineswegs, dass es keine Coding Dojo’s gibt, die moderne &#038; professionelle Software-Entwicklung fokussieren. Das heisst vielmehr, dass ich mir moderne &#038; professionelle Methoden bei einem Coding Dojo wünsche, aber sie eben nicht bei allen erfüllt werden.</p>
<h3>Fun as fun in fun</h3>
<p>Abschließend kann ich für mich als folgendes Fazit ziehen: Ich werde weiter .NET Coding Dojo’s besuchen. Vor allem, weil sie mir Spass machen. Wenn sie mir keinen Spass mehr machen, dann werde ich sie auch nicht mehr besuchen. Der Spass steht bei mir im Vordergrund, denn es ist für mich eine Freizeitaktivität. Diese Freizeitaktivität hat mir viele Erkenntnisse beschert. Und das ist gut so.</p>
<p>Aber ich werde mich auch von Coding Dojo’s distanzieren, die dieses Primärziel für mein Dafürhalten nicht erfüllen. Dazu zählt für mich das „Schwarm-Dojo“. Es mag andere Meinungen dazu geben und auch andere Entwickler, die eben mehr Wert auf andere Komponenten legen. Für diese mag viellecht auch ein „Stil“ wie der Schwarm-Dojo schön, gut, frisch und fröhlich sein. Gut. Für mich ist es eben nicht so.</p>
<p>Selbst wenn die inhaltliche Substanz eines Schwarm-Dojo’s für mich attraktiv wäre (was sie für mich nicht ist), ja selbst dann würde ich mich auf Grund der momentan für mein Empfinden zu großen persönlichen Diskrepanz zu Ralf &#038; Stefan mit großer Wahrscheinlichkeit nicht dazu motivieren können, ein Dojo mit Ralf &#038; Stefan zu besuchen.</p>
<h3>Auf dem Eisberg</h3>
<p>Ich werde weiter auf dem Eisberg sein. Wenn meine Werte, meine Prinzipien und meine Arbeitsweise mein Eisberg sind, dann bleibt mein Name ist zwar Ilker, aber <a href="http://www.youtube.com/watch?v=qU4I00s25ho">auf dem Eisberg bin ich so ähnlich wie Kalle.</a> :-) Na juuud juuuud juuud juuud juuud&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/auf-dem-eisberg/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Lerne &amp; Lehre: Ilker&#8217;s .NET Coding Dojo</title>
		<link>http://www.gmbsg.com/lerne-lehre-ilker-net-coding-dojo-latifa-stil/</link>
		<comments>http://www.gmbsg.com/lerne-lehre-ilker-net-coding-dojo-latifa-stil/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 16:15:50 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Aktuell]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[Works]]></category>
		<category><![CDATA[3.5]]></category>
		<category><![CDATA[4.0]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[ATDD]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[Code Kata]]></category>
		<category><![CDATA[Code Review]]></category>
		<category><![CDATA[DDD]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Dojo]]></category>
		<category><![CDATA[Latifa]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=1089</guid>
		<description><![CDATA[Das letzte Münchener Coding-Dojo war schon ein ganz besonderes. Wir, die Münchener Dojo-Crew waren zu Gast beim dotnetpro.powerday und waren überrascht, dass uns der Veranstalter vor dem Coding Dojo sogar noch Snacks &#038; Getränke gestellt hat. Einfach nur Toll! Meinen ...]]></description>
			<content:encoded><![CDATA[<p>Das letzte Münchener Coding-Dojo war schon ein ganz besonderes. Wir, die Münchener Dojo-Crew waren zu Gast beim dotnetpro.powerday und waren überrascht, dass uns der Veranstalter vor dem Coding Dojo sogar noch Snacks &#038; Getränke gestellt hat. Einfach nur Toll! Meinen herzlichen Dank an <a href="https://www.xing.com/profile/Florian_Bender2">Florian Bender</a> und den <a href="http://www.dotnetpro-powerday.de/">dotnetpro.powerday</a>!</p>
<p>Doch nicht nur die Location war ganz besonders, sondern auch <a href="http://twitter.com/sforkmann/status/16759769373">das &#8220;Line-up&#8221; der Teilnehmer</a>. Es hatten sich mehr als <a href="https://www.xing.com/events/net-coding-dojo-empowered-508914">20 Teilnehmer für das Dojo auf der Xing-Gruppe angemeldet</a> – und es gab „on top“ noch ein gutes Dutzend Interessierter, die nach einem ganzen Tag geballter C#-Wissensvermittlung noch „Power“ genug hatten, beim Dojo dabei zu sein.</p>
<p>19:00 Uhr – es geht los, das Dojo wurde von mir mit einleitenden Worten eröffnet. Ich habe für die Neulinge in der Runde noch kurz die „Rahmenbedingungen“ abgesteckt: Lösen eines Code Kata per TDD, aktiv und gemeinsam. Alle coden, einer tippt (wir waren wieder im <a href="http://en.wiktionary.org/wiki/prepari">Prepari</a>-Modus). Es gibt kein Falsch und kein Richtig, es gibt keine dummen Fragen und keine dummen Antworten. So einfach ist das.</p>
<p>Ich habe dann auf Grund der großen Teilnehmerzahl den Vorschlag der Gruppenbildung unterbreitet und zur Abstimmung vorgelegt. Wir haben uns gemeinsam für eine große Gruppe statt zwei kleiner Gruppen entschieden.</p>
<p>Danach ging es auch schon zur Vorstellung der Kata’s: Ich hatte mit Pete gemeinsam eine Vorschlagsliste erarbeitet: KataTennis, KataRomanCalculator und KataBankOCR. Ein seltenes, aber schönes Erlebnis waren diesmal die Alternativ-Vorschläge der Teilnehmer, darunter Sudoku oder FizzBuzz. Nach einer kurzen Abstimmungsrunde war es soweit: <a href="http://codingdojo.org/cgi-bin/wiki.pl?KataBankOCR">KataBankOCR</a> wurde gewählt. </p>
<h3>Wie wird morgen das Wetter?</h3>
<p>Die übliche „Anforderungsrunde“ wurde damit eingeleutet. Ich habe das Kata näher vorgestellt und nach offenen Fragen abgefragt. In dieser Phase haben wir uns auf besondere Dinge wie z.B. Zeilenhöhe und Ziffernabstand geeinigt und die Anforderungen klarer umrissen. Nach ca. 15 Minuten war es dann soweit, auf meine Frage „Noch offene Fragen?“ gab es nur noch die Gegenfrage „Wie wird morgen das Wetter?“. Damit war die Anforderungsrunde abgeschlossen.</p>
<p>Es konnte also losgehen. Aber wie legt man jetzt denn los? Das war die nächste Frage. Pete hatte Visual Studio schon offen, das Projekt war angelegt, das Test-Framework eingebunden. Die Tools waren bereit. Doch waren es die Teilnehmer auch? Eine geteilte Stimmung machte sich breit. Während die einen am Grübeln über den ersten Test waren, waren die anderen mit der Vorgehensweise nicht einverstanden und wollten erst mal „generell eine Architektur herausarbeiten“. Auch hier half die Abstimmung weiter. Mit äußerst knapper Mehrheit ließ man sich auf die Erarbeitung des ersten Tests ein, ohne eine „Lösungsanalyse“ im klassischen Sinne gemacht zu haben.</p>
<h3>Test schreiben heisst nachdenken</h3>
<p>Das herausarbeiten des ersten Tests war garnicht so einfach wie es viele vielleicht vermutet hatten. Es gab Diskussionen über die Datenstruktur (<code>string</code> vs. <code>List&lt;string&gt;</code> vs. <code>IEnumerable&lt;string&gt;</code>) und wir taten uns schwer, einen richtigen Namen für unseren Test zu finden. Doch nach knapp 10 Min. hatten wir endlich den ersten Test, der das „Digit 0“ testet, rot. Und schon ging es an die Implementierung: „return 0;“! Ach, wie schön, das erste Erfolgserlebnis ist da!</p>
<p>Das motiviert schon gleich zum nächsten Test, der Erkennung von „Digit 1“. Schnell wurde der Test geschrieben und dann ging es wieder an die Implementierung. Diesmal war es natürlich schon schwerer, denn schließlich musste jetzt erkannt werden. Aber jetzt fingen auch die Neulinge an, aktiv an der Lösung zu arbeiten und brachten Vorschläge und Kommandos in die Runde ein. Es dauerte nicht lange, und man hatte mit einem einfachen String-Vergleich die Implementierung fertig.</p>
<h3>Red-Green-Maybe&lt;Refactor&gt; ?</h3>
<p>Doch irgendwie war man nicht ganz mit dem Ergebnis zufrieden, denn der Ruf nach Refactoring wurde lauter. <a href="http://www.des-eisbaeren-blog.de/">Golo</a> mahnte an: „Es heisst Red-Green-Refactor und nicht Red-Green-Vielleicht-Refactor“. Sein Standpunkt: wenn man Refactoring nicht „im Kleinen“ und von Anfang an betreiben würde, dann würde der Aufschub noch mehr Probleme schaffen.</p>
<p>Andere wiederum sahen das nicht „so steif“, sondern beriefen sich auf den berühmten „Smell“. D.h. wenn eine Implementierung offensichtlich „Bereinigung verlangt“ um die Funktionalität weiter vorantreiben zu können, dann werde refaktorisiert. Auch hier die Abstimmung. Auch hier ein ganz knappes Ergebnis für den Aufschub des Refactorings.</p>
<h3>Gibt es ein ABS beim TDD ?</h3>
<p>Also ging es weiter zum nächsten Test, der im Übrigen wieder von einem Neuling angeregt wurde. Was tun mit „Leerstellen“? Also wie kann man überprüfen, dass *keine* Ziffer an einer Stelle des „virtuellen Displays“ dargestellt wird. Raunen machte sich breit beim erarbeiten des Tests. Einige Stimmen waren für „einfach 0 zurückliefern“ („Vollgas“ weiter machen), andere wiederum wollten den Test nicht machen stellten den derzeitigen Lösungsansatz in Frage („Vollbremsung“). </p>
<p>Eine kleine Randgruppe wollte den Test durchführen, aber den Target (also die zu testende Methode) wechseln ( „Ausweichen“). An dieser Stelle gingen die Meinungen und Ansichten wieder auseinander. Eine etwas heftigere Diskussion wurde entfacht, doch leider konnte Sie nicht weitergeführt werden, denn unsere „Dojo-Zeit“, die wir uns als Timebox festgelegt hatten, war abgelaufen. Doch die Frage war im Raum und verlangt natürlich auch nach einer Antwort: Gibt es ein &#8220;ABS&#8221; (Anti-Blockier-System) beim TDD?</p>
<h3>Die Moral von der Geschichte&#8230;</h3>
<p>Die abschließende Retrospektive war wie immer sehr aufschlußreich und gab einen bunten Mix an Feedback zurück. Unter anderem wurde die TDD Vorgehensweise gelobt und kritisiert, die Gruppengröße bemängelt, das Ergebnis sowohl als „sehr gut“ und „sehr schlecht“ attributisiert, die „Planlosigkeit“ kritisch betrachtet, das vernachlässigte Refactoring angemahnt. Alles in allem jedoch, war es für jeden erkenntnisreich, denke ich.</p>
<p>Doch ganz besonders war dieses Dojo eine Lehre für mich. Ich konnte in diesem Dojo wieder vieles Lernen. Ich lernte z.B. dass „Neulinge“ sehr wertvoll für eine Gemeinschaft sein können, weil sie unvoreingenommen, ja man mag fast sogar sagen „positiv naiv“ auf Dinge blicken. Das ist nicht nur frisch, sondern auch konstruktiv. Dazu gab es noch eine Reihe weiterer Erkenntnisse, die mich zum Nachdenken gebracht haben. Ich will hier auch auf diese Erkenntnisse und die Konsequenzen daraus eingehen.</p>
<h3>Die einfachste Lösung gewinnt</h3>
<p>Da wäre zum Beispiel die immer wieder aufkeimende Diskussion in Coding Dojo’s, ob man nun nach der Anforderungsanalyse über einen generellen Lösungsweg nachdenken sollte (Knobler) oder „einfach“ sich auf den Code stürzen sollte (Coder). Ich habe zu diesem Thema einen besonderen persönlichen Standpunkt, den ich noch in einem gesonderten Artikel im Detail niederschreiben werde – hier würde solch ein Exkurs den Rahmen deutlich sprengen.</p>
<p>Fakt ist, dass wenn eine <a href="http://twitter.com/sforkmann/status/16834230537">solche Diskussion im Dojo auftaucht</a>, diese Diskussion auch geführt werden muss. Hier zählt der Erfahrungsaustausch, hier zählt der Lernwille, der das führen der Diskussion bedingend macht. Generell ist es natürlich so, dass beim Coding Dojo „Test-First“ entwickelt wird. Ob das per TDD, BDD oder ATDD geschieht, sei erstmal dahingestellt. „Test-First“ ist im Sinne der agilen Methoden, besonders aber im engeren Sinne XP wörtlich zu verstehen. Um den TDD-Neulingen oder TDD-Zweiflern das etwas näher zu bringen, zitiere ich <a href="http://www.amazon.de/Software-Development-Principles-Patterns-Practices/dp/0135974445">Uncle Bob</a>:</p>
<blockquote><p>
&#8220;The act of writing a unit test is more an act of design than of verification. It is also more an act of documentation than of verification. The act of writing a unit test closes a remarkable number of feedback loops, the least of which is the one pertaining to verification of function.&#8221;
</p></blockquote>
<p>Also ganz klar: Nein, es soll beim Coding Dojo keine „gesamte Lösung“ erarbeitet werden, bevor man das programmieren anfängt. Sondern: Ja, beim Coding Dojo wird nach klarer Anforderungsanalyse sofort der erste Test in Angriff genommen. Dazu muss man natürlich auch nachdenken. Keiner wird daran gehindert, sich für diesen Test (und manchmal sogar den nächsten) eine Strategie zu überlegen. Es ist eher so, dass man sich gegenseitig zu einer klaren Testdefinition motiviert. </p>
<h3>Chief Operating Development Engineer Lead Executive Senior Sensei</h3>
<p>Darüber hinaus gab es in diesem (sowie auch in den vorangegangenen) Dojo vermehrt Stimmen, die eine “Führungsrolle”, eine “bewertende und entscheidende Instanz“, einen „Chefentwickler“ oder ähnliches eingefordert haben. Auch hierzu gibt es für das Coding Dojo eine klare Vorgabe. So gibt es beim Coding Dojo z.B. verschiedene Formate, wie das Prepari oder Randori oder andere. Ich möchte hier nur kurz anmerken, dass ich in einem separaten Artikel auch auf diese <a href="http://www.altnetberlin.de/Termine/coding-dojo">verschiedenen Verfahren und Modi</a> in Dojo’s eingehen werde. Für&#8217;s erste soll es reichen, dass es verschiedene Arten gibt.</p>
<p>Je nach Format gibt es auch verschiedene Rollen. In den Münchener Dojo’s haben wir oft – wie auch dieses Mal &#8211; das einfachste Format gewählt: Prepari. In diesem Format gibt es 3 Rollen: den „Hacker“ (von mir öfter flapsig als „CodeMonkey“ bezeichnet), den „Operator“ (der Organisator und Moderator, manchmal etwas irreführend auch „Leiter“ des Dojo’s) und natürlich die „Contributor“, die aktiven Teilnehmer des Dojo’s.</p>
<p>Im Prepari-Format (sowie auch in allen anderen) gibt es keine CODELESS-Rolle. Es gibt also beim Coding-Dojo niemanden, der die Rolle des „CODELESS“ einnimmt. Das Gegenteil ist der Fall: es wird explizit beim Coding Dojo eine CODELESS-Rolle vermieden. Und für diejenigen, die die Rolle nicht kennen:</p>
<blockquote><p>
Definition:<br />
<strong>CODELESS</strong> = “<b>C</b>hief <b>O</b>perating <b>D</b>evelopment <b>E</b>ngineer <b>L</b>ead <b>E</b>xecutive <b>S</b>enior <b>S</b>ensei”</p>
<p>Im Coding-Dojo die “Anti-Rolle” der führenden, leitenden, entscheidenen Person(en). Kann von einer oder mehreren Personen erfüllt werden. Sobald die Gefahr für so eine Rolleneinnahme besteht (ein „Smell“ sozusagen), darf (und soll) jeder zur Vermeidung der Rolle folgenden Satz sagen:</p>
<p>„We don’t want (to) CODELESS, we want (to) code more !“
</p></blockquote>
<p>Sobald also die Rolle eingenommen wird, sind alle anderen dazu verpflichtet, die Rolle der oder den Personen wieder zu entziehen. Im Coding Dojo gilt das Prinzip der Gleichstellung. Alle Meinungen haben per se den gleichen Wert. Die Auswertung der Meinungen geschieht gemeinsam. Entscheidungen werden gemeinsam getroffen. Diskussionen werden gemeinsam gestartet und gemeinsam beendet. Keiner darf sich besser stellen, keiner soll sich schlechter stellen.</p>
<h3>Rei</h3>
<p>Jeder ist in dieser „Coding Dojo“-Gemeinschaft nun gleichgestellt – ein schönes Recht. Doch gibt es auch Pflichten für die Teilnehmer? Oft werde ich nach „Voraussetzungen“ für die Teilnahme des Dojo’s gefragt. Ich antwortete auf diese Frage meist mit folgenden Sätzen:</p>
<p>„Nicht viel. Interesse, Wissbegierde, Neugier für .NET und moderne, professionelle Software-Entwicklungs-Methoden. Aktive Teilnahme &#038; Beitrag zur Lösung der gestellten Programmieraufgabe.“</p>
<p>Das hat den meisten Fragestellern ausgereicht, um sich ein Bild machen zu können. Aber dennoch haben wir immer wieder Probleme mit dem Selbstverständnis der Teilnahme am Dojo. Ich denke, dass es dafür mehrere Gründe gibt. Manche denken, ein Dojo sei so „informell“, dass es keine Regeln gäbe. Andere wiederum vergleichen es mit anderen Formaten, wie z.B. einem Workshop, Vortrag oder Fishbowl. Um diesen „Interpretationen“ etwas mehr Linie und Substanz zu geben, stelle ich die Teilnahme-Voraussetzungen auf eine etwas formalere Ebene. Die folgenden Regeln sind Grundregeln (<a href="http://de.wikipedia.org/wiki/Rei">Rei</a> bzw. <a href="http://de.wikipedia.org/wiki/Reishiki">Reishiki</a>), die für die Teilnahme an einem Coding Dojo bedingend sind:</p>
<blockquote><p>
<strong>§1 &#8211; Aktivität</strong><br />
Der ehrliche Wille, einen aktiven, fokussierten Beitrag zum „Lernen &#038; Lehren“ zu leisten.
</p></blockquote>
<p>Es gibt beim Coding Dojo niemanden, der sich nicht einbringen darf. Das hört sich ein wenig nach „zur Aktivität gezwungen sein“ an. Und ganz offen: Ja, so ist es auch. Mitdenken, Mitwirken, Mitreden – das ist eine Pflicht für den Teilnehmer im Coding Dojo. Dennoch gibt es natürlich „Interessierte“, die sich „das Mal anschauen“ möchten. Das war bisher immer möglich und das wird es auch weiterhin. Aber: es darf nicht zur Gewohnheit werden. Deswegen folgende Regelzusätze: </p>
<ul>
<li>Falls jemand „Spectator“ sein möchte, muss er es bei Dojo-Beginn allen mitteilen. Zuschauer haben keine Pflichten, aber auch keine Rechte. Im Gegensatz zu den Teilnehmern dürfen sie keinen Beitrag leisten, sondern nur „beobachten“. Sie werden auch vom Abstimmungs- und Feedback-Recht befreit.</li>
<li>Eine Person darf nur einige Male – sagen wir mal bis zu dreimal – „Spectator“ sein. Spätestens beim 4. Dojo-Besuch muss er aktiv werden. Sollte er es weiterhin nicht wollen, muss er alle Teilnehmer um Beobachtungserlaubnis bitten. Bei Erlaubnis bleibt er „Spectator“, bei Verweigerung muss er das Dojo verlassen.</li>
</ul>
<blockquote><p>
<strong>§2 &#8211; Respekt</strong><br />
Der ehrliche Wille, sein Gegenüber anzunehmen wie er ist.
</p></blockquote>
<p>Sie oder ihn, seine Haltung, seine Meinung und sein Wissen zu würdigen um damit das „Lernen &#038; Lehren“ zu stärken. Einher geht dabei auch Höflichkeit bei Kommunikation und Kollaboration. Adequate Wortwahl, konstruktive Beiträge und kultivierte Gemeinsamkeit sind die Pflicht jedes Dojo-Teilnehmers. Um dies zu Gewährleisten, gelten folgende Regelzusätze:</p>
<ul>
<li>Jeder einzelne Teilnehmer ist verpflichtet, andere auf mögliche Respektsverletzungen hinzuweisen. Er kann sich jederzeit dem „Operator“ zuwenden. Es obliegt dann der gesamten Dojo-Gruppe, sich gemeinsam zu besinnen. Das kann durch auflockernde Übungen, eine kurze Pause oder andere Besinnungstechniken geschehen.</li>
<li>Bei einer offensichtlichen Respektsverletzung, ob willentlich oder nicht, wird das Dojo sofort abgebrochen. Es gibt keine Retrospektive, keine Diskussion. Die Beteiligten an der Respektsverletzung werden durch die anderen Teilnehmer oder den Operator auf Ihr Fehlverhalten höflich und respektvoll hingewiesen und dazu aufgefordert, Ihr Verhalten zu reflektieren und eine Lösung zu erarbeiten. Das Dojo wird nach Abbruch nicht wieder begonnen. Alle Teilnehmer verlassen das Dojo.</li>
</ul>
<blockquote><p>
<strong>§3 &#8211; Optimismus</strong><br />
Der ehrliche Wille, mit Freude und positiver Einstellung zum „Lernen &#038; Lehren“ beizutragen.
</p></blockquote>
<p>Die positive, offene Grundhaltung eines jeden Teilnehmers ist bedingend für eine gute Unterstützung des „Lernen &#038; Lehren“. So ist es für jeden Dojo-Teilnehmer eine Freude, dabei zu sein und die anderen bei sich zu haben. Sollte „mal einer einen schlechten Tag haben“ ist es nicht so schlimm. Aber man sollte auch im Sinne des Dojo’s offen zu sich selbst sein. Ist die Laune im Keller, so macht es für einen selbst nicht viel Sinn – und damit für die Gemeinschaft auch nicht. Niemand im Dojo nimmt es Übel, wenn man mal „keine Lust“ hat, dabei zu sein. Um die positive Einstellung im Dojo zu unterstützen, gelten folgende Regelzusätze:</p>
<ul>
<li>Ein Lächeln ist der Botschafter der Optimismus. Jeder Teilnehmer ist dazu aufgefordert, seine positive Grundhaltung auszudrücken. Manche Lächeln, manche machen kleine Witze, manche suchen Nähe und das Zwischengespräch. Trotz aller Aktivität und Fokus, die man beim Dojo hat (siehe „Regel 1“), ist Optimismus eine Voraussetzung, der man auch als Teilnehmer nachkommen soll.</li>
<li>Stellt ein Teilnehmer für sich fest, nicht mehr positiv Beitragen zu können, sollte er aus freien Zügen – auch ohne Angaben jedweglicher Gründe, wenn nötig – das Dojo verlassen dürfen. Denken andere Teilnehmer, dass jemand in der Gemeinschaft keine positive Grundhaltung mitbringt, sind sie dazu aufgefordert, demjenigen mit ermutigenden und positiven Worten ihre Wahrnehmung mitzuteilen. Das kann persönlich in der Pause geschehen, oder aber indirekt durch Beteiligung des Operators.</li>
</ul>
<blockquote><p>
<strong>§4 &#8211; Zwanglos</strong><br />
Der ehrliche Wille, freiwillig, ohne Druck, Wettbewerb oder Leistungsziel das „Lernen &#038; Lehren“ zu verfolgen.
</p></blockquote>
<p>Diese Regel ist besonders wichtig, denn sie nimmt jeglichen Druck von allen. Keiner ist dazu verpflichtet, eine Sache „richtig“ oder „fertig“ zu machen. Niemand zwingt die Teilnehmer, sich an eine bestimmte Technologie, Meinung oder Vorgehensweise zu richten. Wenn überhaupt, dann sind es die Teilnehmer, die selbstbestimmt, freiwillig und gemeinsam sich selbst Verbindlichkeiten zusprechen. Um dies im adequaten Rahmen zu gewährleisten, gelten folgende Regelzusätze:</p>
<ul>
<li>Es gibt keine Leistungsziele und keine Leistungsmessung. Weder von Einzelnen, noch von der Gemeinschaft. Ausschließlich Bewertung im Sinne des Feedbacks und des Meinungsaustausches sind für die Teilnehmer möglich. Teilnehmer mit Leistungsanspruch sind von den anderen Teilnehmern von diesem Anspruch freizustellen.</li>
<li>Selbstbestimmt heisst nicht selbstautoritär. Trotz der Zwanglosigkeit gelten für jeden Teilnehmer die Grundsatzregeln, die Grundsatzvorgehensweise sowie die Regel des kollektiven Entscheids. So ist es verpflichtend und selbstverständlich, wenn ein Teilnehmer einer anderen Auffasung ist die Mehrheit der Teilnehmer, dass dieser sich der kollektiven Meinung beugt bzw. nach dem gemeinsamen Entschluß zu richten hat. Ist die eigenee Meinung mit der gemeinschaftlichen Meinung fundamental nicht vereinbar, so bleibt es jedem frei, das Dojo zu verlassen.</li>
</ul>
<p>Diese oben genannten vier Grundregeln sind für mich essentielle Voraussetzungen für die Teilnahme an einem Dojo. Oftmals ist es garnicht so schwer, diesen Bedingungen gerecht zu werden, doch wir durften in der Vergangenheit auch erleben, wie sich der eine oder andere Teilnehmer mit diesen Werten schwer tat.</p>
<h3>Make it simple</h3>
<p>Es gibt noch vieles mehr, das ich über das Coding Dojo, die Regeln und Werte des Coding Dojo und auch die Dynamik und Magie des Coding Dojo schreiben könnte, und ich werde es wohl nach und nach auch tun. Doch bei all diesen Hintergrundinformationen und den eben etwas formaler beschriebenen Regeln gilt es den Grundsatz der Einfachheit zu wahren. Solange es nicht wirklich notwendig ist, wird es keinen weiteren „Ballast“ oder „Verkomplizierung“ der Sache geben. Weder mit weiteren Formalismen oder irgendwelchen Hierarchien, unnötigen Gedankenwindungen oder theoretischen Methodenspielchen. Das gilt für Software, das gilt für TDD, das gilt für gemeinschaftliches Arbeiten, also gilt es auch für das Coding Dojo. Frei nach Albert Einstein:</p>
<blockquote><p>
„<strong>Make it simple, but not simpler</strong>“. </p>
<p><small>Für die Interessierten sei noch das <a href="http://en.wikiquote.org/wiki/Albert_Einstein">Original-Zitat</a> erwähnt:<br />
&#8220;It can scarcely be denied that the supreme goal of all theory is to make the irreducible basic elements as simple and as few as possible without having to surrender the adequate representation of a single datum of experience.&#8221;<br />
</small>
</p></blockquote>
<h3>Ich, der Ilker</h3>
<p>Nach diesem regelrechten Aufsatz an Regeln und Bestimmungen gibt es einen weiteren wichtigen Punkt, der unbedingt erwähnt werden muss. Alle die o.g. Regeln beziehen sich auf meinen Eindruck, meine Meinung und meine Anschauung. Es ist also „Ilker’s Coding Dojo“, welches sich diesen Rechten und Pflichten unterwirft. </p>
<p>Warum erwähne ich das? Ganz einfach, weil jeder auf dieser Welt das gute Recht hat, Coding Dojo’s zu machen. Jeder hat so gar das gute Recht, Coding Dojo’s so zu machen, wie er sich das vorstellt. Das ist auch gut so, denn Diversität ist ein wichtiger Faktor für Fortschritt. Aber es birgt auch Potenzial für Missverständnis und Verkennung. Der eine macht Coding Dojo’s mit dem Streben nach Kampf und Perfektion. Ein weiterer macht Coding Dojo’s um neue Sprachen zu erleben und zu erforschen. Ein anderer macht Coding Dojo’s, um anderen zu zeigen, wie man was macht und die Richtung vorzugeben. Aber ich mache Coding Dojo’s nicht (nur) deswegen. Meine Motivation ist das Motto, welches ich immer wieder versuche zu transportieren: „<strong>Lerne &#038; Lehre</strong>“. </p>
<p>Bei „meinem“ Coding Dojo steht der lockere Erfahrungsaustausch im Vordergrund, gebunden durch eine konkrete, kleine, realisierbare Aufgabe. Doch es geht nicht um einen netten Plausch oder Brainstorming, sondern um <a href="http://de.wikipedia.org/wiki/Lernen">Lernen</a> und <a href="http://de.wikipedia.org/wiki/Lehren">Lehren</a>. Wer nicht genau weiß, wie herausfordernd und anspruchsvoll diese beiden Disziplinen sind, dem rate ich, sich damit ein wenig auseinanderzusetzen.</p>
<p>Weiterhin mache ich Coding Dojo’s aus freien Stücken, weil es mir Spaß macht und ich weiter Spaß damit haben möchte. Ich mache es, weil ich eine tiefe, feste Überzeugung habe, dass jeder von anderen lernen kann und jeder den anderen lehren kann.</p>
<p>Ich respektiere diejenigen, die Coding Dojo’s „anders“ sehen, die etwas anderes darunter verstehen oder es anders kennen. Wie gesagt, jedem steht es frei, selbst Coding Dojo’s zu machen und sie so zu machen, wie er es für richtig hält. Ich habe die „Coding Dojo’s“ nicht erfunden, ich bin nicht der Coding-Dojo-Oberlehrer, ich bin kein Kata-Mönch und auch kein Dojo-Messias. Ich bin der Ilker, der Coding Dojo’s macht. Punkt.</p>
<h3>Latifa-Dojo</h3>
<p>So, und als genau dieser Ilker, der diese <a href="http://www.gmbsg.com/mucnetdojo-bericht-vom-ersten-net-coding-dojo/">Coding Dojo-Bewegung in die .NET-Welt getragen hat</a>, als der Ilker, der Erfahrung mit Coding Dojo’s verschiedener Formate hat, als der Ilker, der das <a href="http://www.gmbsg.com/uber-das-ziel-von-coding-dojos/">„Lernen &#038; Lehren“ mit Code Kata’s</a> und TDD/BDD &#038; Design Patterns sowie Best Practices in den Vordergrund stellt, als genau dieser Ilker stelle ich die oben genannten Regeln für die Art der Coding Dojo’s auf, die ich mir vorstelle.</p>
<p>Diejenigen, die sich für Coding Dojo’s interessieren, schon mal bei dem einen oder anderen dabei waren, sogar den Weg mit mir „mitgegangen“ sind oder einfach mal gerne dabei sein möchten – ja euch alle – bitte ich um Vertrauen. <strong>Bitte, vertraut mir</strong> und geht den Weg, den ich hier beschreibe, wenn ihr Coding Dojo’s macht und mitmacht. Verlangt Aktivität, Respekt, Optimismus und Zwanglosigkeit. Verfolgt das Ziel des Lernen &#038; Lehrens. Fordert genau diese Art von Coding Dojo’s, denn diese Coding Dojo’s sind es, die uns alle weiter bringen. Fordert von Coding Dojo’s diese Werte und diese Ziele – von Veranstaltern, von Operatoren, von Teilnehmern, von euch selbst. Ich werde es tun.</p>
<p>Im Sinnbild der asiatischen Kampfkünste, welches unschwer erkennbar auch mit dem Coding Dojo transportiert wird, möchte ich hiermit das oben geschilderte „Format“ als einen „Dojo-Stil“ etablieren. Es widerspricht natürlich dem gemeinschaftlichen Denken, nun von „Ilker’s Dojo-Stil“ zu sprechen oder es so zu kommunizieren. Personifizierung ist nicht zielführend. Wie gesagt, keiner ist besser gestellt als die anderen, keiner ist schlechter gestellt als die anderen.</p>
<p>Dennoch ist es ein stückweit meine Handschrift und meine Vorstellung eines Coding Dojo’s. Deswegen möchte ich bei der Schaffung dieses „Dojo-Stils“ noch eine kleine persönliche Note einbringen. Ich mache das jetzt mal einfach und gebe „meinem“ Dojo-Stil einen Namen: <strong>Latifa</strong>.</p>
<p>Latifa kommt vom arabischen latif, welches frei übersetzt &#8220;höflich, freundlich, sanft&#8221; bedeutet. Ich habe es gewählt, weil es im türkischen (latife) für „zuvorkommend, manierlich“ und manchmal sogar „gentlemen-like“ angewendet wird. Es spiegelt für mich die Grundvoraussetzung für gemeinsames Tun &#038; Wirken wider, die auch für ein erfolgreiches Lernen &#038; Lehren notwendig ist.</p>
<p>Es gibt so vieles, welches wir von anderen, unseren Ahnen und anderen Kulturen lernen können. Doch eine Sache ist allen gemeinsam, der Respekt und die Höflichkeit. Wer sich intensiver mit dieser Werte-Einstellung auseinandersetzen möchte, dem Rate ich das Studium (das meine ich wörtlich, also „<a href="http://de.wikipedia.org/wiki/Studium">studere</a>“) des <a href="http://de.wikipedia.org/wiki/Funakoshi_Gichin#Shoto-Niju-Kun">Shoto-Niju-Kun</a>, der 20 Verhaltensregeln von Funakoshi für das Karate-Do.</p>
<h3>Feedback im Mittelpunkt</h3>
<p>Ein zentrales Element des fortschreitens und verbesserns ist das Feedback. Nach geleisteter Arbeit ist Feedback wichtig, um daraus Erkenntnisse zu gewinnen und damit sein Handeln zu adaptieren. Das ist eigentlich ein Naturgesetz.</p>
<p>Ich möchte diesem Naturgesetz auch hier folgen und möchte abschließend um euer Feedback bitten. Bringt euch ein, macht mit und gestaltet mit. Schreibt mir, was ihr denkt und was ihr machen würdet. Ich freue mich über jedes Feedback.</p>
<p>Doch bei all dem Wirken &#038; Tun rund um das Coding Dojo stelle ich klar und und kommuniziere es mit deutlichen Worten: Ich werde weiter Coding Dojo’s machen, genauer gesagt Coding-Dojo’s im Latifa-Stil. Ich werde das Lernen &#038; Lehren verfolgen und stärken. Das werde ich mit Freude und Spass machen, denn nur so ist es wertbringend und nachhaltig. Für den Latifa-Stil gelten die Voraussetzungen der Gleichheit, der Aktivität, des Respekts, des Optimismus und der Zwanglosigkeit. Die Modi im Latifa-Stil sind frei wählbar, solange sie keinen Kampfcharakter haben. Im Dojo wird gemeinsam an dem Kata gearbeitet und geübt. Es steht die Übung mit dem Code im Vordergrund, deswegen heisst es Coding Dojo.</p>
<h3>Wege sind zum gehen da</h3>
<p>Es soll klar sein: Für alle, die sich mit diesem, dem Latifa-Stil des Coding Dojo auseinandersetzen möchten und diesen Stil in den Coding Dojo’s erleben möchten, gibt es die wunderbare Möglichkeit sich in der <a href="https://www.xing.com/net/netdojo/">Xing-Gruppe zu melden</a> oder auf die <a href="http://www.facebook.com/pages/NET-Coding-Dojo/10150113747745398">Facebook-Seite</a> zu schauen, um so auch die nächsten Event-Termine mitzubekommen. Ihr seid herzlich eingeladen, mit uns gemeinsam zu lernen &#038; zu lehren.</p>
<p>Weiterhin soll klar sein: Für alle, die sich mit dem Latifa-Stil nicht anfreunden können oder unter Coding Dojo’s etwas anderes verstehen, kann ich folgendes entgegenbringen: Ich werde euch nicht in einem Latifa-Dojo akzeptieren. Ich werde euch nicht für die Werte des Latifa-Dojo ermutigen. Ich werde euch nicht vom Latifa-Dojo überzeugen. Ihr müsst das alles selbst tun. Ihr könnt jederzeit zu Coding Dojo’s im Latifa-Stil kommen, solange Ihr euch an die Regeln und Werte des Dojo’s richtet.</p>
<p>Und wenn sich im Ergebnis keiner für den Latifa-Stil interessiert, dann ist das gut, denn dann habe ich immer noch meine Überzeugung. Und wenn sich im Ergebnis einige für den Latifa-Stil interessieren, dann ist das gut, denn dann habe ich immer noch meine Überzeugung. Und wenn sich im Ergebnis alle für den Latifa-Stil interessieren, dann ist das gut, denn dann habe ich immer noch meine Überzeugung.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/lerne-lehre-ilker-net-coding-dojo-latifa-stil/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Scrum: Der bessere Scrum Master</title>
		<link>http://www.gmbsg.com/scrum-der-bessere-scrum-master/</link>
		<comments>http://www.gmbsg.com/scrum-der-bessere-scrum-master/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 16:15:37 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Aktuell]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[System]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Topthema]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[Anforderungen]]></category>
		<category><![CDATA[Lean Management]]></category>
		<category><![CDATA[Projektmanagement]]></category>
		<category><![CDATA[Prozess]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Scrum Master]]></category>
		<category><![CDATA[Scrum Norris]]></category>
		<category><![CDATA[Selbstorganisation]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[Software-Entwicklung]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=1050</guid>
		<description><![CDATA[Es ist zwar schon eine Weile her, als über die Fünf Schwachpunkte von Scrum geschrieben habe. Die Resonanz auf diesen provokanten, aber aus meiner Sicht treffenden Artikel war durchaus unterschiedlich. Man hat mich des Plagiats bezichtigt, man hat mich als ...]]></description>
			<content:encoded><![CDATA[<p>Es ist zwar schon eine Weile her, als über die <a href="http://www.gmbsg.com/funf-schwachpunkte-von-scrum/">Fünf Schwachpunkte von Scrum</a> geschrieben habe. Die Resonanz auf diesen provokanten, aber aus meiner Sicht treffenden Artikel war durchaus unterschiedlich. Man hat mich des Plagiats bezichtigt, man hat mich als unkonstruktiven Satzbauartisten bezeichnet, man hat mir Rollen-Personifizierung vorgeworfen und mich als nachhilfebedürftig abgestempelt (inkl. Links zu „guten Coaches“). Ach ja, es gab auch tatsächlich einige ernsthafte Diskussionen, die von nachdenklichen Lesern über die einzelnen Punkte geführt worden sind.</p>
<p>Wie dem auch sei, am Ende des besagten Artikels hatte ich einen Ausblick darauf gegeben, dass ich nicht nur die Punkte nennen werde, die ich als Schwachstelle in Scrum sehe, sondern auch meine Ideen dazu beitragen werde, diese Schwachstellen zu stärken und damit Scrum als agile Managementmethode für mein Verständnis erfolgreicher zu implementieren. Das habe ich für das Thema &#8220;<a href="http://www.gmbsg.com/scrum-die-bessere-sprintdauer/">bessere Sprintdauer</a>&#8221; schon getan,  und damit widme ich mich heute einem ganz besonderen „Schwachpunkt“ – dem Scrum Master. </p>
<h3>Die innere Handbremse</h3>
<p>„Oh je, der Scrum Master ist ein Schwachpunkt von Scrum?“ werden sich nun viele stirnrunzelnd denken. Ja, genau so ist es, der Scrum Master ist meiner Meinung nach sogar eine richtig hinterlistige Schwachstelle in Scrum-Projekten. Das liegt viel weniger an dem Scrum Master als Person als am Scrum Master als Rollenimplementierung, wie er in vielen Büchern beschrieben wird und von Scrum-Trainern bei Unternehmen „antrainiert“ wird.</p>
<p>Viele Scrum Master in heutigen Organisationen sind „Vollzeit-Scrum Master“, die dediziert ein Scrum Team betreuen und sich tagtäglich mit den Sorgen, Nöten und Bedürfnissen Ihres Teams auseinandersetzen. Meiner Meinung nach ist hier schon der erste Schwachpunkt erkennbar. Obwohl die Rollendefinition in „Scrum-Bibeln“ nicht oft vom Scrum Master als institutionalisierte Position spricht, wird sie überall <a hrtef="https://www.xing.com/net/leansoftwaredevelopment/diskussionen-fragen-und-antworten-400978/ist-scrummastern-ein-vollzeitjob-26488808/">diskutiert</a>, <a href="http://borisgloger.com/2009/04/21/4711-is-a-scrummaster-a-full-time-position">implementiert</a> und <a href="http://jobsuche.monster.de/Search.aspx?q=scrum%20master&#038;cy=de&#038;lid=163&#038;re=130">implantiert</a>.</p>
<p>Ein Scrum Master ist dazu da, sich überflüssig zu machen. Eines seiner größten Ziele ist es, sein Team in die <a href="http://de.wikipedia.org/wiki/Selbstorganisation">Selbstorganisation</a> zu führen und dort zu halten. Doch wie geht das bei einem Scrum Master, der eine Planstelle in einer Organisation ist? Mehr noch, hinter der Rolle Scrum Master verbirgt sich dann eine konkrete Person, ein konkreter Arbeitsplatz, ein konkretes Schicksal. Und diese Person soll sich jetzt überflüssig machen? Das wird wohl selbst der barmherzigste Mensch nicht tun. Jetzt könnte man diesen Vorwurf mit „don’t blame the tool“ abwiegeln, aber das wäre zu einfach. Die Schwachstelle liegt viel tiefer begraben als es auf der Oberfläche sichtbar ist.</p>
<h3>Zwischen den Stühlen</h3>
<p>Zumeist befindet man sich als Scrum Master innerhalb einer „agilen“ Organisation sowieso in der Zwickmühle. Einerseits sollte man das Team nicht führen, sondern begleiten. Andererseits bleibt das Management als „Chicken“ selten mehr als die ersten paar Sprints ruhig. Nicht selten trägt es „Erwartungen“ und „Strategische Leitlinien“ an den oder die Scrum Master heran. Schließlich ist der Scrum Master ja überzeugt von Scrum und der Idee, dass der Product Owner nun das Management betreiben soll. Die Kennzahlen über Team- und Projektperformance holt man dennoch beim Scrum Master ein, weil der „einfach näher dran am Geschehen ist“.</p>
<p>Viele Scrum Master fügen sich in diese organisatorische „Kneifzange“, anstatt sie mit Kraft zu durchbrechen. Wie soll man auch, wenn z.B. der eigene Job daran hängt oder die letzte (dicke) Auszahlung des Dienstleistungsvertrages mit dem Kunden noch aussteht?</p>
<h3>Der Alleskönner</h3>
<p>Viele eingefleischte Scrum-Experten und erfahrene Trainer stellen deshalb die Rolle des Scrum Masters auf ein hohes Podest. Der Scrum Master sei „<a href="http://borisgloger.com/2010/03/22/scrum-wurden-agiles-schwachen-geerbt-eine-antwort/">eine Führungsrolle im Prozess</a>“, es dauere tausende von Stunden, die Charakteristika und schwierigen Aufgaben eines Scrum Masters zu meistern. Ein Change Agent und Facilitator hat es eben nicht leicht. </p>
<p>Der Scrum Master als Rolle wird oft als Alleskönner dargestellt. Schließlich muss er die Grundlagen des Managements beherrschen, ein absoluter Teamplayer sein und obendrein auch noch ein feiner Kerl den jeder mag. Der Scrum Master ist der neue <a href="http://de.wikipedia.org/wiki/MacGyver">MacGyver</a> in der agilen Software-Entwicklungslandschaft und kann selbst aus den schwierigsten und aussichtslosesten Situationen mit Einfallsreichtum, Know-How und Cleverness den Erfolg hin zur effektiven &#038; profitablen Software-Entwicklung gestalten.</p>
<p>Eine schöne Vorstellung. Doch die Realität ist eine andere. In der Realität gibt es nur einen MacGyver, und den sogar nur im Fernsehen. Schade für die vielen Softwarefabriken und Weborganisationen, schade für die vielen Scrum Trainer und Berater, schade für die Tausenden von „Certified Scrum Master“. Doch Karten auf den Tisch: Es wäre auch zu schön gewesen, oder?<br />
Mittlerweile ziehen sogar Alpha-Agilisten und Scrum-Kenner das „Scrum Is Always Better, Scrum Master Is Always Hero“-Gefühl durch den Kakao. Mit wunderbar leichtem und gleichzeitig nachdenklich stimmendem Humor schreitet seit einiger Zeit „<a href="http://blog.shino.de/2010/02/20/scrum-norris/">Scrum Norris</a>“ durch die geistigen Pfade der Agilität.</p>
<h3>Quo Vadis Scrum Master?</h3>
<p>Doch weder Humor noch Lamentiererei helfen einem dabei, diesen Schwachpunkt des „Scrum Master-Daseins“, nämlich die viel zu starke Fokussierung der Rolle und deren Implementierung, zu verbessern. Was tun? Wie kann man in einem Scrum-Team oder in einer Organisation mit Scrum-Teams diesen viel zu starken Fokus auf den Scrum Master mindern? Ich möchte hier einen konkreten Verbesserungsvorschlag und eine konzeptionelle Perspektivänderung als Diskussionsgrundlage vorstellen.</p>
<p>Dazu möchte ich ein Szenario aus der Entwicklung selbst voranstellen, um den Effekt der Maßnahme deutlicher hervorzuheben. Es wäre meines Erachtens sehr hilfreich für Team und Scrum Master, wenn die Abhängigkeiten zum Scrum Master zu allen anderen Rollen sowie zu der umgebenden Organisation so gering wie möglich sind. Um Abhängkeiten voneinander zu entkoppeln, gibt es in der Software-Entwicklung einige bewährte Methoden. Eine davon ist die sog. <a href="http://de.wikipedia.org/wiki/Inversion_of_Control">„Dependency Inversion“ oder „Inversion of Control“</a>. Das hört sich doch genau nach dem an, was gebraucht wird, nämlich eine „Inversion of Control“ im wörtlichen Sinne. Nicht der Scrum Master organisiert das Team, das Team organisiert das Team.</p>
<h3>Scrum Master in Bewegung</h3>
<p>Übertragen auf den Prozess und die Rahmenbedingungen, die die Scrum-Methode vorgibt, ließe sich eine solche Indirektion mit einem einfachen Mittel erreichen: Die Rolle des Scrum-Masters wird im Team rotierend „durchgereicht“. Statt eines Scrum Masters, der sich dediziert um ein (oder noch schlimmer mehrere) Teams kümmert, kümmert sich das Team um die Erfüllung der Rolle des Scrum Masters. In der Praxis kann man den „Scrum Master-Hut“ z.B. sprintweise, monatsweise, oder quartalsweise von Team-Mitglied zu Team-Mitglied weiterreichen.</p>
<p>So ist jeder einmal mit der „Verantwortung“ des Scrum Masters konfrontiert und lernt obendrein eine weitere, wichtige Perspektive des Prozesses kennen. Dadurch erschließt sich sukzessive dem ganzen Team eine tiefere Kenntnis der Vorgehensweise. Es ergibt sich eine induktive Selbstorganisation: Man lernt die Probleme und Aufgaben der Scrum Master Rolle kennen und hilft sich gegenseitig im Team, dass es nicht zu Problemen kommt oder diese schnell ausgeräumt werden.</p>
<p>Aus Sicht des Prozesses mündet das Rotationsprinzip in mehrere Vorteile. Zunächst wird einmal wird nicht nur die Selbstorganisation gefördert, sondern auch das Know-How effektiv verteilt. Der <a href="http://en.wikipedia.org/wiki/Bus_factor">Bus-Faktor</a> wird im Kontext des Prozesses und der Methodensicherheit massiv erhöht.</p>
<h3>Refokussierung der Kommunikation</h3>
<p>Für den Product Owner ist der wechselnde Scrum Master ein regelrechter Segen: Statt sich die ganze Zeit auf den Scrum Master zu konzentrieren, kann (und muss) er sich nun mit dem ganzen Team auseinandersetzen – so wie es am effektivsten ist und sich auch „gehört“. Darüber hinaus lernt der Product Owner, seine geschäftlichen Anforderungen und Interessen mit der „Masse Team“ zu koordinieren, statt mit dem „Ansprechpartner“ Scrum Master, wenn es mal wieder Abstimmungsprobleme oder Missverständnisse gibt.</p>
<p>Nicht nur der Prozess, sondern auch die umgebende Organisation – also das Unternehmen – profitiert von dieser Maßnahme. Statt wieder neue Stellen oder Stufen in die Organisation zu implementieren, wird durch die Rotation der Scrum Master von „allen“ getragen. Ergebnis: Keine neue „Position“ Scrum Master, keine Kompetenz- und Verantwortlichkeitskonflikte mit Teamleads (Gruppenleiter) oder Head-Of’s (Abteilungsleiter), keine Skalierungsprobleme. Die Führungsmöglichkeiten sind klar und bei einem <a href="http://de.wikipedia.org/wiki/Menschenf%C3%BChrung">partizipativen Führungsstil</a> höchst effektiv.</p>
<p>Die Rückkopplung zum mittleren Management und der strategischen Führung wird greifbarer, denn jetzt kann sich das Management nicht mehr den „Scrum Master“ als Mittelsmann für Mitarbeiterführung herauspicken. Der Fokus für wird stattdessen zum Product Owner gelenkt. Der wiederum wird – wie auch das Management selbst – realisieren und anerkennen müssen, dass sich eine Selbstorganisation nicht kommandieren lässt, sondern sich nach Bedürfnissen orientiert.</p>
<h3>Scrum Master: Kein Platz für Projektleiter</h3>
<p>Das Unternehmen wird schlanker, weil der „klassische“ Projektmanager nun nicht mehr in die für ihn äußerst angenehme „Scrum Master“-Schiene flüchten kann, sondern sie entscheiden muss: Entweder Product Owner oder Team! </p>
<p>Ich selbst dachte vor ein paar Jahren noch, dass der <a href="http://www.gmbsg.com/die-zukunft-des-projektmanagers-in-der-software-entwicklung/">klassische Projektmanager nur die Wahl zwischen Scrum Master und Product Owner hat</a>. Falsch! Heute darf ich die Lehre ziehen, dass ich damals auf den Scrum Master als Rolle viel zu Stark fokussiert gewesen bin. Team und Product Owner sind die &#8220;Key Player&#8221;, der Scrum Master ist nur Mittel zum Zweck, und das &#8211; wenn möglich &#8211; nur soviel wie unbedingt notwendig.</p>
<p>Mein Fazit: Mit einem rotierenden Scrum Master schafft man viele inherente Hürden aus dem Weg. Das Team, der Product Owner und die umgebende Organisation fokussieren sich deutlicher auf die Aufgabe. Der Prozess Scrum wird dadurch im Software-Entwicklungs-Theater wieder mehr zum Bühnenbild, das Team zu den Schauspielern und der Product Owner zum Regisseur. Damit ist dann auch eine gute agile Vorstellung wesentlich einfacher und schmerzfreier umsetzbar. Vorhang auf!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/scrum-der-bessere-scrum-master/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Über das Ziel von Coding Dojos II</title>
		<link>http://www.gmbsg.com/uber-das-ziel-von-coding-dojos-ii/</link>
		<comments>http://www.gmbsg.com/uber-das-ziel-von-coding-dojos-ii/#comments</comments>
		<pubDate>Mon, 31 May 2010 07:55:47 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[Topthema]]></category>
		<category><![CDATA[3.5]]></category>
		<category><![CDATA[4.0]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[Anforderungen]]></category>
		<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[Code Kata]]></category>
		<category><![CDATA[Code Review]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Dojo]]></category>
		<category><![CDATA[München]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[MTC]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[Software-Entwicklung]]></category>
		<category><![CDATA[Unterschleißheim]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=1040</guid>
		<description><![CDATA[Es ist Mittwoch, 18:30 Uhr. Die „Bude“ im Microsoft Technology Center in Unterschleißheim ist gerammelt voll. Der Meetingraum ist für 20 Personen ausgelegt, knapp 30 versuchen mehr oder minder erfolgreich, sich im Raum ein Plätzchen zu ergattern. Freudige Gesichter, alle ...]]></description>
			<content:encoded><![CDATA[<p>Es ist Mittwoch, 18:30 Uhr. Die „Bude“ im Microsoft Technology Center in Unterschleißheim ist gerammelt voll. Der Meetingraum ist für 20 Personen ausgelegt, knapp 30 versuchen mehr oder minder erfolgreich, sich im Raum ein Plätzchen zu ergattern. Freudige Gesichter, alle lächeln und sind locker – anscheindend. Doch irgendwie ist eine Spannung anzumerken. Es ist nicht so wie immer in München. Das MTC strahlt viel Professionalität aus. Man fühlt sich wie in Mitten einem wichtigen, kreativen und äußerst exklusiven Schaffenskreis.</p>
<p>Vorne sitzt <a href="http://ralfw.blogspot.com">Ralf Westphal</a>, der Architekt, der Wissenvermittler, der Konferenzorganisator – kurzum eine .NET Lichtgestalt. Er klickt und tippt noch schnell Dinge in sein Laptop. Die Teilnehmer warten. Komisch, üblicherweise macht man Witze und redet über einige interessante Blogposts, bevor es losgeht. Ich hätte z.B. erwartet, dass einer in die Runde „<a href="http://www.gmbsg.com/kein-yin-ohne-yang-kein-null-ohne-pointer/">Null oder nicht null, Hauptsache Ergebnis!</a>“ wirft und so ein wenig die Runde auflockert. Doch Nein. Es liegt Konferenzduft in der Luft. Alle starren und warten.</p>
<p>18:45 Uhr &#8211; Es geht los: Nach ein paar einleitenden Worten und dem lieben Dank an <a href="http://www.der-evangelist.de">Jan, dem Hüteträger und Evangelisten</a> für die super Organisation der Location geht es schon los. Ralf ist am Zug. Was danach genau im Münchener .NET Coding Dojo passiert ist, beschreibt Ralf akribisch und meiner Meinung nach ziemlich treffend in seiner <a href="http://ralfw.blogspot.com/2010/05/coding-dojo-muc-retrospektive.html">Retrospektive für das Coding Dojo</a>. Inhaltlich kann ich dem kaum etwas hinzufügen und möchte mich nochmals bei Ralf für diese gute Session bedanken.</p>
<p>Doch ganz so unkommentiert möchte ich es dabei natürlich nicht belassen. Steffen, der vor kurzem sehr erfolgreich das Hambuger .NET Coding Dojo initiiert hatte, hat in einem Tweet seine <a href="http://twitter.com/sforkmann/status/15062018368">Bedenken über den „Community-Gedanken“</a> geäußert. Seiner Meinung nach ist ein Coding Dojo keine <a href="http://twitter.com/sforkmann/status/15063976231">„One-Man-Show“ mit Musterlösung</a>. Ich habe ihm per Twitter schon <a href="http://twitter.com/ilkerde/status/15085255327">geantwortet</a>, möchte aber hier noch ein wenig detaillierter auf meine Auffassung eingehen.</p>
<h3>Das „Format“ Coding Dojo</h3>
<p>Ich hatte schon vor über einem halben Jahr einmal über das <a href="http://www.gmbsg.com/uber-das-ziel-von-coding-dojos/">Ziel von Coding Dojo’s</a> gebloggt. Damals, in einem Coding Dojo mit Pete, habe ich im Nachhinein mir einige Gedanken über das „Format“ Dojo gemacht. In besagtem Coding Dojo lief nämlich alles – also wirklich alles – gerade nicht so, wie es sich Pete und ich vorgestellt hatten. Wir hatten uns mit ein paar Kata’s vorbereitet und den Ablauf schon ein wenig vorgedacht. Aber es kam alles anders. Warum?</p>
<p>Die Antwort ist einfach: Weil wir es zugelassen haben. Wir haben eine Sache beherzigt: Ein Coding Dojo ist eine Veranstaltung für die Teilnehmer. Jeder sollte nach einem Dojo mit dem Gefühl nach Hause gehen können, dass er etwas gelernt hat. Im Coding Dojo mit dem KataBlog war den Teilnehmern die Komponentenorientierung und das IOC nicht so wichtig wie grundlegendere Themen, wie z.B. MVC als Pattern oder die HTTP-Request-Response-Pipeline von ASP.NET. Das haben wir beachtet und unseren Plan zurückgestellt.</p>
<h3>Aber warum ein Coding Dojo ohne Coding?</h3>
<p>Adaptiert auf das Coding Dojo von letzter Woche von Ralf lässt sich folgendes hinzufügen: Wir als Münchener .NET Coding Dojo Crew haben Ralf eingeladen, weil es die Teilnehmer &#8211; also wir, die Coding Dojo Community &#8211; so wollten. Wir haben Ralf nicht eingeladen, damit er eine Show abzieht. Wir haben Ralf auch nicht eingeladen, weil er der Ralf ist. </p>
<p>In einigen vorangegangenen Coding Dojo’s kam als Feedback der Teilnehmer immer wieder „zuwenig Architektur“, „zuwenig Design“, „zuwenig Vorgabe“. Als ich mit Ralf auf der VSOne darüber geredet habe, schlug er ein „Architektur-Dojo“ vor. „Super!“ dachte ich mir und freute mich, den Dojo-Teilnehmern mit einer Einladung ihren „Wunsch“ erfüllen zu können.</p>
<p>Wer beim .NET Coding Dojo vergangenen Mittwoch dabei war, der wird mir beipflichten, dass diesmal wirklich über Architektur, Design, Anwendungsaufbau und Komponenten-Orientierung ausgiebig diskutiert wurde. Ralf hat sein Versprechen gehalten. Er kam, dachte, designte und diskutierte. Genau so, wie es oftmals in Feedbackrunden vorheriger Dojo’s angefordert wurde.</p>
<h3>Coding Dojo ist kein Workshop</h3>
<p>Trotzdem. Es war anders als die vorherigen Coding Dojo’s. Ganz anders. Keine Diskussionen über die Kata-Wahl, keine Diskussion über Anforderungsanalyse, keine Design-Strittigkeiten. Statt dessen Ralf. Ralf wie er leibt und lebt. Das ist die Aufgabe, das ist die Vorgehensweise, das ist EBC, das ist State-Of-The-Art, das ist Regelwerk &#038; Konvention. Punkt. Natürlich mit fester und stichhaltiger Argumentation und der Erläuterung der Beweggründe.</p>
<p>Aber irgendwie war es kein Coding Dojo so wie ich es kannte. Es gab hier und da mal Rückfragen an Ralf, „wieso“ und „weshalb“. Aber aktiv mitgemacht – aktiv Architektur gemacht – das hat meiner Meinung nach mehrheitlich Ralf getan. Ralf hat schon ab und an probiert per Rückfrage die Teilnehmer einzubinden. Doch andererseits gab es für die Teilnehmer nicht wirklich viele Optionen. Besser gesagt: Es war ein geplante Session, mit strukturierter Vorgehensweise und festem Rahmen. Da bleibt nicht viel Luft und Platz für anderes.</p>
<p>Man kann mir „als Veranstalter“ jetzt natürlich alles mögliche vorwerfen. Z.B. dass ich ja hätte eingreifen können, wenn es mir zu „passiv“ und zu „vorgetragen“ erscheint. Oder man könnte mir den Vorwurf machen, dass ich in den vorangegangen Coding Dojo’s einfach nur chaotisch in die Tasten gehauen habe, anstatt strukturiert vorzugehen und damit praktisch immer wieder so ein „wir brauchen Architektur“-Feedback provoziert habe. Ok, dann soll man mir die Vorwürfe machen. Meine Antwort dazu ist: Ich habe es zugelassen, weil es wichtig ist, Dinge zuzulassen. Darüber sollte man nachdenken.</p>
<h3>Coding Dojo und Community</h3>
<p>Jetzt transportiere ich mal meine persönliche Auffassung etwas deutlicher, damit es nicht wieder heisst, ich wäre zu objektiv oder würde mich hinter geschnörkeltem Satzbau verstecken. Ich persönlich denke, dass das letzte Coding Dojo absolut kein Coding Dojo war. Es war ein Architektur-Workshop mit Ralf Westphal. Und wenn ich das so sagen darf: Es war ein guter Architektur-Workshop. Aber es war für mich mit Sicherheit kein Coding Dojo. Es gab keine aktive Einbindung der Teilnehmer, es gab keine lockere Atmosphäre, es gab kein Coding und keine großen Diskussionen. Ich finde, das war kein Coding Dojo, wie ich es mir wünsche und wie ich es auch gut finde.</p>
<p>Aber meine Meinung ist nicht wichtig – das habe ich nach nun mehr als 50 Coding Dojo’s gelernt. Es ist nicht wichtig, wie ich Probleme löse. Es ist auch nicht wichtig, welches Framework ich verwende. Und es ist schon garnicht wichtig, wie ich Analyse, Architektur, Design oder Entwicklung betreibe. Denn das einzige was zählt im Coding Dojo sind die Akteure. Die Akteure im Coding Dojo sind die Teilnehmer. Das ist entscheidend.</p>
<h3>Dojo = Lernen?</h3>
<p>Wenn also die Teilnehmer des „Coding-Dojo’s“ mit Ralf in der Feedback-Runde sagen „Ja, das hat mir gut gefallen, ich habe super mitgemacht &#038; viel gelernt“ – dann, ja dann ist es wohl ein Dojo gewesen. Vielleicht kein „Coding“ Dojo, aber es war ein echtes Dojo. Aber wenn die meisten kommentarlos und höflich klatschend das Dojo beenden, dann, ja dann war es wohl kein Dojo. Wie gesagt: Für mich war das kein Dojo – schon garnicht ein Coding Dojo. Aber das Feedback am Ende von Ralf’s Session war durchaus positiv. Also scheint es für einige Teilnehmer ein Dojo gewesen zu sein.</p>
<p>Natürlich möchte ich an dieser Stelle noch ein paar weitere Dinge loswerden. Ich möchte nicht, dass man die Definition des „Coding Dojo“‘s auf „Hat es dir gefallen?“, &#8220;Konntest Du mitmachen?&#8221; oder „Hast du etwas gelernt?“ reduziert. Ein echtes Coding Dojo hat einige weitere Parameter, die entscheidend sind für den speziellen, magischen Charakter und den guten Erfahrungsaustausch. Der aufmerksame Leser wird z.B. erkannt haben, dass ich nicht ein einziges Mal TDD erwähnt habe. Wenn Interesse daran besteht, die Bestandteile und das Format „Coding Dojo“ aus meiner Perspektive genauer kennenzulernen, dann bitte sagt mir das (schreibt einen Kommentar oder eine Email), und ich werde es niederschreiben.</p>
<h3>Fazit &#038; Ausblick</h3>
<p>Abschließend möchte ich zu „Ralf’s Coding Dojo“ noch folgendes loswerden. Es war der Wunsch der Community und ich (und Ralf) haben versucht, diesem Wunsch gerecht zu werden. Es war eine gute Erfahrung. Ich habe viel daraus gelernt und ich denke, dass auch die Teilnehmer etwas mitnehmen konnten. Es war ein guter Architektur-Workshop und Ralf hat viel investiert, um den Teilnehmern seine Sicht zu zeigen und Wissen zu transportieren. Danke, Ralf.</p>
<p>Doch eines steht heute schon fest: das nächste .NET Coding Dojo, welches im Übrigen wieder ein ganz besonderes Dojo ist, wird mit absoluter Sicherheit ganz anders ablaufen. Nicht nur, weil diesmal nicht der Ralf eine Aufgabe stellen wird. Nein. Es wird ganz anders, weil die Partizipation und das aktive teilnehmen exemplarisch exerziert werden. Das nächste <a href="https://www.xing.com/events/net-coding-dojo-empowered-508914">Münchener .NET Coding Dojo findet am 22. Juni</a> im Rahmen des <a href="http://www.dotnetpro-powerday.de/">dotnetpro.powerday’s</a> statt und hat den treffenden Titel „.NET Coding Dojo Empowered!“. Sei dabei und erlebe, wie man gemeinsam Lernen &#038; Lehren kann, wie man gemeinsam eine Problemstellung mit Logik &#038; Spaß lösen kann, wie man professionelle Software-Entwicklungs-Methoden im Team einsetzt! Es wird wieder einmal einzigartig und sehr lehrreich werden. <a href="https://www.xing.com/events/net-coding-dojo-empowered-508914">Zur Anmeldung</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/uber-das-ziel-von-coding-dojos-ii/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Dojo-Workout-Wochen</title>
		<link>http://www.gmbsg.com/dojo-workout-wochen/</link>
		<comments>http://www.gmbsg.com/dojo-workout-wochen/#comments</comments>
		<pubDate>Wed, 12 May 2010 18:58:31 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Works]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[Code Kata]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Dojo]]></category>
		<category><![CDATA[Objekt-Orientierung]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=1033</guid>
		<description><![CDATA[Ich hatte es im „Coding Dojo Considered Helpful“-Artikel schon angekündigt, dass wir diesen Monat im .NET Coding Dojo München einen besonderen Gast mit einem besonderen Thema haben: Ralf Westphal wird im Mai-Dojo eine Kata der besonderen Art mit den Teilnehmern ...]]></description>
			<content:encoded><![CDATA[<p>Ich hatte es im „Coding Dojo Considered Helpful“-Artikel schon angekündigt, dass wir diesen Monat im .NET Coding Dojo München einen besonderen Gast mit einem besonderen Thema haben: <a href="http://ralfw.blogspot.com">Ralf Westphal</a> wird im Mai-Dojo eine Kata der besonderen Art mit den Teilnehmern durchführen. Frisch nach dem Münchener Forschungs- und Erfahrungsdrang dringt dabei das .NET Coding Dojo ab und an bis zum Grenzbereich.</p>
<p>Ralf wird im Mai-Dojo mit uns den Schwerpunkt Architektur &#038; Design trainieren. Einerseits ist das untypisch für ein .NET Coding Dojo, denn schließlich ist im Coding Dojo das „Coding“ nicht nur im Titel verankert, sondern auch das A und O eines jeden Dojo’s. Andererseits sind Anwendungs-Architektur und –Design wichtige Themen, denen besonders im Kontext der testgetriebenen Entwicklung Beachtung bemessen werden sollte. Umso besser und spannender ist es bei diesem Dojo, wie wir alle gemeinsam von der Idee, der Anforderung über die Architektur und bis zum Test-Driven-Design und der Implementierung gelangen werden.</p>
<p>Ein besonderes Thema verlangt auch eine besondere Location. Dank der tatkräftigen Unterstützung von Microsoft und dem <a href="http://www.der-evangelist.de">Evangelisten mit dem Hut</a> haben wir einen wirklich exklusiven Standort für dieses Dojo gefunden: Das <a href="http://www.microsoft.com/mtc/locations/munich.mspx">Microsoft-Technology-Center</a> in Unterschleißheim öffnet der .NET-Coding-Dojo-Crew die Pforten für diesen „Extra-Workout“. Danke!</p>
<h3>Kühl sag‘ ich, kühl!</h3>
<p>Wo wir gerade dabei sind: Die Idee und das Konzept des .NET Coding Dojo’s ist erfreulicherweise schon in einige Städte Deutschlands vorgedrungen. Dennoch &#8211; oder gerade deswegen &#8211; kommt es immer öfter vor, dass ich angesprochen werde und man mich frägt wie das denn im Coding Dojo so abläuft. Die ALT.NET-Crew in Berlin hat auf ihren <a href="http://www.altnetberlin.de/Termine/coding-dojo">Coding-Dojo-Seiten eine ziemlich gute Beschreibung</a>, doch jetzt gibt es eine noch anschaulichere Alternative: <a href="http://www.microsoft.com/germany/msdn/video/show.mspx?id=msdn_de_39788">MSDN TV war bei einem Dojo in München</a> zu Gast und hat ein paar interessante Impressionen mitgenommen!</p>
<p>Eine Überasschung, aber für mich eines der Highlights in dieser Folge ist die Nahaufnahme von zwei „.NET Coding Dojo Core‘s“, sozusagen dem ideelen Fundament der Münchener Coding-Dojo-Crew, Philipp (aka. Fuip) und Olaf (aka. Nurph). Natürlich gibt es mittlerweile viele tragende Stammgäste und immer wieder neue Teilnehmer, die alle dazu beitragen, ihr eigenes Dojo zu dem zu machen was es ist und mit uns gemeinsam weiter zu trainieren, um so immer mehr und deutlicher an die professionelle Softwareentwicklung heranzukommen. Euch allen vielen Dank! Ach ja, Jan hat in der Folge auch mich zum Thema interviewt. Alles in Allem: Kühl&#8230; sehr kühl! :-)</p>
<h3>.NET-Coding-Dojo-Chillout</h3>
<p>Und weil in München gerade .NET Coding Dojo-Workout-Wochen sind geht es nach der Denk-Design-Diskussions-Orientierung im Mai im Juni wieder direkt an den Code! Das Münchener .NET Coding Dojo wird im Juni wieder ein Dojo erster Klasse veranstalten: Am 22. Juni sind wir zu Gast beim <a href="http://www.dotnetpro-powerday.de/Programme/dotnetpro.powerday-C-fuer-Profis-am-22.-Juni-2010">dotnetpro.powerday für C# Profis</a>! Tagsüber wird von <a href="http://www.des-eisbaeren-blog.de/">Golo</a> und <a href="http://www.der-albert.com">Albert</a> (dem Online-Dojo-Virtuosen) C# Know-How kompakt und verständlich vermittelt, abends wird im .NET Coding Dojo gechillt eine Code-Kata mit dem neu gewonnenem Wissen gelöst. Chillen, Programmieren und Lernen geht nicht? Dann überzeuge Dich vom Gegenteil im .NET Coding Dojo bei dem C#-Profi-dotnetpro-powerday! <a href="https://www.xing.com/events/net-coding-dojo-empowered-508914">Anmelden und gechillt coden</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/dojo-workout-wochen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Goto Dojo Considered Helpful</title>
		<link>http://www.gmbsg.com/goto-dojo-considered-helpful/</link>
		<comments>http://www.gmbsg.com/goto-dojo-considered-helpful/#comments</comments>
		<pubDate>Mon, 03 May 2010 19:49:49 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Topthema]]></category>
		<category><![CDATA[3.5]]></category>
		<category><![CDATA[4.0]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[Code Kata]]></category>
		<category><![CDATA[Code Review]]></category>
		<category><![CDATA[Dojo]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Unit Test]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=1018</guid>
		<description><![CDATA[Es ist es heute an der Zeit, darüber zu schreiben, daß Pete und ich uns nun darin einig geworden sind, die erste Hürde mit dem .NET Coding Dojo gestemmt zu haben. Was diese erste Hürde ist und wieso wir das ...]]></description>
			<content:encoded><![CDATA[<p>Es ist es heute an der Zeit, darüber zu schreiben, daß Pete und ich uns nun darin einig geworden sind, die erste Hürde mit dem <a href="http://www.gmbsg.com/works/index.php?title=.NET_Coding_Dojo_Muenchen">.NET Coding Dojo</a> gestemmt zu haben. Was diese erste Hürde ist und wieso wir das so sehen, werde ich später noch erklären. </p>
<p>Doch zunächst möchte ich auf die nächsten .NET Coding Dojo-Termine hinweisen, denn der Mai wird ein regelrechter Coding-Dojo-Workout-Monat werden!</p>
<h3>Coding Dojo Berlin: Round II</h3>
<p>Gong! Die zweite Trainingsrunde für das .NET Coding Dojo in Berlin steht kurz vor der Tür! Morgen schon, am 04.05. werden die Hauptstädtler so richtig die Bude rocken. Ich zitiere: „Strukturiertes Vorgehen, schnelle Finger und messerscharfe Logik sind unsere Waffen!“ So ist es richtig, und die Berliner Crew braucht nicht nur diese Eigenschaften, sondern auch weitere Unterstützung von .NET Entwicklern, TDD-Jüngern und CCD-Freunden. Gemeinsam das Code-Kata lösen, welches Mike schon durch das Sparring gepfercht hat. Sei dabei: <a href="http://www.altnetberlin.de/Termine/coding-dojo/kommender-dojo">Anmelden und Mitmachen!</a></p>
<h3>Coding Dojo Online: Weinert&#8217;s 2. Sinfonie</h3>
<p>Beim letzten Online Coding Dojo haben <a href="http://www.der-albert.com/">der Albert</a> und die Online-Teilnehmer alles gegeben, um das Code Kata zu lösen. Es hat wieder einmal jede Codezeile gezählt. Die Kata und der Albert als virtuos auf der Tastatur fegender Kunst-Coder waren so fesselnd, dass nach dem Fall des ersten Online-Dojo-Vorhangs schon fest stand: Es muss eine 2. Sinfonie geben! Diese Woche ist es soweit. Am Donnerstag, den <a href="https://www.xing.com/events/2-online-coding-dojo-497522">06.05. findet das zweite .NET Online-Coding-Dojo</a> statt. Es wird wieder eine Herausforderung erster Klasse werden, also nicht zögern und zaudern, sondern gleich <a href="https://www.xing.com/events/2-online-coding-dojo-497522">anmelden</a> und mit Albert und der geballten Know-How-Power der .NET-Online-Community das Code-Kata im Online-Coding-Dojo lösen! Auf geht’s!</p>
<h3>Coding Dojo Wien: MVC FTW!*</h3>
<p>Andreas, Adrian und die Wiener Dojo-Fraktion machen weiter an ihrem ASP.NET MVC Fundament und verknüpfen exemplarische Anwendungsentwicklung geschickt mit dem Coding Dojo und den darin gestellten Herausforderungen des Test-First, TDD &#038; CCD. Das und vieles mehr qualifiziert die Wiener Gruppe zur Avangarde und Vorreitern der Coding Dojo-Szene in Österreich. Sei dabei, wenn es am 14.05. wieder heisst: MVC-Training im Coding Dojo &#8211; <a href="http://dotnetopenspace.ning.com/events/aspnet-mvc-anwendung-1">Anmelden</a>! <i>(*Update!)</i></p>
<h3>Coding Dojo Hamburg: Die Premiere</h3>
<p>Vorhang auf, meine Damen &#038; Herren. Die .NET-Community in Hamburg präsentiert das <a href="http://www.navision-blog.de/2010/05/03/erstes-net-coding-dojo-in-hamburg/">erste .NET Coding Dojo in Hamburg</a>, am 19.05.2010! Es wird eine ganz besondere Premiere, eine würdige Premiere der Coding Dojo Begeisterten in Hamburg werden, denn Hamburger sind bekannt für den hohen Anspruch, den sie an sich selbst stellen. Gleich das erste Coding Dojo wird ein Randori werden. .NET Entwickler im Norden Deutschlands, lasst euch gesagt sein, wer dieses Highlight verpasst, ist selber schuld! Auf geht’s zum .NET Coding Dojo Hamburg: <a href="https://www.xing.com/events/coding-dojo-506845">Anmelden</a>!</p>
<h3>Coding Dojo München, Dojo Deluxe</h3>
<p>Das Münchener .NET Coding Dojo macht weiter und trainiert weiter hart und unermüdlich. Modernste Software-Entwicklungs-Methoden, TDD im Hochleistungsbereich und CCD Eleganz treffen sich in München zum Coding Dojo der Extraklasse. In München geht es im Mai heiß her! <a href="http://ralfw.blogspot.com/">Ralf Westphal</a> wird mit der .NET Coding Dojo Gemeinde in München ein Dojo der Extraklasse abhalten und das <strong>D in Dojo</strong> dick und fett unterstreichen. <strong>Denken, Designen, Diskutieren!</strong></p>
<p>Als Sahnehäubchen &#8220;On-Top&#8221; wird es eine besondere Location geben, die wir eine Woche vor dem Dojo bekanntgeben werden! Freut euch, dieses „Dojo Deluxe“ darf man nicht verpassen! Sei dabei, wenn die .NET Community mit modernsten Software-Entwicklungs-Methoden das Code-Kata von Ralf löst! Auf geht&#8217;s: <a href="https://www.xing.com/events/net-coding-dojo-deluxe-munchen-506973">Anmelden</a>!</p>
<h3>Coding Dojo Bei Dir!</h3>
<p>Nach diesen Dojo-Highlights komme ich wieder zum Anfang meines Posts zurück. Wir, die .NET Coding Dojo Community aus München sind überzeugt von den Vorteilen, die ein .NET Coding Dojo mit sich bringt. Immer wieder freuen wir uns, gemeinsam eine Aufgabe zu lösen, neue und bekannte Gesichter wiederzusehen und uns auszutauschen. Über kleine Dinge, wie z.B. Resharper-Shortcuts. Aber auch über große Dinge, wie z.B. Template Method vs. Higher Order Functions. Das ist es aber nicht, was Pete und mich als Initiatoren der .NET Coding Dojo-Bewegung nun dazu veranlässt, einen Haken hinter unser erstes Etappenziel zu setzen. Es ist etwas anderes.</p>
<p>Mittlerweile gibt es viele Interessierte, die die Idee und das Konzept des .NET Coding Dojo’s gut finden und selbst implementieren. Es gibt .NET Coding Dojo’s nun nicht mehr nur in München, sondern auch in Berlin, Hamburg, Wien, Augsburg, Ingolstadt, Karlsruhe und sogar ortsunabhängig Online! Auch wenn nicht viel darüber geredet wird oder darf, ich kenne mittlerweile eine handvoll Unternehmen, die intern regelmäßig Dojo’s durchführen, und das mit sensationellen Erfolgen. Doch auch diese Verbreitung und das allgemein steigende Interesse für .NET Coding Dojo’s ist es nicht, was unsere erste Etappe als erledigt markiert. Es ist etwas anderes.</p>
<h3>Goto Dojo Considered Helpful</h3>
<p>Es ist der einfache, ungeschriebene, stille aber dennoch treibende und gedeihende Gedanke, dass die .NET Entwickler-Gemeinde Coding Dojo’s als eine hilfreiche und gleichzeitig unterhaltsame Maßnahme akzeptiert und implementiert. Es ist die Bewegung und Bereitschaft der Community, eigenständig Coding Dojo’s zu organisieren und zu veranstalten. Es ist der schlichte Umstand, dass mittlerweile „.NET Coding Dojo“ nicht mehr nur mit „Pete“ oder „Ilker“ oder diesen Blog hier assoziiert wird, sondern vielmehr mit gemeinsamer Entwicklungsleistung, mit Code-Kata’s, der Clean-Code-Developer-Bewegung und mit den vielen Gesichtern und .NET-Enthusiasten in der Community. Das ist es, was uns dazu veranlässt ein „Check“ zu machen und uns auf schon auf die nächsten Coding Dojo’s zu freuen.</p>
<p>An dieser Stelle möchte ich jeden .NET Entwickler, TDD-Interessierten und CCD-Freund dazu motivieren, selbst an einem .NET Coding Dojo teilzunehmen oder aber ein .NET Coding Dojo zu gründen. Wie man aus der Ankündigungsliste unschwer ableiten kann, ist es garnicht so schwer, ein .NET Coding Dojo zu gründen. Die gesamte Coding-Dojo-Community kann und wird euch dabei unterstützen mitzumachen. Die besten Anlaufstellen sind hier die <a href="https://www.xing.com/net/netdojo/">Xing-Gruppe</a> und die <a href="http://www.facebook.com/pages/NET-Coding-Dojo/10150113747745398">Facebook-Page</a>! Sei dabei, mach mit, es lohnt sich! </p>
<p><strong>Goto Dojo Considered Helpful!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/goto-dojo-considered-helpful/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kein Yin ohne Yang, kein Null ohne Pointer</title>
		<link>http://www.gmbsg.com/kein-yin-ohne-yang-kein-null-ohne-pointer/</link>
		<comments>http://www.gmbsg.com/kein-yin-ohne-yang-kein-null-ohne-pointer/#comments</comments>
		<pubDate>Sun, 02 May 2010 21:58:57 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Aktuell]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[Anforderungen]]></category>
		<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[Code Review]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[NULL]]></category>
		<category><![CDATA[Null Reference]]></category>
		<category><![CDATA[Objekt-Orientierung]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[Software-Entwicklung]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=1002</guid>
		<description><![CDATA[Es ist eine schwierige Zeit heutzutage. Besonders für Software-Entwickler. Denn heutzutage gibt es für einen Software-Entwickler viele Dinge, die er lernen, können und beachten muss. Da gibt es die Tools, die Programmiersprachen, die Methoden, die Anforderungen, die Domäne, die Kollegen ...]]></description>
			<content:encoded><![CDATA[<p>Es ist eine schwierige Zeit heutzutage. Besonders für Software-Entwickler. Denn heutzutage gibt es für einen Software-Entwickler viele Dinge, die er lernen, können und beachten muss. Da gibt es die Tools, die Programmiersprachen, die Methoden, die Anforderungen, die Domäne, die Kollegen und noch vieles mehr. Da gibt es schon einmal Momente, in denen man sich unsicher ist. „Mache ich das richtig?“, „gibt es bessere Lösungen?“ oder „hoffentlich passt das&#8230;“. Zumindest geht es mir manchmal so, z.B. bei neuen Dingen oder besonders komplexen Problemstellungen. Ich bin dann froh, wenn ich um mich herum jemanden habe oder finde, der mich und mein Problem versteht und mir helfen kann. Helfen mit seiner Einschätzung, seiner Meinung und seinen Erfahrungen.</p>
<h3>Helfen ist schön, geholfen werden ist schöner!</h3>
<p>Ich weiß es nicht genau, aber ich vermute es ein wenig, dass <a href="http://blog.thomasbandt.de/39/de/blog.html">Thomas</a> auch froh ist, wenn er durch Meinungsaustausch seine eigenen Herausforderungen besser einzuschätzen vermag. Ich persönlich empfinde diese „Kalibrierung“ als wichtigen Baustein zur Festigung der eigenen Meinung.</p>
<p>Thomas hat mit <a href="http://blog.thomasbandt.de/39/2333/de/blog/null-verstaendnis.html">Null Verständnis</a> gefragt, wie die Handhabung von NULL als Rückgabe von Methoden bei anderen Entwicklern umgesetzt und eingeschätzt wird. Viele haben kommentiert, einige haben auch Blog-Post-Antworten geschrieben. Ich habe das mit Kommentaren und dem <a href="http://www.gmbsg.com/null-toleranz/">Null Toleranz-Beitrag</a> auch getan, der <a href="http://ralfw.blogspot.com/2010/05/null-oder-nicht-null-das-ist-hier-die.html">unermüdliche Ralf hat auch kräftig in die Tasten gehauen</a>. Überraschenderweise mit mehreren Aussagen.</p>
<p>Ralf geht in seinem „<a href="http://ralfw.blogspot.com/2010/05/es-hilft-nichts-dass-es-darauf-ankommt.html">Plädoyer für Regeln</a>“ auch auf einige Punkte ein, die ich über die Handhabung von NULL in Anwendungsszenarien bemerkt hatte. Ralf hat so vieles geschrieben, dass es mir schwer fällt, wirklich alle Themen in einem oder mehreren Blog-Posts zu erwidern. Einen Überblick über meine Perspektive möchte ich dennoch geben. </p>
<h3>Mind the Null!</h3>
<p>Ralf stellt im Namen der Community die erste Null-Regel auf: </p>
<blockquote><p>&#8220;Man darf Null benutzen und auch als Wert zurückgeben – aber Vorsicht! Erst prüfen, ob es nicht auch anders geht&#8221;</p></blockquote>
<p>D’accord! Das hatte ich ja auch schon in Kommentaren und <a href="http://twitter.com/ilkerde/status/13197888337">per Twitter</a> erwähnt. Doch wann kann man Null verwenden, wann nicht? Gibt es dafür eine „kontextarme“ Regel? Kann man pauschal sagen: „<a href="http://twitter.com/DerAlbert/status/13246967481">Verwende es nicht!</a>“. Meiner Meinung nach ist das nicht so einfach. Klar kann ich auch sagen, dass man Null einfach nicht anwenden soll, aber ich mache es mir nicht so einfach.</p>
<p>Wenn ich nämlich obige Regel einem Embedded-Entwickler entgegenbringe, dann lacht der mich mal gepflegt vor seinen Kollegen aus. In der Embedded-Entwicklung, wie auch bei sehr ressourcenintensiven Geschäftsanwendungen ist es nämlich durchaus erstrebenswert, oft NULL zurückzugeben, um damit z.B. eine leere Liste oder leere Suche zu signalisieren. Es mögen sich wenige daran erinnern, aber NIL (als Synonym für NULL) ist die Abkürzung für „<a href="http://www.mirrorservice.org/sites/www.gnu-pascal.de/gpc/nil.html">Not-In-List</a>“.</p>
<h3>Null für Hacker</h3>
<p>Ich selbst durfte schon mehrere serverseitige Komponenten von „Exception-Flut“ befreien, in dem ich sie in einigen Stellen durch NULL ersetzt habe. Danach lief der Service doppelt so schnell bei 25% weniger Ressourcenverbrauch. Bin ich jetzt ein Aussetziger, weil ich die Regel nicht befolgt habe?</p>
<p>Ich denke nein. Denn: In einigen Anwendungsszenarien ist es gang und gäbe NULL als Mittel einzusetzen. Mehr noch, es ist „normal“, soz. &#8220;die Regel&#8221;. Deswegen sage ich nach wie vor: Die Regel ist richtig, man sollte vorsichtig mit NULL umgehen und es mit bedacht einsetzen. Doch eine „Faustregel“ ist es für mich noch nicht, denn man kann es (noch) in bestimmten Anwendungsfällen vorteilhaft und stringent einsetzen.</p>
<h3>CatastrophicFailureException ??  Null</h3>
<p>Ralf schreibt: </p>
<blockquote><p>„Null-Regel #2 (von Ilker; noch zu diskutieren): In Katastophenfällen darf Null zurükgegeben werden.“</p></blockquote>
<p>Das ist keine Regel. Den Regelbedarf und die Kreativität zum Design eines Regelwerks wie Ralf habe ich (noch) nicht. Ich habe dafür aber Programme, die Probleme lösen. Bei einigen, wenigen Programmen habe ich NULL als Rückgabe für „katastrophale Fehler“ zurückgegeben. </p>
<p>Das hat mir bei der <a href="http://de.wikipedia.org/wiki/Defensives_Programmieren">defensiven Programmierung</a> geholfen, denn es ging um eine etwas kritischere Komponente, die an Schnittstellen sog. „Guards“ hatte, die alle möglichen Exceptions abgefangen haben. Im Nachhinein betrachtet hätte ich es wohl auch mit einer „CatastrophicFailureException“ oder mehreren, spezifischeren Exceptions lösen können. C&#8217;est ca!</p>
<h3>Null nur bei „gleicher Kategorie“</h3>
<p>Die dritte Regel von Ralf:<br />
<blockquote>&#8220;Null darf nur Rückgabewert sein, wenn Null zur selben Kategorie gehört wie ein Nicht-Null Rückgabewert&#8221;.</p></blockquote>
<p>Naja, streng genommen ist NULL ja nichts, und damit kann man es auch nicht kategorisieren. Antizipieren kann ich da nur, dass es um das <a href="http://blog.thomasbandt.de/39/2331/de/blog/kleiner-helper-fuer-linq-to-sql-tolistordefault-update.html">Beispiel von Thomas mit der Liste</a> gehen kann. Dem kann ich nur zustimmen. Hier ist ein Ausnahmefall zwar auch möglich, aber doch eher selten.</p>
<h3>Dein Pflock ist mein Maibaum!</h3>
<p>Ralf hatte mir zu viel &#8220;Rumgeeiere&#8221; in meinen Aussagen über NULL attestiert. Das will ich doch gerne versuchen besser zu machen und Ralf‘s „Pflock in Boden“ in meine triviale niederbayrische Welt übertragen und damit mal den „Maibaum ins Dorf“ stellen. Also, auf geht’s, Maderl &#038; Buam – mein Maibaum im Dorf „Nullinger“!</p>
<p>Ilker&#8217;s Statement zu Null als Rückgabe von Methoden:</p>
<blockquote><p>
NULL ist gefährlich, meide NULL, außer es gibt triftige Gründe. Triftige Gründe können Performance, Speicher oder dynamische Datenstrukturen sein. Solltest Du NULL als „Indikator“ für etwas verwenden (z.B. „Nicht gefundener Benutzer“), ziehe eine Vermeidungsstrategie mit Exceptions oder ReturnCodes in Erwägung. Sei auf der Hut, NULL ist überall. Prüfe, ob deine Parameter oder deine Methoden NULL zurückgeben. Prüfe besonders, wenn Du parallelisierst oder wichtige Schnittstellen bedienst. Solltest Du ein NULL finden, versuche zunächst damit umzugehen. Geht das nicht mehr, signalisiere die Ausnahme. Achte darauf, dass ein NULL die Methode nicht verlässt.
</p></blockquote>
<p>So, ich hoffe das war <a href="http://de.wikipedia.org/wiki/Kanak_Sprak_%E2%80%93_24_Mi%C3%9Ft%C3%B6ne_vom_Rande_der_Gesellschaft">konkret krass korrekt</a> genug!</p>
<h3>Immer diese Abhängigkeiten</h3>
<p>Nachdem nun der Maibaum in Django Asül-Manier aufgestellt ist, möchte ich neben dem Ausgangsthema mich noch ein wenig den neuen Themen widmen, die Ralf in seinem <a href="http://ralfw.blogspot.com/2010/05/es-hilft-nichts-dass-es-darauf-ankommt.html">Rules of Null-Post</a> erwähnt hat. Ralf regt sich dabei ganz besonders über die „It depends“-Phrase auf. Ja, „It depends“, die allmächtige und einzige Antwort auf alles, was so im Leben an Fragen auf einen zukommen kann. Die Antwort „It depends“ ist kurz, erfüllt die Aufgabe und ist hochgradig flexibel bei gleichzeitig maximaler Wiederverwendbarkeit. Geradezu traumhafte Eigenschaften aus der „Nerd-Software-Entwickler“-Perspektive, oder nicht? Vielleicht ist es deshalb auch so beliebt in unserer Banche?</p>
<p>Spaß beiseite. „It depends“ ist eine Phrase, die mehr oder minder Inhalt liefern kann. Ich stimme Ralf zu, wenn er sagt, dass dieses „Es kommt drauf an“-Getue mit der Zeit nicht mehr auszuhalten ist. Deswegen kann ich die Reaktion von Ralf auch gut verstehen. Ich selbst finde es teilweise immer wieder erschreckend, wie oft auf diese Floskel zurückgegriffen wird, ohne darüber nachzudenken. Dennoch verwende ich es &#8211; ab und an zumindest, wenn ich es für erwähnenswert erachte.</p>
<h3>Niemals ist niemals niemals</h3>
<p>Fakt ist auch, dass „It depends“ nicht nur eine Bierdeckelweisheit ist, sondern auch als Abkürzung verwendet wird. Im Stile „ich erspare mir und Dir jetzt nähere Details“. Das kann gut und schlecht interpretiert werden. So oder so, es kommt darauf an :-) Genauer gesagt, auf den, der es interpretiert.</p>
<p>Womit wir bei der <a href="http://de.wikipedia.org/wiki/Quadratur_des_Kreises">Quadratur des Kreises</a> angelangt wären: Es ist nunmal so, dass wir Systeme vereinfachen und Abstraktionen schaffen, um es zu verstehen. Dabei geht auch Genauigkeit und Wahrheit verloren. Manchmal sogar so sehr, dass die aus der Vereinfachung abgeleitete Erkenntnis nicht mehr adequat bzw. erwartungsgerecht ist. Insofern ist „It depends“ nicht nur eine Fassade oder Ausrede, sondern eine zuweilen notwendige Mahnung, den Kontext und die Erkenntnis zu hinterfragen, sich bewußt mit der Lösung und Problemstellung auseinanderzusetzen. Für die Agilisten unter uns: „It depends“ ist ein auch ein Aufruf zum „Inspect &#038; Adapt“.</p>
<p>Ich kann mich guten Gewissens Ralf anschließen, wenn es darum geht, Leitfäden und Empfehlungen über die Anwendung von NULL mit der Community zu erarbeiten. Meinungsaustausch ist Katalysator für Lernen, Entdecken, Erfahren und Bestätigen. Doch ein Regelwerk will ich nicht erstellen. Ich gebe meine Meinung und meinen Standpunkt gerne wieder. So wie ich es erfahren habe und so, wie ich es für gut empfinde.</p>
<p>Regeln habe ich auch. Ich habe meine eigenen Regeln, ich habe Teamregeln und ich habe noch eine Reihe weiterer Regeln, die ich für mich beachte und schätze. Regeln sind für mich wichtig. Ich möchte damit sagen, dass ich durchaus Ralfs Motivation nachvollziehen kann. Doch ich habe meine Beiträge nicht mit dieser Motivation mit der Community geteilt. Mein Ziel ist die Kommunikation und der Erfahrungsaustausch. Das wird auch so bleiben.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/kein-yin-ohne-yang-kein-null-ohne-pointer/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Meta-Test: NSpec &#8211; der spezifizierende BDD-Veteran</title>
		<link>http://www.gmbsg.com/meta-test-nspec-der-spezifizierende-bdd-veteran/</link>
		<comments>http://www.gmbsg.com/meta-test-nspec-der-spezifizierende-bdd-veteran/#comments</comments>
		<pubDate>Thu, 22 Apr 2010 20:19:47 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Aktuell]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[Anforderungen]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[Code Kata]]></category>
		<category><![CDATA[Code Review]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Meta-Test]]></category>
		<category><![CDATA[NSpec]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Unit Test]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=950</guid>
		<description><![CDATA[Einige meiner Freunde hatten schon Mutmaßungen geäußert, das xUnit wohl das nächste Framework sein wird, welches ich mit &#8220;FizzBuzz&#8221; bearbeite. Keine Sorge, xUnit ist auch auf meiner Liste, aber heute soll zunächst einmal ein etwas weniger bekanntes Framework beäugelt werden: ...]]></description>
			<content:encoded><![CDATA[<p>Einige meiner Freunde hatten schon Mutmaßungen geäußert, das <a href="http://xunit.codeplex.com/">xUnit</a> wohl das nächste Framework sein wird, welches ich mit &#8220;FizzBuzz&#8221; bearbeite. Keine Sorge, xUnit ist auch auf meiner Liste, aber heute soll zunächst einmal ein etwas weniger bekanntes Framework beäugelt werden: <a href="http://nspec.tigris.org/">NSpec</a>.</p>
<p><a href="http://codebetter.com/blogs/jeremy.miller/archive/2006/06/27/146872.aspx">NSpec ist einer der ersten &#8211; wenn nicht sogar das erste explizite &#8211; BDD-Framework für .NET</a>. Mittlerweile wird es auch nicht mehr aktiv betreut. &#8220;Schade&#8221;, denkt man sich auf der einen Seite. Andererseits jedoch nicht sooo schlimm. Schließlich war der Autor mit dieser &#8220;finalen&#8221; Version offensichtlich zufrieden. Überdies ist die NSpec-Basis auch in andere Test-Frameworks eingeflossen &#8211; dazu aber später mehr. Bleibt auch noch anzumerken, dass man NSpec und MSpec nicht miteinander verwechseln sollte. Die Frameworks unterscheiden sich massiv, obwohl die Namensähnlichkeit das nicht vermuten lässt. Auch <a href="http://github.com/machine/machine.specifications">MSpec</a> wird in meiner kleinen Serie sicherlich in der Zukunft noch seinen Platz finden. Doch nun zurück zu NSpec (N wie Nordpol) :-).</p>
<p>Bei NSpec dreht sich, wie nicht anders zu erwarten war, alles um Spezifikationen. Ich werde hier nicht näher auf die <a href="http://www.gmbsg.com/bdd-thebetterwayofunittesting/">Gemeinsamkeiten oder Unterschiede zwischen TDD und BDD</a> eingehen, werde auch nicht groß ausholen, wie und wieso BDD entstanden ist. Es sei nur kurz angerissen, dass bei BDD nicht das &#8220;testen&#8221; im Vordergrund steht, sondern die Spezifizierung des Verhaltens &#8211; Behavior Driven Design eben. Abgesehen von der Terminologie ergeben sich weitere Unterschiede, die auch am Beispiel von NSpec feststellbar sind. Genug Vorgeplänkel, auf geht&#8217;s zum Test-Training mit dem <a href="http://codingdojo.org/cgi-bin/wiki.pl?KataFizzBuzz">FizzBuzz-Kata</a>!</p>
<h3>Der Ton macht die Musik &#8211; das Wort macht die Geschichte</h3>
<p>Visual Studio öffnen, Projekt anlegen, Referenz hinzufügen, los geht&#8217;s! Äähhh&#8230; wohl doch nicht&#8230; wie schreibt man eigentlich Spezifikationen im Code? Also Finger wieder weg von der Tastatur und überlegen, um was es eigentlich geht. Ok, es geht um FizzBuzz. FizzBuzz ist ein Spiel mit <strong>Spielregeln</strong> &#8211; das ist es im Endeffekt, worum es hier geht. So eine Spielregel ist recht einfach, denn es gibt zu einer bestimmten Spielsituation &#8211; sagen wir mal zu einem bestimmten <strong>Kontext</strong> &#8211; immer eine Regel, die man anwenden muss, damit man weiter im Spiel bleibt. Anders ausgedrückt ist bei einer Spielsituation zu prüfen, ob die Regel richtig angewendet wird &#8211; ob also die <strong>Erwartungen</strong> an das Spielverhalten erfüllt werden.</p>
<p>Aha &#8211; so ist das also. Hört sich vielleicht etwas abgedreht an, aber dieses kurze <a href="http://de.wikipedia.org/wiki/Repetitorium">Repetitorium</a> hilft beim Schreiben der ersten Spezifikation ungemein. Denn NSpec kennt zwei Attribute, namentlich <code>[Context]</code> und <code>[Specification]</code>. Mit der kleinen o.g. FizzBuzz-Geschichte macht das auch Sinn, wie man dann auch im Code sehen kann:</p>
<pre name="code" class="brush: csharp">
using NSpec.Framework;

namespace FizzBuzzNSpec.Specs
{
    [Context]
    public class when_a_number_is_a_multiple_of_three
    {
        [Specification]
        public void then_translation_should_return_fizz()
        {
            Specify.That(game.Translate(6)).ShouldEqual("Fizz");
        }

        private readonly FizzBuzz game = new FizzBuzz();
    }
}
</pre>
<h3>Anderes Framework, andere Sitten</h3>
<p>Die Konsequenz dieser Verbalisierung und Strukturierung ist zunächst einmal eine verbesserte Lesbarkeit. Weiterhin fällt auf, dass es nicht mehr eine einzige &#8220;Testklasse&#8221; gibt, sondern 4 verschiedene Spezifikationsklassen. Für jede Spielregel eine. Das Stukturierungssystem ist zwar mit klassischen Test-Frameworks auch möglich, wird aber nicht so offensichtlich &#8220;verlangt&#8221; wie es das BDD-Test-Framework NSpec hier tut.<br />
<a href="http://www.gmbsg.com/wp-content/uploads/2010/04/nspec_structure.png"><img src="http://www.gmbsg.com/wp-content/uploads/2010/04/nspec_structure.png" alt="nspec_structure" title="nspec_structure" width="353" height="235" class="alignright size-full wp-image-962" /></a><br />
Den Code für die anderen Spielregeln spare ich mir &#8211; es sieht dem o.g. Beispiel sehr ähnlich :-). Hat man erst einmal das &#8220;sprechendere&#8221; schreiben der Tests bzw. Spezifikationen verinnerlicht, geht es mit NSpec auch zügig voran. Schade ist hier die fehlende Integration und Unterstützung für Visual Studio und die üblichen Code-Assistenten. Mir blieb also nichts anderes übrig, als in der Konsole meine Tests auszuführen. Das hat mich beim implementieren schon gebremst.</p>
<h3>Bewertung</h3>
<ul>
<li><b>Dauer</b><br/>Naja, knapp 15 Minuten für FizzBuzz ist doch schon dreimal länger als mit NUnit. Die mangelnde Integration und die 4 Klassen machen schon etwas aus.</li>
<li><b>Größe</b><br/>Statt wie bei den &#8220;Klassikern&#8221; 4 Methoden sind es nun 4 Klassen. Schon etwas mehr Code &#8211; hält sich aber noch &#8220;in Grenzen&#8221;.</li>
<li><b>Tooling</b><br/>Schlecht. Der Runner ist dabei &#8211; das war&#8217;s.</li>
<li><b>Usability</b><br/>Geht so. Die Assertions mit <code>Specify</code> reichen für die gröbsten Fälle aus.</li>
<li><b>Support</b><br/>Die Entwicklung von NSpec ist eingestellt. Support damit auch. Zukunftssicherheit ist etwas anderes.</li>
</ul>
<h3>NSpec for a taste of BDD</h3>
<p>NSpec &#8211; ein Vorreiter im .NET-Bereich was BDD angeht. Man merkt dem Framework deutlich an, dass es ein &#8220;erster Wurf&#8221; von der Adaption der BDD-Methodik ist. Nichtsdestotrotz ist as Framework schlank, stabil und gut anwendbar. Es zeigt schon in der Anwendung, wie das &#8220;System BDD&#8221; die Herangehensweise an die Spezifikation und Verifikation von Code ändert. Man beschäftigt sich automatisch mehr mit Kernaussagen und ist &#8220;gezwungen&#8221;, sich deutlicher und expliziter in der Domänensprache zu artikulieren. NSpec kann diesen systematischen Aspekt transportieren, ist aber mittlerweile auf Grund der mangelnden Integration und des fehlenden Supports nicht mehr für &#8220;Real-World&#8221;-Projekte ernstzunehmen. Trotzdem hat mir der Ausflug mit NSpec Spaß gemacht. Da bekomme ich glatt Lust &#038; Laune mir schon das nächste Framework anzuschauen. Stay tuned!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/meta-test-nspec-der-spezifizierende-bdd-veteran/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Meta-Test: NUnit &#8211; All-Time-Hall-Of-Fame-Most-Valuable-Tester</title>
		<link>http://www.gmbsg.com/meta-test-nunit-all-time-hall-of-fame-most-valuable-tester/</link>
		<comments>http://www.gmbsg.com/meta-test-nunit-all-time-hall-of-fame-most-valuable-tester/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 21:27:01 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Aktuell]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[3.5]]></category>
		<category><![CDATA[4.0]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[NUnit]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[Software-Entwicklung]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Unit Test]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=920</guid>
		<description><![CDATA[Der Titel ist unmißverständlich: NUnit, der Godfather der Test-Frameworks für .NET, wird heute von mir in der Reihe &#8220;Meta-Test, Test-Frameworks im Vergleich&#8221; ein wenig unter die Lupe genommen. Gestern hatte ich schon den Redmond-Test-Botschafter MS-Test im Visier. Irgendwie ist es ...]]></description>
			<content:encoded><![CDATA[<p>Der Titel ist unmißverständlich: <a href="http://nunit.com/">NUnit, der Godfather der Test-Frameworks für .NET</a>, wird heute von mir in der Reihe &#8220;<a href="http://www.gmbsg.com/meta-test-tdd-bdd-test-frameworks-im-vergleich/">Meta-Test, Test-Frameworks im Vergleich</a>&#8221; ein wenig unter die Lupe genommen. Gestern hatte ich schon den <a href="http://www.gmbsg.com/meta-test-ms-test-visual-studio-on-board-test-framework/">Redmond-Test-Botschafter MS-Test</a> im Visier. Irgendwie ist es schon komisch. Obwohl Microsoft mit MS-Test ein umfangreiches Framework für Testing der professionellen Entwicklergemeinde zur Verfügung gestellt hat, hört man unter Gleichgesinnten und Kollegen fast immer die gleiche Story: &#8220;Tests? Unit Tests? Klar! NUnit!&#8221;</p>
<h3>Der Pate unter den Test-Frameworks</h3>
<p>So ist es auch nicht weiter erstaunlich, dass man nahezu überall, wo das Wörtchen &#8220;Test&#8221; fällt, auch &#8220;NUnit&#8221; zu sehen bekommt. Sei es nun bei den Codeassistenten, bei Build- oder CI-Tools, Addins und sogar weiteren Test-Frameworks. Die <a href="http://www.google.de/search?q=nunit">Verbreitung und Unterstützung von NUnit</a> ist hier einfach nicht zu toppen. Aber auch die vielen Kontakte und Beziehungen des &#8220;Paten der Test-Frameworks&#8221; helfen nicht viel beim Meta-Test mit dem FizzBuzz-Kata! Auf geht&#8217;s!</p>
<h3>Der Code</h3>
<p>FizzBuzz ist mit NUnit und den &#8220;Standard-TDD-Regeln&#8221; schnell implementiert. Referenz hinzufügen, Testklasse inklusive Testmethode aufbauen, noch schnell ein <code>using NUnit.Framework;</code> und die beiden Attribute <code>[TestFixture]</code> (für Klassen) sowie <code>[Test]</code> hinzugefügt &#8211; und schon kann man fröhlich testen!<br />
<a href="http://www.gmbsg.com/wp-content/uploads/2010/04/nunit_guirunner1.png"><img src="http://www.gmbsg.com/wp-content/uploads/2010/04/nunit_guirunner1-300x152.png" alt="nunit_guirunner" title="nunit_guirunner" width="300" height="152" class="alignright size-medium wp-image-935" /></a><br />
Wer jetzt einen Codeassistenten wie <a href="http://www.jetbrains.com/resharper/">Resharper</a> oder <a href="http://www.devexpress.com/Products/Visual_Studio_Add-in/Coding_Assistance/">Coderush</a> hat, ist praktisch nur ein Klick bzw. Tastenschlag von der Testausführung entfernt. Doch auch ohne &#8220;Code-Beschleuniger&#8221; gehen NUnit-Tests elegant, z.B. mit dem <a href="http://www.testdriven.net/">TestDriven.NET Addin</a>. Mal von diesen &#8220;Integrationstüren&#8221; abgesehen, bietet NUnit auch eigenständige Runner für die Konsole sowie auch als Windows-Anwendung an. Passt!</p>
<pre name="code" class="brush: csharp">
using NUnit.Framework;

namespace KataFizzBuzzNUnit
{
    [TestFixture]
    public class FizzBuzzTest
    {
        private FizzBuzz target = new FizzBuzz();

        [Test]
        public void Multiples_Of_Three_Returns_Fizz()
        {
            Assert.That(target.Translate(6), Is.EqualTo("Fizz"));
        }

        [Test]
        public void Multiples_Of_Five_Returns_Buzz()
        {
            Assert.That(target.Translate(10), Is.EqualTo("Buzz"));
        }

        [Test]
        public void Multiples_Of_Three_And_Five_Returns_FizzBuzz()
        {
            Assert.That(target.Translate(15), Is.EqualTo("FizzBuzz"));
        }

        [Test]
        public void No_Multiples_Of_Three_Or_Five_Returns_Number()
        {
            Assert.That(target.Translate(7), Is.EqualTo("7"));
        }
    }
}
</pre>
<p>Bei der Implementierung fühlt man sich schon fast wie bei MS-Test, jedoch mit einem ganz gewaltigen Unterschied: Die Assert-Klasse im Allgemeinen sowie die <code>Assert.That()</code> Syntax von NUnit sind mächtig &#8211; und mächtig hilfreich. Das mit <a href="http://www.nunit.org/index.php?p=constraintModel&#038;r=2.4">NUnit 2.4 eingeführte Constraint Model</a> ist nicht nur besser lesbar, sondern auch intuitiver. Kennt man mal die wichtigsten Constraints, vergisst man sie auch nicht mehr so schnell. Alles in Allem ist TDD mit NUnit eine runde Sache. In weniger als 5 Minuten strahlten meine 4 Tests und ich uns gegenseitig an.</p>
<h3>Bewertung</h3>
<ul>
<li><b>Dauer</b><br/>Zackig, Knackig, ohne Trärä und Tamtam. FizzBuzz-Regeln in 5 Minuten. Mit Codebeschleuniger geht&#8217;s sogar noch schneller. Passt.</li>
<li><b>Größe</b><br/>Ähnlich wie bei MS-Test. Eine kompakte Testklasse mit 4 Testmethoden.</li>
<li><b>Tooling</b><br/>MS-Test war schon sehr gut &#8211; doch NUnit ist sogar noch besser! Die Verbreitung in der OSS-Gemeinde macht sich hier bemerkbar. Top.</li>
<li><b>Usability</b><br/>Sehr gut. Assert&#8217;s schön mit Constraints. Wenn man möchte sogar noch beschleunigt über das Erben von AssertionHelper. Angenehm.</li>
<li><b>Support</b><br/>Unmengen an Material im Internet. Open-Source, stabil, große Gemeinde, aktive Entwicklung. Zufrieden.</li>
</ul>
<p>Hmm, es fällt mir schon schwer, etwas &#8220;negatives&#8221; an NUnit zu finden. Es mag den einen oder anderen stören, wie die Test-Projekt-Struktur von NUnit aufgebaut ist. Auch der GUI-Runner ist jetzt nicht der Augenschmaus schlechthin. Doch die Kernkompetenzen werden von NUnit bravourös gemeistert.</p>
<h3>NUnit &#8211; Die Referenz</h3>
<p>Als kleines Fazit kann ich für mich schon mal sagen &#8211; NUnit hat die Messlatte ganz schön hochgelegt. Effektiv betrachtet ist NUnit als Test-Framework derzeit die Referenz, mit der sich alle anderen messen lassen müssen. Das ist auch gut so, denn NUnit ist durch die jahrelange, stetige Entwicklung viele Schritte gegangen &#8211; manchmal auch einige Schritte voraus. Bleibt die Frage offen: Gibt es noch bessere Test-Frameworks für C# und .NET als NUnit? Abwarten, meine Test-Serie geht in Kürze weiter. Stay tuned!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/meta-test-nunit-all-time-hall-of-fame-most-valuable-tester/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Meta-Test: MS Test &#8211; Visual Studio On Board Test-Framework</title>
		<link>http://www.gmbsg.com/meta-test-ms-test-visual-studio-on-board-test-framework/</link>
		<comments>http://www.gmbsg.com/meta-test-ms-test-visual-studio-on-board-test-framework/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 18:50:41 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Aktuell]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[3.5]]></category>
		<category><![CDATA[4.0]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Meta-Test]]></category>
		<category><![CDATA[MSTest]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Unit Test]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=859</guid>
		<description><![CDATA[In meiner kleinen Blog-Serie über den Vergleich von Test-Frameworks für .NET / C# macht der &#8220;Platzhirsch&#8221;, das On Board Visual Studio Test-Framework MS-Test den Anfang. Genau zur richtigen Zeit des Launches von Visual Studio 2010 wird hier das dazugeörige Test-Framework ...]]></description>
			<content:encoded><![CDATA[<p>In meiner kleinen <a href="http://www.gmbsg.com/?p=827">Blog-Serie über den Vergleich von Test-Frameworks für .NET / C#</a> macht der &#8220;Platzhirsch&#8221;, das On Board Visual Studio Test-Framework MS-Test den Anfang. Genau zur richtigen Zeit des <a href="http://www.microsoft.com/visualstudio/en-us/products">Launches von Visual Studio 2010</a> wird hier das dazugeörige Test-Framework unter die Lupe genommen. MS-Test ist seit VS2005 integrierter Bestandteil der professionellen Versionen von Visual Studio &#8211; womit der erste Nachteil schon zwischen den Zeilen hindurchschimmert. Leider ist MS-Test bis zum heutigen Tag nicht in den <a href="http://www.microsoft.com/express/Downloads/">Visual Studio Express-Versionen</a> verankert &#8211; also quasi nicht &#8220;frei verfügbar&#8221;. Wieso das so ist, ist mir immer noch ein Rätsel.</p>
<h3>Los geht&#8217;s mit Projekten</h3>
<p>Aber zurück zur Sache. Es muss ja schließlich das mittlerweile mehr als bekannte FizzBuzz-Kata als Fingerübung implementiert werden.<br />
<img src="http://www.gmbsg.com/wp-content/uploads/2010/04/mstest_createproject_vs-300x171.png" alt="mstest_createproject_vs" title="mstest_createproject_vs" width="300" height="171" class="alignright size-medium wp-image-901" /><br />
Da tut sich schon interessantes am Anfang auf: Durch die nahtlose Integration in Visual Studio fügt man keine Referenz auf irgendeine Framework-DLL hinzu, sondern startet die Tests mit der Erstellung eines Testprojektes. Für mich persönlich ein wenig gewöhnungsbedürftig &#8211; ich schreibe man Tests und Code für gewöhnlich in der selben Assembly und lagere es nur auf ausdrücklichen Wunsch aus.</p>
<p>Nach Abschluß der durch den (eigentlich um die Arbeit zu beschleunigen konzipierten) Projekt-Wizard durchgeführten Vorbereitungen und der manuellen Abschlussvorbereitungen kann es nun endlich losgehen.</p>
<h3>Straight-Forward mit Attributen und Asserts</h3>
<p>Die Test-Methoden gehen schnell von der Hand, man braucht nur das <code>[TestMethod]</code> Attribut hinzufügen. Die <code>Assert</code>-Klasse deckt alle notwendigen Prüfungen ab, bietet aber im Vergleich zu anderen Frameworks wie z.B. NUnit wesentlich weniger &#8220;methodische Expressivität&#8221;. In unserem Fall brauchen wir nur die <code>AreEqual</code>-Methode. Schon nach dem ersten Test fällt allerdings die lange Testdauer des Testrunners ein wenig negativ auf. Das kann auch wesentlich schneller gehen.</p>
<p>Das Test-Ergebnis sieht relativ unspektakulär aus:</p>
<pre name="code" class="brush: csharp">
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace FizzBuzzMSTest
{
    [TestClass]
    public class FizzBuzzTest
    {
        [TestMethod]
        public void Multiples_Of_Three_Returns_Fizz()
        {
            FizzBuzz target = new FizzBuzz();
            string translation = target.Translate(6);
            Assert.AreEqual("Fizz", translation);
        }

        [TestMethod]
        public void Multiples_Of_Five_Returns_Buzz()
        {
            FizzBuzz target = new FizzBuzz();
            string translation = target.Translate(10);
            Assert.AreEqual("Buzz", translation);
        }

        [TestMethod]
        public void Multiples_Of_Three_And_Five_Returns_FizzBuzz()
        {
            FizzBuzz target = new FizzBuzz();
            string translation = target.Translate(15);
            Assert.AreEqual("FizzBuzz", translation);
        }

        [TestMethod]
        public void No_Multiples_Of_Three_Or_Five_Returns_Number()
        {
            FizzBuzz target = new FizzBuzz();
            string translation = target.Translate(7);
            Assert.AreEqual("7", translation);
        }
    }
}
</pre>
<h3>Bewertung</h3>
<ul>
<li><b>Dauer</b><br/>Die FizzBuzz-Implementierung ging relativ zügig von der Hand. Ich habe ca. 15 Minuten gebraucht. Der &#8220;lahme&#8221; Testrunner hat mich etwas gestört. Die meiste Zeit ging für das Projekt, die Referenzverweise und das hin und her zwischen den Projekten drauf.</li>
<li><b>Größe</b><br/>Die Testgröße ist überschaubar. Eine kompakte Testklasse mit 4 Testmethoden. Eine klassische Class-Per-Class Struktur. Das Testprojekt ist isoliert vom Code.</li>
<li><b>Tooling</b><br/>Ein regelrechtes Heimspiel mit der VS-Integration. Auch Code-Assistenten wie Resharper oder Coderush kennen den MSTest. Alles in Allem eine sehr gute Unterstützung.</li>
<li><b>Usability</b><br/>Durch den Projekt-Wizard und die entsprechende Dokumentation komfortabel für allgemeines Testing. Speziell für TDD/BDD allerdings etwas hakelig. Immer gleich die Test/Code-Separation. Die Asserts sind sicherlich ausreichend.</li>
<li><b>Support</b><br/>Was soll man hier schreiben, außer MS? Das Framework wird direkt von Microsoft mit Visual Studio ausgeliefert. Die Dokumentation ist gut, Online-Material ist sicherlich vorhanden. MSTest ist in der Community (vor allem für Open Source oder kleinere Projekte) nicht so weit verbreitet wie andere Frameworks.</li>
</ul>
<p>MS-Test ist ein solides Framework, mit dem sich sicherlich auch gut TDD betreiben lässt. Man merkt dem Featureset an, dass es nicht nur für Unit-Testing ausgelegt ist. Der integrierte Runner ist schick, das Reporting ein Highlight. Ich sollte nicht unerwähnt lassen, dass vor Allem die Kombination TFS/MSTest ein sehr gutes Reporting/Monitoring-Werkzeug darstellt. </p>
<p>Zu den Tests selbst gibt das Framework wenig Hilfestellung bzw. Guidance zur Strukturierung und Anwendung der Tests. So wird wohl am meisten die Class-Per-Class Struktur angewendet werden, mit den üblichen TDD Best Practices. </p>
<h3>MS-Test leider nur für &#8220;Profis&#8221;</h3>
<p>Ein absolutes Manko ist die nicht-freie Verfügbarkeit des Frameworks und damit auch das Fehlen des Features in der Express-Edition. <img src="http://www.gmbsg.com/wp-content/uploads/2010/04/mstest_runner_vs-300x136.png" alt="mstest_runner_vs" title="mstest_runner_vs" width="300" height="136" class="alignright size-medium wp-image-902" />Einfach mal Tests/Code schreiben und veröffentlichen ist somit unmöglich. Für bekennende TDDler ein No-Go. Mit den 15 Minuten Fizzbuzz ist die Umsetzungsgeschwindigkeit in Ordnung &#8211; wobei ich zugegebenermaßen Fizzbuzz auch schon wesentlich zügiger implementiert habe. Das bringt mich dann auch zum nächsten Test-Framework unter meiner Meta-Test-Lupe&#8230; stay tuned!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/meta-test-ms-test-visual-studio-on-board-test-framework/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Meta-Test: TDD &amp; BDD Test-Frameworks im Vergleich</title>
		<link>http://www.gmbsg.com/meta-test-tdd-bdd-test-frameworks-im-vergleich/</link>
		<comments>http://www.gmbsg.com/meta-test-tdd-bdd-test-frameworks-im-vergleich/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 20:45:26 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Topthema]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[Anforderungen]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[Code Kata]]></category>
		<category><![CDATA[Code Review]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Dokumentation]]></category>
		<category><![CDATA[MSpec]]></category>
		<category><![CDATA[MSTest]]></category>
		<category><![CDATA[NBehave]]></category>
		<category><![CDATA[NSpec]]></category>
		<category><![CDATA[NUnit]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[Software-Entwicklung]]></category>
		<category><![CDATA[SpecFlow]]></category>
		<category><![CDATA[StoryQ]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Unit Test]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[XUnit]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=827</guid>
		<description><![CDATA[Unit Testing, TDD und BDD &#8211; das alles sind zur Zeit &#8211; außer dem Visual Studio 2010 Launch natürlich &#8211; aktuelle Themen, die die .NET Community ein Stückweit bewegt. Ich z.B. habe vor ein paar Wochen angefangen, intensivere Forschungen zur ...]]></description>
			<content:encoded><![CDATA[<p>Unit Testing, TDD und BDD &#8211; das alles sind zur Zeit &#8211; außer dem <a href="http://www.microsoft.com/germany/visualstudio/default.aspx">Visual Studio 2010 Launch</a> natürlich &#8211; aktuelle Themen, die die .NET Community ein Stückweit bewegt. Ich z.B. habe vor ein paar Wochen angefangen, intensivere Forschungen zur Verwandschaft &#038; Beziehung zwischen TDD und BDD durchzuführen. Ich habe zwar schon einige TDD- und BDD-Frameworks hinter mir, doch nicht zuletzt die in jüngster Zeit individuellen, manchmal irritierenden <a href="http://www.gmbsg.com/bdd-thebetterwayofunittesting/">Aussagen zu TDD und BDD</a> geben mir Anlass genug, nachzuforschen.</p>
<p>Ein Bereich, den ich mir dabei näher angeschaut habe ist das Tooling. Ich wurde in der Vergangenheit schon öfters gefragt, welches Test-Framework ich denn einsetze. In letzter Zeit werde ich aber auch ab und an gefragt, welches Test-Framework denn jetzt besser sei. Als Hilfestellung zur Findung einer Antwort auf diese Fragen sowie einen Überblick über die gängigsten Test Frameworks soll dieser Artikel beitragen.</p>
<h3>Die Kandidaten</h3>
<p>Mit diesem Artikel beginnt die kleine Blog-Serie &#8220;Meta-Test&#8221;, die Stück für Stück die populärsten Test-Frameworks für .NET und C# unter die Lupe nimmt, sie bewertet und natürlich auch vergleichen wird. Bisher gab es schon folgende Tests:</p>
<ul>
<li><a href="http://www.gmbsg.com/?p=859">MS Test &#8211; Visual Studio On Board Test-Framework</a>
<li><a href="http://www.gmbsg.com/?p=920">NUnit &#8211; All-Time-Hall-Of-Fame-Most-Valueable-Tester</a>
<li><a href="http://www.gmbsg.com/?p=950">NSpec &#8211; der spezifizierende BDD-Veteran</a>
</ul>
<h3>Die Hypothese</h3>
<p>Vorab möchte ich allerdings noch eine &#8211; für mich wichtige &#8211; Anmerkung äußern. Beim Test der Testframeworks habe ich mehrere Code Kata&#8217;s mit allen Frameworks geschrieben. Am häufigsten habe ich wohl <a href="http://codingdojo.org/cgi-bin/wiki.pl?KataFizzBuzz">FizzBuzz</a> geschrieben, gefolgt von <a href="http://codingdojo.org/cgi-bin/wiki.pl?KataDictionaryReplacer">Replacer</a>, <a href="http://codekata.pragprog.com/2007/01/kata_thirteen_c.html">LineCounter</a> und ein paar Mal <a href="http://stefanomasini.com/index.php/2009/10/29/code-kata-minesweeper/">Minesweeper</a>. Ich habe dabei schon deutliche Unterschiede nicht nur in den Frameworks, sondern auch in der Adaption selbst festgestellt. Für den hier gezeigten Vergleich gelten folgende Hypothesen: </p>
<ul>
<li>TDD &#038; BDD sind gleichwertig.</li>
<li>TDD &#038; BDD sind prinzipiell das Gleiche, mit Unterschieden in Benennung und Teststruktur</li>
<li>TDD &#038; BDD wendet man für die selbe Aufgabe an, zum Software-Design</li>
</ul>
<p>So, und jetzt der Disclaimer:<br />
<strong>Achtung: Die genannten Hypothesen sind nicht meine Meinung über TDD bzw. BDD!</strong></p>
<p>Ganz im Gegenteil. Ich habe zu TDD ein gefestigtes Meinungsbild. Ich habe auch Erfahrung mit BDD. Gerade deswegen bin ich sehr vorsichtig mit beiden Begriffen. Ich denke, TDD und BDD sind nicht das Gleiche. Doch eine weitere Vertiefung in das Thema lenkt nur von den Frameworks ab. Deswegen wieder schnell zurück zu den Test-Frameworks.</p>
<h3>Die Anforderungen</h3>
<p><asa>Als</asa> <role>Entwickler</role> <iwant>möchte man</iwant> <feature>ein möglichst effektives und intuitives Test-Framework als Werkzeug</feature>, <sothat>um</sothat> <benefit>testgestriebenes Softwaredesign</benefit> durchzuführen. <given>Beim</given> <context>programmieren mit Visual Studio</context> zum Beispiel, <when>wenn</when> <action>man die Tests für die gerade zu entwickelnde Klasse oder Methode formuliert</action>,
<then>da</then> <expectation>gehört die Unterstützung von Tools wie Resharper, CodeRush oder Gallio heutzutage schon zum guten Ton</expectation>. </p>
<p><emotion>Ebenso geht es bei dem Vergleich um die <goal>Anwendbarkeit und Effizienz</goal>. <desire>Also wie expressiv, wie deutlich kann ich meine Tests formulieren und wie intuitiv ist die Umsetzung der Tests</desire>. Die Umsetzungsgeschwindigkeit spielt dabei genauso eine Rolle wie die <wish>Lesbarkeit</wish>, <wish>Wartbarkeit</wish> und <wish>gutes Reporting</wish>. Dazu noch später mehr.</emotion></p>
<h3>Das Ziel</h3>
<p>Um auch eine konkrete, relativ faire Vergleichssituation zu erreichen, stelle ich alle Frameworks an einem einzigen Beispiel vor, nämlich dem <a href="<a href="http://codingdojo.org/cgi-bin/wiki.pl?KataFizzBuzz">KataFizzBuzz</a>. FizzBuzz ist eine sehr einfache Kata, die gerade genug &#8220;Widerstand&#8221; bietet, um die Grundzüge des treibenden Software-Designs sowie des Test-First zu vermitteln. Ich habe mich bei der Programmierung der Kata sogar nur auf das Teilproblem der &#8220;Fizz&#8221;- und &#8220;Buzz&#8221;-Übersetzung konzentriert. Es gibt unzählige Implementierungen von FizzBuzz. Bei dem Vergleich der Test-Frameworks habe ich mich für die &#8220;triviale&#8221; und &#8220;zügige&#8221; Implementierung entschlossen. Konkretisiert bedeutet dies, das es mein Test-Ziel war, das ich mit allen Test-Frameworks ungefähr folgenden Code produziere:</p>
<pre name="code" class="brush: csharp">
    public class FizzBuzz
    {
        public string Translate(int number)
        {
            if (number % 15 == 0)
                return "FizzBuzz";

            if (number % 5 == 0)
                return "Buzz";

            if (number % 3 == 0)
                return "Fizz";

            return number.ToString();
        }
    }
</pre>
<h3>Die Metriken</h3>
<p>Um nun die einzelnen Frameworks untereinander vergleichen zu können, braucht es nicht nur einer gemeinsamen Basis &#038; Ziels, sondern auch einer gemeinsamen Messmetrik. Um es nicht zu theoretisch zu gestalten, habe ich einige ganz einfache, aber wie ich finde dennoch aussagekräftige Metriken ausgewählt:</p>
<ul>
<li>Die <b>Dauer</b> der Implementierung</li>
<li>Die <b>Größe</b> der Test-Artefakte (Klassen usw.)</li>
<li>Das <b>Tooling</b>, also die Unterstützung durch VS / Frameworks / Codetools</li>
<li>Die <b>Usability</b>, also handbuchnachschlagefreie Handhabung der API / Tools</li>
<li>Der <b>Support</b> durch Hersteller, Community und User</li>
</ul>
<p>Doch die wichtigste Metirk ist mit Abstand die Bewertung des Ergebnisses der Test-Frameworks &#8211; also der Tests ansich. Die Tests werden unter die vier Grundmerkmale Intuitivität, Expressivität, Lesbarkeit und Wartbarkeit gestellt. Natürlich bleibt da meine eigene subjektive Note an der ein oder anderen Stelle hängen, schließlich habe ich die Frameworks eigenständig getestet und habe auch keinen Anspruch auf gestelzte Objektivität :-).</p>
<p>So, damit sollten die Vorbereitungen und Rahmenbedinungen für den ultimativen Vergleich der Test-Frameworks für das .NET Framework &#038; C# abgeschlossen sein. Dieser gigantische Vergleich von einer Unmenge an Test-Frameworks &#8211; für den ich keine Kosten und Mühen gescheut habe :-) &#8211; wird als Blog-Post-Serie in den nächsten Tagen veröffentlicht.</p>
<p>Stay tuned!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/meta-test-tdd-bdd-test-frameworks-im-vergleich/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ministerium für Scrum</title>
		<link>http://www.gmbsg.com/ministerium-fur-scrum/</link>
		<comments>http://www.gmbsg.com/ministerium-fur-scrum/#comments</comments>
		<pubDate>Tue, 23 Mar 2010 10:43:30 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Aktuell]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[System]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[Projektmanagement]]></category>
		<category><![CDATA[Prozess]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=806</guid>
		<description><![CDATA[Es ist unfassbar. In letzter Zeit ertappe ich mich ungewohnt oft dabei, wie ich vor dem Bildschirm die Hände über den Kopf schlage, seufze und mir selbst zuflüstere &#8220;Ich verstehe das nicht&#8221;. So geschehen gestern Abend, als ich den offenen ...]]></description>
			<content:encoded><![CDATA[<p>Es ist unfassbar. In letzter Zeit ertappe ich mich ungewohnt oft dabei, wie ich vor dem Bildschirm die Hände über den Kopf schlage, seufze und mir selbst zuflüstere &#8220;Ich verstehe das nicht&#8221;. So geschehen gestern Abend, als ich den <a href="http://borisgloger.com/2010/03/22/scrum-wurden-agiles-schwachen-geerbt-eine-antwort/">offenen Brief von Boris Gloger zu den 7 Thesen der Scrum/Agile-Schwachpunkte von Uncle Bob</a> gelesen habe. Beim Lesen dieses &#8220;offenen Briefes&#8221; konnte ich meinen Augen kaum trauen. Die Argumente und Antworten von Boris Gloger sind für mich einfach unglaublich. Nicht nur, <a href="http://www.gmbsg.com/funf-schwachpunkte-von-scrum/">weil ich die Kritikpunkte von Uncle Bob größtenteils verstehe</a>. Ich möchte meine Auffassung und Wahrnemung zu diesem Artikel hier widergeben.</p>
<h3>Antwort zu: Scrum kennt keine technischen Verfahren</h3>
<blockquote><p><i>Boris Gloger schreibt:</i> &#8220;Scrums primärer Zweck war und ist, Teams, Abteilungen und Firmen zu unterstützen, mit den Prinzipien von eigenständigen Arbeitsteams ihre Aufgaben zu bewältigen. Es war niemals geplant, Entwicklern beizubringen, wie man entwickelt. Wenn man Scrum implementiert, dann erkennt man schnell, dass die Entwickler nicht mit der Arbeitsweise von Agile vertraut sind.&#8221;</p></blockquote>
<p>Ich habe Scrum als <a href="http://www.gmbsg.com/scrum-ein-agiles-software-management-framework/">agiles Software-Management-Framework kennengelernt</a>. Spezifisch für die Domäne der Software-Entwicklung. Scrum ist kein Selbstorganisatios-Framework. Nicht umsonst ist Scrum ein Vertreter der agilen Software-Entwicklungs-Verfahren, und nicht ein &#8220;Autonomie-Team-Modell&#8221;. Insofern kann man einem agilen Software-Management-Verfahren schon abverlangen, die Software-Entwicklung als Domäne zu unterstützen und zu fördern.</p>
<h3>Antwort zu: Scrum hat zu lange Sprints</h3>
<blockquote><p><i>Boris Gloger schreibt:</i> &#8220;Es wurde NIEMALS ausdrücklich gesagt, dass ein Sprint 30 Tage lang sein muss, sondern es war nur als Vorschlag gemeint. Ken und Jeff machten vor 15 Jahren mit den 30 Tagen große Fortschritte. Nicht mehr und nicht weniger. Sprints sollten so lange sein, wie es das Team und der PO für nötig halten und 2 Wochen werden oftmals vorgeschlagen. Allerdings verkompliziert sich dadurch die Sache für die meisten Entwickler.&#8221;</p></blockquote>
<p>Das schöne an agilen Verfahren ist das <a href="http://c2.com/cgi/wiki?InspectAndAdapt">Inspect &#038; Adapt</a>. Wenn etwas nicht mehr zeitgemäß ist, oder vielleicht nicht in den Kontext hineinpasst, dann wird es eben verändert. So auch mit der Sprintdauer. Für mich ist es offensichtlich, dass <a href="http://www.gmbsg.com/scrum-die-bessere-sprintdauer/">kürzere Sprints deutliche Vorteile bieten</a> &#8211; auch bzw. gerade für Entwickler. Eine &#8220;Verkomplizierung&#8221; sehe ich da nicht.</p>
<h3>Antwort zu: ScrumMaster aka Projektmanager</h3>
<blockquote><p><i>Boris Gloger schreibt:</i> &#8220;Der ScrumMaster ist eine neue Führungsrolle. Ken hat dies vor Jahren geschrieben und für die ersten Scrum Experten, wie mich, war dies klar verständlich. Jedoch wollte dies die gesamte Agile Gemeinschaft nicht anerkennen, da es ihrem Verständnis nach nicht nötig war, dass Teams eine Führungskraft benötigen und Scrum eine neue Führungsrolle einnimmt. Ein ScrumMaster ist weder ein PM, noch ein Master des Teams. Er ist der Master innerhalb des Bezugssystems des Prozesses. Er ist der Leiter des Teams und der PO und es ist seine Aufgabe, die Organisation mittels Scrum zu verändern und Scrum als ein Paket von Tools und Grundwerten einzusetzen.&#8221;</p></blockquote>
<p>Mit Nichten. Ich habe in meinen bescheidenen paar Jahren, in denen ich mich Scrum auseinandergesetzt habe und immer noch intensiv beschäftige  den ScrumMaster niemals als Führungsrolle verstanden. Ja, es gibt das Prinzip des <a href="http://en.wikipedia.org/wiki/Servant_leadership">Servant Leaderships</a> für einen ScrumMaster. Ja, der ScrumMaster ist der Hüter des Scrum-Grals. Ja, der ScrumMaster ist ein <a href="http://de.wikipedia.org/wiki/Change_Agent">Change Agent</a>. Aber Nein, der ScrumMaster ist kein Team-Leiter. Nein, es gibt keine Position &#8220;ScrumMaster&#8221; in einem Organigramm, sondern die Rolle ScrumMaster. Nein, der ScrumMaster ist kein Entwicklungs-Alpha-Tier.</p>
<h3>Antwort zu: ScrumMaster ist kein Leader</h3>
<blockquote><p><i>Boris Gloger schreibt:</i> &#8220;Ein Entwickler hat nicht die Fähigkeiten ein Team zu leiten, eine Organisation zu ändern und sein Team vor der herkömmlichen Organisationskultur zu beschützen. In dieser Hinsicht wird die Rolle des ScrumMasters großteils missverstanden. Er ist ein Moderator, aber das ist Teil seiner Führungsrolle als ScrumMaster. Ein ScrumMaster zu sein, das bedeutet, sich ein Set and Fähigkeiten anzueignen, die erlernt und geübt werden müssen. Dies kann 10000 Stunden in Anspruch nehmen, bevor man davon ausgehen kann, dass man diese Disziplin auch beherrscht.&#8221;</p></blockquote>
<p>Mit Verlaub, Herr Gloger, das geht zu weit. Es tut mir leid Ihnen entgegnen zu müssen, dass Ihre Auffassung für mich nichts anderes als protektionistischer <a href="http://de.wikipedia.org/wiki/Mumpitz">Mumpitz</a> ist! Sie haben gerade die Entwickler, also mich, meine Kollegen und meine gesamte Berufszunft gekränkt. Was fällt Ihnen ein, sich so herablassend über einen Entwickler und seine Fähigkeiten zu äußern? Zugegeben, nicht jeder Entwickler hat das Zeug zum Teamleiter. Nicht jeder Entwickler kann sich eloquent und zielsicher vor Führungsriege oder Investoren artikulieren. </p>
<p>Doch das heisst noch lange nicht, dass alle Entwickler per se nicht geeignet sind, die Rolle des ScrumMasters zu übernehmen. Sie tun mit Ihrer Aussage den vielen Entwicklern da draussen Unrecht, die tagtäglich lernen, die versuchen ihre Entwicklung und ihre Organisation zu verbessern, die ihre Teams und Kollegen leiten. Ja genau, die Entwickler, die sogar auf Kurse von ScrumCoaches wie Ihnen gehen, um das System Scrum sowie die Rolle ScrumMaster zu verstehen und sich dafür zu zertifizieren.</p>
<p>Ihr Verständnis des ScrumMasters als &#8220;allwissende, allmächtige&#8221; Instanz kann ich nicht teilen. Sie beschreiben den ScrumMaster ja geradezu als den Robin Hood der Scrum-Gemeinde, der sich für die armen bekehrten Entwickler einsetzt und sich mutig und stark vor die etablierte, elitäre Wasserfall-Adelschaft stellt. Nein, Herr Gloger. Sowohl die klassische als auch moderne Software-Entwicklung ist erfolgreich mit Teamgeist, dem verständnisvollen &#038; respektvollen Umgang miteinander und dem gemeinsamen Verständnis für das Ziel. Allesamt Eigenschaften, die ich in Ihrer Aussage kläglich vermisse.</p>
<h3>Antwort zu: Mangelhafte Struktur des Backlogs</h3>
<blockquote><p><i>Boris Gloger schreibt: </i>&#8220;Mike Cohn hat uns das beigebracht und ich habe es in meinem Buch beschrieben. Scrum war nicht als ein Set von Tools geplant, das alles beschreiben kann. Der Backlog ist sehr unternehmens-/team-/produktspezifisch und Scrum kann in dieser Hinsicht keine Anleitungen liefern. Nur Best Practises können das.&#8221;</p></blockquote>
<p>Richtig. Zumindest was die Strukturierung des Backlogs angeht, bin ich der Meinung dass dies sehr stark von Projekt zu Projekt variieren kann. Genau hier ist es gut, eine allgemeine, flexible Aussage zu liefern, die da heißt: Es muss ein Backlog geben. Wie das dann aussieht, bleibt im Ermessen der Projektbeteiligten, spezifischer des PO&#8217;s und des Teams. Es ist etwas ganz anderes, ein Backlog für ein Webportal aufzubauen als ein Backlog für ein kritisches Leitsystem. Best Practices können da einen guten Leitfaden darstellen.</p>
<h3>Antwort zu: Scrum skaliert nicht</h3>
<blockquote><p><i>Boris Gloger schreibt: </i>&#8220;Ich kann euch versichern, dass Scrum auch auf Ebenen oberhalb eines Teams erwiesenermaßen angewendet werden kann. Ich habe dies hunderte Male erfolgreich durchgeführt. Scrum Anwender wie ich haben Möglichkeiten entwickelt, Scrum in Organisationen einzusetzen, genauso wie auf Unternehmensebene. Gut, es wurde nicht in Ken&#8217;s erstem Buch beschrieben und viele Scrum Consultants haben keine Ahnung, wie das gemacht werden kann. Wenn ihr euch allerdings an Leute wendet, die Scrum seit 2003 einsetzen und Scrum auf Unternehmensebene angewandt haben, dann könnt ihr erfahren, wie das geht. Zu diesen Leuten gehören: Bas Voode, Mike Cohn, Stacia Broderick, Boris Gloger, Andreas Schliep, und viele mehr. Wie gesagt, man kann dazu nichts in den frühen Büchern finden, sondern in den Köpfen der Leute, die das bereits mehrmals gemacht haben.&#8221;</p></blockquote>
<p>Eine für mein Dafürhalten argumentativ etwas schwachbrüstige Aussage. Mit irgendwelchen Mitteln, ein paar &#8220;Scrum Of Scrums&#8221;, einem Company Backlog und ein paar Chief Product Owners ist die Skalierungsaufgabe &#8220;Scrum&#8221; noch lange nicht gelöst. Wenn es funktioniert, ist es gut. Doch die Aussage bezieht sich auf Scrum als Rahmen- und Richtwerk. Dort ist von Skalierung nicht die Rede. Man muss auch mal zugeben können das Scrum einfach nicht für größere Konstrukte &#8220;designed&#8221; wurde.</p>
<h3>Embrace Change!</h3>
<p>Alles in Allem interpretiere ich den offenen Brief mit kritischen Augen. Irgendwie kommt es mir so vor, als ob sich in dem Brief das &#8220;Ministerium für Scrum&#8221; gemeldet hat und ein paar Statements in den Raum wirft, um Scrum als System sowie auch das Ministerium selbst zu schützen. Scrum ist unbestritten ein hilfreiches agiles Management-Werkzeug. Scrum hat in der agilen Bewegung auch zweifelsohne große Beiträge geleistet. Dennoch ist dies kein Grund, konstruktiver Kritik mit derartig pauschalisierten Floskeln zu entgegnen.</p>
<p>Ich glaube an die Vorteile von Scrum, erkenne aber auch Gefahren und Schwachstellen. Alles hat seine Vor- und Nachteile. Wichtig ist für mich der &#8220;Agile Spirit&#8221;, der im agilen Manifest und vielen agilen Best Practices verankert ist. Inspect &#038; Adapt, Embrace Change, People over Processes, Collaborate. All das sind die essentiellen Werte agiler Software-Entwicklung &#8211; und auch von Scrum.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/ministerium-fur-scrum/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Scrum: Die bessere Sprintdauer</title>
		<link>http://www.gmbsg.com/scrum-die-bessere-sprintdauer/</link>
		<comments>http://www.gmbsg.com/scrum-die-bessere-sprintdauer/#comments</comments>
		<pubDate>Thu, 04 Mar 2010 08:35:57 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[Anforderungen]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Projektmanagement]]></category>
		<category><![CDATA[Prozess]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=661</guid>
		<description><![CDATA[Vor einiger Zeit hatte ich über die Fünf Schwachpunkte von Scrum gebloggt. Am Ende des Artikels hatte ich versprochen, mir Gedanken darüber zu machen, wie man diese Schwierigkeiten besser meistern kann. Mein erstes &#8220;Scrum-Schwachstellenthema&#8221; ist heute die Sprintdauer. Eingangs möchte ...]]></description>
			<content:encoded><![CDATA[<p>Vor einiger Zeit hatte ich über die <a href="http://www.gmbsg.com/funf-schwachpunkte-von-scrum/">Fünf Schwachpunkte von Scrum</a> gebloggt. Am Ende des Artikels hatte ich versprochen, mir Gedanken darüber zu machen, wie man diese Schwierigkeiten besser meistern kann. Mein erstes &#8220;Scrum-Schwachstellenthema&#8221; ist heute die Sprintdauer. Eingangs möchte ich noch einmal kurz erläutern, was denn nun an der Sprintdauer so schwierig ist und wieso es meiner Meinung nach eine Schwachstelle ist.</p>
<p>In vielen Fachblättern und Artikeln wird <a href="http://de.wikipedia.org/wiki/Scrum#Zyklusmodell">eine Sprintdauer von 30 Tagen</a> (4 Wochen) vorgeschlagen. Manchmal findet man auch <a href="http://www.scrumalliance.org/learn_about_scrum">2-4 Wochen als empfohlene Sprintdauer</a>. In jedem Fall aber sollte die Sprintdauer stabil über Sprints hinweg bleiben.</p>
<p>Mein Einwand: Die Sprintdauer ist eine Schwachstelle in Scrum. Besser gesagt: lange Sprintzyklen sind eine Gefahrenquelle für den Erfolg von Scrum-Teams. Denn gerade lange Sprintzyklen sind für die meisten Teams der erste große Fallstrick. Die meisten Teams, die mit Scrum beginnen, fangen mit langen Sprints von 4 Wochen und z.T. sogar mehr an. Schwierig in mehrfacher Hinsicht, denn dadurch berauben sie sich eigenmächtig der Vorteile agiler Verfahren. Die Flexibilität wird eingeschränkt, die Feedbackschleife des Inspect &#038; Adapt wird verlängert und dem Team wird hohe Planungskompetenz bzw. -verantwortung aufgebürdet.</p>
<p>Was kann man tun um diesen Risiken entgegenzuwirken? Ganz einfach: Kurze Sprints! Mit kurzen Sprints meine ich auch kurze Sprints. Aus meiner Sicht ist die ideale Sprintdauer eine Woche lang. Ja, richtig gelesen, nur 5 Werktage! Jede Woche Planung, jede Woche Review, jede Woche Retro.</p>
<h3>Daily Scrum, Weekly Sprint</h3>
<p>Was erreicht man dadurch? Zunächst einmal schafft man durch so eine kurze Sprintdauer eine hohe Planungsfrequenz. Das ist für fast alle Beteiligten nur von Vorteil. Der PO hat hohe Flexibilität, während das Team einen sehr überschaubaren Planungszeitraum hat. Das Team geht genauer auf die Stories und das Design ein, bricht in der Planung genauer Tasks auf. Dadurch ergeben sich quasi automatisch verbesserte Schätzung und stabiles Commitment. Das wiederum stärkt die Vorausplanung und Releaseabstimmung auf der Product Owner-Seite.</p>
<p>Ein-Wochen-Sprints bedeuten aber auch schnelleres Inspect &#038; Adapt. Jede Woche gibt es eine Retrospektive, das wichtigste agile Gremium in Scrum. Jede Woche eine Retrospektive zu haben ist ein wenig wie &#8220;und wöchentlich grüßt das Scrumeltier&#8221; &#8211; es kommen Anfangs immer wieder die gleichen Themen ins Gespräch. Das liegt vor Allem daran, dass es viel einfacher ist, wöchentlich &#8220;inspect&#8221; zu betreiben, als effektiv &#8220;adapt&#8221; durchzuführen. Doch genau das ist das schöne am schnellen, wöchentlichen Sprint-Puls. Es wird die Agilität förmlich &#8220;antrainiert&#8221;. Das Team lernt wesentlich schneller, wirklich zu adaptieren, anstatt es irgendwie auf die lange Bank zu schieben.</p>
<h3>&#8220;Accelerate&#8221; für eine gute &#8220;Velocity&#8221;</h3>
<p>Ein nicht ganz auf den ersten Blick erkennbarer Vorteil der Wochensprints ist der schnelle &#8220;Ramp-up&#8221; des Teams zur stabilen Velocity. Während ein Team mit 4-Wochen-Sprints nach den ersten 3-5 Sprints (also nach 3-5 Monaten!) erst so halbwegs stabile Produktivität und Schätzkompetenz aufweisen kann, gelingt einem Team mit Wochensprints nach der gleichen Sprintzahl (also nach 3-5 Wochen) noch mehr. Ergo: Ein zügiges Teaming wird erreicht.</p>
<p>Gerade Wochensprints haben meiner Meinung nach die Bezeichnung &#8220;Sprint&#8221; verdient. Denn wöchentliche Iterationen &#8220;fühlen&#8221; sich nicht nur wie ein Sprint an, sondern sind auch so intensiv und ergiebig wie ein Sprint. Das liegt nicht nur am höheren Takt, sondern auch an einer ganz lapidaren Tatsache: Die Arbeitswoche.</p>
<p>Unsere gesamte Lebens- und Arbeitskultur tickt in diesem &#8220;Wochentakt&#8221;. Viele denken, planen und organisieren in Wochenzyklen. Das kommt auch dem wöchentlichen Scrumsprint zu Gute. Teams mit Wochensprints kommen mit dem Wochentakt &#8220;einfach besser zurecht&#8221; &#8211; wissentlich oder unwissentlich. Höchstwahrscheinlich ist dies dem Fakt geschuldet, dass die gesamte Arbeitswelt sich an diesem Takt orientiert. Egal ob nun Scrum oder nicht, die Kalenderwoche ist und bleibt eine präsente Zeiteinheit, die für Planung, Vereinbarung und Organisation angewendet wird.</p>
<h3>Kurz und Knackig</h3>
<p>Bei all den Vorteilen, die eine kurze, nach meinem Ermessen am Besten wöchentliche Sprintdauer hat &#8211; es gibt auch hier wieder einige Dinge, die man vor der Einführung oder beim &#8220;Sprinten&#8221; beachten sollte. Ein allgemeiner Fallstrick kann es werden, die Planung des Sprints auf den Montag zu legen, und die Retrospektive auf den Freitag. So wie es bei klassischen <a href="http://de.wikipedia.org/wiki/Jour_fixe">Jour-Fixe Meetings</a> zum guten Ton gehört Planungsgespräche an das Ende der Woche zu legen, ist das bei Wochensprints auch förderlich. Eine mögliche Variante wäre es, die Planung auf den Freitag zu legen und Review/Retro auf Montag.</p>
<p>Damit ist der nächste Achtungspunkt schon implizit genannt: Nicht versuchen, alle &#8220;Scrum-Meetings&#8221; in einen Tag zu quetschen. Ganz im Gegenteil, die Planung kann Freitag vormittags erfolgen. Der Nachmittag ist reserviert für Konzentrationsarbeit, Tageskommunikation, Vorbereitung des Boards und des Reviews / Retro&#8217;s. </p>
<p>Montag ist vormittags &#8220;Tabu&#8221; &#8211; denn genau dann befindet man sich in der &#8220;Twilight Zone&#8221;. Ende des letzten Sprints oder Anfang des nächsten Sprints &#8211; schon durch die Planung oder noch im Review &#8211; noch Montagsmüde oder schon im Tatendrang &#8211; ein Montag Morgen eben. Der späte Nachmittag kann dann nach dem üblichen Daily für die kurze Review/Retro investiert werden. Bei Wochensprints ist eine 4 stündige Planung angemessen, eine Review/Retro von einer Stundes komfortabel ausreichend.</p>
<p>Fazit: <strong>Kurz &#038; Knackig &#8211; das ist die bessere Sprintdauer in Scrum!</strong><br />
Es gibt natürlich noch mehr Aspekte als die aufgeführten, um zu einer ausgewogenen Sprintdauer für sein Team zu kommen. Für mich bleibt jedoch die in den meisten Fällen zutreffende Erkenntnis: Kurz &#038; Knackig ist besser als Lang &#038; Weilig. Was denken Sie? Ihre Meinung ist gefragt!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/scrum-die-bessere-sprintdauer/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>.NET Coding Dojo Massiv</title>
		<link>http://www.gmbsg.com/net-coding-dojo-massiv/</link>
		<comments>http://www.gmbsg.com/net-coding-dojo-massiv/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 13:45:18 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[3.5]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[Anforderungen]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Code Kata]]></category>
		<category><![CDATA[Code Review]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Dojo]]></category>
		<category><![CDATA[Objekt-Orientierung]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[Software-Entwicklung]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Unit Test]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=637</guid>
		<description><![CDATA[Massiv! Das ist das treffende Wort, die neuesten Nachrichten über das .NET Coding Dojo und die Bewegung im Allgemeinen zu beschreiben.
Massiv Sportlich
Schon das letzte Münchener .NET Coding Dojo im Februar war wieder eine spannende und anregend erkenntnisreiche Veranstaltung. Das Lösen ...]]></description>
			<content:encoded><![CDATA[<p>Massiv! Das ist das treffende Wort, die neuesten Nachrichten über das .NET Coding Dojo und die Bewegung im Allgemeinen zu beschreiben.</p>
<h3>Massiv Sportlich</h3>
<p>Schon das letzte Münchener .NET Coding Dojo im Februar war wieder eine spannende und anregend erkenntnisreiche Veranstaltung. Das Lösen des <a href="http://codingdojo.org/cgi-bin/wiki.pl?KataTennis">KataTennis</a> hat sich als eine wunderbare Übung für den überlegten, soz. &#8220;wohl bedachten&#8221; einsatz von Test-Driven-Design und -Development herausgestellt. </p>
<p>TDD kann viel im Design und in der Implementierung bewirken. Es fördert lose Kopplung, gestaltet aktiv die Trennung der Verantwortlichkeiten mit und unterstützt das minimalistische &#8220;<a href="http://de.wikipedia.org/wiki/Don%E2%80%99t_repeat_yourself">DRY</a>&#8220;-Denken. Es gibt auch frequentiven Feedback in der Entwicklung. Sei es nun, dass man sich auf dem grünen Pfad bestätigt fühlt &#8211; oder aber frühzeitig &#8220;riecht&#8221;, das da etwas nicht ganz ausgereift ist. In jedem Fall war KataTennis im Februar-Dojo eine schöne Aufgabe, die all diese Faktoren präsentierte. Mehr noch, das Dojo zeigte, dass es sich lohnt, die Analyse der Problemdomäne nicht außer Acht zu lassen. Der Code lässt sich wie immer auf dem <a href="http://netdojo.codeplex.com/SourceControl/changeset/view/46517#603241">Codeplex-Projekt</a> einsehen.</p>
<h3>Massiv Interessant</h3>
<p>Doch das war noch lange nicht alles, was sich zum Thema .NET Coding Dojo im Februar getan hat! Vorreiter war schon im Januar die <a href="http://www.dotnet-ka.de/2010_01_21/2010_01_21.html">.NET User Group Karlsruhe mit einem .NET Coding Dojo der &#8220;Schwarzgurt-Klasse&#8221;</a>. Es wurde <a href="http://codingdojo.org/cgi-bin/wiki.pl?KataPotter">KataPotter</a> angegriffen. Die DNUG hat gespürt, dass ein Coding Dojo schweißtreibend ist &#8211; aber auch spannend und fesselnd. Denn schon einen Monat später gab es in professionell agiler Manier eine <a href="http://blog.alexonasp.net/post/2010/02/17/NET-Usergroup-Karlsruhe-Coding-Dojo-Retrospektive.aspx">Retrospektive zum Coding Dojo</a>. Die DNUG Karlsruhe bleibt also am Ball! </p>
<p>Auch ich konnte noch einen kleinen Beitrag zur Coding Dojo Idee leisten, in dem ich auf der diesjährigen <a href="http://www.vsone.de/">VSOne</a> das Format und die Ziele des .NET Coding Dojo vorgestellt habe. Doch bei der Vorstellung alleine bleibt es bei Dojojanern natürlich nicht &#8211; in der Session wurde demonstrativ ein &#8220;Mini-Dojo&#8221; mit <a href="http://www.codingdojo.org/cgi-bin/wiki.pl?KataFizzBuzz">KataFizzBuzz</a> gestartet. Es war eine wunderbare Erfahrung, wie interessiert und motiviert unvoreingenommene Teilnehmer im Coding Dojo mitmachen. Danke für das zahlreiche Interesse!</p>
<p>Im Übrigen möchte ich dabei noch betonen, dass die diesjährige VSOne eine wirklich gelungene und qualitative Veranstaltung gewesen ist.</p>
<p>Last but not least: Die .NET Coding Dojo-Idee ist grenzübergreifend! Angespornt und motiviert durch die Events in Deutschland gab es im Februar auch ein eigenständig von Andreas organisiertes <a href="http://www.andreas-schlapsi.at/2010/02/11/net-coding-dojo-wien/">.NET Coding Dojo in Wien</a>! Es wird also auch schon in Österreich kräftig trainiert. Kurzum: Massiv Interessant!</p>
<h3>Massiv Im März</h3>
<p>Natürlich steht auch schon das nächste <a href="https://www.xing.com/events/net-coding-dojo-massiv-marz-475994">Münchener .NET Coding Dojo</a> vor der Tür. Am 10. März erwartet die Teilnehmer ein Coding Dojo der Extra-Klasse. Im März-Dojo werden die gebündelten Kräfte und Kompetenzen von .NET Enthusiasten, Software-Entwicklern &#038; TDD-Interessierten gebraucht. Soviel sei schon vorab verraten: dieser Coding Dojo wird eine Herausforderung!</p>
<p>Im &#8220;Massiv-Im-März&#8221; Coding Dojo werden wir drei spannende Code Kata&#8217;s im Angebot haben, die wieder besondere Techniken sowie Praktiken fordern und fördern. Es geht dabei um Analyse, Design und Implementierung gangbarer, nachhaltiger, effektiver Lösungen zu einem kleinen Programmierproblem. Kurzum: Gemeinsam lernen &#038; lehren von profesioneller Software-Entwicklung mit TDD, CCD und Design Patterns.</p>
<p>Was heißt das? Ganz einfach &#8211; auf geht&#8217;s zum Dojo! Anmeldung per <a href="https://www.xing.com/events/net-coding-dojo-massiv-marz-475994">Xing Event</a> oder <a href="http://www.facebook.com/#!/event.php?eid=336479659946">Facebook Event</a>!</p>
<p>Übrigens, ein schöner Zufall will es, dass das Münchener .NET Coding Dojo parallel zu den Tagen des <a href="http://www.dotnetpro-powerday.de/">dotnetpro.powerday</a> stattfindet. Wer es noch nicht weiß, in den dotnetpro.powerday zeigen <a href="http://ralfw.blogspot.com/">Ralf</a> &#038; <a href="http://www.lieser-online.de/blog/">Stefan</a> auf Ihre gewohnt einprägsame Weise, welche Werte, Prinzipien &#038; Praktiken es bedarf, um nachhaltigen, wartbaren und erweiterbaren &#8211; also <a href="http://www.cleancodedeveloper.de/">Clean Code zu schreiben</a>. Die frisch gewonnen Erkenntnisse kann man dann natürlich bei uns im Coding Dojo einsetzen! :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/net-coding-dojo-massiv/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jede Codezeile zählt beim .NET Coding Dojo</title>
		<link>http://www.gmbsg.com/jede-codezeile-zaehlt-beim-net-coding-dojo/</link>
		<comments>http://www.gmbsg.com/jede-codezeile-zaehlt-beim-net-coding-dojo/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 21:20:30 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[Anforderungen]]></category>
		<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[Code Kata]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Dojo]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=520</guid>
		<description><![CDATA[Gestern Abend war es wieder einmal soweit. Das .NET Coding Dojo in München öffnete die Tore für alle .NET Enthusiasten, TDD Interessierte, CCD Jünger und neugierige Software-Entwickler.
Und das erste Münchener .NET Coding Dojo des Jahres startete wahrhaftig mit einem Paukenschlag! ...]]></description>
			<content:encoded><![CDATA[<p>Gestern Abend war es wieder einmal soweit. Das .NET Coding Dojo in München öffnete die Tore für alle .NET Enthusiasten, TDD Interessierte, CCD Jünger und neugierige Software-Entwickler.</p>
<p>Und das erste Münchener .NET Coding Dojo des Jahres startete wahrhaftig mit einem Paukenschlag! Erstmals überstieg die Teilnehmerzahl den Rahmen einer Dojo Session, so dass wir zwei Teams machen mussten (und wollten), die gegeneinander in einem &#8220;Dojo-Battle&#8221; antreten und ein Code Kata lösen sollten.</p>
<p>Nach einer kurzen Willkommens-Einwärm-Phase ging es auch schon zur Wahl des Code Kata&#8217;s für den Abend. Zur Auswahl standen <a href="http://codingdojo.org/cgi-bin/wiki.pl?KataBowling">KataBowling</a>, <a href="http://codingdojo.org/cgi-bin/wiki.pl?KataMinesweeper">KataMinesweeper</a> und der <a href="http://codekata.pragprog.com/2007/01/kata_thirteen_c.html">KataLocCounter</a> in der C# Variante. Nach der kurzen Vorstellung der Code Kata&#8217;s entschied sich die Dojo-Gemeinde für den <a href="http://codekata.pragprog.com/2007/01/kata_thirteen_c.html">KataLocCounter</a>. Eine besonders erfrischende und spaßbringende Wahl, wie sich im Laufe des Abends herausstellen sollte.</p>
<h3>Starke Teams denken, testen, zählen</h3>
<p>Das Code Kata ist gewählt, die Aufgabe und Rahmenbedingungen erklärt, nun konnte es schon losgehen. Fast. Die Teams mußten noch formiert werden. Die wurden im Zählverfahren (wie denn sonst ;-)) aufgeteilt. Wie es der Zufall will, waren die Teamstärken gut verteilt. </p>
<p><b>Team 1</b> war stark besetzt mit der analytischen Expertise von <a href="http://www.cotago.de/">Andre</a>, den CCD- und .NET Guru&#8217;s <a href="http://ralfw.blogspot.com/">Ralf</a> und <a href="http://www.lieser-online.de/blog/">Stefan</a>. Hinzu kamen erfahrene Dojojaner wie <a href="http://blog.aztec-project.org/">Thomas und Christina</a>, gestärkt mit einem Dutzend weiterer .NET-Entwickler.</p>
<p>Doch wer nun dachte, <b>Team 2</b> wäre schwächer aufgestellt, der irrte sich gewaltig. <a href="http://www.deger-it.de/">Christian</a>, ein Dojo-Gänger der ersten Stunde und kraftvoll vorandesignender C# Architekt, der durch zahlreiche Dojo&#8217;s durchtrainierte <a href="http://www.stefankoelle.de/">Stefan</a>, die geballte TDD/BDD-Erfahrung von <a href="http://www.bjro.de/">Björn</a> und ein starkes Dutzend .NET-Coder waren ein anspruchsvolles Lineup. </p>
<p>Die Teams waren aufgeteilt, das gedankliche Stretching und Warmup getan. Es konnte losgehen!</p>
<h3>Jede Codezeile zählt</h3>
<p>In einer ersten Phase wollten die Teams sich ein wenig detaillierter mit den Anforderungen an den Line-Counter auseinandersetzen, um eine &#8220;Design-Strategie&#8221; auszuarbeiten. </p>
<pre class="brush: csharp">
string code="Diese Zeile zählt!";
// Einzeilige Kommentare zählen nicht

// Dieser Kommentar und die leere Zeile davor zählen auch nicht
int count = 0; // Diese Zeile zählt natürlich!
bool countComments = false; /* Diese Zeile zählt auch */

/* So ein Kommentar
über mehrere Zeilen hinweg
zählt natürlich nicht als Code! */
</pre>
<p><small><i>Ein paar Kommentarbeispiele :-)</i></small></p>
<p>Interessante Erkenntnis hierbei: Man hat sich zwar mit den fachlichen Anforderungen und den daraus ergebenden Features bzw. Rahmenbedingungen auseinandergesetzt, dabei aber die Analyse und eine gemeinsame Implementierungsstrategie nicht wirklich erarbeitet. Geklärt war zumindest, dass es galt, Kommentare im Code zu erkennen und nicht mitzuzählen. Das <b>Wie</b> und eine gemeinsame Übereinkunft über die Strategie fiel bei beiden Teams &#8220;unter den Tisch&#8221;.</p>
<p>Doch das war offensichtlich zunächst nicht weiter schlimm, denn es schien erstmal wichtiger, das die Teams in den TDD-Rythmus kommen. Die ersten Tests gingen traditionell etwas schwerer vom Kopf in die Tastatur über, doch nachdem man sich auf den Happy-Pfad im Testing und eine inkrementelle Auslieferung des Programmes geeinigt hat ging es dann flotter.</p>
<p>Das Ergebnis innerhalb der Count-Methode des Team 1 war bis dato recht überschaubar:</p>
<pre class="brush: csharp">
            var lines = source.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);

            return lines
                .Select(x => x.Trim())
                .Where(x => !String.IsNullOrEmpty(x))
                .Where(x => !x.StartsWith("//"))
                .Count();
</pre>
<p>Soweit so gut.</p>
<h3>Stolperstein Block-Kommentare</h3>
<p>Nach den einfacheren Fällen trafen beide Teams mit den mehrzeiligen Block-Kommentaren auf eine etwas härtere Nuss, die es zu knacken galt.</p>
<p>Wie sollte man denn die mehrzeiligen Kommentare erkennen? Vor Allem, wie sollte man dann mit besonders &#8220;außergewöhlichen&#8221; Kommentierungen umgehen?</p>
<pre class="brush: csharp">
int count = 1; /* mehrzeilige
kommentare können */ count++ /* herausfordernd sein */ ;
</pre>
<p><small><i>Außergewöhnliche Kommentare</i></small></p>
<p>An dieser Stelle holte die Teilnehmer die &#8220;zu kurze Analyse&#8221; zu Beginn wieder ein. Welche Strategie sollte man wählen? Die zeilenbasierte Verarbeitung aufgeben und zeichenbasiert arbeiten? Umschwenken auf schweißtreibende, aber mächtige Regular Expressions? Oder sogar eine Kombination von allem?</p>
<p>Das besondere und mich nicht überraschende: beide Teams wählten unterschiedliche Strategien. Während Team 1 die Eleganz des &#8220;Flows&#8221; der LINQ-Expression nicht aufgeben wollte und es mit Regular Expressions angereichtert hat, entschloss sich Team 2 für eine kleine Status-Maschine und einen Mix aus zeilen- und zeichenbasierter Verarbeitung.</p>
<h3>Showdown</h3>
<p>Nach knapp 3 Stunden war es dann soweit. Die Teams klopften die letzten Tests und Codezeilen ein, um sich dann im Schlußvoting dem gegnerischen Team zu stellen. Gespannt warteten die Teams auf den Code und die Resultate des Gegners.</p>
<p>Team 1 präsentierte zunächst das lauffähige Programm, danach das gute Dutzend Tests und den damit getriebenen Code. Auffällig: Der Code erschien dem Gegner auf den ersten Blick als kompakt und elegant.</p>
<p>Team 2 konterte prompt. Eine äußerst saubere Test-Suite, ein durch die differierende Implementierung etwas längerer Code und die Besonderheit, dass die Implementierung sogar (teilweise) Kommentar-Tokens innerhalb von Strings ignorieren konnte.</p>
<p>Ergebnis: Beide Lösungen waren unvollständig &#8211; aber gut vorangetrieben. Während Team 1 stärkeren Wert auf Auslieferbarkeit &#038; Effizienz gelegt hatte, engagierte sich Team 2 mehr in den Bereichen saubere Tests &#038; Funktionalität. Ausnahmsweise gab es beim ersten Dojo-Battle keinen Verlierer &#8211; beide Teams waren gleich stark. Die Ergebnisse von <a href="http://netdojo.codeplex.com/sourcecontrol/changeset/view/45800?projectName=netdojo#594598">Team 1</a> und <a href="http://netdojo.codeplex.com/sourcecontrol/changeset/view/45800?projectName=netdojo#594599">Team 2</a> lassen sich auf dem <a href="http://netdojo.codeplex.com">Dojo-Projekt bei Codeplex</a> begutachten.</p>
<p>Fazit: Ein wirklich gelungener Abend mit engagierten Teams, die trotz der Herausforderungen und Schwierigkeiten eine gute Leistung abgeliefert haben! Danke an alle Teilnehmer! <strong>Chapeau!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/jede-codezeile-zaehlt-beim-net-coding-dojo/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Let&#8217;s go to Dojo</title>
		<link>http://www.gmbsg.com/lets-go-to-dojo/</link>
		<comments>http://www.gmbsg.com/lets-go-to-dojo/#comments</comments>
		<pubDate>Mon, 11 Jan 2010 22:58:11 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[4.0]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[Code Kata]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Dojo]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Unit Test]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=509</guid>
		<description><![CDATA[Es ist wieder soweit, das Münchener .NET Coding Dojo öffnet auch im neuen Jahr die Tore. 
Für alle, die nicht nur still und leiste in ihrem Kämmerchen Code Kata&#8217;s üben möchten. Für alle, die wissen wollen, mit welchen Tricks und ...]]></description>
			<content:encoded><![CDATA[<p>Es ist wieder soweit, das Münchener .NET Coding Dojo öffnet auch im neuen Jahr die Tore. </p>
<p>Für alle, die nicht nur still und leiste in ihrem Kämmerchen Code Kata&#8217;s üben möchten. Für alle, die wissen wollen, mit welchen Tricks und Kniffen man mit Design Patterns, Methoden &amp; TDD zu sauberem Design und Code kommt. Für alle, die sich selbst und andere in Punkto professionelle Softwareentwicklung weiterbringen möchten!</p>
<p>Am Mittwoch, den 20.01. werden im <a href="https://www.xing.com/events/net-coding-dojo-munchen-449437">.NET Coding Dojo</a> wieder .NET Enthusiasten, Software-Entwickler und System-Analytiker ein Programmierproblem annehmen, in Einzelteile zerlegen und es nach eigener Architektur und Bauplan kunstvoll wieder zusammenführen. Sei dabei! </p>
<p>Event-Details &#038; Anmeldung über das <a href="https://www.xing.com/events/net-coding-dojo-munchen-449437">Xing-Event</a> bzw. die <a href="https://www.xing.com/net/netdojo">Xing-Gruppe</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/lets-go-to-dojo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Coding Dojo@DNUG Ingolstadt</title>
		<link>http://www.gmbsg.com/coding-dojo-dnug-ingolstadt/</link>
		<comments>http://www.gmbsg.com/coding-dojo-dnug-ingolstadt/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 09:54:37 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[Code Kata]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Dojo]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/stories/?p=457</guid>
		<description><![CDATA[Gestern habe ich bei der DNUG Ingolstadt eine .NET Coding Dojo Session gehalten. Kurz und knapp: KataFizzBuzz wurde auf Anhieb in knapp einer Stunde gelöst. Noch besser, es wurde daraufhin nochmal eine zweite Variante innerhalb kurzer Zeit entwickelt. Eine tolle ...]]></description>
			<content:encoded><![CDATA[<p>Gestern habe ich bei der <a href="http://www.indot.net/">DNUG Ingolstadt</a> eine .NET Coding Dojo Session gehalten. Kurz und knapp: KataFizzBuzz wurde auf Anhieb in knapp einer Stunde gelöst. Noch besser, es wurde daraufhin nochmal eine zweite Variante innerhalb kurzer Zeit entwickelt. Eine tolle Leistung! <a href="http://netdojo.codeplex.com/sourcecontrol/changeset/view/44067?projectName=netdojo#566589">Das Ergebnis kann sich sehen lassen</a>.</p>
<p>Danke nochmals an <a href="http://webenliven-space.de/dotnetblog/">Gregor</a> &amp; die DNUG für die Organisation und das nette Geschenk! Diese Woche scheint sowieso die &#8220;Dojo-Woche&#8221; zu werden, denn Morgen geht es schon wieder weiter mit einer <a href="https://www.xing.com/events/net-coding-dojo-munchen-experten-431510">neuen Herausforderung im Experten Dojo in München</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/coding-dojo-dnug-ingolstadt/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tic-Tac-Toe</title>
		<link>http://www.gmbsg.com/tic-tac-toe/</link>
		<comments>http://www.gmbsg.com/tic-tac-toe/#comments</comments>
		<pubDate>Sun, 22 Nov 2009 15:04:45 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[Code Kata]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Dojo]]></category>
		<category><![CDATA[Objekt-Orientierung]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/stories/?p=443</guid>
		<description><![CDATA[Jeder von uns kennt den kleinen Kurzweil-Klassiker Tic-Tac-Toe. Das kleine Spiel zu programmieren ist nicht nur ein interessanter Pausenfüller, sondern auch eine besonders schöne Vorlage für ein .NET Coding Dojo mit langjährig erfahrenen .NET Programmierern.
Die Anforderungen

Das Spiel ist zu Ende, ...]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.gmbsg.com/stories/wp-content/uploads/2009/11/tictactoe-150x150.png" alt="tictactoe" title="tictactoe" width="150" height="150" class="alignright size-thumbnail wp-image-446" />Jeder von uns kennt den kleinen Kurzweil-Klassiker <a href="http://de.wikipedia.org/wiki/Tic_Tac_Toe">Tic-Tac-Toe</a>. Das kleine Spiel zu programmieren ist nicht nur ein interessanter Pausenfüller, sondern auch eine besonders schöne Vorlage für ein .NET Coding Dojo mit langjährig erfahrenen .NET Programmierern.</p>
<h3>Die Anforderungen</h3>
<ul>
<li>Das Spiel ist zu Ende, wenn alle Felder belegt sind</li>
<li>Das Spiel ist zu Ende, wenn ein Spieler eine gesamte Reihe belegt hat</li>
<li>Das Spiel ist zu Ende, wenn ein Spieler eine gesamte Spalte belegt hat</li>
<li>Das Spiel ist zu Ende, wenn ein Spieler eine gesamte Diagonale belegt hat</li>
<li>Ein Spieler kann ein freies Feld belegen</li>
<li>Die Spieler belegen so lange ein freies Feld, bis das Spiel beendet ist</li>
</ul>
<p>Auch die <a href="https://www.xing.com/net/netdojo">.NET Experten im Coding Dojo</a> München hatten Ihren Spass an dem kleinen Spiel. Es musste natürlich kräftig überlegt und entwickelt werden &#8211; ohne Anstrengung geht&#8217;s eben nicht :-). </p>
<p>Summa summarum ein gelungenes und nettes <a href="http://www.gmbsg.com/works/index.php?title=MucNetDojo_-_Kata_TicTacToe">KataTicTacToe</a>. Auch zu empfehlen für TDD-Einsteiger. Es gibt jedem die Möglichkeit, eine eigene Lösung zu entwickeln und zeigt dabei die Grundprinzipien des TDD auf. Das Ergebnis der Profis lässt sich im Übrigen auf dem <a href="http://netdojo.codeplex.com/sourcecontrol/changeset/view/41698?projectName=netdojo#531983">Codeplex-Projekt-SVN</a> begutachten.</p>
<p>Achso, wer Lust hat, nicht nur die ganze Zeit über TDD zu lesen und zu reden, sondern auch mal &#8220;hautnah&#8221; TDD mit C# und professionellen Softwareentwicklungsmethoden live erleben und mitmachen möchte, für den sind schon die nächsten Sessions im Kalender markiert. </p>
<p>Wie immer sind am Anfang des Monats, genauer am <a href="https://www.xing.com/events/net-coding-dojo-munchen-einsteiger-431506">2. Dezember, die Einsteiger im Dojo</a> gefordert. Zwei Wochen später, am <a href="https://www.xing.com/events/net-coding-dojo-munchen-experten-431510">16. Dezember sind die .NET Experten gefordert, im Coding Dojo</a> ihre gesamte Expertise einzubringen, um die sich selbst gestellte Aufgabe zu meistern.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/tic-tac-toe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TDD ist keine Wissenschaft!</title>
		<link>http://www.gmbsg.com/tdd-ist-keine-wissenschaft/</link>
		<comments>http://www.gmbsg.com/tdd-ist-keine-wissenschaft/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 07:36:20 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Topthema]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[Code Kata]]></category>
		<category><![CDATA[Objekt-Orientierung]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[Software-Entwicklung]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Unit Test]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/stories/?p=420</guid>
		<description><![CDATA[In letzter Zeit wird viel über TDD geredet und diskutiert. Das ist gut, denn offensichtlich gibt es da noch einiges zu besprechen und zu lernen. Ich habe erst kürzlich gelernt, dass es absolut sinnlos ist, bestehende Projekte ohne TDD anzugehen. ...]]></description>
			<content:encoded><![CDATA[<p>In letzter Zeit wird viel über TDD geredet und diskutiert. Das ist gut, denn offensichtlich gibt es da noch einiges zu besprechen und zu lernen. Ich habe erst kürzlich gelernt, dass es absolut sinnlos ist, bestehende Projekte ohne TDD anzugehen. Auch wenn ich viele Tests im nachhinein schreibe. Ich schreibe sie einfach so wie ich die Anforderungen verstanden habe. Mal nähert sich der Code an die Tests, mal die Tests an den Code. Das schöne daran ist, dass man wesentlich schneller den bestehenden Code versteht und auch deren Schwachstellen identifiziert. Dadurch wird auch die Wartung des Brownfield-Projektes gestärkt. Innerhalb von kurzer Zeit kann ich Aufwände und Problemstellungen gut einschätzen.</p>
<h3>TDD im Rampenlicht</h3>
<p>Naja, das nur nebenbei. Mir geht es eigentlich um ein anderes Thema. Mir geht es um etwas Generelles. Als Pete und ich mit den <a>.NET Coding Dojos</a> angefangen haben, gab es positive Resonanz. Es wurden Dojo&#8217;s veranstaltet und Code Kata&#8217;s exerziert. Super! Meiner Ansicht nach kam TDD dadurch ein kleines Stück mehr in&#8217;s Rampenlicht als es schon durch <a href="http://clean-code-developer.de/">Clean Code Developer</a> bereits war. In zahlreichen Posts gab es Diskussionen um die <a href="http://www.des-eisbaeren-blog.de/post/2009/11/01/Wie-viel-Sinn-machen-Unittests.aspx">Sinnhaftigkeit von Unit Tests</a>, die <a href="http://ralfw.blogspot.com/2009/09/code-kata-statt-thai-chi-vor-dem.html">Kata Berichte</a> und grundlegender <a href="http://ralfw.blogspot.com/2009/10/tdd-wofur-oop-2010-endlich-cleannet.html">Erkenntnisse über TDD</a>. Eine besonders positive Sache, denn Weiterentwicklung und Entdeckung sind schöne Dinge.</p>
<p>Doch eine Sache stört mich. Manchmal stört es mich sogar gewaltig. Dieses Trara und <a href="http://de.wikipedia.org/wiki/Tamtam">Tamtam</a> um TDD und <a href="http://www.des-eisbaeren-blog.de/post/2009/11/07/Auch-Kirchen-haben-Kragsteine.aspx">Beeinflussung des OO-Designs durch Tests</a> und das <a href="http://ralfw.blogspot.com/2009/11/zustand-als-abhangigkeit-ioc-konsequent.html">Entkoppeln von Zustand</a>. Bei dem einen oder anderen Post kann ich mir das Kopfschütteln während des Lesens einfach nicht verkneifen. Die Spitzfindigkeit und unnötige Verkomplizierung einfacher Sachverhalte geht mir zuwider. Für manch einen mag es Anspruch sein, über ein Feuerwerk an <a href="http://de.wikipedia.org/wiki/Sprachfertigkeit">Eloquenz</a> einfachste Dinge mit fesselnden Trapezschwüngen der <a href="http://de.wikipedia.org/wiki/Rhetorik">Rhetorik</a> auf das Hochseil des Softewareentwicklungszirkusses zu katapultieren. Die lufterhitzenden Spots, der nervöse Trommelwirbel, der adrenalisierende Schweiß der Konzentration inklusive. Für manch einen. Für mich jedenfalls nicht.</p>
<p>Im Gegenteil. Es stört mich. Es irritiert mich. Denn mich interessiert das Thema selbst. Ich denke es Bedarf keines jonglierens mit <a href="http://de.wikipedia.org/wiki/Dependency_Inversion_Principle">DIP</a>, <a href="http://de.wikipedia.org/wiki/Single_Responsibility_Principle">SRP</a>, <a href="http://de.wikipedia.org/wiki/YAGNI">YAGNI</a>, <a href="http://de.wikipedia.org/wiki/DRY">DRY</a>, um wirklich im Alltag der Software-Entwicklung gut bestehen zu können. Man darf mich hier nicht falsch interpretieren. Auch ich finde es wichtig, sich mit &#8220;Dependency Inversion&#8221;, &#8220;Single Responsibility&#8221;, &#8220;Decisions on Last Responsible Moment&#8221; und &#8220;Repetition Avoidance&#8221; auseinanderzusetzen, damit umzugehen und täglich einzusetzen.</p>
<h3>TDD ist keine &#8220;Rocket Science&#8221;</h3>
<p>Doch man kann es übertreiben. Die ständige, gestelzte und wie ein Ritus sich selbst auferlegte &#8220;<a href="http://clean-code-developer.de/wiki/CcdRoterGrad#T%C3%A4glichreflektieren">Tagesreflexionsprogramm</a>&#8221; ist meines Erachtens nicht förderlich. Überspitzt betrachtet ist es genau dasselbe wie das Bart-Simpson-Einhämmerungs-Ritual &#8220;Ich werde keinen Zustand testen!&#8221; &#8211; <a href="http://de.wiktionary.org/wiki/repetitiv">repetitiv</a>, jedoch nicht <a href="http://de.wiktionary.org/wiki/kognitiv">kognitiv</a>. <img class="alignright size-full wp-image-428" title="bart-simpson-zustand" src="http://www.gmbsg.com/stories/wp-content/uploads/2009/11/bart-simpson-zustand.png" alt="bart-simpson-zustand" width="300" height="162" />Wer&#8217;s mag, kann ruhig jeden Tag nicht nur Selbstreflexion betreiben, sondern auch jeden Tag ein Code Kata lösen, damit die Entwicklerseele rein wird. Ich jedenfalls werde das nicht tun.</p>
<p>Ich arbeite auch nach Prinzipien, löse Probleme auch mit Patterns und programmiere neben dem Tagesgeschäft ab und an auch mal Code Kata&#8217;s. Aber ich bin mir gleichermaßen bewußt, das ich jedes Mittel und Werkzeug richtig einordnen und im richtigen Maß anwenden muss, damit es mich langfristig weiterbringt.</p>
<p>Gleiches gilt für mich auch beim Thema TDD. Ich arbeite nun seit etwas mehr als einem halben Jahr stringent mit TDD. Zuvor habe ich es immer ab und an eingesetzt, aber nie &#8220;ernsthaft&#8221; betrachtet. Ich finde TDD (und auch BDD) sind eine besonders gute Methodik, um das <em>V</em> in <a href="http://de.wikipedia.org/wiki/EVA-Prinzip">EVA</a> groß schreiben zu können. Es stärkt wunderbar die logischen Bestandteile der Anwendung und fördert mit der granularen Testanforderung lose Kopplung und komponentenorientiertes Design. Mittlerweile ist TDD für mich fester Bestandteil jeder Entwicklungsaufgabe.</p>
<p>Während der ersten Phase, in der ich TDD konsequenter eingesetzt habe, habe ich auch <a href="http://www.mockobjects.com/book/index.html">einiges darüber gelesen</a> und durch das &#8220;Doing&#8221; auch vieles gelernt. So ist es z.B. überhaupt nicht schlimm, wenn man statusbehaftete Tests an den Enden der Datenverarbeitung macht. Konkret: Auch <a href="http://benpryor.com/blog/2007/01/16/state-based-vs-interaction-based-unit-testing/">statusbasierte Tests</a> sind ok, vor allem in Richtung DB oder UI. Ein schönes Beispiel dafür ist <a href="http://www.gmbsg.com/stories/?p=352">KataFizzBuzz als WinForms-Anwendung</a> oder <a href="http://www.gmbsg.com/works/index.php?title=MucNetDojo_-_Kata_Blog">KataBlog</a>. Natürlich ist interaktionsbasiertes Testen &#8220;schöner&#8221;, fördert die lose Kopplung und die isolierte Verifikation. Doch hier gibt es kein Schwarz oder Weiß. Es geht um den Einsatzbereich. Am Rand des Datenstroms ist man mehr statusbasiert, in der mitte eben mehr interaktionsbasiert. Außerdem ist das Thema Statustests vs. Interaktionstests ein relativ &#8220;alter Hut&#8221;. Schon mit <a href="http://martinfowler.com/articles/mocksArentStubs.html">Mocks Aren&#8217;t Stubs</a> hat Fowler klar gemacht, dass beides in Ordnung ist.</p>
<p>Diese Zustands-Geschichte ist jedoch nur ein Beispiel. Es gibt da noch einige andere Klassiker: Kapselung, Verkettung, Referentielle Transparenz. Doch ungeachtet dieser Dinge, ist TDD <a href="http://www.dict.cc/englisch-deutsch/It%27s+not+rocket+science.html">keine Rocket Science</a>. Im Gegenteil, TDD ist in der Kernaussage und Grundregeln so einfach, das sich die anderen &#8220;Problemstellungen&#8221; automatisch ableiten und auflösen. Gerade deswegen ist es meiner Meinung nach so wichtig, die Dinge einfach zu erklären und und diese &#8220;Leichtigkeit&#8221; auch zu transportieren. Die <a href="http://codekata.pragprog.com/">Code Kata&#8217;s von Dave</a> sind ein Beispiel. Sie sagen nicht &#8220;Mach dies! Beachte das!&#8221;. Nein, sie sind eigenständige Probleme, auf deren Lösungsweg man individuell und für sich eine gute Lösung findet. Daraus ergeben sich automatisch mit der Zeit Verbesserungen und Erkenntnisse.</p>
<p>Fazit: Beim Verständnis und der Anwendung von Test-Driven-Development gilt, obgleich TDD ein bis Dato <a href="http://research.microsoft.com/en-us/projects/esm/nagappan_tdd.pdf">empirisch betrachtetes, jedoch theoretisch nicht ausreichend erforschtes</a> Vorgehensmodell ist, das Prinzip von <a href="http://de.wikipedia.org/wiki/Ockhams_Rasiermesser">Ockhams Rasiermesser</a>. Der praxisorientierte, frequentive Einsatz sowie das Erkennen der Grundtheoreme der TDD-Methodik sind das Fundament für den erfolgreichen Einsatz.</p>
<p>Und wenn ich das für alle diejenigen, die wie ich auch in der Kommunikation Wert auf Einfachheit legen, mal übersetzen darf:</p>
<p><strong>TDD ist keine Wissenschaft!</strong></p>
<p>Man kann viel darüber Lesen. Das ist auch gut. Besser ist es jedoch, <a href="http://blog.thomasbandt.de/39/2291/de/blog/unit-tests-sind-gut.html">TDD zu machen</a>! Nicht viel über &#8220;dies und das&#8221; nachdenken. Die Devise lautet: &#8220;<a href="http://www.quotes.net/quote/9349">Mach es einfach, aber nicht einfacher</a>&#8220;. Es wird von alleine gut und mit der Zeit sogar besser werden.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/tdd-ist-keine-wissenschaft/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
