<?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; Dokumentation</title>
	<atom:link href="http://www.gmbsg.com/tag/dokumentation/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>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>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>Fünf Schwachpunkte von Scrum</title>
		<link>http://www.gmbsg.com/funf-schwachpunkte-von-scrum/</link>
		<comments>http://www.gmbsg.com/funf-schwachpunkte-von-scrum/#comments</comments>
		<pubDate>Sun, 07 Feb 2010 23:12:23 +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[Tools]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Anforderungen]]></category>
		<category><![CDATA[Dokumentation]]></category>
		<category><![CDATA[Projektmanagement]]></category>
		<category><![CDATA[Prozess]]></category>
		<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=576</guid>
		<description><![CDATA[Die fünf Schwachpunkte von Scrum, in klaren Worten.

Rahmenwerk, aber kein Werkzeug
Die Sprintdauer
Die Planung &#038; Das Design
Der Scrum Master
Die Skalierung

Scrum ist ein wunderbares agiles Management-Framework. Ich mag Scrum. Um ehrlich zu sein ist Scrum als &#8220;Agile für Einsteiger&#8221; ein genauso geeignetes ...]]></description>
			<content:encoded><![CDATA[<p>Die fünf Schwachpunkte von Scrum, in klaren Worten.</p>
<ol>
<li>Rahmenwerk, aber kein Werkzeug</li>
<li>Die Sprintdauer</li>
<li>Die Planung &#038; Das Design</li>
<li>Der Scrum Master</li>
<li>Die Skalierung</li>
</ol>
<p>Scrum ist ein wunderbares <a href="/?p=64">agiles Management-Framework</a>. Ich mag Scrum. Um ehrlich zu sein ist Scrum als &#8220;Agile für Einsteiger&#8221; ein genauso geeignetes methodisches Rahmenwerk wie für den enthusiastischen Agilisten. Ich habe mittlerweile einige Jahre Scrum-Erfahrung und darf mich ja selbst als &#8220;Zertifizierter Scrum Master&#8221; bezeichnen. Trotzdem &#8211; oder gerade aus dieser Erfahrung heraus &#8211; ist Kritik an Scrum meines Erachtens angebracht. Die kritischen Stimmen zu Scrum werden immer deutlicher, allen voran die erst kürzlich von <a href="http://groups.yahoo.com/group/scrumdevelopment/message/44851">UncleBob aufgestellten 7 Thesen der Mängel von agiler Software-Entwicklung mit XP &#038; Scrum</a>. In diesem Artikel möchte ich dazu meine Sicht der Dinge wiedergeben.</p>
<p>Scrum ist nicht Perfekt. Ganz im Gegenteil. Mit steigender Erfahrung kann man z.T. gravierende Schwachpunkte in der Methodik feststellen. Das soll jetzt nicht heißen, daß Scrum für ein agiles Projekt zu schlecht oder ungeeignet wäre &#8211; Nein. Vielmehr sollte man bei der Anwendung von Scrum ein besonderes Augenmerk auf die Schwachpunkte der Methode legen &#8211; um so im Ergebnis weniger Stolpersteine auf dem Weg zum Projektziel zu haben.</p>
<h3>Rahmenwerk, aber kein Werkzeug</h3>
<p>Scrum ist ein Framework. Nicht für Software-Entwicklungs-Methoden, sondern für Projekt-Management. Doch als Framework für die Projekt-Management-Methodik ist Scrum in vielen Teilen zu unspezifisch. Natürlich ist Scrum gerade durch die wenigen Regeln &#038; Rollen leicht verständlich und relativ zügig einsetzbar. Auf der anderen Seite jedoch ist die Eigenschaft von Scrum, eine &#8220;leichtgewichtige&#8221; Methodik des agilen Projektmanagements zu sein eine schwere Bürde &#8211; sei es inhaltlich oder praxisbezogen. Beispiele gefällig?</p>
<ul>
<li><i>Scrum verlangt Dailies am Scrum Board</i><br/>Scrum sagt aber nicht wie dieses Board denn verwendet werden soll, welches die primären Ziele des Boards sind und welche Mittel &#038; Wege man hat mit dem Board umzugehen. Wie ist das mit dem Sprint Backlog auf dem Board? Wie werden die Stories abgearbeitet? Wie geht man mit Ausnahmen (z.B. Bugs) um? Scrum schlägt bei diesen Themen sehr leise Töne an.</li>
<li><i>Scrum nennt Product &#038; Sprint Backlogs</i><br/>Scrum verrät aber nichts über den Aufbau der Einträge der Backlogs. Ein Product-Backlog ist eine &#8220;Wunschliste&#8221;, ein Sprint-Backlog ist eine &#8220;Taskliste&#8221;. Pofessionelle Agilisten belächeln mittlerweile die flachen Scrum-Backlogs und deren mangelhafte Vorgaben.</li>
<li><i>Scrum hat ein Sprint-Planungs-Meeting</i><br/>&#8220;Gut, daß man bei Scrum auch plant&#8221; mag es einem in den Sinn kommen. Doch in Scrum konzentriert sich die Planung zumeist auf ein einziges Meeting, in dem der gesamte, meist 4 Wochen lange Sprint und die in dieser Zeit zu erstellenden Features designed &#038; geplant werden. Software-Entwickler mit gesundem Respekt gegenüber der Ingenieurskunst des &#8220;Software Engineerings&#8221; würden mit großer Wahrscheinlichkeit so eine Vorgehensweise als &#8220;unausgereift&#8221; bezeichnen.</li>
</ul>
<h3>Die Sprintdauer</h3>
<p>Scrum baut auf Mikro-Organisation. Tägliche Einsatzbesprechung, Aufgabenverteilung und Updates. Scrum stützt dadurch Agilität. Anforderungen können sich ändern, unbedachte Situationen können eintreten. Darauf kann Scrum reagieren mit den Sprints, die die Gesamtleistung in viele kleine Schritte zerlegen. Hier, genau bei den Sprints (Iterationen) und deren Dauer ist die Methodik (bzw. die Umsetzung von Scrum) zumeist deutlich mangelhaft.</p>
<p>Wieso? Scrum schlägt eine Sprint-Dauer von 2-4 Wochen vor. Vorzuziehen sei eine kürzere Sprintdauer, maximal sollte sie jedoch 4 Wochen sein. Doch für ein Rahmenwerk, welches sehr stark auf die Mikro-Organisation fokussiert ist, sind 4 Wochen eine lange Zeit. Denn in der Praxis gibt es wenige Scrum-Projekte, die wirklich den 2-Wochen-Takt implementieren. Die Gründe dafür sind vielfältig. Einer der Hauptgründe ist wohl der Schwenk von einer &#8220;klassischen&#8221; Projektplanung hin zum agilen Management. In so einem Kontext tendiert man lieber zur 4 Wochen Zeitspanne, weil</p>
<ul>
<li>man angeblich mehr Zeit zum implementieren hat;</li>
<li>angeblich alle 2 Wochen ein ganzer Tag Team-Meeting &#8220;ineffizient&#8221; ist;</li>
<li>die wenigsten Anforderungen eines Produktes in 2 Wochen einsatzfähig fertiggestellt werden können.</li>
</ul>
<p>Im Grunde mehr oder minder schwachbrüstige Argumentationen. Als Randnotiz: meine persönliche Ansicht ist bei diesem Thema ist noch fordernder als die der reinen Scrum-Lehre: 2-wöchige Sprints sind gut, Wochen-Sprints noch viel besser.</p>
<p>Lange Sprintzyklen wirken für agile Verfahrensweisen wie eine angezogene Handbremse. Einen 4-Wochen-Sprint in 4 Stunden Sprint-Planungs-Meeting zu planen ist gelinde gesagt tollkühn. Bei langer Sprintdauer ist die Zahl der Stories und Tasks auf dem Board meist unbeherrschbar. Mehr noch, bei 4 Wochen schleichen sich gerne andere, minder relevante Aufgaben wieder auf&#8217;s Board. </p>
<p>Die Releasefähigkeit wird stark eingeschränkt und das obere Management durch die langen Sprintzyklen implizit dazu aufgefordert, mehr &#8220;Termin-Management&#8221; und Koordinationsleistung zu betreiben. Die empirische Messung der Velocity und die Schätzgenauigkeit des Teams ist mit langen Sprints von deutlich geringerem Wert und Aussagekraft als bei (sehr) kurzen Sprints.</p>
<h3>Die Planung &#038; Das Design</h3>
<p>In den vorangegangenen Punkten ist dieser Makel schon ein wenig angeklungen; Planung &#038; Design in Scrum sind unfassbar &#8211; im wahrsten Sinne des Wortes. Wer schon einmal vor der Aufgabe stand, in einem Sprint-Planungs-Meeting mit den anderen dutzende Stories &#8220;implementierungsreif&#8221; zu planen &#038; zu designen, der kann sich denken, worauf ich hinaus möchte.</p>
<p>Doch vor der Betrachtung und Kritik am &#8220;Planungs-Meeting&#8221; möchte ich die generell mangelhafte Planungssituation von Scrum nicht unerwähnt lassen. So sucht man in der Scrum-Methodik vergebens unterstützende Merkmale zu adequater Business-Analyse und der anschließenden Anforderungs-Analyse. &#8220;Ohh&#8221; &#8211; wird sich jetzt manch einer denken &#8211; &#8220;Ist dass denn dann noch agil?&#8221;. Antwort dazu: Es wäre für die Vertreter der agilen Software-Entwicklung schlichtweg ein Debakel, wenn eine wichtige Disziplin des Software Engineerings nicht agil betrieben werden könnte. </p>
<p>In der Praxis wird Scrum leichtsinnig und konzeptfrei mit allem möglichen &#8220;agilen Zubehör&#8221; bepackt. Da gibt es dann User Stories, Planning Poker, Story Points, Estimation Meetings, Business Value Estimations und vieles mehr. Aus Sicht der Prediger der Scrum-Fibel auch durchaus verständlich, schließlich sei &#8220;Scrum ja auch nur ein Rahmenwerk&#8221; (siehe 1. Schwachpunkt).</p>
<p>Doch zurück zum Thema Planung &#038; Design von Software und Software-Entwicklung. Man mag wieder argumentieren, das habe nichts mit Scrum, dem Management-Rahmenwerk, zu tun. Dies wäre eine fadenscheinige, viel zu oberflächliche Argumentation, denn auch Management-Methoden sollten die Problemstellungen Ihrer Domäne (hier: Software-Entwicklung) stützen, fördern und verwalten können. </p>
<p>Scrum will dies mit dem Sprint-Planungs-Meeting erreichen. Bedauernswerter Weise in vielerlei Hinsicht inadequat. Was in den Lehrbüchern zu Scrum so einfach klingt, ist in der Praxis kaum durchführbar. Zum Einen ist es eine schier berzerrte Wahrnehmung der Realität anzunehmen, dass eine Gruppe von Software-Entwicklern innerhalb von 4-8 Stunden die meist dutzenden Anforderungen für die nächsten paar Wochen &#8220;durchdesignen&#8221; können. Zum Anderen soll in diesem Meeting so viel wie möglich an offenen Punkten bzgl. der Anforderungen geklärt werden (um der oft mangelnde Anforderungsanalyse entgegenzuwirken). </p>
<p>Bei aller Liebe zu &#8220;Embrace Change&#8221; &#8211; die Sprint-Planung stellt bei vielen Scrum-Teams mit langen Sprintzyklen eine unvollständige &#8220;Erstanalyse&#8221; der Geschäftsanforderung dar. Aus einer solchen Besprechung eine adequates und professionelles Software-Design zu verlangen, ist schlichtweg naiv. Für viele, angebliche &#8220;Agilisten&#8221; ist die Sprint-Planung ein Alibi für Design &#038; Planung. &#8220;Ja, wir haben doch schon im Planning darüber nachgedacht &#8211; das reicht&#8221;. Andere wiederum kommen mit der hochkomprimierten, verlustbehafteten Planung wenig zurecht und lagern in der Planung noch kräftig Analyse-Tasks, Design-Tasks, Dokumentations-Tasks nach. Sogar  Analyse-Stories bis hin zu ganzen Analyse-Sprints oder Refactoring-Sprints sind schon gesichtet worden. &#8220;Willkommen zurück im Wasserfall&#8221; kann man da nur sagen.</p>
<h3>Der Scrum Master</h3>
<p>Mit dem Scrum Master wird ein heikles Kapitel der Schwachpunkte von Scrum geöffnet. Denn der Scrum Master &#8211; als Rolle versteht sich &#8211; mag auf den ersten Blick alles andere als eine Schwachstelle in der gesamten Methode verstanden werden. Scrum versteht den Scrum Master als &#8220;Facilitator&#8221;, als &#8220;Change Agent&#8221;, als &#8220;Servant Leader&#8221; &#8211; was für lobenswerte Werte. Eine Hymne, die auf den Scrum Master gesungen wird. Er überwacht die (wenigen) Scrum-Regeln, er schafft &#8220;Impediments&#8221; aus dem Weg, er fördert &#8220;die gesunde Veränderung&#8221; und moderiert durch die Meetings. Ein smarter Typ, dieser Scrum Master.</p>
<p>Doch der Schein trügt. In der Realität ist der Scrum Master oft keines von all den genannten Dingen. In den meisten Unternehmen ist der <a href="/?p=52">Scrum Master Nachfolger des klassischen Projekt-Managers</a>. Er schmückt sich mit der Feder des &#8220;Change Agents&#8221;, nimmt aber aktiven Einfluß auf Planung, verteilt Tasks &#038; Aufgaben, zweifelt Entwicklungsaufgaben an, mahnt bei Refaktorisierungsaufgaben zur Beachtung des &#8220;Business Values&#8221; und erklärt sich selbst zum &#8220;Manager des Teams&#8221;.</p>
<p>Andererseits ist der Scrum Master oft V-Mann und Sklave des konservativen Managements. Er wird genötigt, Aussagen über Releasepläne zu geben, Executive Reports zu erstellen, die Zeiterfassung für die Bilanzierung zu erledigen und gleichzeitig (parallel zur &#8220;modischen, agilen Methode&#8221;) noch Projektpläne zu erarbeiten, in denen penibel Zeitabläufe, Ressourcen &#038; Meilensteine durchgeplant werden.</p>
<p>Der Scrum Master kann auch ein Entwickler sein, der sich dann auserkoren fühlt und Review-Pate spielt. Er ändert Tasks, ist bei Estimations der Führende und setzt den anderen &#8220;seinen Programmierstil&#8221; (unbewußt) vor die Nase. Er ist meist zu unkooperativ gegenüber dem Product Owner und pocht auf die &#8220;Einhaltung von Abmachungen&#8221; (Contracting), anstatt den Aspekt für das Geschäft im Auge zu behalten.</p>
<p>All diese Dinge sind kontraproduktiv für das eigentliche Ziel &#8211; eine koordinierte, produktive, agile Software-Entwicklung. Es gibt ganz wenige, um nicht zu sagen äußerst selten anzutreffende Scrum Master, die Agilität &#038; Professionalität in Einklang bringen und die überspitzten, gar realitätsfremden Scrum-Prädikate &#8220;Alles-Könner&#8221;, &#8220;Jeden-Versteher&#8221; und &#8220;Komplett-Überblicker&#8221; erfüllen.</p>
<h3>Die Skalierung</h3>
<p>Ein offensichtlicher Schwachpunkt von Scrum ist die Skalierung. Scrum in seiner ersten und &#8220;reinen&#8221; Form ist eher für ein einzelnes Team konzipiert &#8211; maximal ein paar Teams. Aber Scrum im Großen, &#8220;Scrum in the Enterprise&#8221; &#8211; das ist dann schon eine etwas andere Sache. Klar, es gibt &#8220;Scrum of Scrums&#8221; und &#8220;Company Backlogs&#8221;. Dennoch ist bei Scrum die Integration von ganzen Abteilungen, die Organisation von dutzenden Teams und Koordination zu einem größeren Produkt ein Punkt, der in den Lehrbüchern nur mit der magischen &#8220;unsichtbaren Tinte&#8221; zwischen den Zeilen geschrieben zu sein scheint.</p>
<p>Ominös umnebelt sind hierbei besonders die Themen Synchronisation und Team-Aufteilung. Sind die Teams jetzt funktional (z.B. ein B2B und ein B2C-Team) oder horizontal (z.B. UI-Team, DWH-Team) oder vertikal (z.B. CMS-Team, CRM-Team) oder kann doch jeder alles? Sprintet jeder synchron? Gibt es einen Release-Plan oder mehrere? Wie können die Ergebnisse zusammengeführt werden? Muss jedes Team einen eigenen Branch und eigenes Board haben? Kann ein Scrum Master drei Teams &#8220;betreuen&#8221;? Fragen über Fragen, auf die Scrum &#8211; wenn überhaupt &#8211; nur unscharfe Antworten gibt.</p>
<h3>Das Dilemma</h3>
<p>Es ist schon ein Dilemma. Scrum ist so verbreitet, weil es einfach ist. Es ist überschaubar und kann auf einem Bierdeckel zusammengefasst werden. Scrum ist so populär, weil es einen einfachen Start in die Agilität bietet. Scrum ist so erfolgreich, weil man damit Geschäfte machen kann. Scrum bringt dem Implementierenden auf mittlere Sicht mehr Produktivität und bietet den Unterbau für eine wesentlich flexiblere professionelle Software-Entwicklung. Nicht zuletzt profitiert auch die Unternehmens- und IT-Consulting-Branche von Scrum.</p>
<p>Doch Scrum ist weit mehr als das. Scrum ist unpräzise. Viele denken, sie praktizieren Scrum, dabei machen Sie kleine Wasserfall-Iterationen. Sie stehen an den Boards und berichten über Status und Aufwände, statt gemeinsam den &#8220;Einsatz des Tages&#8221; zu besprechen und zu planen. Einige verwalten Bugs am Board und haben eine &#8220;Ongoing-Tasks&#8221;-Zeile, andere wiederum Pochen auf Tickets, Zeiterfassung und &#8220;Live-Burndown-Charts&#8221;. </p>
<p>Scrum ist transparent. &#8220;Hört sich gut an&#8221; mag man denken. Das ist auch richtig, ist aber für prokrastinierende Entwickler-Veteranen und altgediente Unternehmens-Manager kein Spaß. Überwachungskultur und Big-Brother-Gefühle eingeschlossen. Politik und der staubige Filz von Konzern-Lobbyisten tragen dann dazu bei, daß &#8220;Agil&#8221; und &#8220;Scrum&#8221; mit &#8220;Planungslos&#8221; und &#8220;Chaotisch&#8221; substituiert und verunglimpft werden. </p>
<p>Scrum ist leider aber auch oftmals ein Ausreden-Paket für Entwickler. &#8220;Nein nein, das Board macht der Scrum Master&#8221;. Der Review? Macht der Scrum Master &#8211; der kann doch Powerpoint. Die Transparenz und die plötzliche Selbstorganisation schleudert so manchen festgefahrenen Entwickler aus seiner Bahn. Committed wird nur das nötigste. Ausserdem bestimmt ja das &#8220;Team&#8221; was gemacht wird oder nicht? &#8220;Bloß kein Stress&#8221; ist hier die Devise. </p>
<p>Die Qualitätsansprüche der modernen, agilen Software-Entwicklung werden oftmals mit dem Level-Of-Done wieder relativiert &#8211; wer braucht schon Dokumentation, Unit Tests oder Analyse? Im Übrigen, geplant wird mit einem Tag sowieso schon zu viel &#8211; ansonsten sei man &#8220;nicht agil&#8221;.</p>
<p>Um es etwas provokant auszudrücken: <a href="/?p=78">Scrum ist für Erwachsene</a>.</p>
<p>Die oben genannten Mängel können gravierende Auswirkungen nach sich ziehen. Sie können Scrum-Projekte behindern. Ja, sie sind manchmal sogar Grund für das Scheitern von Scrum. Doch man kann diesen Schwachpunkten entgegenwirken. Und es sei nochmals daran erinnert: nur weil Scrum Schwachpunkte hat, heißt es nicht, daß es absolut ungeeignet ist, um agile Sotware-Entwicklung zu betreiben.</p>
<p>Konsequenterweise bleibt nach dieser mehr oder minder langen Kritikliste an Scrum eine große Frage offen: Was kann man tun, um diese Schwachpunkte zu eliminieren bzw. zu mitigieren? Die Antwort auf diese Frage ist &#8211; wie Scrum selbst &#8211; nicht so einfach wie es scheint. Dennoch würde ich eine Blog-Serie über Verbesserungsmöglichkeiten anstreben. </p>
<p>Haben Sie selbst die Erfahrung über die genannten Schwachpunkte gemacht? Gibt es Ihrer Meinung nach andere, schwerwiegendere Schwachpunkte? Wollen Sie mehr darüber erfahren, wie man den o.g. Schwierigkeiten entgegenwirken kann? Ihre Meinung ist gefragt!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/funf-schwachpunkte-von-scrum/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Effektives &amp; effizientes Bug Reporting</title>
		<link>http://www.gmbsg.com/effektives-effizientes-bug-reporting/</link>
		<comments>http://www.gmbsg.com/effektives-effizientes-bug-reporting/#comments</comments>
		<pubDate>Mon, 06 Oct 2008 06:48:36 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[Works]]></category>
		<category><![CDATA[Anforderungen]]></category>
		<category><![CDATA[Bug]]></category>
		<category><![CDATA[Dokumentation]]></category>
		<category><![CDATA[Unit Test]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/stories/?p=82</guid>
		<description><![CDATA[In letzter Zeit hatte ich das Vergnügen, mich mit ein paar (vermeintlichen und echten) Bugs auseinanderzusetzen. In diesem Zusammenhang hat das Thema Bug Reporting mein Interesse geweckt. Ich gebe zu, das hört sich ziemlich komisch an &#8211; denn was ist ...]]></description>
			<content:encoded><![CDATA[<p>In letzter Zeit hatte ich das Vergnügen, mich mit ein paar (vermeintlichen und echten) Bugs auseinanderzusetzen. In diesem Zusammenhang hat das Thema Bug Reporting mein Interesse geweckt. Ich gebe zu, das hört sich ziemlich komisch an &#8211; denn was ist denn an Bug Reports schon so besonders?</p>
<p>Jedoch fiel mir nach kurzem Einlesen in das Thema schnell auf, das man nicht einfach so &#8220;nur einen Bug Report&#8221; erstellen kann, sondern das auch bei Bug Reports ausgefeilte Methoden angewendet werden. Besonders interessant sind dabei die Zusammenhänge zum Anforderungsmanagement und zum Testing.</p>
<p>Meine Erkenntnisse über das Bug Reporting habe ich in dem Artikel <b><a href="/works/index.php?title=Effektives_und_effizientes_Bug_Reporting">Effektives &#038; effizientes Bug Reporting</a></b> zusammengefasst. </p>
<p>Happy debugging!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/effektives-effizientes-bug-reporting/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Scrum Erstkontakt &#8211; Was ist Scrum?</title>
		<link>http://www.gmbsg.com/scrum-erstkontakt-was-ist-scrum/</link>
		<comments>http://www.gmbsg.com/scrum-erstkontakt-was-ist-scrum/#comments</comments>
		<pubDate>Sun, 27 Apr 2008 20:30:26 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Anforderungen]]></category>
		<category><![CDATA[Dokumentation]]></category>
		<category><![CDATA[Projektmanagement]]></category>
		<category><![CDATA[Prozess]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Software-Entwicklung]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=547</guid>
		<description><![CDATA[Scrum (engl. das Gedränge) ist eine Sammlung von Arbeitstechniken, Strukturen, Rollen und Methoden für das Projektmanagement im Rahmen agiler Softwareentwicklung. Es ist ein Vorgehensmodell, das wenige Festlegungen trifft. Teams bzw. Entwickler organisieren sich weitgehend selbst und wählen auch die eingesetzten ...]]></description>
			<content:encoded><![CDATA[<blockquote><p><strong>Scrum</strong> (engl. das Gedränge) ist eine Sammlung von Arbeitstechniken, Strukturen, Rollen und Methoden für das Projektmanagement im Rahmen agiler Softwareentwicklung. Es ist ein Vorgehensmodell, das wenige Festlegungen trifft. Teams bzw. Entwickler organisieren sich weitgehend selbst und wählen auch die eingesetzten Methoden. Das Vorgehen und die Methoden werden fortlaufend aktuellen Erfordernissen angepasst.</p>
<div class="right"><small><a href="http://de.wikipedia.org/wiki/Scrum">http://de.wikipedia.org/wiki/Scrum</a></small></div>
</blockquote>
<p>Die o.g. Beschreibung aus Wikipedia trifft im Großen und Ganzen das, was Scrum ist und wofür es eingesetzt wird. Scrum ist eine relativ junge Verfahrensmethodik in der Software-Entwicklung. Nichtsdestotrotz wird es schon oft und gerne angewendet. Als &#8220;Interpretation&#8221; des <a href="http://agilemanifesto.org">Agilen Manifests</a> gilt Scrum als ein agiles und sehr leichtgewichtiges Rahmenwerk für Management in der Software-Entwicklung.</p>
<p>Ein erster und leicht zu merkender Überblick über Scrum als agiles Framework lässt sich im Kern durch die &#8220;3&#215;3&#8243;-Regel schaffen:</p>
<ul>
<li><strong>Drei Gremien</strong>:
<ul>
<li>Daily Scrum &#8211; Die tägliche Einsatzbesprechung;</li>
<li>Sprint Planung &#8211; Planung eines Arbeitszyklusses;</li>
<li>Sprint Review &#8211; Der Abschluss einer Arbeitsphase und die Abnahme eines Arbeitspaketes.</li>
</ul>
</li>
<li><strong>Drei Artefakte</strong>:
<ul>
<li>Product Backlog &#8211; Eine priorisierte Liste aller Anforderungen;</li>
<li>Sprint Backlog &#8211; Eine Liste von Aufgaben zur Erfüllung eines Arbeitspaketes;</li>
<li>Release Plan &#8211; Eine Prognose und Vorausplanung der Veröffentlichungsdaten des Produktes.</li>
</ul>
</li>
<li><strong>Drei Rollen</strong>:
<ul>
<li>Product Owner &#8211; zuständig für den wirtschaftlichen Erfolg und das Produkt;</li>
<li>Scrum Master &#8211; wacht über die Methodik und die Produktivität des Teams;</li>
<li>Team &#8211; das selbst-organisierte, teilautonome Team.</li>
</ul>
</li>
</ul>
<h3>Gremien</h3>
<p>Die Hauptaufgabe allen Software-Managements ist unbestritten die Organisation, Koordination und Planung der<br />
 Software-Entwicklung. Wie auch bei anderen Management-Frameworks gibt es in Scrum wohldefinierte Ankerpunkte, die die Kommunikation fördern. Wie zuvor schon erwähnt, gibt es dazu in Scum drei wesentliche Gremien (oder Institutionen).</p>
<h4>Daily Scrum</h4>
<p>Das Daily Scrum (auch &#8220;Daily&#8221; oder &#8220;Huddle&#8221;) ist das essentielle Organisations-Element in Scrum. Hier ist die Empfehlung, ein komplettes Team-Meeting (das Daily) jeden Tag zur gleichen Zeit am gleichen Ort durchzuführen. Das Meeting sollte nicht länger als 15 Minuten dauern und dient dem täglichen Status-Austausch und Feedback innerhalb des Teams. Während des Meetings werden die drei sog. &#8220;Scrum-Fragen&#8221; an jeden Teilnehmer mit der bitte um zügige und kurze Antwort gestellt:</p>
<ul>
<li>Was hast Du gestern getan?<br/><i>&#8220;Bist Du gestern mit dem fertig geworden, was Du Dir vorgenommen hast?&#8221;</i></li>
<li>Was wirst Du heute tun?<br/><i>&#8220;Welche Aufgaben wirst Du bis zum nächsten Meeting bearbeiten?&#8221;</i></li>
<li>Alles ok?<br/><i>&#8220;Gibt es ein Problem, das Dich bei Deiner Aufgabe blockiert / hindert?&#8221;</i></li>
</ul>
<h4>Sprint Planung</h4>
<p>Zu Beginn eines Sprints wird ein Planungsmeeting abgehalten, bei dem die Ziele und Aufgaben der gesamten Sprintdauer besprochen und geplant werden. Zunächst werden aus dem Product Backlog (der groben Anforderungsliste) die nächsten anstehenden Anforderungen besprochen und geklärt. </p>
<p>Daraufhin wird das sog. &#8220;Commitment&#8221; durchgeführt; es wird also eine Zusage über die zu erledigenden Dinge innerhalb des nächsten Sprints herbeigeführt. Anschließend wird das Commitment detailliert geplant und die einzelnen Aufgaben zur Erfüllung der Anforderungen abgeleitet. Diese Liste wiederum bildet das Sprint Backlog.</p>
<h4>Review &#038; Retro</h4>
<p>Nach einem Sprint wird ein sog. Review (meist auch nur &#8220;Demo&#8221; genannt) durchgeführt. Das Sprint-Review dient vornehmlich zum Vorzeigen und Diskutieren der Ergebnisse des Sprints. Im Review-Meeting wird zumeist die neu geschaffene Funktionalität der Software dem Kunden und dem Team vorgeführt (Demo). Des Weiteren wird ein allgemeines Feedback abgefragt bzw. eine offene Diskussionsrunde abgehalten. </p>
<p>Ähnlich zum Review wird zum Ende eines Sprints auch eine &#8220;Retrospektive&#8221; abgehalten, in der explizit die Meinungen, Hürden und Verbesserungsmöglichkeiten im Team diskutiert werden. Diese werden festgehalten und für die nächste Sprint-Planung in Betracht gezogen. So können z.B. methodische oder arbeitstechnische Verbesserungen während der Entwicklung erkannt und durchgeführt werden. </p>
<p>Der Unterschied zwischen Review und Retro liegt in der Betrachtungsweise des Sprints: Während beim Review auf das &#8220;Was&#8221; geachtet wird, liegt der Schwerpunkt der Retro auf dem &#8220;Wie&#8221;. Nichtsdestotrotz werden Review und Retro öfters in ein Meeting zusammengefasst.</p>
<p>Es fällt deutlich auf, das Scrum wenige Vorgaben enthält und sich gegen definierte Prozesse und Arbeitsabläufe stellt. Der Kern dieser &#8220;Scrum-Ethik&#8221; bedründet sich durch das Argument, das Software-Entwicklung ein derart komplexer und variabler Prozess ist, dass es niemals in ein definiertes, prozessuales Korsett eingefasst werden kann. Vielmehr wird davon ausgegangen und akzeptiert, das der Prozess der Software-Entwicklung ein semi-chaotischer ist, dem man nur durch empirische Management- und Kontroll-Mechanismen Herr werden kann.</p>
<h3>Artefakte</h3>
<p>Dementsprechend ist auch das Planungs- und Aufgabenmanagement minimal. Scrum definiert nur drei essentielle Listen.</p>
<h4>Product Backlog</h4>
<p>Das Product Backlog ist eine Liste mit allen Anforderungen, Aufgaben, Features, Bugs und Problemstellungen für das Produkt. Die einzelnen Einträge in der Product Backlog-Liste werden nach kundenorientierter Priorität (z.B. Geschäftszweck, Benefit) und Komplexität sortiert. Dabei muss es für diese keine Kennzahlen geben, alleine die Sortierung des Product Backlogs ist entscheidend. Die Product Backlog-Liste ist öffentlich für alle Teammitglieder verfügbar und kann jederzeit geändert und erweitert werden. Jeder Eintrag bedarf auch einer ersten Schätzung des Aufwandes.</p>
<h4>Sprint Backlog</h4>
<p>Der Sprint Backlog ist eine Liste von Aufgaben, die innerhalb eines Sprints (i.d.R. eine 2-4 wöchige Iteration) durchgeführt werden soll. Der Sprint Backlog wird zu Beginn eines Sprints erstellt und innerhalb dessen abgearbeitet. Im Gegensatz zum Product Backlog ist hier die Sortierung nicht entscheidend, kann aber weitergeführt werden. </p>
<p>Viel wichtiger ist hier die Vorgabe, dass eine einzelne Aufgabe des Sprint Backlogs nicht länger als 3 Tage dauern sollte (je kürzer, desto besser). Ist dies dennoch der Fall, sollte die Aufgabe in Teilaufgaben zerlegt werden. Des Weiteren werden beim erstellen des Sprint Backlogs alle Aufgaben nochmals in der Schätzung verfeinert.</p>
<h4>Release Plan</h4>
<p>Der Release Plan ist eine Liste der definierten &#8220;Meilensteine&#8221; eines Software-Produkts, bei dem eine Veröffentlichung fachlich, strategisch oder unternehmerisch angebracht ist. Der Release Plan richtet sich nach der &#8220;Velocity&#8221; des Teams (also nach dem Produktivitätsgrad). Der Release Plan ist zumeist ein Prognose-Barometer und ein Kernelement der Integration des Scrum-Teams in die Organisation eines Unternehmens bzw. anderer Abteilungen. </p>
<h3>Rollen</h3>
<p>Scrum definiert drei unterschiedliche und klar getrennte Rollen: Den &#8220;Product Owner&#8221;, den &#8220;Scrum Master&#8221;, sowie das &#8220;Team&#8221;. Alle drei verfolgen während des Entwicklungsprozesses das gleiche Ziel, nämlich die &#8220;Vision&#8221; der zu entwickelnden Software.</p>
<h4>Product Owner</h4>
<p>Der Product Owner (oder auch nur &#8220;Owner&#8221;) ist derjenige, der die &#8220;geschäftliche&#8221; oder &#8220;fachliche&#8221; Seite der zu entwickelnden Software vertritt. Er ist also letztendlich der Kunde bzw. Kundenvertreter, der die fertige Software entgegennimmt und den Wert der Software ausschöpft. Innerhalb des Scrum ist der Product Owner eine einzelne Person (darauf legt sich das Scrum-Verfahren fest).</p>
<p>Er ist derjenige, der die Anforderungen an die Funktionalität der Software stellt und arbeitet dementsprechend die Anforderungen und Aufgaben mit den anderen Team-Mitgliedern in das Product Backlog ein. Er ist für die Priorisierung der Aufgaben zuständig und damit auch für das Zustandekommen des Sprint Backlogs.</p>
<h4>Scrum Master</h4>
<p>Der Scrum Master (im Alltag meist nur &#8220;SM&#8221; genannt) ist eine einzelne Person (auch hier eine Vorgabe von Scrum), die sich um die Einhaltung der Scrum-Regeln und Verfahrensweisen kümmert. Überdies hinaus ist der Scrum Master für &#8220;das Wohlergehen&#8221; des Teams zuständig &#8211; und zwar im Sinne von Problembehebung, Unterstützung, Motivation und Coaching.</p>
<p>Er ist quasi ein &#8220;Projekt-Manager-Ersatz&#8221;, allerdings ohne Weisungsbefugnis, disziplinarische oder fachliche Führung. Des Weiteren ist der Scrum Master faktisch weder ein Teil des Teams noch aus den Reihen des Product Owners &#8211; er hat also eine quasi &#8220;unparteiische&#8221; Rolle. Obwohl in Scrum oft empfohlen wird, dass der Scrum Master eine Person aus dem Team ist (z.B. ein Entwickler), ist in der Praxis der Scrum Master zumeist ein &#8220;klassischer&#8221; Projekt-Manager, der maßgebliche Verantwortungen an das Team und den Product Owner übergibt.</p>
<p>Trotz dieser &#8220;Verantwortungslosigkeit&#8221; ist der Scrum Master Dreh- und Angelpunkt des Scrum-Verfahrens. Er ist explizit dafür verantwortlich, das alles so gut wie nur möglich ablaufen kann.</p>
<h4>Team</h4>
<p>Das Team ist die einzige Rolle in Scrum, die mehrere Personen umfassen darf. Hier wird explizit auf Hierarchien und Verantwortlichkeiten verzichtet, jeder einzelne des Teams ist einfach &#8220;nur&#8221; ein Team-Mitglied. Das Team besteht meist aus Personen verschiedener Expertise oder Abteilungen, wie z.B. Entwickler, Architekten, Administratoren, Analysten und Testern. </p>
<p>Als Rolle ist das Team dasjenige mit der meisten Verantwortung und Wirkungskraft, denn es entscheidet eigenständig über Aufgabenverteilung und -organisation, regelt und steuert die Arbeitsweise und &#8220;kontrolliert&#8221; sich idealerweise selbst.</p>
<p>Scrum liefert zum Team eine Reihe von Empfehlungen, zu denen eine Teamgröße von ca. 7 (+/- 2) Mitgliedern zählt. In der Praxis ist dies bei größeren Projekten kaum machbar, dementsprechend baut man in diesem Fall N Teams mit N Scrum Mastern und N Product Ownern auf.</p>
<h3>Metriken</h3>
<p>Scrum als agiles Framework richtet sich nach den Maßgaben eines empirischen Managements. Es geht von vornherein davon aus, dass Schätzgrößen und Entwicklungsgeschwindigkeit im Laufe eines Software-Projektes immer tendenziell auf Basis von Erfahrungswerten ermittelt werden können. Dies wird in Scrum ermittelt, visualisiert und kontrolliert durch ein sog. &#8220;Burndown-Chart&#8221;.</p>
<h4>Sprint Burndown Chart</h4>
<p>Der Sprint Burndown Chart ist ein täglich aktualisiertes Diagramm, welches die Abarbeitung der einzelnen Aufgaben innerhalb eines Sprints messt und visualisiert. Er ist ein einfaches und zugleich zuverlässiges Mittel, die Entwicklungsgeschwindigkeit messbar zu machen und Problemstellungen während der Entwicklung oder der Anwendung von Scrum zu identifizieren. Der Sprint Burndown ist ein essentielles Werkzeug von Scrum.</p>
<h4>Product Burndown Chart</h4>
<p>Ergänzend zum Sprint Burndown erstellt man des öfteren ein Release/Product Burndown Chart, der aus der Sicht der Product Backlog Einträge und deren Abarbeitung ein Diagramm darstellt. Er ist besonders für die Sprint-Übersicht und die Voraussage von Sprintanzahl bzw. übergreifenden Terminen hilfreich.</p>
<h3>Kickstart: Einsatz &#038; Durchführung</h3>
<p>Bevor ein Software-Projekt mit Scrum überhaupt durchgeführt werden kann, muss &#8211; wie bei jedem Projekt &#8211; ein Projektziel und eine &#8220;Vision&#8221; des Projektes greifbar sein.</p>
<p>Es gibt viele klassische und agile Methoden, die bei dieser ersten Phase des Projektes helfen, eine Projektziel zu erfassen. Generell aber gilt: Es sollte von Anfang an eine klare Fokussierung eines Ziels möglich sein. Dies umfasst nicht nur die &#8220;visionäre&#8221; Zielsetzung, sondern auch geschäftliche Faktoren (Nutzen, Markt, Einsatz) sowie einen grundlegenden Umfang der zu erstellenden Software. </p>
<h4>Fundament: Team &#038; Rollen</h4>
<p>Sind diese grundlegenden Bausteine des Projektes geklärt, kann man zur Bildung des Scrum-Teams übergehen. Grundsätzlich sollten in dieser Phase schnellstmöglich alle Scrum-Rollen besetzt werden. Hierbei hilft oft das sog. &#8220;Best-Match&#8221;-Prinzip, deren Kernaussage es ist, eine bestmögliche Besetzung der Rollen anzustreben.</p>
<h4>Product Backlog: Die Anforderungsliste</h4>
<p>Sind Product Owner, Scrum Master sowie das Team formiert, kann quasi sofort &#8220;losgelegt&#8221; werden. Doch bevor es so &#8220;richtig losgeht&#8221;, muss der Product Owner initial das Product Backlog mit dem für Ihn wichtigsten Anforderungen befüllen. Die Einträge im Product Backlog sind nach geschäftlicher (kundenorientierter) Priorität aufgelistet, so dass immer gewährleistet ist, dass das Team an den &#8220;richtig wichtigen&#8221; Aufgaben arbeitet. Die wichtigsten Anforderungen im Product Backlog werden auch genauer und ausführlicher beschrieben und definiert. Das Team hilft dem Product Owner bei dieser Aufgabe und schätzt gleichzeitig grob die Aufwände jedes Product Backlog Eintrages.</p>
<h4>Sprint-Planung: Das Versprechen des Teams</h4>
<p>Nach erfolgreicher Befüllung des Product Backlogs kann &#8220;gesprintet&#8221; werden. Das Team wird also sofort produktiv. Doch bevor es an die Abarbeitung der Aufgaben geht, wird der bevorstehende Sprint im Sprint Planungs-Meeting geplant. Dabei wird die wichtige Entscheidung getroffen, wieviele Product Backlog Einträge das Team im Sprint abarbeiten kann. Die Entscheidung des Sprint-Volumens obliegt einzig und allein dem Team. </p>
<h4>Sprint Backlog: Die Aufgabenliste</h4>
<p>Um diese Entscheidung qualifiziert herbeiführen zu können, wird ein Product Backlog Eintrag (Anforderung) analysiert und in einzelne, kleine Aufgabenpakete granularisiert. Diese Aufgabenstellungen werden möglichst genau geschätzt und in das Sprint Backlog eingetragen. Hier wird auch die Grundregel angewendet, dass eine Sprint Backlog-Aufgabe nicht länger als 3 Tage andauern darf.</p>
<p>Als Ergebnis der Sprint-Planung liegt ein befülltes Sprint Backlog vor, welches zugleich das sog. &#8220;Commitment&#8221; (feste Absichtserklärung) an den Product Owner ist, dass alle diese Aufgaben zum Ende des Sprints erledigt sein werden.</p>
<h4>Sprint: Daily Scrum &#038; Work</h4>
<p>Von nun an werden alle Sprint Backlog-Einträge vom Team abgearbeitet. Dabei organisiert sich das Team selbst &#8211; legt also eigenständig fest, wer an welcher Aufgabe arbeitet. Auch hier wird eine besondere Faustregel angewendet, nämlich dass jedes Teammitglied nur eine einzige Aufgabe im Sprint Backlog übernehmen darf.</p>
<p>Diese Selbstorganisation während des Sprintverlaufs wird durch das &#8220;Daily Scrum&#8221;, also die tägliche kurze Einsatzbesprechung des Teams gestützt und gefördert. Im Daily Scrum werden Aufgaben aktualisiert und verteilt sowie grundlegende Status-Informationen an alle Teammitglieder mitgeteilt.</p>
<h4>Sprint-Review: Das Ergebnis</h4>
<p>Neigt sich der Sprint dem Ende zu, werden zum Abschluß zwei Meetings durchgeführt. Das erste Meeting ist das sog. &#8220;Sprint-Review&#8221;, in dem die Ergebnisse des Sprints dem Product Owner präsentiert werden und zur Abnahme vorliegen. Im Review entscheidet der Product Owner, ob das zu Beginn des Sprints gegebene &#8220;Versprechen&#8221; des Teams eingehalten wurde und ob er mit den Arbeitsergebnissen zufrieden ist. Sollten (Teil-)Ergebnisse unzufriedenstellend sein, werden diese vom Product Owner abgelehnt und werden automatisch zur &#8220;Nachbesserung&#8221; in den nächsten Sprint mit eingeplant.</p>
<h4>Sprint-Retrospektive: Immer besser &#038; besser</h4>
<p>Nach dem Review des Sprints folgt sofort die sog. &#8220;Sprint-Retrospektive&#8221;. In diesem Meeting setzt sich das Team und der Product Owner zusammen um festzustellen, welche grundlegenden Probleme es beim Sprint gab bzw. um herauszufinden, wie man in den Sprints besser arbeiten kann. Die Retrosüektive kümmert sich also um die Verbesserung des Teams, der Methoden und Prozesse. Als Ergebnis werden Verbesserungsvorschläge und Maßnahmen in das Product Backlog eingearbeitet.</p>
<h4>Nochmal, nochmal</h4>
<p>Nach erfolgreichem Abschluß des Sprints geht &#8220;das Spiel wieder von vorne los&#8221;, d.h. es wird sofort wieder der nächste Sprint geplant und umgesetzt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/scrum-erstkontakt-was-ist-scrum/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visual Studio Essential Tools &#8211; Meine Top 5</title>
		<link>http://www.gmbsg.com/visual-studio-essential-tools-meine-top-5/</link>
		<comments>http://www.gmbsg.com/visual-studio-essential-tools-meine-top-5/#comments</comments>
		<pubDate>Fri, 07 Mar 2008 22:22:37 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Dokumentation]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Unit Test]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/stories/?p=60</guid>
		<description><![CDATA[Ich wurde letztens erst wieder gefragt, welches Entwickler-Setup ich habe. Konkret: Wie sieht meine Entwicklungsumgebung aus und was verwende ich denn sonst so außer Visual Studio? Ehrlich gesagt bin ich kein großer Freund von Gimmicks und Add-Ins, dennoch komme ich ...]]></description>
			<content:encoded><![CDATA[<p>Ich wurde letztens erst wieder gefragt, welches Entwickler-Setup ich habe. Konkret: Wie sieht meine Entwicklungsumgebung aus und was verwende ich denn sonst so außer Visual Studio? Ehrlich gesagt bin ich kein großer Freund von Gimmicks und Add-Ins, dennoch komme ich ohne ein paar Tools nicht herum:</p>
<p><b><a href="http://www.aisto.com/roeder/dotnet/">Reflector</a></b><br />
Wohl eine der bekanntesten und ebenso hilfreichen Tools. Verwende ich besonders gerne und oft, wenn ich schnell sehen möchte, wie manche Interna des Frameworks funktionieren. Zu Reflector gibt es weitere, in manchen Situationen hilfreiche <a href="http://www.codeplex.com/reflectoraddins">Add-Ins</a>.</p>
<p><b><a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=E82EA71D-DA89-42EE-A715-696E3A4873B2&#038;displaylang=en">Sandcastle</a></b><br />
Die Inline-Dokumentation is um einiges übersichtlicher, wenn sie auch entsprechend visualisiert wird. Sandcastle ist dafür das richtige Werkzeug. Die Handhabung von Sandcastle wird durch die <a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=SHFB">Sandcastle Help File Builder</a> vereinfacht.</p>
<p><b><a href="http://www.nunit.org/index.php">NUnit</a></b><br />
Obwohl Microsoft schon mit VS2005 ein Test-Framework mitliefert und dieses mit VS2008 sogar verbessert hat, finde ich nach vie vor das NUnit immer noch angenehmer, schneller und funktionsrecher ist. Abgesehen davon, dass man für seine Tests keine dicke VS-Version benötigt.</p>
<p><b><a href="http://www.testdriven.net/">TestDriven.NET</a></b><br />
Das kleine aber feine VS-Add-In, mit dem man auf einen schnellen Rechtsklick wichtige Tools wie NUnitRunner und Reflector griffbereit hat.</p>
<p><b><a href="http://www.ultrapico.com/Expresso.htm">Expresso</a></b><br />
Regular Expressions kommen immer wieder mal als Tagesordnungspunkt in Projekten vor. Hier habe ich mit Expresso eine gute Unterstützung gefunden.</p>
<p>So, das war&#8217;s dann auch mit den Tools. Es bleibt mir noch hinzuzufügen, dass ich natürlich auch versuche, die Fülle an Features, die Visual Studio mit sich bringt, auszuschöpfen. Alleine die wichtigsten Shortcuts zu kennen und  anzuwenden beschleunigt das Arbeiten mit Visual Studio ungemein. Des Weiteren sind z.B. die Code-Snippets eine feine Sache &#8211; mir fällt es schwer nachzuvollziehen, warum sie von manchen Entwicklern stiefmütterlich behandelt werden. Zumal es obendrein noch die Möglichkeit gibt, eigene Snippets zu erstellen. Auch sollten die Debug-Visualizer bzw. noch allgemeinder der Debugger ansich nicht unerwähnt bleiben. Entwickler, die z.B. von <a href="http://support.microsoft.com/kb/308469">Conditional Breakpoints</a> noch nichts gehört haben, empfehle ich wärmstens eine nähere Beschäftigung mit dem Debugger. ;-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/visual-studio-essential-tools-meine-top-5/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Projekte dokumentieren mit Wikis</title>
		<link>http://www.gmbsg.com/projekte-dokumentieren-mit-wikis/</link>
		<comments>http://www.gmbsg.com/projekte-dokumentieren-mit-wikis/#comments</comments>
		<pubDate>Wed, 03 Oct 2007 13:08:27 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Works]]></category>
		<category><![CDATA[Dokumentation]]></category>
		<category><![CDATA[Prozess]]></category>
		<category><![CDATA[Team]]></category>
		<category><![CDATA[Wiki]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/stories/?p=36</guid>
		<description><![CDATA[Es gab in letzter Zeit einige Interessierte, die mich fragten, wie ich Projekte dokumentiere. Ich zeigte Ihnen meine Projekt-Wikis, worauf natürlich die nächste Frage schon &#8220;vorprogrammiert&#8221; war: Wieso gerade ein Wiki? Und überhaupt, wie ist die Vorgehensweise?
Um diese Fragen besser ...]]></description>
			<content:encoded><![CDATA[<p>Es gab in letzter Zeit einige Interessierte, die mich fragten, wie ich Projekte dokumentiere. Ich zeigte Ihnen meine Projekt-Wikis, worauf natürlich die nächste Frage schon &#8220;vorprogrammiert&#8221; war: Wieso gerade ein Wiki? Und überhaupt, wie ist die Vorgehensweise?</p>
<p>Um diese Fragen besser beantworten zu können, habe ich meine eigene Art &#038; Weise der Projekt-Dokumentation mit Wikis in einem kurzen <a href="http://www.gmbsg.com/works/index.php?title=Projekt-Dokumentation_mit_Wikis">Artikel</a> niedergeschrieben. Zugegeben, es ist ein recht minimalistischer Artikel geworden. Trotzdem möchte ich es nicht vorenthalten wissen. Bei Zeiten werde ich mich der Thematik etwas ausführlicher widmen und den Artikel dementsprechend erweitern.</p>
<p>Ich hoffe, das trotz des kurzen Abrisses Rund um dieses Thema meine Arbeitsweise &#8211; zumindest das notwendigste &#8211; verständlich rüberkommt. Viel Spaß damit!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/projekte-dokumentieren-mit-wikis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
