<?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>blog.codecentric.de</title>
	<atom:link href="http://blog.codecentric.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.codecentric.de</link>
	<description>Ein Blog von und über die codecentric GmbH</description>
	<lastBuildDate>Sat, 13 Mar 2010 16:50:40 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Erfahrungsbericht Java Specialist Master Course</title>
		<link>http://blog.codecentric.de/2010/03/erfahrungsbericht-java-specialist-master-course/</link>
		<comments>http://blog.codecentric.de/2010/03/erfahrungsbericht-java-specialist-master-course/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 09:11:19 +0000</pubDate>
		<dc:creator>Fabian Lange</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[codecentric]]></category>
		<category><![CDATA[meet the experts]]></category>

		<guid isPermaLink="false">http://blog.codecentric.de/?p=3169</guid>
		<description><![CDATA[Letzte Woche durfte ich zur Weiterentwicklung meiner Java Fertigkeiten den Java Specialists Master course von Heinz Kabutz besuchen. Java Champion Heinz, ist ein hervorragender Trainer, der es geschafft hat Anekdoten, harte Fakten und tiefe Javakenntnisse zusammen mit herausfordernden Übungen zu einem großartigem Kurs zusammenzustellen. Der Umfang betraf das gesamte Spektrum von Java, jedoch lag der [...]]]></description>
			<content:encoded><![CDATA[<p>Letzte Woche durfte ich zur Weiterentwicklung meiner Java Fertigkeiten den <a href="http://www.javaspecialists.eu/courses/master.jsp">Java Specialists Master course</a> von Heinz Kabutz besuchen. <a href="https://java-champions.dev.java.net/content/corechampions.html">Java Champion Heinz</a>, ist ein hervorragender Trainer, der es geschafft hat Anekdoten, harte Fakten und tiefe Javakenntnisse zusammen mit herausfordernden Übungen zu einem großartigem Kurs zusammenzustellen. Der Umfang betraf das gesamte Spektrum von Java, jedoch lag der Fokus auf den kleinen Gemeinheiten die man entweder nicht kennt oder nicht nutzt. Auszüge des Kursmaterials veröffentlichte er bereits in <a href="http://www.javaspecialists.eu/archive/archive.jsp">seinem Newsletter</a>, welcher eine große Leserschaft weltweit besitzt.</p>
<p>Im folgenden möchte ich meine Eindrücke der 4 Tage schildern&#8230; <span id="more-3169"></span><br />
<strong>Tag 1</strong></p>
<p>Direkt mit einem komplexen Thema ging es Dienstag früh los: Thread, wie funktionieren sie und was gibt es zu beachten. Wir haben eine ThreadGroup erstellt und zu einem eigenem Thread pool ausgebaut. <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ThreadGroup.html">ThreadGroup</a> ist nun leider nicht die allerschönste Klasse. Heinz verglich sie mit einer Art Kinderzeichnung aus den frühen Java Jahren. besonders einfach zu benutzen fand ich die <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/locks/package-summary.html">java.util.concurrent Locks</a>, welchen ich bisher weniger Beachtung schenkte. Endlich sind die Zeiten von <em>synchronized()</em> vorbei. Noch vor dem Mittagessen erläuterte Heinz uns seine Gesetze über Nebenläufigkeit, welche er bereits in verkürzter Form auf unserem <a href="http://www.meettheexperts.de/static/pdf/praesentationen/2009-06-26-performance/meet-the-experts-the-secrets-of-concurrency.pdf">meet the experts &#8211; performance event</a> präsentierte. Dabei stolperten wir über folgenden code:</p>

<div class="wp_syntax"><div class="code"><pre class="java5" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #006600; font-weight: bold;">boolean</span> running = <span style="color: #006600; font-weight: bold;">true</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #006600; font-weight: bold;">void</span> dojob<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000000;  font-weight: bold;">while</span><span style="color: #009900;">&#40;</span>running<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// do something useful</span>
 <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #006600; font-weight: bold;">void</span> shutdown<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  running = <span style="color: #006600; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Führt man diesen auf einer Server VM aus (java -server), so kann es passieren daß der Code sich nicht mehr beendet, da die HotSpot engine den Code optimiert, da running scheinbar immer true ist. Um dies zu vermeiden muss es <em>volatile</em> gemacht werden. Da ich nach Debugging fragte versuchten wir in der Schleife anzuhalten und sieh da, der Debugger zeigte und: <em>running = false</em>. Dies hielt aber den laufenden Code nicht davon ab weiterzulaufen, da der Debugger zwar den korrekten Wert sieht, der laufende Code aber nicht. Doch es wird noch interessanter:</p>

<div class="wp_syntax"><div class="code"><pre class="java5" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #006600; font-weight: bold;">void</span> doJob<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #006600; font-weight: bold;">boolean</span> myRunning = running<span style="color: #339933;">;</span>
  <span style="color: #000000;  font-weight: bold;">while</span><span style="color: #009900;">&#40;</span>running<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// do something useful</span>
    myRunning = running<span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Nun zeigt uns der Debugger dies:</p>

<div class="wp_syntax"><div class="code"><pre class="java5" style="font-family:monospace;">running = <span style="color: #006600; font-weight: bold;">false</span><span style="color: #339933;">;</span> myrunning = <span style="color: #006600; font-weight: bold;">true</span><span style="color: #339933;">;</span></pre></div></div>

<p>trotzdem läuft der code weiter. Jedoch nur so lange bis wir mittels F7 die Zeile ausführen ließen. Diese Art von Problemen kann ein Alptraum werden, deshalb ist es wichtig zu wissen was man korrekterweise tun muss.</p>
<p>Auch wissenswert war es zu erfahren, daß</p>

<div class="wp_syntax"><div class="code"><pre class="java5" style="font-family:monospace;"><span style="color: #000000;  font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #003399; font-weight: bold;">Thread</span>.<span style="color: #006633;">interrupted</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399; font-weight: bold;">InterruptedException</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>der erste Code in jeder Methode sein sollte welche eine <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/InterruptedException.html">InterruptedException</a> deklariert.</p>
<p>Wir haben außerdem den <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/CompletionService.html">CompletionService</a> kennengelernt, welches nach einem interessanten Interface für die Bearbeitung von asynchronen Aufgaben aussieht. Wer braucht da noch closures? <img src='http://blog.codecentric.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><strong>Tag 2</strong></p>
<p>Wir begannen Tag 2 mit <a href="http://java.sun.com/j2se/1.4.2/docs/guide/nio/">Java new (yet another new?) IO</a>, welches recht viele Features mitbringt, aber irgendwie doch selten verwendet wird. Möglicherweise liegt das an der teilweise sperrigen Benutzung der Interfaces. Man sollte doch vielleicht einfache Beispiele probieren bevor man sich an einem asynchronen nichtblockierendem Server versucht (was man aber durchaus nach Besuch des Kurses kann <img src='http://blog.codecentric.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ).</p>

<div class="wp_syntax"><div class="code"><pre class="java5" style="font-family:monospace;"><span style="color: #003399; font-weight: bold;">FileChannel</span> fc = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399; font-weight: bold;">RandomAccessFile</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;test.txt&quot;</span>, <span style="color: #0000ff;">&quot;r&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getChannel</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003399; font-weight: bold;">MappedByteBuffer</span> buffer = fc.<span style="color: #006633;">map</span><span style="color: #009900;">&#40;</span><span style="color: #003399; font-weight: bold;">FileChannel.<span style="color: #006633;">MapMode</span></span>.<span style="color: #006633;">READ_ONLY</span>, <span style="color: #cc66cc;">0</span>, fc.<span style="color: #006633;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Die zweite Tageshälfte verbrachten wir in den Untiefen der Java Speicherverwaltung. Natürlich ist die Praxistauglichkeit des Themas reduziert, doch das Verständnis ist essentiell um Probleme zu verstehen und zu lösen. Wir sahen uns caching und pooling an und betrachteten warum dies Objekte leaken oder herumlungern lassen kann. Das Thema erinnerte mich an einen alten <a href="http://blog.codecentric.de/2009/08/jsp-tag-pooling-memory-leaks/">post über tag pooling</a> in Servlet Containern. Ich habe nie wirklich verstanden warum Tags gepoolt werden müssen, und wieso Tags keine erkennbaren Lifecyclemethoden besitzen anhand derer man das Pooling erahnen könnte. Als Tools setzten wir <a href="https://visualvm.dev.java.net/">jVisualVm</a> und <a href="http://www.javaperformancetuning.com/tools/hpjmeter/index.shtml">HPjMeter</a> ein, um den Garbage Collector bei seiner Arbeit zu beobachten.</p>
<p><strong>Tag 3</strong></p>
<p>Ich lernte einige interessante Verhaltensweisen von bislang von mir nicht benutzten Collection Klassen, wie zum Beispiel <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/PriorityQueue.html">PriorityQueue</a> kennen, sowie einige Besonderheiten von Classloading. Heinz schaffte es <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/Proxy.html">java.lang.reflect.Proxies</a> hervorragend zu erklären, so daß die Anwendung in der Übung leicht viel. Genaugenomen ist die beste Erklärung Teil der JavaDoc, doch man muss erst verstehen wie man diese zu lesen hat:</p>

<div class="wp_syntax"><div class="code"><pre class="java5" style="font-family:monospace;">Foo f = <span style="color: #009900;">&#40;</span>Foo<span style="color: #009900;">&#41;</span> <span style="color: #003399; font-weight: bold;">Proxy</span>.<span style="color: #006633;">newProxyInstance</span><span style="color: #009900;">&#40;</span>
		Foo.<span style="color: #000000; font-weight: bold;">class</span>.<span style="color: #006633;">getClassLoader</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399; font-weight: bold;">Class</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#123;</span> Foo.<span style="color: #000000; font-weight: bold;">class</span> <span style="color: #009900;">&#125;</span>,
		<span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399; font-weight: bold;">InvocationHandler</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399; font-weight: bold;">Object</span> invoke<span style="color: #009900;">&#40;</span><span style="color: #003399; font-weight: bold;">Object</span> foo, <span style="color: #003399; font-weight: bold;">Method</span> method, <span style="color: #003399; font-weight: bold;">Object</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> arguments<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399; font-weight: bold;">Throwable</span> <span style="color: #009900;">&#123;</span>
		    <span style="color: #000000; font-weight: bold;">return</span> method.<span style="color: #006633;">invoke</span><span style="color: #009900;">&#40;</span>foo, arguments<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		  <span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Nachmittags diskutierten wir über <em>Exceptions</em>, und ich hatte Gelegenheit mir eine begründete Meinung über die Verwendung von checked vs. unchecked Exceptions zu bilden. Ich werde in Zukunft unchecked Exceptions für Entwickler- bzw. Programmierfehler verwenden. Diese zu fangen ist nicht nötig, die Anwendung mag sogar Abstürzen, aber der Fehler muss behoben werden. Jedoch alle umgebungs-, oder installationsrelevanten Besonderheiten werde ich mit checked Exceptions behandeln. Idealerweise bieten diese brauchbare Informationen damit der fangende Code eine brauchbare Fehlerbehandlung durchführen kann. Eine weitere wichtige Erkenntnis: Einfach Exceptions weiter werfen! Ich weiß gar nicht genau warum ich das bisher kaum tat. Wahrscheinlich wollte ich meine Methodensignaturen einfach sauber halten. Dabei ist weiter werfen oft die beste Alternative. Insbesondere die InterruptedException, welche sowieso nur sinnvoll im Threadcode behandelt werden kann (mit Aufruf von interrupted() und dem Verlassen der Schleife).</p>
<p><strong>Tag 4</strong></p>
<p>Der letzte Kurstag begann mit einer echt harten Nuss. Es galt die Performance einer Methode drastisch zu verbessern. Doch Heinz ließ uns nicht an die Optimierung, bevor wir nicht alle Zahlen in verschiedenen Szenarien hatten. Zuvor galt es sogar noch zu beweisen, daß unser Testcode keinerlei Auswirkungen auf die Performance des zu testenden Codes hatte. Ich fand dies besonders lehrreich, da ich durchaus manchmal vergessen habe das Problem zu beweisen, bevor ich mit der Lösung begann. Als Randnotiz betrachteten wir die verschiedenen Modi der JVM und fanden heraus wie langsam java -Xint ist.  Nachdem ich endlich den Code auf 10% seiner Laufzeit kürzen durfte gingen wir über zu den letzten Themen des Kurses. So behandelten wir kurz Datum und Zeit, wobei ich doch lieber <a href="http://joda-time.sourceforge.net/">jodatime</a> oder <a href="http://site.icu-project.org/">icu4j</a> nutze und versuche java.util.Date zu vermeiden. Zuletzt sahen wir uns noch Logging und einige Kniffe zur Optimierung von Loggingausgaben an. Die wichtigste Botschaft bei Logging ist Code Wächter zu verwenden. Zwar war mir die Technik bekannt, der Name dafür jedoch neu:</p>

<div class="wp_syntax"><div class="code"><pre class="java5" style="font-family:monospace;"><span style="color: #000000;  font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>log.<span style="color: #006633;">isDebugEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  log.<span style="color: #006633;">debug</span><span style="color: #009900;">&#40;</span>complexObject.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> + expensive.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><strong>Wrap-Up</strong></p>
<p>Ich kann den Kurs bedenkenlos weiterempfehlen. 4 randvoll mit Informationen und Übungen gefüllte Tage sind derartig gestaltet, daß sie auch für erfahrene Entwickler herausfordernd sind. Als Teilnehmer sollte man unbedingt einige Zeit mit Java gearbeitet haben um die Nuancen und Besonderheiten zu erkennen. Anfänger könnten zwar folgen, verpassen aber interessante Aspekte, da das Tempo recht hoch ist. Ferner empfehle ich den Kurs in Deutsch zu besuchen, da Heinz unterhaltsamen Akzent hat <img src='http://blog.codecentric.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.codecentric.de/2010/03/erfahrungsbericht-java-specialist-master-course/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Der Agile Entwickler</title>
		<link>http://blog.codecentric.de/2010/03/der-agile-entwickler/</link>
		<comments>http://blog.codecentric.de/2010/03/der-agile-entwickler/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 22:36:03 +0000</pubDate>
		<dc:creator>Mirko Novakovic</dc:creator>
				<category><![CDATA[Agilität]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[SCRUM]]></category>

		<guid isPermaLink="false">http://blog.codecentric.de/?p=3219</guid>
		<description><![CDATA[Software Projekte, die mit agilen Methoden wie Scrum oder eXtreme Programming entwickelt werden, stellen hohe Ansprüche an die Entwickler im Team und erfordern neue Fähigkeiten und Denkweisen.
Andrew Hunt und David Thomas haben 2001 mit dem „The Pragmatic Programmer“ bereits ein Standard-Werk über den modernen Anwendungsentwickler geschrieben. Der Fokus liegt dabei aber auf Praktiken, Werkzeugen und [...]]]></description>
			<content:encoded><![CDATA[<p>Software Projekte, die mit agilen Methoden wie <a href="http://www.scrum.org/scrumguides/" target="_blank">Scrum</a> oder <a href="http://c2.com/cgi/wiki?ExtremeProgramming" target="_blank">eXtreme Programming</a> entwickelt werden, stellen hohe Ansprüche an die Entwickler im Team und erfordern neue Fähigkeiten und Denkweisen.</p>
<p>Andrew Hunt und David Thomas haben 2001 mit dem „<a href="http://www.pragprog.com/the-pragmatic-programmer" target="_blank">The Pragmatic Programmer</a>“ bereits ein Standard-Werk über den modernen Anwendungsentwickler geschrieben. Der Fokus liegt dabei aber auf Praktiken, Werkzeugen und Design-Paradigmen die dem Programmierer helfen besseren Code zu entwickeln.</p>
<p><span id="more-3219"></span></p>
<p>Für agile Projekte reicht es aber aus meiner Sicht nicht aus nur ein „Pragmatic Programmer“ zu sein und in diesem Artikel möchte ich daher den Fokus auf den Entwickler in einem Scrum Team setzen. Ich sage hier explizit nicht „Programmierer“ sondern „Entwickler“, weil der Begriff Programmierer aus meiner Sicht zu sehr auf das codieren beschränkt ist und weniger die Tätigkeiten beschreibt, die zusätzlich notwendig sind, um guten Code zu erzeugen. (beispielsweise Design und Test)</p>
<p>Die Wurzeln von Scrum liegen laut <a href="http://www.controlchaos.com/" target="_blank">Ken Schwaber</a> (einem der Erfinder von Scrum) vor allem in einem Artikel der im Januar 1986 im Harvard Business Journal erschienen ist: „<a href="http://www.iei.liu.se/fek/frist/723g18/articles_and_papers/1.107457/TakeuchiNonaka1986HBR.pdf" target="_blank">The New New Product Development Game</a>“. Der Artikel beschäftigt sich damit, welche Kriterien eine erfolgreiche Produktentwicklung ausmachen und leitet daraus eine Kernthese ab:</p>
<blockquote><p>„Stop playing the relay race – play rugby“.</p></blockquote>
<p>Was frei Übersetzt bedeutet, dass man nicht mehr sequenziell („Wasserfall“), sondern ganzheitlich Produkte entwickeln soll.</p>
<p>Scrum hat die grundsätzliche Characteristiken für erfolgreiche Produkt Entwicklungen aufgegriffen und integriert. Beispielsweise <em>Selbstorganisation der Teams</em>, <em>überlappende Entwicklungsphasen</em> und <em>unterschwellige Kontrolle</em>. Diese Ansätze wurden um Ideen aus der iterativen, inkrementellen Entwicklung und der „<a href="http://de.wikipedia.org/wiki/Lean_Development" target="_blank">Lean</a>“ Welt erweitert. Die <a title="Scrum Alliance" href="http://www.scrumalliance.org/" target="_blank">Scrum Alliance</a> bietet heute Schulungen und Zertifizierungen zum <a href="http://www.scrumalliance.org/pages/certified_scrummaster_csm" target="_blank">Scrum Master</a> und <a href="http://www.scrumalliance.org/pages/certified_scrum_product_owner" target="_blank">Product Owner</a> an – nur was ist mit dem Entwickler? Liegt der Erfolg eines Projekts nicht vor allem im Team? Was bedeutet eigentlich Selbstorganisation, lauffähige Software alle 2-4 Wochen und überlappende Entwicklungsphasen für den Entwickler in einem Scrum Team?</p>
<p>Grundsätzlich glaube ich, dass die Arbeitsweise des Entwicklers in agilen Projekten im Vergleich zum Wasserfallmodell fundamental anders ist und deshalb auch andere, neue Fähigkeiten verlangt werden.</p>
<p>Beginnen wir mit einem der wichtigsten Dinge innerhalb agiler Projekte: Die Selbstorganisation des Teams – Selbstorganisation bedeutet, dass man als Entwickler nicht mehr von außen gesteuert wird, sondern sich mit den Teammitgliedern über die Zusammenarbeit abstimmt. Es bedeutet aber auch, dass man viel mehr Verantwortung übernimmt, mehr miteinander reden und diskutieren muss, Konflikte löst, sich selber organisiert, Aufwände schätzt und Commitments einhält. Dinge die in klassischen Projekten andere Rollen ausgeführt haben und aus meiner Erfahrung nicht gerade die Kernkompetenzen eines Programmierers sind. Es ist aber für den Erfolg von agilen Projekten fundamental erforderlich, dass sich Teams selber organisieren können &#8211; weshalb man auch die Entwickler mit entsprechenden Skills ausstatten sollte. Von vielen Organisationen weiß ich, dass Sozialkompetenztrainings vor allem den Führungskräften vorbehalten sind. Durch die Umkehr von „Command and Control“ müssen aus meiner Sicht vor allem auch die Teammitglieder, also auch die Entwickler geschult werden, im Team zu arbeiten. Dazu gehören beispielsweise Konfliktfähigkeit, Kommunikationsfähigkeit, Kompromissfähigkeit, Kritikfähigkeit, Toleranz und Verantwortung. Teammitglieder müssen die Stärken und Schwächen der Kollegen besser einschätzen zu können, was beispielsweise durch Methoden wie das <a href="http://www.tms.com.au/" target="_blank">Team Management System</a> oder <a href="http://de.wikipedia.org/wiki/DISG" target="_blank">DISG</a> erreicht werden kann. Wir haben nach der Einführung von Scrum bei codecentric festgestellt, dass wir neben den technischen und methodischen Skills auch die Sozialkompetenz schulen müssen, wenn wir erfolgreiche, agile Projekte durchführen wollen. Mit Hilfe externer Trainer haben wir ein spezielles Programm für uns ausgearbeitet, um die beschriebenen Fähigkeiten jedes Mitarbeiters nachhaltig zu verbessern.</p>
<p>Neben der Selbstorganisation erfordert aber auch die Überlappung der Entwicklungsphasen ganz neue Denkweisen bei uns Entwicklern. In den klassischen, sequentiellen Vorgehensmodellen wurden die Anforderungen im Detail ausgearbeitet, i.d.R. in ausführlichen Anforderungsdokumenten und detaillierten UML Diagrammen. Als Entwickler hat man diese Spezifikationen dann in lauffähigen Code umgesetzt und „Entwickler-getestet“ – für die eigentliche Qualitätssicherung waren andere Teams verantwortlich. Bei agilen Projekten verschwimmen die Grenzen zwischen Anforderungsmanagement, Analysten, Testern und Programmierern und als Entwickler muss man sich auch mit den „ungeliebten“ Randgebieten rumschlagen. D.h. aus meiner Sicht beispielsweise, dass man nicht nur mit Unit-Test auskommt, sondern in die Testgetriebene Entwicklung auch eher fachliche Integrations- und Akzeptanztests integrieren muss – i.d.R. werden diese dann gemeinsam mit Domänen Experten und erfahrenen Testern erstellt. Gerade wenn diese Tests für spätere Regressions-Phasen automatisiert werden (aus meiner Sicht ein Muss bei iterativ, inkrementeller Entwicklung), muss der Entwickler stärker involviert werden, um die speziellen Herausforderungen bei der Automatisierung, wie beispielsweise Testdaten-Setup, zu entwickeln. Geht man sogar soweit, dass man nicht nur bei Unit-Tests <a href="http://en.wikipedia.org/wiki/Test-driven_development" target="_blank">Test-Driven entwickelt</a>, sondern auch bei den Integrations- und Akzeptanztest, sind entsprechendes Wissen um Vorgehen und Werkzeugen essentiell. Seien wir mal ehrlich: Man ist doch schon froh, wenn man Entwickler dazu bekommt TDD für Unit Tests anzuwenden oder überhaupt gute und ausreichende Unit Tests zu schreiben &#8211; das müssen wir durch entsprechendes Training/Coaching ändern.</p>
<p>Um diese Akzeptanztests zu erstellen und die wenig detaillierten <a href="http://www.agilemodeling.com/artifacts/userStory.htm" target="_blank">User Stories </a>umsetzen zu können, muss sich ein Entwickler viel intensiver mit der Fachlogik und den entsprechenden Personen im Team auseinandersetzen. Hierfür sind Kommunikationsfähigkeiten, aber auch entsprechende Praktiken, wie beispielsweise <a href="http://domaindrivendesign.org/" target="_blank">Domain Driven Design</a> notwendig. In vielen Projekten sehe ich leider, dass sich Entwickler weniger mit der Domäne und mehr mit Frameworks wie <a href="http://www.springsource.org/" target="_blank">Spring</a> oder <a href="https://www.hibernate.org/" target="_blank">Hibernate</a> beschäftigen; Generatoren, die aus Datenbankmodellen ein Objektmodell generieren sind eine nette technische Spielerei, hilfreich bei der Strukturierung und Kommunikation der Domäne sind sie allerdings  nicht. Das objekt-relationale Mapping wird dann zu einer relationalen Objektgenerierung und oftmals zu einer Wartbarkeits-Falle. Auch das ist aus meiner Sicht auf die zu starke Technologiefokussierung zurückzuführen, die man dann auch in der Struktur der Komponenten wiederfindet, die eher auf Basis von <a href="http://maven.apache.org/" target="_blank">Maven</a>-Vorgaben oder Technologie-Layern geschnitten werden, als auf Basis fachlicher Zusammenhänge und Service-Grenzen. Hier ist es meiner Meinung nach unbedingt notwendig Entwickler dahingehend zu schulen und zu coachen, dass Sie die Domaine als Kommunikationsinstrument mit den Fachabteilungen nutzen – so entstehen ganz „natürlich“ fachlich sinnvolle Strukturen und Domainen.</p>
<p>Um alle 2-4 Wochen fertige Software auszuliefern, darf man als Entwickler aber auch nicht die Technologien, Werkzeuge und agilen Entwicklungspraktiken vernachlässigen. Continuous Integration (z.B. <a href="http://hudson-ci.org/" target="_blank">Hudson</a>, <a href="http://cruisecontrol.sourceforge.net/" target="_blank">CruiseControl</a>), automatisierte Build-Werkzeuge (z.B. <a href="http://maven.apache.org/" target="_blank">Maven</a>, <a href="http://ant.apache.org/" target="_blank">Ant</a>), Code Qualität Werkzeuge (z.B. <a href="http://findbugs.sourceforge.net/" target="_blank">Findbugs</a>, <a href="http://pmd.sourceforge.net/" target="_blank">PMD</a>, <a href="http://checkstyle.sourceforge.net/" target="_blank">Checkstyle</a>), automatisierte Testwerkzeuge (z.B. <a href="http://www.junit.org/" target="_blank">JUnit</a>, <a href="http://www.robotframework.org" target="_blank">Robotframework</a>, <a href="http://easymock.org/" target="_blank">easyMock</a>, <a href="http://www.dbunit.org/" target="_blank">DBUnit</a>, <a href="http://jakarta.apache.org/jmeter/" target="_blank">JMeter</a>), Codeverwaltung (z.B. <a href="http://git-scm.com/" target="_blank">git</a>, <a href="http://subversion.tigris.org/" target="_blank">Subversion</a>), Bugtracker (z.B. <a href="http://www.atlassian.com/software/jira/" target="_blank">Jira</a>, <a href="http://trac.edgewall.org/" target="_blank">Trac</a>), Dokumentationswerkzeuge (Wiki, UML-Toos, Javadoc, etc.) sind dabei nur ein Auszug aus dem Portfolio eines modernen, agilen Entwicklers. Um dieses Portfolio optimal nutzen zu können und in eine „Definition of Done“ zu gießen, müssen die Teammitglieder auch im Umgang mit diesen Werkzeugen und Praktiken geschult werden. Dave Thomas, Co-Autor des „Pragmatischen Programmierers“, spricht sogar von „<a href="http://codekata.pragprog.com/" target="_blank">Code Katas</a>“: Er zieht damit eine Parallele zum Karate, wo Katas bestimmte Trainingseinheiten sind, die immer und immer wieder wiederholt werden, um sie zu perfektionieren. Als Organisation müssen wir den Entwicklern also nicht nur entsprechendes Basis-Training geben, sondern auch Freiräume, um zu üben.</p>
<p>Neben ScrumMaster und Product Ownern müssen natürlich auch die Teammitglieder in Scrum geschult werden, denn die meisten Dinge in Scrum betreffen das Team und dieses muss über das Verständnis den Nutzen erkennen können. Beispielsweise, dass das Daily Scrum nicht für den Scrum Master gehalten wird (dieser muss ja nicht einmal mit anwesend sein, sondern nur dafür sorgen, dass es stattfindet), sondern um sich im Team auf den neusten Stand zu bringen und ggf. Probleme transparent zu machen. (Oft sieht man, dass der Scrum Master reihum die drei Fragen stellt und sich Antworten abholt&#8230;ein großes Missverständnis des Daily Scrums!) Oder dass das Burndown-Diagramm nicht zur Kontrolle des Teams durch Scrum Master oder Product Owner (oder sogar den Chef) gedacht ist, sondern als Hilfsmittel für das Team, die eigenen Commitments besser einhalten und überwachen zu können.</p>
<p>Am Ende bleibt noch festzustellen, dass insbesondere die Organisationen umdenken müssen. Das Spektrum des Agilen Entwicklers ist deutlich größer als die Summe der Technologien und erfordert viel Training und Übung – zudem einen hohen Erfahrungsaustausch im Team und innerhalb der Organisation, was schon bei „The New New Product Development Game“ festgestellt wurde: „Multilearning“ und „Organizational Transfer of Learning“ sind zwei der sechs wichtigen Erfolgsfaktoren in der Produktenwicklung! Agile Organisationen müssen also lernen, dass Training kein „Incentive“ ist, sondern ein absolutes <strong>Muss</strong> für alle Team Mitglieder eines agilen Projekts. Dazu gehören neben den Technologien und Werkzeugen auch Schulungen und Coachings um die Sozialkompetenz im Team nachhaltig zu stärken und agile Methoden, Praktiken und Paradigmen zu verstehen. Damit sich das aufgebaute Wissen der Entwickler auch außerhalb des Teams positiv wirken kann, müssen zudem Foren geschaffen werden, so dass sich die Entwickler im Unternehmen regelmäßig treffen und austauschen können. Diese Investition in die eigenen Mitarbeiter wird sich sehr schnell auszahlen!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.codecentric.de/2010/03/der-agile-entwickler/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Meet The Experts 2010</title>
		<link>http://blog.codecentric.de/2010/03/meet-the-experts-2010/</link>
		<comments>http://blog.codecentric.de/2010/03/meet-the-experts-2010/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 14:47:47 +0000</pubDate>
		<dc:creator>Mirko Novakovic</dc:creator>
				<category><![CDATA[Agilität]]></category>
		<category><![CDATA[Konferenzen]]></category>
		<category><![CDATA[meet the experts]]></category>
		<category><![CDATA[SCRUM]]></category>

		<guid isPermaLink="false">http://blog.codecentric.de/?p=3240</guid>
		<description><![CDATA[Mit der Meet The Experts Serie haben wir im letzten Jahr eine Workshop Serie zu den Themen Java Performance, Agilität und Architektur mit sehr großem Erfolg gestartet.
Die Planung für dieses Jahr sind schon fast abgeschlossen und ich kann versprechen, dass wir wieder absolute Top Speaker verpflichten konnten &#8211; beispielsweise Dana Bredemeyer von Bredemeyer Consulting zum [...]]]></description>
			<content:encoded><![CDATA[<p>Mit der <a href="http://www.meettheexperts.de" target="_blank">Meet The Experts</a> Serie haben wir im letzten Jahr eine Workshop Serie zu den Themen <a href="http://blog.codecentric.de/2009/07/ruckblick-meet-the-experts-performance-2009/" target="_blank">Java Performance</a>, <a href="http://blog.codecentric.de/2009/07/ausblick-meet-the-experts-agilitat-am-4-september/" target="_blank">Agilität</a> und <a href="http://blog.codecentric.de/2009/09/meet-the-experts-architektur-27-november-2009/" target="_blank">Architektur</a> mit sehr großem Erfolg gestartet.</p>
<p>Die Planung für dieses Jahr sind schon fast abgeschlossen und ich kann versprechen, dass wir wieder absolute Top Speaker verpflichten konnten &#8211; beispielsweise <a href="http://www.bredemeyer.com/" target="_blank">Dana Bredemeyer</a> von Bredemeyer Consulting zum Thema Architekur und Elisabeth Hendrickson von <a href="http://www.qualitytree.com" target="_blank">Quality Tree</a> zum Thema Agiles Testen. Details werden in diesem Monat bekannt gegeben und dann kann der &#8220;run&#8221; auf die 100 Plätze je Workshop beginnen.</p>
<p><span id="more-3240"></span></p>
<p>Wer letztes Jahr nicht dabei war, kann sich die Speaker und Ihre Vorträge auch in der Meet The Experts <a href="http://www.meettheexperts.de/jsp/praesentationen/praesentationen.jsp" target="_blank">Mediathek</a> runterladen. Beim Workshop zum Thema Agilität haben wir die Vorträge mit der Videokamera mitgeschnitten und mit Adobe Presenter so bearbeitet, dass Video und Präsentation synchronisiert sind &#8211; so kann man sich einen guten Eindruck von der Qualität der Vorträge und Speaker machen:</p>
<ul>
<li>Hennig Wolf mit dem Thema &#8220;<a href="http://www.meettheexperts.de/jsp/praesentationen/2009-09-04-agilitaet/agile-methoden-im-ueberblick.jsp" target="_blank">Agile Methoden im Überlick</a>&#8220;</li>
<li>Boris Gloger mit dem Thema &#8220;<a href="http://www.meettheexperts.de/jsp/praesentationen/2009-09-04-agilitaet/going-large-staying-small.jsp" target="_blank">going LARGE by staying small</a>&#8220;</li>
<li>Simon Roberts mit dem Thema &#8220;<a href="http://www.meettheexperts.de/jsp/praesentationen/2009-09-04-agilitaet/making-scrum-stick.jsp" target="_blank">Making Scrum Stick</a>&#8220;</li>
<li>Andreas Ebbert-Karroum mit dem Thema &#8220;<a href="http://www.meettheexperts.de/jsp/praesentationen/2009-09-04-agilitaet/scrum-best-practices.jsp" target="_blank">Scrum Best Practices</a>&#8220;</li>
</ul>
<p>Über Feedback zu den Videos würde ich mich sehr freuen &#8211; es steckt viel Arbeit darin und mich würde interessieren, ob die Aufbereitung mit Adobe Presenter einen Mehrwert liefert. Wir überlegen in Zukunft alle Präsentationen in der Form zu veröffentichen.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.codecentric.de/2010/03/meet-the-experts-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Robot Framework Fachtests in Eclipse entwickeln und mit Maven ausführen</title>
		<link>http://blog.codecentric.de/2010/03/robot-framework-fachtests-in-eclipse-entwickeln-und-mit-maven-ausfuhren/</link>
		<comments>http://blog.codecentric.de/2010/03/robot-framework-fachtests-in-eclipse-entwickeln-und-mit-maven-ausfuhren/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 12:25:14 +0000</pubDate>
		<dc:creator>Andreas Ebbert-Karroum</dc:creator>
				<category><![CDATA[Agiles Testen]]></category>
		<category><![CDATA[ATDD]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Robot Framework]]></category>

		<guid isPermaLink="false">http://blog.codecentric.de/?p=3175</guid>
		<description><![CDATA[Das Robot Framework ist sehr flexibel einsetzbar und hat uns noch nie vor unlösbare Probleme gestellt. An manchen Enden jedoch muss noch etwas nachgebessert werden, um die Entwicklung und Wartung der automatisierten Tests effizienter gestalten zu können. Einer dieser Bereiche ist die Einbettung in die gewohnte Entwicklungsumgebung. Es gibt zwar die Robot IDE, diese deckt [...]]]></description>
			<content:encoded><![CDATA[<p>Das <a href="http://code.google.com/p/robotframework/">Robot Framework</a> ist sehr flexibel einsetzbar und hat uns noch nie vor unlösbare Probleme gestellt. An manchen Enden jedoch muss noch etwas nachgebessert werden, um die Entwicklung und Wartung der automatisierten Tests effizienter gestalten zu können. Einer dieser Bereiche ist die Einbettung in die gewohnte Entwicklungsumgebung. Es gibt zwar die <a href="http://code.google.com/p/robotframework-ride">Robot IDE</a>, diese deckt aber nur einen Bruchteil des Benötigten ab. Hier wird gezeigt, wie man das Robot Framework und selbstentwickelte Java Keywords bequem mit Eclipse und Maven nutzen kann.<br />
<span id="more-3175"></span><br />
Robot wird über ein Startskript gestartet, je nach Umgebung jybot.sh oder jybot.bat. (Wenn man auf Java Keywords verzichtet, reicht auch ein pybot). Über eine <a href="http://robotframework.googlecode.com/svn/tags/robotframework-2.1.2/doc/userguide/RobotFrameworkUserGuide.html#all-command-line-options">Vielzahl an Parametern</a> wird gesteuert, welche Tests ausgeführt werden sollen. Vorher sollten auch noch die eigenen Keywords kompiliert und in den Classpath eingebunden werden. Da die Entwicklung häufig in Windows stattfindet, die CI-Umgebung aber unter Linux läuft, sind somit zwei nicht-triviale Skripte zu pflegen, um die Robot Tests aufzurufen. Das geht auch einfacher:</p>
<h2>1. Maven</h2>
<p>Statt das Startskript manuell zu pflegen, kann jybot direkt aus Maven gestartet werden. Die Beispiel pom.xml weiter unten zeigt die Details:</p>
<ul>
<li>Mit dem <a href="http://maven.apache.org/plugins/maven-dependency-plugin/">maven-dependency-plugin</a> werden alle libraries in ein Verzeichnis kopiert, welches nachher in den Classpath eingebunden wird. So können auch Bibliotheken von Drittanbietern bequem genutzt werden.</li>
<li>Das <a href="exec-maven-plugin">exec-maven-plugin</a> ruft in dem Phase integration-test &#8216;jybot&#8217; auf. Dies erfordert natürlich, dass jybot auch im PATH der jeweiligen Umgebung eingebunden ist. Auf ein explizites .sh oder .bat kann hier zum Glück verzichtet werden.</li>
<li>Der Classpath wird auf<br />
<blockquote><p>${project.build.directory}${file.separator}classes${path.separator}<br />
${project.build.directory}${file.separator}dependency${file.separator}*</p></blockquote>
<p>gesetzt. Das heißt er beinhaltet</p>
<ol>
<li>Die kompilierten Klassen der eigenen Java Keywords</li>
<li>Alle jar-Dateien der in der pom.xml angegebenen dependencies. (Die <a href="http://java.sun.com/javase/6/docs/technotes/tools/windows/classpath.html">Wildcard-Notation</a> funktioniert nur mit Java 6!)</li>
</ol>
</li>
<li>Dann wird das jybot-Skript entsprechend parametrisiert:
<ul>
<li><strong>-C off</strong> stellt die farbige Ausgabe ab</li>
<li><strong>&#8211;variable &#8230;</strong> übergibt einige Variablen. Diese werden im properties-Element der pom.xml auf entwicklerfreundliche Defaultwerte gesetzt. Ist die Umgebungsvariable &#8220;env&#8221; auf &#8220;ci&#8221; gesetzt, d.h. läuft der Maven Build im Kontext des CI-Servers, wird das entsprechende Profil aktiviert, welches die Variablen auf die für das Testsystem relevanten Werte setzt.</li>
<li><strong>&#8211;variable RESOURCES:${project.basedir}/src/main/robot/resource</strong> Dadurch können Resources in den Testfällen einfach mit ${RESOURCES}/keyword-file.txt referenziert werden.</li>
<li><strong>&#8211;exclude inprogress</strong> Dies schließt alle Testfälle aus, die momentan in Bearbeitung sind. Dadurch kann ein Entwickler Zwischenstände commiten, ohne dass der CI-Server diese Tests schon ausführt. Sobald ein Test funktioniert, muss das Tag natürlich entfernt werden.</li>
<li><strong>&#8211;include author-*</strong> Alle Tests sollten meiner Meinung nach mit einem author versehen werden. Dieses include schließt somit alle tests ein, bietet aber dem Entwickler die Möglichkeit die Tests auf wenige einzuschränken, an denen er aktuell arbeitet. Dies ließe sich auch durch Maven Properties und Profiles weiter vereinfachen. Es gibt momentan noch einen Bug in Jython, der jeden Parameter versucht zu passenden Dateinamen zu expandieren (<a href="http://bugs.jython.org/issue1567">Jython Issue 1567</a>) &#8211; es sollte also keine Datei geben, die auf author-* matched.</li>
<li><strong>${ROBOT_TESTS}</strong> Dies gibt letztlich an, welche Tests ausgeführt werden sollen. Normalerweise sind das alle Tests in ${project.basedir}/src/main/robot/suite. Durch die Möglichkeit des Tagging und der Verzeichnishierarchie hat man somit zwei unanbhängige Möglichkeiten die Testfälle zu verwalten und zur Ausführung auszuwählen. Das sollte ausreichend Flexibilität bieten.</li>
</ul>
</li>
</ul>
<p>Langfristig wäre es natürlich schöner, gleich ein Plugin für maven zu schreiben, statt umständlich das Skript zu parametrisieren. Bis es soweit ist, sollte die hier vorgestellte Lösung aber hinreichend sein.</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;">...
&nbsp;
&nbsp;
&nbsp;
        org.apache.maven.plugins
        maven-dependency-plugin
        2.1
&nbsp;
&nbsp;
            get dependencies
pre-integration-test
&nbsp;
              copy-dependencies
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
        org.codehaus.mojo
        exec-maven-plugin
        1.1.1
&nbsp;
&nbsp;
            robot
integration-test
&nbsp;
              exec
&nbsp;
&nbsp;
&nbsp;
&nbsp;
          jybot
&nbsp;
            ${project.build.directory}${file.separator}classes${path.separator}${project.build.directory}${file.separator}dependency${file.separator}*
&nbsp;
&nbsp;
            -C
            off
            --variable
            SYSTEM_UNDER_TEST:${system-under-test}
            --variable
            DB_PORT:${db.port}
            --variable
            RESOURCES:${project.basedir}/src/main/robot/resource
            --outputdir
            ${project.build.directory}/robot
            --output
            ${project.groupId}-${project.artifactId}-${project.version}-output.xml
            --log
            ${project.groupId}-${project.artifactId}-${project.version}-log.html
            --report
            ${project.groupId}-${project.artifactId}-${project.version}-report.html
            --exclude
            inprogress
            --include
            author-*
            ${ROBOT_TESTS}
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
      ci-common
&nbsp;
&nbsp;
          env
          ci
&nbsp;
&nbsp;
&nbsp;
        1234
        testservername
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
    ${project.basedir}/src/main/robot/suite
    4711
    localhost</pre></div></div>

<h2>2. Struktur des Projektes</h2>
<p>Mit der oben angegebenen pom.xml ergibt sich in Eclipse die folgende Projektstruktur &#8211; entweder durch das <a href="http://m2eclipse.sonatype.org/">m2eclipse</a>-Plugin oder durch die Verwendung des eclipse:eclipse Goals des <a href="http://maven.apache.org/plugins/maven-eclipse-plugin/">maven-eclipse-Plugins</a>.</p>
<p><a href="http://blog.codecentric.de/wp-content/uploads/2010/03/RobotMavenDirectories.png" rel="lightbox"><img class="alignnone size-full wp-image-3177" title="RobotMavenDirectories" src="http://blog.codecentric.de/wp-content/uploads/2010/03/RobotMavenDirectories.png" alt="" width="297" height="409" /></a></p>
<h2>3. Robot Starten</h2>
<p>Die Ausführung der automatisierten Fachtests ist dann nur noch eine Frage des Aufrufs des entsprechenden Maven-Lebenszyklus:</p>
<p><a href="http://blog.codecentric.de/wp-content/uploads/2010/03/RunConfiguration.png" rel="lightbox"><img class="alignnone size-medium wp-image-3182" title="RunConfiguration" src="http://blog.codecentric.de/wp-content/uploads/2010/03/RunConfiguration-300x240.png" alt="" width="300" height="240" /></a></p>
<h2>4. Selenium Server</h2>
<p>Werden mit Robot auch Browser-Tests durchgeführt, bietet es sich an, den Seleniumserver als &#8220;External Tool&#8221; in Eclipse zu integrieren:</p>
<p><a href="http://blog.codecentric.de/wp-content/uploads/2010/03/ExternalTool-SeleniumServer-1.png" rel="lightbox"><img class="alignnone size-medium wp-image-3181" title="ExternalTool-SeleniumServer-1" src="http://blog.codecentric.de/wp-content/uploads/2010/03/ExternalTool-SeleniumServer-1-300x240.png" alt="" width="300" height="240" /></a></p>
<p><a href="http://blog.codecentric.de/wp-content/uploads/2010/03/ExternalTool-SeleniumServer-2.png" rel="lightbox"><img class="alignnone size-medium wp-image-3180" title="ExternalTool-SeleniumServer-2" src="http://blog.codecentric.de/wp-content/uploads/2010/03/ExternalTool-SeleniumServer-2-300x240.png" alt="" width="300" height="240" /></a></p>
<h2>5. Kompletter Workflow</h2>
<p>Anhand des konkreten Beispiels soll in einem kleinen Screencast vermittelt werden, wie in Eclipse die Testfälle entwickelt und gestartet werden. Da man die Details bei dem eingebettetem Video schlecht erkennen kann, habe ich auch eine <a href="http://blog.codecentric.de/wp-content/uploads/2010/03/Robot_Framework_in_Eclipse_with_Maven.swf">Fullscreen-Version</a> bereitgestellt.</p>
<p><object id="scPlayer" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="600" height="364&gt;&lt;span  name=" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><embed id="scPlayer" type="application/x-shockwave-flash" width="600" height="364&gt;&lt;span  name="></embed></object><span> </span> <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="600" height="364" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="bgcolor" value="#FFFFFF" /><param name="flashvars" value="thumb=http://content.screencast.com/users/AndreasEK/folders/Jing/media/411f2e49-c6f3-44ba-b8e7-b6beb312312e/FirstFrame.jpg&amp;containerwidth=1680&amp;containerheight=1020&amp;content=http://content.screencast.com/users/AndreasEK/folders/Jing/media/411f2e49-c6f3-44ba-b8e7-b6beb312312e/Robot_Framework_in_Eclipse_with_Maven.swf" /><param name="src" value="http://content.screencast.com/users/AndreasEK/folders/Jing/media/411f2e49-c6f3-44ba-b8e7-b6beb312312e/jingswfplayer.swf" /><param name="allowfullscreen" value="true" /><param name="quality" value="high" /><embed type="application/x-shockwave-flash" width="600" height="364" src="http://content.screencast.com/users/AndreasEK/folders/Jing/media/411f2e49-c6f3-44ba-b8e7-b6beb312312e/jingswfplayer.swf" quality="high" allowfullscreen="true" flashvars="thumb=http://content.screencast.com/users/AndreasEK/folders/Jing/media/411f2e49-c6f3-44ba-b8e7-b6beb312312e/FirstFrame.jpg&amp;containerwidth=1680&amp;containerheight=1020&amp;content=http://content.screencast.com/users/AndreasEK/folders/Jing/media/411f2e49-c6f3-44ba-b8e7-b6beb312312e/Robot_Framework_in_Eclipse_with_Maven.swf" bgcolor="#FFFFFF"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.codecentric.de/2010/03/robot-framework-fachtests-in-eclipse-entwickeln-und-mit-maven-ausfuhren/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>codecentric bei der Deutschen Brettspielemeisterschaft</title>
		<link>http://blog.codecentric.de/2010/02/codecentric-bei-der-deutschen-brettspielemeisterschaft/</link>
		<comments>http://blog.codecentric.de/2010/02/codecentric-bei-der-deutschen-brettspielemeisterschaft/#comments</comments>
		<pubDate>Sat, 27 Feb 2010 21:17:56 +0000</pubDate>
		<dc:creator>Fabian Lange</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://blog.codecentric.de/?p=3119</guid>
		<description><![CDATA[&#8220;Dr. codecentric und seine kranken Pfleger&#8221;, das Brettspielteam von codecentric, Andreas Ebbert-Karroum, Torsten Rodemann, Marc Clemens und Fabian Lange (von links nach rechts), trat am heutigen Samstag hoch motiviert zur regionalen Vorausscheidung der deutschen Brettspielmeisterschaft in Dinslaken an. Nach gutem Erfolg im letzten Jahr waren die Hoffnungen, trotz etwas geringerem Training, groß.
Gespielt wurde von jedem [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.codecentric.de/wp-content/uploads/2010/02/Dr_codecentric_und_seine_kranken_Pfleger.png" rel="lightbox"><img class="alignright size-full wp-image-3147" style="padding: 10px;" title="Dr_codecentric_und_seine_kranken_Pfleger" src="http://blog.codecentric.de/wp-content/uploads/2010/02/Dr_codecentric_und_seine_kranken_Pfleger.png" alt="" width="297" height="183" /></a>&#8220;Dr. codecentric und seine kranken Pfleger&#8221;, das Brettspielteam von codecentric, Andreas Ebbert-Karroum, Torsten Rodemann, Marc Clemens und Fabian Lange (von links nach rechts), trat am heutigen Samstag hoch motiviert zur regionalen Vorausscheidung der deutschen Brettspielmeisterschaft in Dinslaken an. Nach gutem Erfolg im letzten Jahr waren die Hoffnungen, trotz etwas geringerem Training, groß.</p>
<p>Gespielt wurde von jedem Spieler jeweils eine Runde der Spiele <a href="http://www.amazon.de/gp/product/B0010B5472?ie=UTF8&amp;tag=exfuror&amp;linkCode=as2&amp;camp=1638&amp;creative=19454&amp;creativeASIN=B0010B5472">Agricola</a>, ein anspruchsvolles, komplexes Strategiespiel, <a href="http://www.amazon.de/gp/product/B0014LETVU?ie=UTF8&amp;tag=exfuror&amp;linkCode=as2&amp;camp=1638&amp;creative=19454&amp;creativeASIN=B0014LETVU">Stoneage</a>, ein rundenbasiertes Rohstoffsammelspiel, <a href="http://www.amazon.de/gp/product/B001EWE4EG?ie=UTF8&amp;tag=exfuror&amp;linkCode=as2&amp;camp=1638&amp;creative=19454&amp;creativeASIN=B001EWE4EG">Dominion</a>, ein spannendes Kartenspiel, bei dem die Spieler selbst anhand der verfügbaren Karten ihre Strategien zusammenstellen, sowie <a href="http://www.amazon.de/gp/product/B0007M18XY?ie=UTF8&amp;tag=exfuror&amp;linkCode=as2&amp;camp=1638&amp;creative=19454&amp;creativeASIN=B0007M18XY">Heckmeck am Bratwurmeck</a>, ein einfaches Würfelspiel, bei dem man hervorragend Wahrscheinlichkeitsrechnung üben kann.<br />
<span id="more-3119"></span></p>
<ul>
<li> Der Start in das Turnier lief bei Dominion gut. 2 erste Plätze und ein Zweiter boten eine gute Basis. Lediglich ein Spiel ging, bedingt durch eine Hexe und viele Flüche, verloren.</li>
<li>Agricola bot über 2 Stunden Spannung und war ein geistig sehr forderndes Spiel. Leider konnten wir uns gegen die sehr guten Gegner nicht durchsetzen. Sowohl Rancher- als auch Farmer-Strategie wurde von uns probiert. Es reichte zu einem 2. Platz, 2 Dritten und einem 4. Platz.</li>
<li>Nach einer Snackpause gab es dann noch mehr geistige Erholung beim Heckmeck am Bratwurmeck. Glücksspiele sind nicht unser Metier. 3 Vierte Plätze bezeugen das deutlich. Auch der weitere 2. Platz konnte das Ergebnis nicht retten.</li>
<li>Zuletzt wurde Stoneage gespielt. 1 Erster Platz wurde mit Bauern eingefahren. Die anderen 3 spielten &#8220;Verhungern&#8221; und wurden mit 2 dritten und einem vierten Platz nicht entlohnt. Den Gesprächen entnahmen wir daß viele unserer Mitspieler schon auf deutlich raffinierten Taktiken setzten.</li>
</ul>
<p>Trotz des nicht guten Abschneidens war dies ein sehr unterhaltsamer Tag; und Motivation für nächstes Jahr, dann vielleicht doch mit etwas mehr Vorbereitung? <img src='http://blog.codecentric.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.codecentric.de/2010/02/codecentric-bei-der-deutschen-brettspielemeisterschaft/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Datenbank Testbibliothek für das Robot Framework</title>
		<link>http://blog.codecentric.de/2010/02/datenbank-testbibliothek-fur-das-robot-framework/</link>
		<comments>http://blog.codecentric.de/2010/02/datenbank-testbibliothek-fur-das-robot-framework/#comments</comments>
		<pubDate>Sat, 27 Feb 2010 11:22:20 +0000</pubDate>
		<dc:creator>Thomas Jaspers</dc:creator>
				<category><![CDATA[Agiles Testen]]></category>
		<category><![CDATA[Robot Framework]]></category>

		<guid isPermaLink="false">http://blog.codecentric.de/?p=3117</guid>
		<description><![CDATA[Wir nutzen das Robot Framework seit einiger Zeit für die Automatisierung unserer Fachtests und haben damit gute Ergebnisse erzielt. Wobei ich persönlich das Tool schon etwas länger einsetze und von den grundlegenden Konzepten wirklich extrem überzeugt bin. Eine weitere Stärke sind die frei verfügbaren Testbibliotheken, die direkt in eigenen Tests genutzt werden können, z.B. für [...]]]></description>
			<content:encoded><![CDATA[<p>Wir nutzen das <a href="http://code.google.com/p/robotframework/">Robot Framework</a> seit einiger Zeit für die Automatisierung unserer Fachtests und haben damit gute Ergebnisse erzielt. Wobei ich persönlich das Tool schon etwas länger einsetze und von den grundlegenden Konzepten wirklich extrem überzeugt bin. Eine weitere Stärke sind die frei verfügbaren Testbibliotheken, die direkt in eigenen Tests genutzt werden können, z.B. für Selenium und SSH. Bisher hat jedoch eine generische Bibliothek für Tests der Datenbank <a href="http://code.google.com/p/robotframework/issues/detail?id=82">gefehlt</a>. Ich glaube ich habe entsprechende Testbibliotheken in zwei Firmen schon dreimal geschrieben, da fast jede Anwendung am Ende des Tages eine Datenbank nutzt. Das heisst ein automatisierter Test sollte &#8211; zumindest stichprobenartig &#8211; prüfen, dass Daten korrekt in die Datenbank geschrieben werden. Auf diese Weise kann eine Anwendung dann wirklich <em>End-to-End</em> getestet werden.<br />
<span id="more-3117"></span><br />
So keimte nach und nach der Gedanke in mir, eine generische Datenbank-Testbibliothek im Rahmen des Robot Framework-Projekts zu schreiben. Erfahrungen hatte ich ja schon einige gesammelt <img src='http://blog.codecentric.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  und so galt es hauptsächlich überhaupt einen Anfang zu finden. <a href="http://code.google.com">Google Code</a> macht einem den Einstieg hier glücklicherweise wirklich leicht und die Ermunterung von Pekka eine solche Bibliothek ruhig auch in Java zu entwickeln führte dann zur Initialzündung.</p>
<p>Gestern abend wurde jetzt das Release 1.0 der <a href="http://code.google.com/p/robotframework-dblibrary/">Datenbank Testbibliothek</a> fertig und es ist super, dass diese bereits auf der <a href="http://code.google.com/p/robotframework/">Robot Framework</a> Homepage gelistet wird. Wie bei jedem Projekt wird es natürlich erst richtig spannend, wenn die ersten Benutzer anfangen dieses zu nutzen und ich hoffe auf reges Feedback für weitere Features. Mit meinem Kollegen Fabian ist auch ein weiterer <em>Committer</em> zum Projekt gestossen, so dass wir für weitere Entwicklungen und potentielle Bugfixes gut gerüstet sind.</p>
<p>Die Implementierung der Datenbank-Zugriffe basiert auf JDBC, was schon wie ein kleiner Anachronismus anmutet in Zeiten von <a href="https://www.hibernate.org/">Hibernate</a> und <a href="http://java.sun.com/developer/technicalArticles/J2EE/jpa/">JPA</a>. Aber für die Testbibliothek ist JDBC genau passend und die Möglichkeit Treiber für verschiedene Datenbanken über deren (Klassen-)Namen einzubinden ermöglicht es problemlos viele verschiedenen Datenbanken zu unterstützen. Dank <a href="http://hsqldb.org/">HyperSql</a> lässt sich die Bibliothek auch perfekt per JUnit testen.</p>
<p>Natürlich gibt es bereits Ideen für <a href="http://code.google.com/p/robotframework-dblibrary/issues/list">weitere Entwicklungen</a>, wobei insbesondere eine Unterstützung für die <a href="http://code.google.com/p/robotframework/wiki/RemoteLibrary">Robot Framework Remote Library</a> interessant ist, die es ermöglicht Testbibliotheken auf verschiedene Rechner zu verteilen. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.codecentric.de/2010/02/datenbank-testbibliothek-fur-das-robot-framework/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Mitarbeitermotivation einmal anders &#8211; Audi Basis- &amp; Drifttraining</title>
		<link>http://blog.codecentric.de/2010/02/mitarbeitermotivation-einmal-anders-audi-basis-drifttraining/</link>
		<comments>http://blog.codecentric.de/2010/02/mitarbeitermotivation-einmal-anders-audi-basis-drifttraining/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 15:53:44 +0000</pubDate>
		<dc:creator>Christian Urban</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://blog.codecentric.de/?p=3091</guid>
		<description><![CDATA[Letzten Herbst wurden wir (Kollege Lars Schmidt und ich) zu Mirko auf den Olymp beordert. Gesenkten Hauptes machten wir uns an den Aufstieg (wenn man aus heiterem Himmel beim Chef antanzen soll, hat man normalerweise immer irgendwas falsch gemacht  ). Angekommen begrüßte uns unerwarteter Weise ein grinsender Chef und bat uns einen Blick auf [...]]]></description>
			<content:encoded><![CDATA[<p>Letzten Herbst wurden wir (Kollege Lars Schmidt und ich) zu Mirko auf den Olymp beordert. Gesenkten Hauptes machten wir uns an den Aufstieg (wenn man aus heiterem Himmel beim Chef antanzen soll, hat man normalerweise immer irgendwas falsch gemacht <img src='http://blog.codecentric.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ). Angekommen begrüßte uns unerwarteter Weise ein grinsender Chef und bat uns einen Blick auf seinen Monitor zu werfen. Der Bildschirm zeigte eine Präsentation der Audi driving experience, die aktuelle Seite war mit <a title="&quot;Basis- &amp; Drifttraining in Saalbach&quot;" href="http://www.audi.de/de/brand/de/erlebniswelt/audi_driving_experience/audi_training_experience/basis_und_drifttraining.html">&#8220;Basis- &amp; Drifttraining in Saalbach&#8221;</a> betitelt und enthielt neben einer Beschreibung ein Bild mit viel Schnee und einem driftenden Audi. &#8220;Jungs, da geht&#8217;s für euch im kommenden Frühjahr hin, habt gute Arbeit geleistet&#8221; ersetzte dann unsere fragenden Blicke durch ein breites Grinsen, die Zeile &#8220;Trainingsfahrzeuge: Audi S4 3.0 TFSI quattro&#8221; gab unseren Benzinerherzen dann den Rest und entlockte uns sogar vereinzelte unmännliche Freudenlaute.</p>
<p><span id="more-3091"></span></p>
<p>Anfang dieser Woche war es dann endlich soweit. Der Kurs begann Sonntagabend mit einer kurzen Einführung zu theoretischen Themen wie z.B. Lenkradhaltung und Sitzposition und einem Ausblick auf die Übungen der kommenden zwei praktischen Tage. Diese Einführung haben wir dann beim anschließenden gemeinsamen Abendessen mit den Trainern und den übrigen 14 Kursteilnehmern schnell wieder verdaut <img src='http://blog.codecentric.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Die Unterbringung im Steigenberger Hotel in Kaprun war während der gesamten Zeit hervorragend und die zentrale Lage im Ortskern erlaubte spät Abends sogar den Besuch der ein oder anderen örtlichen Kneipe.</p>
<p>Montag morgen ging es dann endlich zum Trainingsgelände in Saalbach: Eine große präparierte Eispiste auf der bereits 10 laufende S4 Kombi auf uns warteten. Die erste Ansage &#8220;Zwei pro Fahrzeug&#8221; hörten wir allerdings aus dem Inneren unseres S4 gar nicht mehr. Zuerst standen Übungen zum Thema Fahrsicherheit auf dem Plan, die uns auch mit der Fahrdynamik der S4s auf Eis vertraut machen sollten. Bewusstes Herbeiführen von Untersteuern und Übersteuern machte den Anfang, gefolgt von Übungen zur korrekten Reaktion darauf. Beim Vergleich mit und ohne eingeschaltetem ESP kamen die ersten Aha-Effekte (ESP ist schon eine verdammt krasse Technik). Es folgte eine ABS-Gefahrenbremsung mit anschließendem Ausweichmanöver (inklusive Reaktionszeitmessung und Anzeige der dabei gefahrenen Strecke). Gefahren wurde während der beiden Tage übrigens meistens in zwei Gruppen zu vier Autos und dazu jeweils einem Instruktor. Diese analysierten und kommentierten jede Fahrt, Fehler wurden direkt angemahnt. Und die Jungs haben wirklich alles gesehen: &#8220;Wo hast du hin geschaut?&#8221; &#8211; &#8220;Zum Kurvenrand?&#8221; &#8211; &#8220;Richtig. Und wo solltest du hinschauen?&#8221; &#8211; &#8220;Zur Kurvenmitte?&#8221; &#8211; &#8220;Vielen Dank &#8230; und der Nächste bitte&#8221;.</p>
<p>Nachmittags durften wir dann die ersten Driftübungen absolvieren. Ausweichen (ohne Vollbremsung) bei 60-70 km/h mit Rückführung führten dann zu den ersten Pirouetten und brachten Lars den Titel &#8220;Kreiselkönig von Saalbach&#8221; ein <img src='http://blog.codecentric.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Beim Übersteuern mit ersten Driftversuchen durfte ich mir dann meine Tadel abholen: Mit 20 km/h in eine Kurve, runter vom Gas und dann so lange warten bis das Heck kommt ist gar nicht so einfach. Kurze Gasstöße um nicht einzuparken machten oftmals jeden Versuch zunichte und waren bei den Instruktoren nicht gern gesehen <img src='http://blog.codecentric.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Abgeschlossen haben wir dann den ersten Trainingstag mit einem Rundparcours, gespickt mit Elementen der vorherigen Übungen inklusive Wertungsrunde. Wir landeten bei den Zeiten zwar nur im Mittelfeld, haben ohne ESP bei der Spaßwertung aber locker gewonnen. Abends ging es dann mit dem gesamten Kurs zum gemütlichen Hüttenabend im &#8220;Jagawirt&#8221; und natürlich zum obligatorischen Bier in kleinerer Runde in der örtlichen Kneipe danach.</p>
<p>Dienstag morgen ging es dann direkt mit Driftübungen weiter: Die Übung &#8220;Links/Rechts Lastwechsel in eine Kurve mit Übersteuern und kontrolliertem Drift&#8221; hat mich einige meiner wenigen noch verbliebenen Haare gekostet. Gott sei Dank haben die letzten Versuche geklappt und ich hatte direkt wieder gute Laune. Das Driften durch einen 8-förmigen Rundparcours war dann sogar noch anspruchsvoller. Hier verloren wir dann auch direkt zwei Kursfahrzeuge an die äußeren Eismauerbegrenzungen (natürlich aus der anderen 4er Gruppe <img src='http://blog.codecentric.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ). Ersatzfahrzeuge standen aber sowieso immer auf dem Platz und so konnten die Drift-Rowdys schnell wieder Gas geben. Lars und ich haben Gott sei Dank ab und zu nur mal innen auf den weichen Schneebegrenzungen &#8220;geparkt&#8221; und den Rundkurs neu abgesteckt, unserem S4 Baby haben wir aber kein Haar gekrümmt. Die letzte Übung &#8220;Driftslalom&#8221; hat dann wieder um so mehr Spaß gemacht, die Eispiste war an der Stelle wesentlich griffiger und zum Driften war genug Platz. Zum Abschluss des Trainings gab es dann wieder einen Rundparcours, diesmal in der großen Variante und mit Elementen aus allen Übungen der vergangenen zwei Tage.<br />
Lars belegte dabei sogar den dritten Platz, ich habe leider in meiner schnellen Runde nach einem Kommentar ala &#8220;bis hierher war&#8217;s richtig gut&#8221; direkt den nächsten Drift ins Eis gesetzt. Danke, Lars.</p>
<p>Heute ist bereits Donnerstag und damit das Training leider schon wieder seit zwei Tagen vorbei. Wir blicken zurück auf zwei spaßige, anspruchsvolle, einfach &#8220;coole&#8221; Tage auf dem Eis in einem ebenso coolen Auto. Die Durchsicht der geschossenen Fotos und Videos trieb mir gestern Abend direkt wieder das Grinsen ins Gesicht.<br />
Das Training ist eigentlich für jeden Autofahrer empfehlenswert, gleichermaßen geeignet für jung und alt, Männlein und Weiblein. Bei uns im Kurs war z.B. ein älterer Herr, der alle paar Jahre ein Fahrertraining macht, um auszuloten, ob er es noch drauf hat. Respekt. Man lernt sein Auto auch mal in Grenzsituationen kennen und zu handhaben, bekommt dabei aber auch wieder Respekt beim gewollten Überschreiten dieser physischen Grenzen.<br />
Natürlich reichen zwei Tage nicht aus, um einem 15 Jahre antrainierte Autobahnraserei abzugewöhnen, dafür gibt es dann aber z.B. weiterführende Kurse über 3-4 Tage in Schweden und Finnland <img src='http://blog.codecentric.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p>Abschließend bleibt uns nur noch ein Riesendank an die Chefs auszusprechen für dieses super Incentive<br />
die Benziner Lars und Christian</p>

<a href='http://blog.codecentric.de/2010/02/mitarbeitermotivation-einmal-anders-audi-basis-drifttraining/img_0373/' title='Die neue codecentric Firmenwagenflotte'><img width="150" height="150" src="http://blog.codecentric.de/wp-content/uploads/2010/02/IMG_0373-150x150.jpg" class="attachment-thumbnail" alt="" title="Die neue codecentric Firmenwagenflotte" /></a>
<a href='http://blog.codecentric.de/2010/02/mitarbeitermotivation-einmal-anders-audi-basis-drifttraining/img_0375/' title='Grip durch Spikes'><img width="150" height="150" src="http://blog.codecentric.de/wp-content/uploads/2010/02/IMG_0375-150x150.jpg" class="attachment-thumbnail" alt="" title="Grip durch Spikes" /></a>
<a href='http://blog.codecentric.de/2010/02/mitarbeitermotivation-einmal-anders-audi-basis-drifttraining/img_0376/' title='Slalom Baby!'><img width="150" height="150" src="http://blog.codecentric.de/wp-content/uploads/2010/02/IMG_0376-150x150.jpg" class="attachment-thumbnail" alt="" title="Slalom Baby!" /></a>
<a href='http://blog.codecentric.de/2010/02/mitarbeitermotivation-einmal-anders-audi-basis-drifttraining/img_0384/' title='Rundparcours #1'><img width="150" height="150" src="http://blog.codecentric.de/wp-content/uploads/2010/02/IMG_0384-150x150.jpg" class="attachment-thumbnail" alt="" title="Rundparcours #1" /></a>
<a href='http://blog.codecentric.de/2010/02/mitarbeitermotivation-einmal-anders-audi-basis-drifttraining/img_0386/' title='&quot;Hast du gut gemacht&quot;'><img width="150" height="150" src="http://blog.codecentric.de/wp-content/uploads/2010/02/IMG_0386-150x150.jpg" class="attachment-thumbnail" alt="" title="&quot;Hast du gut gemacht&quot;" /></a>
<a href='http://blog.codecentric.de/2010/02/mitarbeitermotivation-einmal-anders-audi-basis-drifttraining/img_0387/' title='&quot;Ich weiß&quot;'><img width="150" height="150" src="http://blog.codecentric.de/wp-content/uploads/2010/02/IMG_0387-150x150.jpg" class="attachment-thumbnail" alt="" title="&quot;Ich weiß&quot;" /></a>
<a href='http://blog.codecentric.de/2010/02/mitarbeitermotivation-einmal-anders-audi-basis-drifttraining/img_0389/' title='ABS Bremsmanöver'><img width="150" height="150" src="http://blog.codecentric.de/wp-content/uploads/2010/02/IMG_0389-150x150.jpg" class="attachment-thumbnail" alt="" title="ABS Bremsmanöver" /></a>
<a href='http://blog.codecentric.de/2010/02/mitarbeitermotivation-einmal-anders-audi-basis-drifttraining/img_0403/' title='Eindrücke des vorherigen Kurses'><img width="150" height="150" src="http://blog.codecentric.de/wp-content/uploads/2010/02/IMG_0403-150x150.jpg" class="attachment-thumbnail" alt="" title="Eindrücke des vorherigen Kurses" /></a>
<a href='http://blog.codecentric.de/2010/02/mitarbeitermotivation-einmal-anders-audi-basis-drifttraining/img_0417/' title='Driftspass'><img width="150" height="150" src="http://blog.codecentric.de/wp-content/uploads/2010/02/IMG_0417-150x150.jpg" class="attachment-thumbnail" alt="" title="Driftspass" /></a>
<a href='http://blog.codecentric.de/2010/02/mitarbeitermotivation-einmal-anders-audi-basis-drifttraining/img_0422/' title='&quot;Ich war schneller als Zwo&quot;'><img width="150" height="150" src="http://blog.codecentric.de/wp-content/uploads/2010/02/IMG_0422-150x150.jpg" class="attachment-thumbnail" alt="" title="&quot;Ich war schneller als Zwo&quot;" /></a>
<a href='http://blog.codecentric.de/2010/02/mitarbeitermotivation-einmal-anders-audi-basis-drifttraining/img_0426/' title='&quot;Ich lass dich nie wieder los&quot;'><img width="150" height="150" src="http://blog.codecentric.de/wp-content/uploads/2010/02/IMG_0426-150x150.jpg" class="attachment-thumbnail" alt="" title="&quot;Ich lass dich nie wieder los&quot;" /></a>
<a href='http://blog.codecentric.de/2010/02/mitarbeitermotivation-einmal-anders-audi-basis-drifttraining/img_0428/' title='Unsere Instruktoren'><img width="150" height="150" src="http://blog.codecentric.de/wp-content/uploads/2010/02/IMG_0428-150x150.jpg" class="attachment-thumbnail" alt="" title="Unsere Instruktoren" /></a>

]]></content:encoded>
			<wfw:commentRss>http://blog.codecentric.de/2010/02/mitarbeitermotivation-einmal-anders-audi-basis-drifttraining/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vorschau auf den Java Specialist Master Kurs</title>
		<link>http://blog.codecentric.de/2010/02/vorschau-auf-den-java-specialist-master-kurs/</link>
		<comments>http://blog.codecentric.de/2010/02/vorschau-auf-den-java-specialist-master-kurs/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 15:25:28 +0000</pubDate>
		<dc:creator>Fabian Lange</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[specialist master course]]></category>

		<guid isPermaLink="false">http://blog.codecentric.de/?p=3089</guid>
		<description><![CDATA[Nächste Woche findet vom 2. &#8211; 5. März der Kurs von Dr. Heinz Kabutz in Düsseldorf statt.
Meine Erwartungen an den Kurs sind hoch. Den Newsletter von Heinz lese ich schon lange und auch als ich ihn bei unserem Meet The Experts kennen lernen durfte gewann ich gleich einen positiven Eindruck von ihm. Er kennt wirklich [...]]]></description>
			<content:encoded><![CDATA[<p>Nächste Woche findet vom 2. &#8211; 5. März <a href="http://meettheexperts.de/jsp/schulungen/schulungen.jsp">der Kurs von Dr. Heinz Kabutz</a> in Düsseldorf statt.</p>
<p>Meine Erwartungen an den Kurs sind hoch. Den Newsletter von Heinz lese ich schon lange und auch als ich ihn bei unserem Meet The Experts kennen lernen durfte gewann ich gleich einen positiven Eindruck von ihm. Er kennt wirklich die fiesesten Details über Java, und ich hoffe er kann mir einige zeigen. <a href="http://www.javaspecialists.eu/courses/master.jsp">Der Kurs verspricht &#8220;Extreme Java&#8221;</a>. Ich freue mich also auf sehr esoterische Feinheiten ohne echten Praxiswert. Und auf ebenso viele Fallstricke mit echter Praxisrelevanz.</p>
<p>Und ich hoffe auf dem Training andere Java Profis zu treffen die ebenso wie ich Spaß an kniffligen Aufgaben haben. Bist Du auch dabei?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.codecentric.de/2010/02/vorschau-auf-den-java-specialist-master-kurs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Was ist der Unterschied zwischen Architektur und Design?</title>
		<link>http://blog.codecentric.de/2010/02/was-ist-der-unterschied-zwischen-architektur-und-design/</link>
		<comments>http://blog.codecentric.de/2010/02/was-ist-der-unterschied-zwischen-architektur-und-design/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 16:05:39 +0000</pubDate>
		<dc:creator>Uwe Friedrichsen</dc:creator>
				<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Design]]></category>

		<guid isPermaLink="false">http://blog.codecentric.de/?p=3077</guid>
		<description><![CDATA[Mittlerweile tobt seit längerem eine hitzige Debatte über die Frage, ob Architektur und Design die gleiche Sache sind oder nicht. Die Vertreter der &#8220;Beides ist das Gleiche&#8221;-Fraktion sagen, dass Architektur eigentlich einfach nur die erste Phase des Designs ist, während die Gegner dieser These darauf beharren, dass Architektur und Design zwei vollständig verschiedene Aufgaben sind, [...]]]></description>
			<content:encoded><![CDATA[<p>Mittlerweile tobt seit längerem eine hitzige Debatte über die Frage, ob Architektur und Design die gleiche Sache sind oder nicht. Die Vertreter der &#8220;Beides ist das Gleiche&#8221;-Fraktion sagen, dass Architektur eigentlich einfach nur die erste Phase des Designs ist, während die Gegner dieser These darauf beharren, dass Architektur und Design zwei vollständig verschiedene Aufgaben sind, die nur eine mehr oder minder unscharfe gemeinsame Berührungslinie teilen. Tja, wer von den beiden hat denn nun recht?<span id="more-3077"></span></p>
<p>Ich bin der Meinung, dass es sehr schwer ist herauszufinden, wer recht oder unrecht hat &#8230; tatsächlich glaube ich, dass das weitestgehend unmöglich ist. Sogar in unserer kleinen Firma finden wir keinen gemeinsamen Konsens darüber, was genau Architektur und was Design ist. Und wenn es schon nicht möglich ist, einen Konsens unter so wenigen Leuten zu erzeugen (selbst wenn einige davon recht starke Persönlichkeiten sind &#8230; <img src='http://blog.codecentric.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ), wie soll es dann möglich sein, einen Konsens in der gesamten IT Community zu erzeugen? Das ist höchstwahrscheinlich unmöglich.</p>
<p>Deshalb versuche ich erst gar nicht, eine präzise Antwort auf die Frage zu finden. Stattdessen werde ich versuchen, das Thema von einem anderen Standpunkt aus zu betrachten. Zunächst: Warum ist es so schwer, die Frage zu beantworten? Ich denke, ein großer Teil des Problems liegt darin, dass es keine zufriedenstellende Definition für die beiden Ausdrücke gibt, weder für Architektur noch für Design. Wann immer sie mit einer anderen Person über Architektur oder Design reden, können Sie sich deshalb schon nahezu sicher sein, dass die andere Person über etwas anderes spricht als Sie.</p>
<p>Es gibt *jede Menge* Definitionen, aber die meisten davon sind meines Erachtens entweder so spezifisch, dass sie das Thema nicht wirklich erfassen oder sie sind so vage, dass sie einem überhaupt nicht weiter helfen. Nur ein Beispiel: Robert Martin (der nebenbei gesagt eine Menge sehr schlauer Dinge gesagt und geschrieben hat) hat einmal gesagt &#8220;Bei Architektur geht es um die wichtigen Dinge; was auch immer das ist.&#8221;. Nun, das sagt alles und nichts. Bedeutet das, dass es bei Design um die unwichtigen Dinge geht? Wahrscheinlich nicht. Und, wenn Kaffee für die Entwickler ein sehr wichtiges Thema ist (was es fast immer ist), bedeutet das, dass es bei Architektur um Kaffee geht? Wahrscheinlich nicht. Wie Sie sehen können, bringt uns diese Definition nicht weiter.</p>
<p>Ich verzichte darauf, andere Definitionen näher zu betrachten, weil ich denke, dass das nirgendwohin führt. Es wird nicht möglich sein, eine Definition für Architektur und Design zu finden, der alle zustimmen *und* die uns hilft, den Unterschied zwischen Architektur und Design herauszufinden. Insbesondere glaube ich, dass es nicht möglich sein wird, eine klare Trennlinie zwischen Architektur und Design zu finden, wo das eine endet und das andere beginnt. Jeder zieht die Linie an einer anderen Stelle und viele Leute haben wahrscheinlich eher eine Art unscharfer Wolke als eine klare Linie in ihrem Kopf. &#8220;Irgendwo innerhalb dieser Wolke endet Architektur und beginnt Design&#8221; werden sie sagen.</p>
<p>So weit, so gut. Aber es muss doch etwas geben, das uns weiterhilft. Oder zumindest sollte es etwas geben &#8230;</p>
<p>Vielleicht hilft es, die Frage für einen Moment beiseite zu schieben. Im Laufe der Zeit habe ich herausgefunden, dass es zwei grundsätzliche Aufgaben gibt, aus denen diese ganze &#8220;Architektur-und-Design-Sache&#8221; besteht (ohne zu versuchen, eine Trennlinie zu finden). Insgesamt geht es bei der Sache darum, alle existierenden Anforderungen in eine Lösung zu transformieren. (Und sollte jemand fragen, wo dabei die Codierung geblieben ist, möchte ich es demjenigen überlassen, die Trennlinie zwischen Design und Codierung zu finden; ich denke, dass ist eine ähnliche Fragestellung &#8230; <img src='http://blog.codecentric.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ).</p>
<p>Im ersten Teil dieser Transformation geht es darum, die ganzen Anforderungen zu verstehen (nicht nur die Anforderungen der Fachbereiche und Anwender, sondern auch die Anforderungen des Managements, der Projektleitung, des Entwicklungs-Teams, des Betriebs, der Systemplanung, der Sicherheitsabteilung, der Tester, und so weiter), die Anforderungen wirklich zu verstehen, sie auszubalancieren (es gibt immer widersprüchliche und inkonsistente Anforderungen über die verschiedenen Domänen und Stakeholder hinweg, mit denen man umgehen muss) und eine geeignete Lösungsidee für all diese ausbalancierten Anforderungen zu finden. Ich pflege diesen Teil der Arbeit &#8220;Alignment&#8221; oder auch &#8220;Einklang&#8221; zu nennen.</p>
<p>Der zweite Teil der Transformation in eine funktionierende Lösung besteht daraus, die Lösungsidee in eine geeignete Struktur zu bringen, die Wartbarkeit und Änderbarkeit unterstützt und diese Struktur weiter und weiter bis herunter auf Code-Ebene zu verfeinern, ohne die zuvor beschriebenen Eigenschaften zu verlieren. Diesen Teil der Arbeit pflege ich &#8220;Strukturierung&#8221; oder einfach nur &#8220;Struktur&#8221; zu nennen.</p>
<p>Nun, ist es wichtig, diese beiden Aufgaben zu unterscheiden? Ich denke, ja! Der Grund dafür ist, dass ich bemerkt habe, dass diese beiden Aufgaben sehr unterschiedliche Skills erfordern. Während Einklang viel mit Kommunikations- und Konflikt-Management-Skills zu tun hat, erfordert Struktur eher formale Stärken. Einklang erfordert auch ein recht breites Wissen über all die verschiedenen Anforderungsdomänen, während Struktur ein eher tiefes Wissen in der Lösungsdomäne erfordert. Als eine Konsequenz daraus findet man nur relativ wenige Personen, die beide Aufgaben mit der gleichen Stärke wahrnehmen können (oder wollen), und wenn man eine der beiden Aufgaben vernachlässigt, erhält man höchstwahrscheinlich kein befriedigendes Ergebnis.</p>
<p>Okay, kommen wir zurück zu initialen Fragestellung. Helfen uns Einklang und Struktur, eine Trennlinie zu finden. Nun, ich denke, in gewisser Weise &#8230;</p>
<p>Aus meiner Sicht ist Einklang auf jeden Fall Teil einer guten Architektur und Struktur ist auf jeden Fall Teil eines guten Designs. Man kann kein guter Architekt sein, ohne viel an Einklang zu arbeiten und man kann kein guter Designer sein, ohne viel an Struktur zu arbeiten. Wie viel Struktur zusätzlich in Architektur benötigt wird und wie viel Einklang in Design &#8211; ich denke, das ist gewissermaßen eine Geschmacksfrage und darauf wird es keine endgültige Antwort geben.</p>
<p>Zusammenfassend kann ich auch nicht &#8220;die&#8221; Antwort auf die initiale Fragestellung bieten. Aber ich weiß, wenn jemand über Architektur redet, ohne über Einklang zu reden, macht er etwas falsch und wenn jemand über Design redet, ohne über Struktur zu reden, macht er auch etwas falsch. Und das ist das Wichtigste aus meiner Sicht &#8230;</p>
<p>PS: Ein dickes &#8220;Sorry&#8221; an Robert Martin, weil ich ausgerechnet auf seiner Architektur-Definition herumgehackt habe. Wie ich bereits zuvor geschrieben habe, hat er eine Menge sehr schlauer Dinge gesagt und geschrieben, auch wenn ich nicht allen davon zustimme. Wenn Sie also die Gelegenheit haben sollten, etwas von ihm zu lesen oder einen Vortrag von ihm zu hören, dann tun Sie es! So, das sollte genug der Wiedergutmachung sein &#8230; <img src='http://blog.codecentric.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.codecentric.de/2010/02/was-ist-der-unterschied-zwischen-architektur-und-design/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>OOP 2010 – Ein kurzer Reisebericht</title>
		<link>http://blog.codecentric.de/2010/02/oop-2010-%e2%80%93-ein-kurzer-reisebericht/</link>
		<comments>http://blog.codecentric.de/2010/02/oop-2010-%e2%80%93-ein-kurzer-reisebericht/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 15:52:08 +0000</pubDate>
		<dc:creator>Ansgar Fitz</dc:creator>
				<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Konferenzen]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[Konferenz]]></category>

		<guid isPermaLink="false">http://blog.codecentric.de/?p=3029</guid>
		<description><![CDATA[Mit nun ein paar Tagen Abstand möchte kurz über meine Reise zur Konferenz „OOP 2010“ berichten. Die diesjährige Konferenz hat vom 25. - 29. Januar 2010 im International Congress Center (ICM) in München stattgefunden. Ich habe der OOP in diesem Jahr meine erste Aufwartung gemacht. Angelehnt an die IT-Landkarte und den damit verbundenen Reisezielen von Gernot Starke (vergleiche Dr. Gernot Starke - Publikationen) kann ich festhalten, dass meine Tagesausflüge nach Architektionien oder Analytistan sehr viele positive Erfahrungen und Eindrücke hinterlassen haben. Zu den Themen Architektur oder der Beziehung von IT zur (Fach) Domänen, habe ich eine Menge Ideen sowie Erfahrungsberichte  von den dortigen Bewohnern und anderen Reisenden  mitgenommen.]]></description>
			<content:encoded><![CDATA[<p>Mit nun ein paar Tagen Abstand möchte kurz über meine Reise zur Konferenz „<a title="OOP 2010" href="http://www.oop2010.de" target="_blank">OOP 2010</a>“ berichten. Die diesjährige Konferenz hat vom 25. &#8211; 29. Januar 2010 im International Congress Center (ICM) in München stattgefunden. Ich habe der OOP in diesem Jahr meine erste Aufwartung gemacht.<span id="more-3029"></span></p>
<p>Angelehnt an die IT-Landkarte und den damit verbundenen Reisezielen von Gernot Starke (vergleiche <a title="Publikationen - Dr. Gernot Starke" href="http://www.gernotstarke.de/publikationen/publikationen.html" target="_blank">Dr. Gernot Starke- Publikationen</a>) kann ich festhalten, dass meine Tagesausflüge nach Architektionien oder Analytistan sehr viele positive Erfahrungen und Eindrücke hinterlassen haben.</p>
<p>Im Unterschied zu anderen Konferenzen, wie z. B. der Jax, fokussiert die OOP für mich viel stärker die &#8220;Business Aspekte&#8221; im Zusammenhang mit IT. Die Veranstaltungen bieten Erfahrungen und Modelle, um die gefühlte, als auch erlebte meine „Grenze“ zwischen der Business-Welt und der IT-Welt besser zu verstehen, sowie Ideen, Tendenzen, Lösungen und Entwicklungen um die Beziehungen dieser beiden „Welten“ zu verbessern.</p>
<p>In meiner bisherigen Tätigkeit in der IT, erst als Entwickler und mittlerweile als Architekt, habe ich die technischen Aspekte beim Design und der Entwicklung fokussiert. Diese sind nicht nur interessant und spannend, sondern haben einen großen Coolness-Faktor (vergleiche die <a title="Keynote Dr. Gernot Starke" href="http://www.sigs-datacom.de/konferenz/konferenzprogramm.html" target="_blank">Keynote „Nachbars Garten – Wo Architekten lernen„ von Gernot Starke</a>). Nun arbeite ich „auf einmal“ viel enger und intensiver mit fachlichen Domänenexperten, Projektleitern oder Businessanalysten, mit jeweils individuellen Anforderungen, unterschiedlichen Interessen und eigentümlichen Sprachen. Ich muss feststellen, dass „coole Technik“ nicht ausreicht um als Architekt im Grenzgebiet zu „überleben“. Aus diesem Grund habe ich eine Veranstaltung gesucht die mir neue Ideen, sowie Impulse für meine Arbeit bietet.</p>
<p>Nachdem ich das Programm zum ersten Mal überflogen habe, war meine Neugier sofort geweckt. Einige bekannte Namen wie z. B. Philippe Kruchten oder Eric Evans kündigten interessante Vorträge und Tutorials an. Letzt endlich sind mir unter anderem die Veranstaltungen dieser beiden Sprecher nachhaltig in Erinnerung geblieben.</p>
<p>Veranstaltungen dieser Art und der spezielle Architektur Tag (Donnerstag den 28.01.2010), organsiert von Peter Hruschka und Gernot Starke (zwei weiteren bekannten Personen im Umfeld Architektur), bestärken mich, das Architektur wesentlich mehr ist als z. B. Design. Zu den Themen Architektur oder der Beziehung von IT zur (Fach) Domäne, habe ich eine Menge Ideen, sowie Erfahrungsberichte von den dortigen Bewohnern und anderen Reisenden mitgenommen. Vor allem der direkte Kontakt während der Vorträge, der anschließenden Q&amp;A Runden, sowie den Diskussionen und Gesprächen mit den Sprechern und anderen Teilnehmern im Nachgang, z. B. beim Mittagessen, hinterlassen einen positiven Eindruck. Diese sind nicht nur interessant, sondern haben mir gezeigt, dass sich viele der „Herausforderungen“ denen ich in meinem täglichen Leben und auf meinen Reisen im &#8220;Grenzgebiet&#8221; begegne, sich dabei sehr ähneln. Das Lachen kam dabei auch nicht zu kurz.</p>
<p>Unter dem Slogan &#8220;Software meets Business&#8221; und dem Motto &#8220;Productivity: People, Process, and Technology&#8221; bietet meines Erachtens die OOP eine Möglichkeit, Architektur (neben anderen Schwerpunkten) von verschiedenen Standpunkten und Sichtweisen zu betrachten. Wer mehr über die Facetten von Architektur erfahren und diskutieren möchte, dem empfehle ich einen Besuch dieser Konferenz.</p>
<p>Besonders hervorheben möchte ich die folgenden Veranstaltungen, meine persönlichen Top 3:</p>
<ul>
<li>Tutorial mit Philippe Kruchten: “Software Architecture Knowledge Management &#8211; Theory and Practice, Methods and Tools”</li>
<li>Keynote mit Gernot Starke: “Nachbars Garten &#8211; Wo Architekten lernen“</li>
<li>Tutorial mit Eric Evans, Hans Dockter: „Domain-Driven Design: The Basics / Strategy”</li>
</ul>
<p>Die Ideen und Impulse für das Überleben als Architekt, die ich in meinen vielen Tagesausflügen gesammelt habe, werde ich sicherlich in meiner Arbeit im „Grenzgebiet“ weiterverfolgen. Somit sind sicherlich nicht nur meine &#8220;Top 3&#8243;, sondern auch die Erfahrungen und Erlebnisse weitere Blogeinträge wert. To be continued …</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.codecentric.de/2010/02/oop-2010-%e2%80%93-ein-kurzer-reisebericht/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
