<?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; Continuous Integration</title>
	<atom:link href="http://www.gmbsg.com/tag/continuous-integration/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>Verschwörung beim .NET Open Space Süd in Karlsruhe</title>
		<link>http://www.gmbsg.com/verschworung-beim-net-open-space-sud-in-karlsruhe/</link>
		<comments>http://www.gmbsg.com/verschworung-beim-net-open-space-sud-in-karlsruhe/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 12:16:37 +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[Projects]]></category>
		<category><![CDATA[System]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[ASP.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[Continuous Integration]]></category>
		<category><![CDATA[DDD]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Dojo]]></category>
		<category><![CDATA[F#]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[Objekt-Orientierung]]></category>
		<category><![CDATA[Open Space]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Unit Test]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[XNA]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=1062</guid>
		<description><![CDATA[Dieses Wochenende war ich zum ersten Mal bei einem .NET Open Space, dem .NET Open Space Süd in Karlsruhe. 
Gleich vorneweg: Es war super! Nein, noch mehr, es war richtig super! Eine mehr als gelungene Veranstaltung. In diesem Wochenende habe ...]]></description>
			<content:encoded><![CDATA[<p>Dieses Wochenende war ich zum ersten Mal bei einem .NET Open Space, dem <a href="http://karlsruhe.netopenspace.de/2010/">.NET Open Space Süd in Karlsruhe</a>. </p>
<p>Gleich vorneweg: Es war super! Nein, noch mehr, es war richtig super! Eine mehr als gelungene Veranstaltung. In diesem Wochenende habe ich vieles gelernt und mitgenommen. Die Eindrücke dieser wahnsinnigen .NET-Veranstaltung wirken bei mir noch so immens, dass ich sie hier in einem Blog einfach niederschreiben muss.</p>
<h3>Mittendrin statt nur dabei!</h3>
<p>Samstag, 9:45 Uhr, ich gehe durch eine unscheinbare Tür, es gibt nur ein kleines Schild „.NET Openspace Süd 2010, 4. OG“. Ich laufe die Treppen hoch und werde von einem lächelnden Gesicht überrascht: „Na, ganz schön sportlich!“ rief die freundliche Check-In-Lady (neudeutsch für Empfangsdame ?!? ;)) mir entgegen. Wohl eher aus Höflichkeit, schließlich tat ich mir nach geleisteter Stufenarbeit merklich schwerer als sonst, das mir entgegengebrachte Lächeln mit einem Zurücklächeln zu erwidern.</p>
<p><a href="http://www.gmbsg.com/wp-content/uploads/2010/06/IMAGE_133_S.jpg"><img src="http://www.gmbsg.com/wp-content/uploads/2010/06/IMAGE_133_S-150x150.jpg" alt="Sessionplanung" title="Sessionplanung" width="150" height="150" class="alignright size-thumbnail wp-image-1069" /></a> Nach dem obligatorischen Check-In mit Teilnehmerkarte und Event-Infos finde ich mich mittendrin in der Sessionplanung für den ersten Tag wieder. „Wahnsinn“ dachte ich mir, endlich sehe ich viele, die ich nur per Twitter, Blog oder anderweitig online kenne. Gleichzeitig freute ich mich, wieder in Gesichter zu blicken, die ich schon kannte. Und ich war gespannt, welche neuen Bekanntschaften ich mit dieser „Erfahrungsaustauschplattform“ Open Space machen würde. Doch zunächst galt es, die Sessionplanung konzentriert umzusetzen. Auf geht’s!</p>
<h3>WTF is a Monad?</h3>
<p>Die Antwort auf diese Frage hat mir auf anschauliche Art und Weise <a href="http://www.navision-blog.de/">Steffen</a> gegeben. Er folgte der Aufforderung von <a href="http://www.bjoernrochel.de/">Björn</a>, uns allen mal dieses komische „Monad-Ding“ in verständlicher Form widerzugeben. Ich ertappte mich selbst dabei mich nicht daran erinnern zu können, wie lange es her ist, so gespannt und magnetisiert einem Thema und seinem Vortragenden zuzuhören.</p>
<p><a href="http://www.gmbsg.com/wp-content/uploads/2010/06/IMAGE_135_S.jpg"><img src="http://www.gmbsg.com/wp-content/uploads/2010/06/IMAGE_135_S-300x179.jpg" alt="WTF is a Monad?" title="WTF is a Monad?" width="300" height="179" class="alignleft size-medium wp-image-1072" /></a> Er erklärte unter Anderem, dass die Uhr ein <a href="http://de.wikipedia.org/wiki/Monoid">Monoid</a> sei und es nur 3 essentielle Kriterien für das in sich geschlossene System eines <a href="http://de.wikipedia.org/wiki/Monade_%28Typkonstruktion%29">Monaden</a> gibt. Das neutrale Element, die „SelectMany“ und „Id“ Methoden (also Bind &#038; Return) <i>[Anmerkung: Das ist mit großer Wahrscheinlichkeit mathematisch total falsch und wahrscheinlich auch nicht richtig - aber so habe ich es verstanden :-/ - Korrektur willkommen.]</i>. Es ging weiter mit der Vorstellung der Population in der Monaden-Welt: Identity, Maybe, Continuation, State. </p>
<p>Ich habe es sicherlich noch nicht richtig begriffen und bin selbst erst am Anfang, die funktionale Programmierung wieder in meine tägliche Programmier-Praxis einzuführen. Doch diese Session war für mich wie ein Paukenschlag zum Auftakt! Super.</p>
<h3>3D in your Pocket</h3>
<p>„Hmm, das ist schwer zu toppen“, dachte ich mir, noch gedanklich verworren in Monaden, als ich mich plötzlich in der 2. Session über XNA &#038; Windows Phone 7 von <a href="http://blogs.msdn.com/b/twendel/">Tom</a> wieder langsam aus der Monadenwelt lösen konnte. Doch meine Skepsis erwies sich als unberechtigt. Tom zeigte uns, das XNA keine Abkürzung für Spieleentwicklung ist, sondern eine Abkürzung ist für effektive &#038; professionelle Spieleentwicklung &#8211; mit einer für mein Empfinden niedrigen Lernkurve. </p>
<p><a href="http://www.gmbsg.com/wp-content/uploads/2010/06/IMAGE_141_S.jpg"><img src="http://www.gmbsg.com/wp-content/uploads/2010/06/IMAGE_141_S-150x150.jpg" alt="XNA Windows Phone 7" title="XNA Windows Phone 7" width="150" height="150" class="alignright size-thumbnail wp-image-1077" /></a> Tom ist ein Verfechter von Fakten, also waren auch keine trockenen Slides angesagt – statt dessen gab es Visual Studio, Source Code und den Windows Phone 7 Emulator zu sehen. Ich durfte lernen, dass es gar nicht so schwer ist, Windows Phose 7 „anzuprogrammieren“ und sich auch kein Hexenwerk hinter „Worlds“, „Matrices“, „Meshes“ und „Shadern“ verbirgt. Macht Laune auf mehr.</p>
<h3>Design Drivers</h3>
<p>Und schon ging es weiter mit den Erkenntnissen in der von <a href="http://sergeyshishkin.spaces.live.com/">Sergey</a> angetriebenen Session über &#8220;TDD vs. BDD vs. ATDD&#8221;. Es war unerwarteterweise keine trockene Gegenüberstellung von „methodischen Religiösitäten“. Ganz im Gegenteil. Die Session war wohl eine der konstruktivsten Diskussionen über „Erwartungsgetriebene Softwareentwicklung“, bei denen ich dabei sein durfte.</p>
<p><a href="http://www.gmbsg.com/wp-content/uploads/2010/06/IMAGE_144_S.jpg"><img src="http://www.gmbsg.com/wp-content/uploads/2010/06/IMAGE_144_S-150x150.jpg" alt="Testing Rules" title="Testing Rules" width="150" height="150" class="alignleft size-thumbnail wp-image-1078" /></a> Der Erfahrungsaustausch fand auf breiter Ebene statt, fast jeder konnte irgendwie dazu beitragen. Highlights waren sicherlich die Vorstellung von Fitnesse als Werkzeug für ATDD sowie die anschauliche Erklärung der <a href="http://lh3.ggpht.com/_X3kaawac_g4/S3VCgzOuyQI/AAAAAAAAAvw/aww4Ui2N7LU/agile-testing-quadrants.JPG?imgmax=800">Agile Testing-Quadranten</a> von Sergey.</p>
<p>Im Übrigen hatte wohl Sergey noch mehr „feine Info’s“ mitgebracht, denn er war es auch, der die „RX – Reactive Extensions Hands On“-Session kräftig mitgestaltete. Ach, ich könnte womöglich noch stundenlang über die weiteren, hochinteressanten Sessions auf diesem .NET Open Space schreiben. </p>
<h3>Know How Rollercoaster</h3>
<p>Zum Beispiel über die unglaublich erkenntnisreiche Session über „TDD/BDD Do’s and Dont‘s“  – das war geballtes Know-How über testgetriebene Entwicklung. Oder die Session über „verteilte Architekturen“ sowie die Session über „Skalierung &#038; Caching im Web“, die anschaulich die Best Practices dieser Themen an mich, den Teilnehmer transportieren konnten.</p>
<p><a href="http://www.gmbsg.com/wp-content/uploads/2010/06/IMAGE_132_S.jpg"><img src="http://www.gmbsg.com/wp-content/uploads/2010/06/IMAGE_132_S-150x150.jpg" alt="Legalize Unit Testing" title="Legalize Unit Testing" width="150" height="150" class="alignright size-thumbnail wp-image-1079" /></a> Das „Daily Life“ wurde wertwoll angereichert durch die Sessions „Smart Tools for Smart People (Part I + II)“  von <a href="http://www.lennybacon.com/default.aspx">Daniel</a>. Das meistern spielerischer Herausforderungen wurde in der AntMe!-Session von Tom gezeigt, einen Kickstart von 0 auf 100 für ASP.NET MVC2 lieferte <a href="http://www.der-albert.com/Default.aspx">der Albert</a>. Die weise Erkenntnis der vielen Gemeinsamkeiten und wenigen Unterschiede von <a href=http://code.google.com/p/xunitbddextensions/">xUnit.BDDExtensions</a> zu <a href="http://github.com/machine/machine.specifications">MSpec</a> zu <a href="http://www.navision-blog.de/2009/02/23/introducing-naturalspec-a-dsl-for-testing-part-i/">NaturalSpec</a> wurde in der „United BDD“-Session deutlich. Unüberhörbar waren auch die Berichte von einer spannenden Session über die Erfahrungen mit und um DDD herum von <a href="http://webenliven-space.de/dotnetblog/">Gregor</a>.</p>
<p>Ach ja, es gab ja auch noch ein Coding Dojo. Ich als „Session-Host“ möchte nicht viele Worte darüber verlieren. Ich möchte viel mehr, dass jeder, der dabei war, seinen Eindruck mitnimmt und seine Meinung dazu bildet. Ich kann nur sagen: mir hat das Dojo mit so vielen interessierten und erfahrenen Entwicklern sehr viel Spass gemacht und ich konnte wieder einiges dazulernen.</p>
<h3>Environment.Cool();</h3>
<p><a href="http://www.gmbsg.com/wp-content/uploads/2010/06/IMAGE_150_s.jpg"><img src="http://www.gmbsg.com/wp-content/uploads/2010/06/IMAGE_150_s-300x179.jpg" alt="Organizers" title="Organizers" width="300" height="179" class="alignleft size-medium wp-image-1082" /></a>Doch dieses gesamte „Excitement“, der Erfahrungsaustausch, die Bekanntschaften, die wunderbar leichten Unterhaltungen am Mittagstisch, die Diskussionen über Vergangenheit, Gegenwart und Zukunft der Software-Entwicklung am gemütlichen Abend, die Betrachtungen über den eigenen Tellerrand hinaus – all das wäre nicht möglich gewesen, ohne die Motivation &#038; Organisation zum .NET Open Space Süd in Karlsruhe. Vielen Dank an die <a href="http://www.dotnet-ka.de/">DNUG Karlsruhe</a>, Alex, Ralf, Frank, Aydin und alle, die dabei waren! Ich bin beim nächsten Mal sicher wieder dabei!</p>
<p>Doch eine wichtige Frage bleibt nach dem .NET Open Space Süd immer noch offen: Planen <a href="http://twitter.com/ilkerde/status/16535252984">Steffen</a>, <a href="http://twitter.com/BjoernRochel/status/16575784869">Björn</a>, <a href="http://twitter.com/sshishkin/status/16610614472">Sergey</a>, <a href="http://twitter.com/BjoernRochel/status/16557247504">Alexander</a> eine <a href="http://twitter.com/BjoernRochel/status/16580674588">Verschwörung</a>? Bildet sich ein verschworene Monaden-Mafia? Welche Rolle spielt dabei „<b>Jean Closure</b>“ – ist er der neue Pate der testgetriebenen Untergrundgeschäfte? Vielleicht hat <a href="http://twitter.com/cdeger/status/16635635336">Christian</a> auch etwas damit zu tun?</p>
<p>Maybe Some&lt;IsTrue&gt;, Maybe None&lt;IsTrue&gt; &#8230; to be <a href="http://blogs.msdn.com/b/wesdyer/archive/2008/01/11/the-marvels-of-monads.aspx">Continuation-Monad</a>! ;-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/verschworung-beim-net-open-space-sud-in-karlsruhe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bugtracking ist sinnlos!</title>
		<link>http://www.gmbsg.com/bugtracking-ist-sinnlos/</link>
		<comments>http://www.gmbsg.com/bugtracking-ist-sinnlos/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 20:50:51 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[Aktuell]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[System]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[Continuous Integration]]></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[TDD]]></category>
		<category><![CDATA[Team]]></category>
		<category><![CDATA[TFS]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/stories/?p=372</guid>
		<description><![CDATA[Es ist nun schon einige Zeit vergangen, seit dem ich das letzte Mal über Bugs gebloggt habe. Damals habe ich mich etwas näher mit dem Thema Bugreporting auseinandergesetzt. Und nach wie vor bin ich der Meinung, dass das Bugreporting ein ...]]></description>
			<content:encoded><![CDATA[<p>Es ist nun schon einige Zeit vergangen, seit dem ich das letzte Mal über Bugs gebloggt habe. Damals habe ich mich etwas näher mit dem Thema <a href="http://www.gmbsg.com/stories/?p=82">Bugreporting</a> auseinandergesetzt. Und nach wie vor bin ich der Meinung, dass das Bugreporting ein wichtiger und wesentlicher Bestandteil des Issue Managements ist. Was das Bugtracking allerdings angeht, so bin ich anderer Meinung.</p>
<p>Ich möchte gleich mal eine provokante Aussage in den Raum werfen: Bugtracking für Software-Projekte ist sinnlos. Jedenfalls in den meisten Fällen. Mehr noch, Bugtracking sollte soweit wie nur irgend möglich vermieden werden!</p>
<p>Was will ich damit sagen? Man betrachte einmal das mittlerweile so &#8220;selbstverständliche&#8221; Tooling bei Software-Projekten: Man nehme ein <a href="http://en.wikipedia.org/wiki/Revision_control">SCM</a> (z.B. SVN oder git), ein <a href="http://en.wikipedia.org/wiki/Continuous_integration">CI-System</a> (z.B. TeamCity oder CruiseControl) und einen <a href="http://en.wikipedia.org/wiki/Bug_tracking_system">IssueTracker</a> (z.B. Bugzilla oder Trac). Man kann das ganze natürlich auch als Gesamtpaket haben, z.B. mit <a href="http://en.wikipedia.org/wiki/Team_Foundation_Server">TFS</a>. So, damit hat man die Eckpfeiler einer Software-Entwicklungsumgebung parat und kann frisch und fröhlich programmieren. Ich denke allerdings das dieses Toolset nicht ganz so glücklich gewählt ist.</p>
<h3>Bugtracking ist Zeitverschwendung</h3>
<p>In einer Zeit, in der viel getan wird, um einen sauberen Code zu produzieren ist meiner Meinung nach die jetzige &#8220;Methodik des Bugtrackings&#8221; nicht mehr adequat. Entwickler versuchen mit agilen Methoden (teilweise krampfhaft) mehr Qualität und Stabilität in ihre Produkte zu bringen. Ein aktuelles Beispiel ist die Beachtung und Anwendung der Prinzipien der <a href="http://www.cleancodedeveloper.de/">Clean Code Developer</a> Bewegung, die Ihre Kernaussage aus der <a href="http://manifesto.softwarecraftsmanship.org/">Craftsmanship-Ideologie</a> von <a href="http://objectmentor.com/omTeam/martin_r.html">UncleBob</a> schöpft. Darüber hinaus beschäftigt sich die gesamte Softwareentwicklungsindustrie seit Jahren mit Themen wie z.B. Continuous Integration oder Test-Driven-Development, die mitunter das Ziel haben, die Qualität des Softwareproduktes schon während der &#8220;Produktionsphase&#8221; stetig hoch zu halten. Flankiert wird das ganze auch noch mit agilen Managementmethoden wie z.B. <a href="http://de.wikipedia.org/wiki/Scrum">Scrum</a> oder <a href="http://de.wikipedia.org/wiki/Kanban">Kanban</a>, die auch einen besonderen Anspruch auf stetige, hohe Qualität legen.</p>
<p>Nichtsdestotrotz findet man in jedem Tool-Setup den altbekannten &#8220;Bugtracker&#8221; wieder. Wieso? Auf der einen Seite strebt man nach dem &#8220;Zero-Defect&#8221;, nach hochqualitativer Software. Aber mit dem gleichen Atemzug gibt man sich dennoch geschlagen, indem man von vornherein mit Bugs rechnet. Denn einen Bugtracker zu betreiben ist in den allermeisten Fällen nichts anderes als ein Geständnis. Undzwar das Geständnis sich selbst gegenüber, doch nicht alles &#8220;hundertprozentig&#8221; zu machen. Es ist ein Widerspruch in sich. Jaaaa, Clean Code, TDD, BDD, DDD und noch eine handvoll anderer bewährter Methoden, von mir aus noch Pair Programming, Continuous Integration / Deployment und Scrum. Aber: Ein Bugtracker muss auf jeden Fall auch her.</p>
<h3>Bugtracker ist nicht gleich Liste und schon garnicht Archiv</h3>
<p>Man mag mir entgegenbringen, dass mit einem &#8220;Issue Tracking&#8221;-System nicht nur Bugs verwaltet werden, sondern auch Feature-Requests und ähnliches. Featurelisten sind eine wunderbare Sache, vor Allem wenn man sie priorisieren kann. Aber dazu braucht man keinen Bugtracker. Im Allgemeinen reichen einfachere Tools aus.</p>
<p>Das am meisten erwähnte Gegen-Argument ist wohl, das man mit dem Bugtracker die Bugs &#8220;verwalte&#8221;, um sie ja nicht zu vergessen und Ihnen angemessene Priorität zu geben. Lächerlich! Eine Farce, denn in der professionellen (wirtschaftlich orientierten) Softwareentwicklung ist solch ein Ansatz absolut kontraproduktiv. Erstens schafft es einen weiteren Verwaltungs- und Organisationsapparat, den es erst mal zu bewältigen gilt. Zweitens mutiert es mit der Zeit zu einer Halde (ich will schon fast sagen Müllhalde) von unwichtigen Bugs und Feature-Requests, die man irgendwann einmal angehen will. Drittens stellt es automatisch und implizit ein Konkurrenzsystem zur Roadmap dar. Warum?</p>
<p>Na ganz einfach: wenn ein Bug wirklich ein wichtiger Bug ist, dann wird er sofort gefixed. Alles andere ist entweder nicht wichtig oder wird dann erst wichtig, wenn die wichtigeren Dinge schon erledigt sind. So einfach ist das.</p>
<p>Außerdem: Gefühlt implementiert nahezu jeder, der was auf sich hält seine Software mit agilen Methoden und Praktiken. Scrum und XP sind schon längst angekommen; und mit TDD und Clean Code wir bewegen uns auf einem hohen Niveau, oder nicht? Unsere Grundmotivation ist es doch, fehlerfreie Software auszuliefern, oder nicht? Ok, 100%ig gibt es nie, aber wir streben doch zumindest die <a href="http://en.wikipedia.org/wiki/High_availability">three nines</a> der &#8220;High Quality&#8221; an, oder nicht? Ich denke schon &#8211; zumindest ist das mein Verständnis. Wenn dem so ist, warum brauchen wir dann ein Bugtracking-Tool?</p>
<h3>Bugreporting ist wichtig, Bugtracking jedoch unwichtig</h3>
<p>Ich möchte mit meiner provokanten Aussage nicht erreichen, das man grundsätzlich das Issue Management anzweifelt. Es ist eher das Gegenteil der Fall. Ich stärke sogar die Wichtigkeit &amp; Effizienz, zumal nach wie vor ein richtiges Bugreporting und eine Bug Triage entscheidend sind, um die richtige Entscheidung treffen zu können. Mein Augenmerk gilt der Bugverwaltung an sich, also der zentralisierten Auflistung, Verwaltung und Archivierung von Fehlerprotokollen. Im Lean Management sind zentrale Prozesspunkte ein &#8220;rotes Tuch&#8221;. Statt dem sternförmigen Kommunikations- und Prozessmodell wird dort das, Netzmodell favorisiert. Dieser Ansatz ist meiner Meinung nach besonders auf das Issue Management anwendbar.</p>
<p>Natürlich kann ich nicht generell sagen, dass ein Bugtracking-Tool sinnlos ist. Es gibt immer wieder Situationen und Rahmenbedingungen, die auch ein Bugtracking-Tool und eine zentrale Fehlerverwaltung rechtfertigen. So ist es z.B. bei einem Produkt, bei dem die User-Gemeinde aktiv die Bugs berichten und einsehen kann sicherlich sinnvoll, ein Bugtracking-System einzusetzen. Allerdings ist es nur in den seltensten Fällen wirklich notwendig.</p>
<p>Man könnte ein Bugreporting auch derart gestalten, dass man sich beim Reporter für den Bericht bedankt und ihm verspricht, das Problem zu analysieren. Dann schaut man sich den Fehler an. Ist er wichtig genug, wird er sofort gefixed &#8211; und der Benutzer ist glücklich. Ist er nicht wichtig genug (also ist entweder ein anderer Bug oder ein anstehendes Feature wichtiger), so wird der Report weggeworfen. Der Benutzer wird benachrichtigt dass der Fehler momentan nicht korrigiert wird. Ehrlich, sachlich, klar. Der Berichterstatter kann nun nochmals (mit Vehemenz) darauf pochen, den Fehler behoben zu wissen. So kann man z.B. bei benutzerorientierten Produkten auch ein Voting einsetzen (wie z.B. bei Codeplex). Erhöht sich das Voting (die Priorität) nicht, wird der Bug nicht gefixed und weggeworfen. That&#8217;s it.</p>
<h3>Es gibt nur ein Go oder Nogo für einen Bugfix</h3>
<p>Ich bin der festen Überzeugung das diese Verfahrensweise vor Allem dann effizient ist, wenn man in der Software-Entwicklung agile Methoden anwendet. Für mich sind Software Craftsmanship, TDD, XP und all die weiteren modernen Methoden einfach nicht mit dem veralteten Zentralverwaltungs-Muff &#8220;Bugtracking&#8221; vereinbar. Statt dessen sollte man ein leichtgewichtiges Bugreporting etablieren und die Entscheidung über den Fix oder No-Fix des Bugs schnell herbeiführen. Nur so kann man sich selbst dazu erziehen, von Anfang an in der Software-Entwicklung das Qualitätsbewusstsein zu schärfen und die Qualität konstant adequat hoch zu halten. Denn nur mit dieser &#8220;KO-Entscheidung&#8221; über den Fix eines Bugs kommt man (leidend, aber relativ schnell) zu der Erkenntnis, dass man wenn man wirklich das Produkt stetig weiterentwickeln möchte auch immer sich zum Ziel setzen muss, ein möglichst fehlerfreies Produkt auszuliefern.</p>
<p>Die Erkenntnis, Bugs nicht zu verwalten und sofort zu entscheiden, ob es gefixed werden soll oder einfach ignoriert werden soll ist meiner Meinung nach ein wichtiger Bestandteil für qualitative, agile Software-Entwicklungs-Methoden.</p>
<p>Ergo: Bugtracking ist sinnlos!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/bugtracking-ist-sinnlos/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Agiles Software Configuration Management</title>
		<link>http://www.gmbsg.com/agiles-software-configuration-management/</link>
		<comments>http://www.gmbsg.com/agiles-software-configuration-management/#comments</comments>
		<pubDate>Sat, 07 Feb 2009 12:09:26 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Works]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[MSBuild]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[SVN]]></category>
		<category><![CDATA[Team]]></category>
		<category><![CDATA[TFS]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/stories/?p=255</guid>
		<description><![CDATA[Ich habe mich in den letzten Wochen etwas intensiver mit der Erstellung und Konfiguration von Software beschäftigt. Mittlerweile gehört es ja schon zum guten Ton ín der Software-Entwicklung, zumindest ein Continuous Build zu haben &#8211; besser noch komplett die Methoden ...]]></description>
			<content:encoded><![CDATA[<p>Ich habe mich in den letzten Wochen etwas intensiver mit der Erstellung und Konfiguration von Software beschäftigt. Mittlerweile gehört es ja schon zum guten Ton ín der Software-Entwicklung, zumindest ein Continuous Build zu haben &#8211; besser noch komplett die Methoden der Continuous Integration anzuwenden. Es gibt ja auch inziwschen eine Reihe von Tools, die ein solches Vorgehen gut unterstützen &#8211; TFS, CruiseControl.NET, NAnt oder TeamCity &#8211; um nur einige zu nennen.</p>
<p>Entscheidend bei der Anwendung von <a href="http://en.wikipedia.org/wiki/Continuous_Integration">Continuous Integration</a> ist aber nicht nur das Toolset, sondern in großem Maße auch die &#8220;Theorie des Softwarebau&#8217;s&#8221; &#8211; dem <a href="http://en.wikipedia.org/wiki/Software_configuration_management">Software Configuration Management</a>. Ein wenig komisch ist diese Beziehung zwischen dem agilen Continuous Integration und dem formalistischen Software Configuration Management schon. Jedoch sind bei näherer Betrachtung nehmen Gemeinsamkeiten gegenüber den Unterschieden deutlich überhand.</p>
<p>Die wenigsten Software-Entwickler können sich unter dem Begriff Software Configuration Management (SCM) etwas konkretes vorstellen. Meistens wird SCM auf ein Versionskontrollsystem wie TFS, SVN, GIT oder Perforce reduziert. SCM ist jedoch weitaus mehr. In dem kurzen Artikel &#8220;<b><a href="http://www.gmbsg.com/works/index.php?title=Agiles_Software_Configuration_Management">Agiles Software Configuration Management</a></b>&#8221; habe ich die Grundlagen des SCM zusammengefasst und den theoretischen Stoff ein wenig aufgearbeitet. Hoffentlich hilft es dem einen oder anderen, diese theoretischen Konzepte auf den praktischen Einsatz abzubilden.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/agiles-software-configuration-management/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Technical Summit 08: Teil 2</title>
		<link>http://www.gmbsg.com/technical-summit-08-teil-2/</link>
		<comments>http://www.gmbsg.com/technical-summit-08-teil-2/#comments</comments>
		<pubDate>Fri, 21 Nov 2008 22:43:44 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[4.0]]></category>
		<category><![CDATA[ADO.NET]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Automation]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[Entity Framework]]></category>
		<category><![CDATA[LINQ]]></category>
		<category><![CDATA[M]]></category>
		<category><![CDATA[MDD]]></category>
		<category><![CDATA[MSBuild]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[Oslo]]></category>
		<category><![CDATA[Projektmanagement]]></category>
		<category><![CDATA[Prozess]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Team]]></category>
		<category><![CDATA[Test]]></category>
		<category><![CDATA[TFS]]></category>
		<category><![CDATA[Unit Test]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[WCF]]></category>
		<category><![CDATA[WF]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/stories/?p=229</guid>
		<description><![CDATA[Yep, die Summit habe ich nun hinter mir. Mein Log:
Session 1: Dariusz zu Besuch in Oslo
Abstrakte Kost zum Wachwerden für müde Entwickler-Hirne präsentierte Dariusz mit der ersten Session des zweiten TS-Tages: Oslo &#8211; Modellgetriebene Entwicklung. Was ist denn Oslo?
Zunächst einmal ...]]></description>
			<content:encoded><![CDATA[<p>Yep, die Summit habe ich nun hinter mir. Mein Log:</p>
<h3>Session 1: Dariusz zu Besuch in Oslo</h3>
<p>Abstrakte Kost zum Wachwerden für müde Entwickler-Hirne präsentierte Dariusz mit der ersten Session des zweiten TS-Tages: Oslo &#8211; Modellgetriebene Entwicklung. Was ist denn Oslo?</p>
<p>Zunächst einmal wäre da die grundsätzliche Definition einer Entwicklungs-Umgebung und entsprechenden Tools, die eine modellgetriebene Software-Entwicklung ermöglichen sollen. Microsoft verfolgt hier den Ansatz des &#8220;neu erfindens&#8221;. Mit Oslo wird eine komplett neue Landschaft angeboten, statt bestehende Systeme zu erweitern.</p>
<p>Zum einen wäre da die &#8220;textuelle Modellierungssprache&#8221; M &#8211; M wie Modell. M ist natürlich keine klassische Programmiersprache, sondern dient der Beschreibung von DSL&#8217;s. Im Fokus ist nicht die Objektorientierung, sondern Daten- und Strukturorientierung. M hat eine Reihe von eigenen DSL&#8217;s (also Untertypen zu M), darunter MGrammar, um Grammatiken und Syntax für die eigene Textsprache zu definieren, MEntity um verhaltens- und modellbezogene Objekte zu modellieren, sowie MSchema, eine Sprache zur Definition von (relationalen) Datenstrukturen. Dariusz zeigte ein paar Beispiele mit dem neuen &#8220;Intellipad&#8221; (dem M-Editor), der schon seit einiger Zeit im Netz als das &#8220;Emacs.NET&#8221;-Gerücht verbreitet wurde.</p>
<p>Modellierung geht natürlich auch &#8211; oder besser primär &#8211; visuell. Dafür hat Microsoft einiges an Entwicklungsarbeit investiert und die neue Anwendung &#8220;Quadrant&#8221;. Quadrant ist so etwas ähnliches wie ein flexibler Diagramm-Designer. Die Flexibilität erreicht es zum einen über M selbst sowie auch über eigene &#8220;Meta-DSL&#8217;s&#8221;. Quadrant hat im wesentlichen eine Office-Style-Ribbon-Bar und eine &#8220;Workspace&#8221; genannte Zeichenfläche. Je nach definierten Modell oder DSL kann man verschiedene Entitäten und Objekte erstellen, auch neue Menü&#8217;s und der Kontext ist änderbar. Auf den ersten Blick sieht das Tool ganz nett aus &#8211; die Power, die in Quadrant stecken soll, konnte mir Dariusz in den 5 Minuten leider nicht ganz vermitteln.</p>
<p>Ein wesentlicher Teil von Oslo ist &#8220;Dublin&#8221;. Dublin soll eine Hosting Runtime für Oslo MDA&#8217;s werden. Realisiert als Erweiterung für den IIS ist es ein Quasi-Application-Server. Intern werkeln WCF &#038; WF kräftig auf dem Metadaten-Modell und sollen die mit den Oslo-Tools entworfenen Anwendungen ohne weiteres Zutun ausgeführt und zur Verfügung gestellt werden können. Dublin selbst ist noch in der Entwicklung &#8211; mal abwarten, wie es am Ende aussehen wird.</p>
<p>Am Rande erwähnt wurde auch, das die gezeigten Oslo-Komponenten (also M und Quadrant) wohl auch irgendwie mit Visual Studio gekoppelt werden &#8211; natürlich noch nicht zum VS10er-Release, aber eine Integration sei in Planung.</p>
<p>Fazit: Oslo ist in einer noch sehr frühen Phase, deutet aber schon an, wie MDD in Zukunft aussehen kann. Danke Dariusz. </p>
<h3>Session 2: Christian mit Rosario</h3>
<p>&#8220;Rosario&#8221; ist der Codename der neuen Version von Visual Studio Team System / TFS. Wer schon heute mit VSTS mit TFS verwendet, der weiß, das da noch einiges an Platz für Verbesserung vorhanden ist. Das scheint auch Microsoft erkannt zu haben, wenn man den Worten von Christian glauben darf. Bei den Worten wollte er es natürlich nicht belassen und zeigte ein paar Slides und Demos zu den Verbesserungen.</p>
<p>Zunächst einmal werden Kernelelemente wie Skalierungsfähigkeit, Maintenance und das Build- bzw. SCCS-Management verbessert. Wie hinlänglich bekannt, ist Installation und Administration von TFS / VSTS ja keine besondere Meisterleistung von Microsoft. Mit Rosario soll laut Chrisitan TFS innerhalb einer halben Stunde installiert und konfiguriert werden können &#8211; da lehnt er sich meiner Meinung nach ziemlich weit aus dem Fenster &#8211; aber ich will nicht von vornherein darüber urteilen.</p>
<p>Für den Continuous Build wird Build Agent Pooling und das &#8220;Gated Check-In&#8221; integriert. Das &#8220;Gated Check-In&#8221; erlaubt einen serverseitigen Buildrun mit den Änderungen, die eingecheckt werden sollen. Das neue &#8220;Branch Management&#8221; ist eigentlich nichts anderes als ein Backtracking und eine Visualisierung der Branches auf dem SCCS. Diese Features sind bei der Konkurrenz (siehe z.B. TeamCity) z.T. schon lange Standard &#8211; wenigstens schließt hier Microsoft ein wenig auf. </p>
<p>Im Project Management Bereich soll das Reporting und Templating besser ausgebaut werden. Interessant ist die Integration der Kernelemente von Scrum, wie z.B. das Dashboard und Excel Listen für Product Backlog, Sprint Backlog, Sprint Planung, Burndown Charts oder die User Story Work Items. Die Beziehungen der Work Items zueinander wird in Rosarion weiter verbessert. Man kann eine komplette Hierarchie aufbauen, aber auch andere &#8220;Link Relations&#8221; setzen, wie z.B. Predecessor (Vorgänger) oder Dependency (Abhängigkeit). Auch die Organisation der einzelnen Projekte wird überarbeitet. Über die schon existierenden Team Projects sollen nun organisatorisch mit &#8220;Team Project Collections&#8221; ganze Anwendungsfamilien verwaltet werden können. </p>
<p>Für das Qualitätsmanagement sollen die Tools für das Unit Testing weiter verbessert werden. Interessant ist, das ein komplett neues &#8220;Test Quality Center&#8221; aufgebaut wird (Codename: Camano). Neue Features wie Test Impact Analyse, Test Suites und ein neuer &#8220;Test Plan Manager&#8221; sollen den Testalltag vereinfachen. Auch die Test Cases sind als Work Items gespeichert und können mit Changesets, Tasks und Requirements verbunden werden. Gut gelungen finde ich die Verwaltung der Test Cases mit Test Runs und Test Settings. Ziel dieser feinen Testorganisation soll die Eliminierung der &#8220;No Repro Bugs&#8221; sein.</p>
<p>Dieses Ziel wird vor Allem durch den neuen &#8220;Manual Test Runner&#8221; unterstützt, mit dem manuelle oder explorative Tests durchgeführt werden können. Besonders prickelnd: Die Tests können mit einem Test Recorder aufgenommen und automatisiert werden. Weitere Test Tracking Features sind die Videoaufnahme, Log Sampling und Umgebungsanalyse. Übrigens, der Test Recorder soll eine Reihe von UI-Typen unterstützen können, wie z.B. Windows Forms, WPF, die IE Engine und sogar die Firefox Gecko Engine. Ein Highlight beim Qualitätsmanangement ist das &#8220;Environment Provisioning&#8221;, mit dem eine virtuelle Testumgebung angeboten werden kann. Wie das eben so ist mit virtuellen Maschinen, sind Checkpoints und Flashbacks auf ältere Stände möglich.</p>
<p>Abschließend ging Christian noch auf die neuen Diagramme und Analyse-Möglichkeiten von VSTS 2010 ein. Standard UML die Use Case, Activitiy, Sequence und das bekannte Class Diagram sind nun in VS direkt umsetzbar. Es wird zusätzlich noch das &#8220;Laer Diagram&#8221; und ein &#8220;Architecture Explorer&#8221; angeboten. Das Layer Diagram soll eine Tiered Architecture widerspiegeln. Durh Verknüpfung der einzelnen Elemente mit Namespaces ist sogar eine automatische Validierung zur Einhaltung der Layer-Regeln möglich. Der Architecture Explorer ist die visualisierte Fortführung des Object Explorers. Ausgehend von einem &#8220;Bird-Eye View&#8221; kann man in die einzelnen Namespaces, Klassen und Methoden navigieren und sich besondere Konstallationen näher ansehen. Ein NDepend-Ersatz ist es bei weitem nicht, aber ermöglicht  zumindest eine nette und schnelle Analyse.</p>
<p>Fazit: Die neuen Quality-, Test- und Diagramm-Features sind wirklich beeindruckend. Die Verbesserung von TFS ist längst überfällig. Vielversprechend!</p>
<h3>Session 3: Nochmal Dariusz mit WCF &#038; WF in .NET 4.0</h3>
<p>Da bin ich nun wieder in einer Session mit Dariusz gelandet. Diesmal: WF &#038; WCF in .NET 4.0. Wie immer zu Beginn ein Abriß der Themen. Generell wurde bei der Weiterentwicklung von WF und WCF an der Performance geschraubt. die Workflow Foundation Engine soll eine mindestens 10-fache Geschwindigkeitssteigerung erfahren haben. Doch nicht nur unter der Haube der WF wurde gewerkelt. Die API wurde verbessert, um noch einfacher mächtigere Activities entwickeln zu können. So werden mit 4.0 auch &#8220;Variablen&#8221; (besser: State Parameter) im Workflow unterstützt, die man relativ elegant mit den Klassen <code>InParameter&lt;T&gt;</code> und  <code>OutParameter&lt;T&gt;</code> ansprechen kann.</p>
<p>Besonders hob Dariusz den komplett neu aufgebauten Designer von WF hervor. Er wird nun komplett in WPF umgesetzt, bietet dementsprechend eine ansprechende UI und ist vor Allem besonders gut anpassbar. Auch die Verwendung des Designers in eigenen Programmen (das sog. Rehosting) wird deutlich verbessert und vereinfacht.</p>
<p>Auf der WCF-Seite werden die QoS-Merkmale Konfiguration, Monitoring und Deployment weiter verbessert. Das eigentlich Neue ist aber die engere Verzahnung mit der Workflow Foundation. Zwar ist es schon jetzt möglich, eine WF-Anwendung per WCF in wenigen Schritten zur Verfügung zu stellen &#8211; doch ein weiterer Ausbau sei geplant. Diese &#8220;Vereinigung&#8221; hat auch einen höheren Sinn, nämlich die Entwicklung von Dublin (siehe auch Session 1: Oslo).</p>
<p>Fazit: Kurz &#038; Knackig. Das Zusammenspiel von WCF &#038; WF war hervorzusehen, die Neuigkeiten über WF hören sich gut an. </p>
<h3>Session 4: Oliver Scheer über die Zukunft von ASP.NET</h3>
<p>Die Zukunft von ASP.NET &#8211; das interessiert mich. Also auf zur letzten Session der Technical Summit mit Oliver Scheer. Nach 5 Minuten dachte ich mir: Ups &#8211; schon wieder eine Themaverfehlung? Denn Oliver gab ein Überblick über das, was er in einer Stunde zeigen möchte: ADO.NET Data Services, Dynamic Data Sites, ASP.NET MVC, ASP.NET AJAX und AJAX Control Toolkit. Toll &#8211; Wo ist JQuery, wo sind die neuen HttpHandler und -Modules, wo sind die MVC-Controls? Anscheinend nicht auf der Technical Summit. Naja &#8211; vielleicht zeigt Oliver ein paar Minuten noch neue Features für ASP.NET MVC.</p>
<p>Zunächst zeigte Oliver eine Demo von ADO.NET Data Services. Schön einfach über das Entity Framework die Tabellen zusammenklicken, den Data Service erstellen und die Configzeilen reinschreiben. Fertig. Nix Neues. Punkt.</p>
<p>So &#8211; jetzt mal endlich etwas neues für ASP.NET &#8211; ASP.NET MVC. Oliver beschreibt die Grundlagen und zeigt die bekannten Getting-Started-Samples. Er geht flüchtig auf die Konventionen ein und beschreibt sehr oberflächlich die Idee des MVC. So, noch kurz das Routing gezeigt und ein wenig erklärt. Ok. Nix Neues. Punkt.</p>
<p>Oh &#8211; Oliver holt aus zum nächsten Thema &#8211; ASP.NET Dynamic Data Websites. Ich wundere mich jedes Mal, wenn ich das sehe, wer zum Teufel im Alltag den Anwendungsfall für so eine Art Website hat. Es scheint wohl einige zu geben, sonst hätte man nicht so eine Art von Website-Projekt wohl nicht realisiert. Egal &#8211; ich jedenfalls kenne niemanden der sowas brauchen kann. Nix Neues. Punkt.</p>
<p>Zu guter Letzt noch ein Ausflug in ASP.NET AJAX und ein Verweis auf das AJAX Control Toolkit. Oliver zeigt wieder mal die gewohnte Extender-Demo. Ok. Nix Neues. Halt! Zu guter Letzt doch noch JQuery! Zu schade &#8211; nur ein Hinweis auf die Integration und die Auslieferung mit ASP.NET 4.0. Als Entschädigung dafür zeigt Oliver in seiner letzten Demo, das die neuen, von Microsoft geschriebenen JS-Klassen einen Aufruf von WCF Diensten ohne jegliches serverseitiges Zutun durchführen können. Ok. Wenigstens ein wenig Neu. Punkt.</p>
<p>Fazit: Nahezu Nix Neues. Punkt.</p>
<p>Eine Anmerkung noch: ich finde es wirklich sehr Schade, das gerade die zwei Sessions über ASP.NET für mein Dafürhalten so schwach ausgefallen sind. Man kann ASP.NET mögen oder nicht &#8211; aber auf einer Konferenz wie der Technical Summit ASP.NET derart zu vernachlässigen ist spricht nicht gerade für technologische Überzeugung.</p>
<h3>That&#8217;s it</h3>
<p>So, das war also die Technical Summit 08, so wie ich sie erlebt und verstanden habe. Ich denke jetzt muss ich erstmal die Infos und die ganze Veranstaltung noch auf mich wirken lassen und verarbeiten. Im Großen und Ganzen war es eine gute und z.T. sehr aufschlußreiche Konferenz. Das absolute Highlight war für mich die Parallels-Session mit Steve, dicht gefolgt von den beeindruckenden VSTS-Demos von Christian und der hochinteressanten Microsoft-MDD-Interpretation Oslo mit Dariusz.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/technical-summit-08-teil-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Release Process Revisited</title>
		<link>http://www.gmbsg.com/release-process-revisited/</link>
		<comments>http://www.gmbsg.com/release-process-revisited/#comments</comments>
		<pubDate>Mon, 13 Aug 2007 08:10:51 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Prozess]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/stories/?p=30</guid>
		<description><![CDATA[Es gibt manchmal Momente, in denen man die eigenen Prozesse hinterfragt und sich darüber Gedanken macht, wie man Aufgaben besser erledigen kann. So ist es kürzlich auch mir ergangen.
Konkret ging es dabei um den Release-Prozess einer Software-Komponente. Zunächst sollte ich ...]]></description>
			<content:encoded><![CDATA[<p>Es gibt manchmal Momente, in denen man die eigenen Prozesse hinterfragt und sich darüber Gedanken macht, wie man Aufgaben besser erledigen kann. So ist es kürzlich auch mir ergangen.</p>
<p>Konkret ging es dabei um den Release-Prozess einer Software-Komponente. Zunächst sollte ich eventuell klarstellen, was ich mit dem schon beinahe überladenen Wort Release-Prozess meine. Der Release-Prozess umfasst aus meiner Sicht all jene Aufgaben, die ein Entwickler oder ein Unternehmen durchführen muss, um Software in dessen Anwendungsgebiet einsatzbereit zu machen. Insofern beinhaltet ein Release also im Kern das Erstellen des Kompilats der Anwendung, die Paketierung aller notwendigen Dateien zum Betrieb der Anwendung, den Transport des Installationspaketes auf die Einsatzumgebung und schlussendlich die Installation und Konfiguration der Anwendung auf dem Zielsystem. Ich möchte meine Ideen und Vorstellungen zu einem besseren Release-Prozess festigen, indem ich einzeln die Schritte eines Releases beschreibe.</p>
<p>Natürlich beinhaltet ein Release einer Software auch einige weitere Maßnahmen als die oben genannten, wie z. B. die Erstellung oder Aktualisierung von Dokumentationen oder Benachrichtigungen über die Verfügbarkeit der neuen Anwendungsversion bei der jetzigen Anwendern bzw. potentiellen Zielgruppen. Ich möchte hier allerdings nur auf den Kern des Release-Prozesses eingehen.</p>
<p><strong>Erstellen des Release-Builds</strong><br />
Der wichtigste und aus meiner Sicht kritischste Punkt im Release-Prozess erfolgt gleich zu Beginn: Das Erstellen des Release-Builds. Hier ist es für ein sauberes Release entscheidend, dass von vornherein Richtlinien zu diesem Schritt vorhanden sind und beachtet werden. Die wichtigsten Regelungen sind meiner Meinung nach:</p>
<ul>
<li>Der Build ist automatisch. <br/>Folglich erfolgt er komplett automatisch, es ist keine Interaktion zum Bauen des Builds erforderlich.</li>
<li>Der Build ist integer. <br/>Er beinhaltet alle Dateien, die zum Kompilieren der Software notwendig sind. Darüber hinaus enthält der Build alle Dateien, die zum reibungslosen Einsatz der Software auf dem Zielsystem erforderlich sind.</li>
<li>Der Build ist atomar. <br/>Der Build wird demnach an einem festgelegten Zeitpunkt erstellt und wird während sowie nach dem Release-Prozess nicht mehr modifiziert.</li>
<li>Der Build ist final. <br/>Er wird während des Release-Prozesses nur ein einziges Mal erstellt.</li>
</ul>
<p><strong>Paketierung der Software</strong><br />
Nach erfolgreicher Erstellung des Builds ist der nächste Schritt die Paketierung. Mit der Paketierung werden neben dem Kompilat alle weiteren Dateien wie zum Beispiel Release Notes, Benutzerdokumentation, Anwendungsbeispiele und ähnliches zu einem Gesamtpaket zusammengeschnürt. Hier ist vor allem die Art der Paketierung entscheidend. Im Allgemeinen sollte das Gesamtpaket mit einer Installation und Installationsanweisungen ausgeliefert werden. Leider kommt es in einigen Unternehmen noch viel zu oft vor, dass das Paket ein einfaches ZIP-Archiv ist. Wie beim Build-Schritt auch, sollten bei der Paketierung einige Grundregeln beachtet werden:</p>
<ul>
<li>Die Paketierung erfolgt automatisch. <br/>Es sind keine manuellen Schritte bis auf das Anstoßen der Paketierung erforderlich.</li>
<li>Die Paketierung erfolgt erst nach erfolgreicher Abnahme des Release-Builds. <br/>Dies wird im Allgemeinen durch automatisierte Tests und manuelle Verifikation auf Testsystemen gewährleistet.</li>
<li>Die Paketierung ist integer und final. <br/>Wie beim Build selbst wird das Auslieferungspaket nur einmal erstellt und während des Paketierungs-Prozesses nicht mehr modifiziert.</li>
<li>Das Auslieferungspaket ist unabhängig. <br/>Unabhängig bedeutet in diesem Fall, dass das Paket keine weiteren Komponenten oder Informationen mehr benötigt, um auf dem Zielssystem installiert werden zu können.</li>
</ul>
<p>Der letzte Punkt bedeutet natürlich nicht, dass man keine Komponenten auf dem Zielsystem voraussetzen sollte. Jede Software hat bestimmte System Requirements. Es soll vielmehr verdeutlichen, dass die Systemvoraussetzungen klar definiert werden sollten und außerhalb dessen keine weiteren Komponenten mehr erforderlich sind. Besonderen Wert auf Betonung lege ich beim letzten Punkt auf „Informationen“. Damit möchte ich zum Ausdruck bringen, das dass Installationspaket (außer den mitgegebenen Informationen) idealerweise keinerlei weiteres Wissen erfordert um es auf dem Zielsystem zu installieren und die Software in Betrieb zu nehmen.</p>
<p><strong>Deployment</strong><br />
Der dritte elementare Schritt im Release-Prozess ist der Transport des Software-Paketes auf die Anwendungsumgebung. Je nach Art und Quantität der Software kann dieser Verteilungs- bzw. Distributionsprozess viele verschiedenartige Formen und Schritte beinhalten. Dennoch lassen sich bei aller Varianz einige allgemeine Aussagen treffen:</p>
<ul>
<li>Die Funktionalität der Distribution muss vor der eigentlichen Verteilung verifiziert sein. <br/>Konkretisiert ist hier der Test und die Abnahme des gesamten Verteilungsverfahrens gemeint, undzwar noch bevor es zum offiziellen Deployment der Pakete kommt.</li>
<li>Das Ziel &#8211; also alle bekannten Betriebsumgebungen &#8211; muss noch vor der Verteilung klar definiert und anvisiert sein. <br/>Dies kann auf vielfältige Art und Weise erfolgen, zum Beispiel mit einer automatischen Update-Funktion auf den Zielsystemen. Klar muss hier jedoch die Menge, Arten und idealerweise auch die Positionen der Zielumgebungen sein.</li>
<li>Das Deployment muss beweisbar sein. <br/>Damit wird sichergestellt, dass das Installationspaket die Zielumgebung auch definitiv erreicht hat. Schlussendlich ist damit die Sicherstellung der Bedienung des Kunden der Software gemeint.</li>
</ul>
<p><strong>Installation &#038; Inbetriebnahme</strong><br />
Der finale Schritt im Release-Prozess ist die Inbetriebnahme der Software auf dem Zielsystem. Auch hier sind abhängig von der Art und dem Einsatzgebiet der Software viele unterschiedliche Maßnahmen möglich. Doch wie auch im Deploymentschritt können über diesen letzten Schritt auch generelle Punkte zur Beachtung aufgeführt werden:</p>
<ul>
<li>Die Installation und Konfiguration muss nachvollziehbar sein. <br/>Im Detail heißt das: Die Installationsroutine sowie auch die gesamte Grundkonfiguration der Software muss protokolliert werden. Bei der Installation ist dies bei Verwendung geeigneter Installationssoftware nicht sonderlich aufwendig. Etwas komplizierter wird es beim Konfigurieren der Software. Es kann sich hier als einen ausgesprochenen Vorteil erweisen, einen guten Konfigurationsassistenten für die Software anzubieten.</li>
<li>Die Installation und Konfiguration muss reversibel sein. <br/>Man mag vielleicht im ersten Augenblick denken, das sei selbstverständlich. Der Alltag beweist leider oftmals das Gegenteil. Vor allem bei Installationen von neuen Versionen einer Software, welches im Unternehmensumfeld wesentlich öfter vorkommt als im privaten Bereich, sind bei manchen Softwareherstellern deutliche Defizite erkennbar.</li>
<li>Die korrekte Durchführung aller Schritte zur Inbetriebnahme muss überprüfbar sein. <br/>Konkret: hat man alles richtig gemacht, sollte im Idealfall der Kunde als auch der Hersteller darüber informiert sein. Es versteht sich fast von selbst, dass hiermit auch die Rückmeldung an den Hersteller gemeint ist, wenn es nicht gut gelaufen ist.</li>
</ul>
<p>Abschließend bleibt mir eigentlich nur festzustellen, dass meine hier aufgezeigte, allgemeine Vorstellung eines Release-Prozesses doch noch in manchen Punkten von der Realität abweicht. Ergo: Es ist höchste Zeit, Änderungen in Gang zu bringen :-) .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/release-process-revisited/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web Application Testing mit Selenium</title>
		<link>http://www.gmbsg.com/web-application-testing-mit-selenium/</link>
		<comments>http://www.gmbsg.com/web-application-testing-mit-selenium/#comments</comments>
		<pubDate>Thu, 02 Aug 2007 06:46:49 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Unit Test]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/stories/?p=29</guid>
		<description><![CDATA[Wo ich gerade bei Tools bin, schweife ich gleich ein wenig weiter aus und erzähle ein bisschen was über Selenium. Selenium ist ein einfaches wie ebenso wirksames Werkzeug, um Web-Anwendungs-Tests durchzuführen und zu automatisieren.
Am einfachsten gelingt der Einstieg in das ...]]></description>
			<content:encoded><![CDATA[<p>Wo ich gerade bei Tools bin, schweife ich gleich ein wenig weiter aus und erzähle ein bisschen was über Selenium. <a href="http://www.openqa.org/selenium/">Selenium</a> ist ein einfaches wie ebenso wirksames Werkzeug, um Web-Anwendungs-Tests durchzuführen und zu automatisieren.</p>
<p>Am einfachsten gelingt der Einstieg in das Tool mit dem <a href="http://www.openqa.org/selenium-ide/">Plug-In für Firefox</a>. Damit kann man Tests sozusagen „live“ aufnehmen, abspeichern und bei Bedarf laden und wieder ausführen.</p>
<p>Möchte man noch einen Schritt weiter gehen und die Tests z.B. mit jedem Nightly Build automatisch ausführen, sollte man einen Blick auf <a href="http://www.openqa.org/selenium-rc/">Selenium RC</a> werfen. Der ermöglicht es, mit .NET Unit- und Interface-Tests zu schreiben und Selenium automatisch zum Ausführen der Tests zu bewegen.</p>
<p>Ist man einmal soweit dass man seine Web-Anwendung automatisiert testen kann, möchte man das Tool nicht mehr missen. Bei richtiger Verwendung trägt es deutlich zur Verbesserung der Software-Qualität bei.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/web-application-testing-mit-selenium/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TFS &#8211; Team Foundation Server &#8211; Bericht zum Vortrag bei .NET Group München</title>
		<link>http://www.gmbsg.com/tfs-team-foundation-server-bericht-zum-vortrag-bei-net-group-munchen/</link>
		<comments>http://www.gmbsg.com/tfs-team-foundation-server-bericht-zum-vortrag-bei-net-group-munchen/#comments</comments>
		<pubDate>Wed, 25 Jul 2007 21:26:34 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[TFS]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/stories/?p=25</guid>
		<description><![CDATA[Gestern war ich im Rahmen der .NET Developers Group München bei einem Vortrag über den Einsatz von TFS in der Praxis. Ich muss zu allererst loswerden, dass der Vortrag und die Stimmung recht gut waren. Es wurde eine Funktionsübersicht geboten, ...]]></description>
			<content:encoded><![CDATA[<p>Gestern war ich im Rahmen der .NET Developers Group München bei einem Vortrag über den Einsatz von <a href="http://www.munichdot.net/Events/484.aspx">TFS in der Praxis</a>. Ich muss zu allererst loswerden, dass der Vortrag und die Stimmung recht gut waren. Es wurde eine Funktionsübersicht geboten, praktische Beispiele an Hand eines kleinen Demo-Projektes aufgezeigt und der Betriebsalltag diskutiert.</p>
<p>Dabei wurden nahezu alle Aspekte des <a href="http://www.microsoft.com/germany/msdn/vstudio/products/teamsystem/team/default.mspx">Team Foundation Server</a> durchleuchtet: Source Code Control, Work Item Management, Process Management &#038; Communication, Build Management sowie Reporting Services. Kurz davor wurde noch auf den Aufbau des TFS, die unterstützten Prozesse und die verschiedenen Benutzergruppen (Projektrollen) oberflächlich eingegangen.</p>
<p><strong>Source Control</strong><br />
Beim Source Control Management wurde die konzeptionelle Änderung der &#8220;Concurrency&#8221; gegenüber VSS deutlich gemacht. Bei einem solchen „Key Feature“ kann man einem User von <a href="http://subversion.tigris.org/">Subversion</a> nur ein müdes Lächeln abringen. Fakt ist allerdings auch, dass TFS die von z.B. SVN gewohnten Funktionen mitbringt: Check-in/-out, History, Tagging (unter TFS Labels), Branching, Merging &#8211; das gewohnte Repertoire. Elegant gelöst, aber bei weitem nicht neu sind die Check-in Policies. So kann man z. B. Kommentare, Code Analysis, Builds oder Test Runs vor dem Check-in erzwingen. Ein nettes Gimmick ist auch das sog. „Shelving“. Dabei werden die Source Code Files an den Server gesendet, allerdings nicht in einem Changeset (Revision) committed. Praktisch also nur am Server zur freien Verfügung abgelegt. Der praktische Einsatz in größeren Teams ist aus meiner Sicht für so etwas doch relativ begrenzt. Allenfalls lässt sich das Feature für Prototypisierung und Easy Change anwenden.</p>
<p><strong>Work Items</strong><br />
Als nächstes Stand das berüchtigte Work Item Management an. An und für sich bietet hier der TFS eine art Issue Tracking System. Natürlich wurde die Integration in Visual Studio, Excel, Project und Sharepoint nicht unerwähnt gelassen. Interessant dabei war, dass man &#8211; sozusagen als Workaround – Work Items mit Hilfe von Excel auch offline bearbeiten und anlegen kann. Ein weiterer Aspekt bei Work Items ist die Flexibilität. Praktisch jedes Feld eines Items kann definiert werden &#8211; auch wie letztendlich dann das Formular für die Eingabe auszusehen hat.</p>
<p>Zusätzlich zu dieser Indiviualität des Work Items gibt es bestimmte, feste „Anhaltspunkte“ für Work Items. So kann man z.B. Items thematisch mit Hilfe von sog. „Areas“ – ähnlich Themengebieten kategorisieren. Dies kann übrigens – entgegen weitläufiger Meinung – auch hierarchisch gegliedert sein. Eine weitere Kategorisierungsmöglichkeit – diesmal mit Zeitbezug – beiten die Iterationsdefinitionen.</p>
<p>Besonders hervorheben möchte ich auch das integrierte „Workflow-Management“ für Work Items. Im weitesten Sinne arbeitet eine stark vereinfachte Workflow-Engine nach jeder Änderung eines Items definierbare Regeln und State-Transitions ab. Der Witz dabei ist die sehr bequeme Definition des Workflows mit Hilfe eines visuellen Editors. So kann man z.B. einfach und schnell den Workflow für den Work Item Typ „Bug“ an seine Bedürfnisse anpassen.</p>
<p>Apropos Anpassungsfähigkeit – der Team Foundation Server ist im Großen und Ganzen sehr flexibel und lässt sich in sehr vielen einzelnen Punkten anpassen. Angefangen bei Work Items über Process Guidance, Check-In Policies, Process Templates bis hin zur Sharepoint-Modifikation ist alles möglich. Allerdings bringt diese große Flexibilität auch Fallstricke mit sich. Anpassungen sind mit einem relativ hoen Zeitaufwand verbunden und greifen zum Teil Tief in das TFS-System ein. Dabei ist die Wahrscheinlichkeit einer Fehlkonfiguration deutlich höher als mit anderen etablierten Tools.</p>
<p>Das Thema Work Items bei TFS hat seit dem Release des TFS immer wieder eine Frage mit sich gezogen: Warum kann man Work Items nicht im Sharepoint editieren? Diese Frage ist mittlerweile mit „Verwende einfach TeamPlain“ zu beantworten. <a href="http://www.devbiz.com/teamplain/webaccess/default.aspx">TeamPlain</a> ist ein inzwischen von Microsoft aufgekauftes Drittprodukt zu TFS, welches für Work Items und einiges mehr eine Web-Oberfläche bietet. Das Tool funktioniert gut, ist stabil und freundlich zu bedienen. Im Übrigen ist der TFS von Haus aus sowieso „nahezu unverwendbar“ (O-Ton Sprecher des Vortrages). Erst das „<a href="http://msdn2.microsoft.com/en-us/vstudio/aa718351.aspx">Power Tool</a>“ für TFS und weitere Add-Ons wie z.B. TeamPlain machen TFS für den Alltag richtig fit.</p>
<p><strong>Testing</strong><br />
In diesem Zusammenhang möchte ich auch ein wenig in die Test-Thematik eingehen. TFS sieht von Haus aus eine „Tester-Rolle“ innerhalb des Entwicklungsprozesses vor. Dieser wird mit Hilfe der Tester-Edition von VSTS in die TFS-Familie eingebunden. Das einzig herausragende hierbei ist die Verknüpfungsfähigkeit von Tests zu Work Items und Builds. Für Automation stehen dem Tester „Test-Lists“ zur Verfügung, die z.B. nach einem Build automatisch durchgeführt werden können. Alle Test-Projekte werden auch in die Versionsverwealtung des TFS aufgenommen.</p>
<p>Schade ist nur, dass Team Foundation Server nur die eigenen – also von Visual Studio angebotenen – Test-Typen und –Projekte akzeptiert. Eine werksmäßige Unterstützung für andere Test-Frameworks sucht man leider vergeblich.</p>
<p>Es ist wohl eine Art von Brauch bei Microsoft, Produkte zu entwickeln die die Integration von bestehenden Systemen bzw. Dritt-Systemen schwerlich unterstützen. Generell ist bei TFS – bis auf das <a href="http://msdn2.microsoft.com/en-us/library/bb130146(VS.80).aspx">SDK</a> – die mangelnde Zahl an offenen Schnittstellen ein Minuspunkt. Hoffentlich wird dies im Laufe der Evolution des TFS verbessert werden.</p>
<p><strong>Build-Management</strong><br />
Beim Build Management wurde der Vortrag lebendiger; die Praxiserfahrungen wurden offen ausgetauscht. TFS unterstützt hiebei eine Reihe von Funktionen, die helfen sollen, bessere Releases und Roll-Outs durchzuführen. Das aus meiner Sicht wichtigste allerdings wird sträflich vernachlässigt: Automated Builds und Continious Integration. Vergeblich sucht man im Standardumfang des TFS Möglichkeiten für automatische Buildprozesse. Zwar kann man mit einigem Aufwand und ein paar Hilfswerkzeugen sich eine automatisierte Build-Umgebung zusammenschustern, aber bei einem System, welches den Anspruch hat den Software-Entwicklungsprozess optimal zu unterstützen ist diese Tatsache schon fast ein Armutszeugnis. </p>
<p>Ein weiterer Minuspunkt ist der mangelhafte Komfort beim Editieren der Buildscripts. Wenn man z. B. den TFS &#8211; welcher intern <a href="http://msdn2.microsoft.com/de-de/library/wea2sca5(VS.80).aspx">MSBuild</a> verwendet &#8211; dazu bewegen möchte ein .NET 1.1-Projekt zu bauen, hat man außer der Installation von <a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=MSBee">MSBee</a> noch viele Stunden Scriptarbeit vor sich. </p>
<p>Alles in allem ist die Buildunterstützung für heutige Verhältnisse eher unbefriedigend. Da bleibt einem nur der Trost, dass Microsoft gerade hier kräftig nacharbeitet und mit TFS for <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=B533619A-0008-4DD6-9ED1-47D482683C78&#038;displaylang=en">Orcas</a> deutlich verbesserte Buildfunktionalitäten anbieten möchte.</p>
<p><strong>TFS &#8211; Vor- und Nachteile</strong><br />
Ich habe vor dem Vortrag den TFS schon kennenlernen dürfen. Nach dem Vortrag  muss ich sagen, dass sich mein eigener Eindruck von TFS bestätigt hat. Kurz zusammengefasst die Pros and Cons aus meiner Sicht:</p>
<p>Vorteile:</p>
<ul>
<li>Gutes Konzept, Unterstützt nahezu komplett den Entwicklungsprozess</li>
<li>Integration in Visual Studio</li>
<li>.NET-Entwicklungen sehr gut unterstützt </li>
<li>Extreme Anpassungsfähigkeit (Prozesse, Work Items, Workflows)</li>
<li>Gutes Reporting und Monitoring</li>
</ul>
<p>Nachteile:</p>
<ul>
<li>Langsam</li>
<li>Fehlerbehaftet und z.T. Instabil</li>
<li>Continious Integration absolut unbefriedigend</li>
<li>Web-Oberfläche / Sharepoint-Support eingeschränkt</li>
<li>Keine Backup-Funktionen oder –Strategie</li>
<li>De Facto nur Online-Modus, keine Offline-Funktionalität (Thema Off-Site/On-Site)</li>
<li>Installation, Wartung und Individualisierung aufwendig</li>
<li>Kein klares Konzept bei Dokumentationsaufgaben (kein Wiki, keine Sandcastle-Integration)</li>
</ul>
<p>So, nachdem ich aus einem Meeting-Bericht schon fast ein TFS-Artikel produziert habe, befürchte ich, dass meine Leserschaft ein wenig zu Müde ist für weitere Themen wie Bewertung von TFS aus Unternehmenssicht, Einführung des TFS in die Entwicklung, Vergleich von TFS zu anderen Systemen und noch einiges mehr. Falls Interesse besteht, etwas mehr in das Thema Team Foundation Server einzusteigen – einfach kommentieren oder bei mir melden.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/tfs-team-foundation-server-bericht-zum-vortrag-bei-net-group-munchen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
