<?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>Software Engineering Blog &#187; IDE</title>
	<atom:link href="http://www.swe-blog.net/blog/archives/tag/ide/feed" rel="self" type="application/rss+xml" />
	<link>http://www.swe-blog.net/blog</link>
	<description>Menschen. Prozesse. Technik.</description>
	<lastBuildDate>Wed, 28 Jul 2010 00:42:09 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Entwicklungslandschaft Teil 3 &#8211; Isolation</title>
		<link>http://www.swe-blog.net/blog/archives/109</link>
		<comments>http://www.swe-blog.net/blog/archives/109#comments</comments>
		<pubDate>Sat, 02 Jan 2010 11:21:11 +0000</pubDate>
		<dc:creator>Oliver Fischer</dc:creator>
				<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Entwicklungslandschaft]]></category>
		<category><![CDATA[Entwicklungslandschaft.Serie]]></category>
		<category><![CDATA[Entwicklungsumgebung]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[Infrastruktur]]></category>

		<guid isPermaLink="false">http://www.swe-blog.net/blog/?p=109</guid>
		<description><![CDATA[Wenn wir mit anderen zusammenarbeiten besteht immer die Gefahr sich gegenseitig zu stören. Wir arbeiten im gleichen Projekt, bearbeiten die selben Klassen, schreiben in die selbe Datenbank, gegen die der Kollege seine Tests fährt, machen Änderungen, die sich gegenseitig ausschließen. Oft stellt das kein Problem dar, wenn es koordiniert oder zumindest mit dem Wissen der [...]]]></description>
			<content:encoded><![CDATA[<p><a href='http://www.swe-blog.net/blog/wp-content/uploads/2009/10/entwicklungslandschaft-isol.png'><img src="http://www.swe-blog.net/blog/wp-content/uploads/2009/10/entwicklungslandschaft-isol.png" alt="Isolation" title="Isolation" width="270" height="200" class="alignleft size-full wp-image-111" /></a>Wenn wir mit anderen zusammenarbeiten besteht immer <strong>die Gefahr sich gegenseitig zu stören</strong>. Wir arbeiten im gleichen Projekt, bearbeiten die selben Klassen, schreiben in die selbe Datenbank, gegen die der Kollege seine Tests fährt, machen Änderungen, die sich gegenseitig ausschließen. Oft stellt das kein Problem dar, wenn es koordiniert oder zumindest mit dem Wissen der Kollegen geschieht. Was ist aber, wenn wir genau das nicht wollen? Wenn wir in Ruhe die nächsten zwei Wochen an einem ganz besonderen Feature arbeiten wollen oder ein größeres experimentelles Refactoring vornehmen wollen? Es geht aber nicht nur um die großen Aufgaben. Auch in unserer alltäglichen Arbeit, sollte die Gefahr mit der Arbeit Anderer zu kollidieren möglichst gering sein.</p>
<p>Wir müssen uns also <strong>isolieren können</strong> und unsere <strong>Entwicklungslandschaft muß das unterstützten</strong>, uns dafür die technischen Möglichkeiten geben. Solange es für ein gesamtes Team nur eine Datenbank, auf der alle arbeiten, oder nur einen Application Server gibt, gelingt das nicht. Solche Systeme nenne ich immer scherzhaft <strong>Synchronisationssingularitäten</strong>, also Punkte, an denen alle Arbeiten <strong>zusammenlaufen laufen</strong>. Aber was bedeutet jetzt Isolation für eine Entwicklungslandschaft? </p>
<p>Hier meine Definition:</p>
<blockquote><p>Isolation ist die Fähigkeit einer Entwicklungslandschaft an dem SUD (System Under Development) Änderungen vorzunehmen, ohne dabei von Anderen ungewollt beeinflußt zu werden oder Andere ungewollt zu beeinflußen.</p></blockquote>
<p>Ein sehr gutes praktisches Beispiel für Isolation <strong>unterstützende Werkzeuge in einer Entwicklungslandschaft sind Versionsverwaltungssysteme</strong> wie <a href="http://subversion.tigris.org/">Subversion</a> oder <a href="http://git-scm.com/">Git</a>, das die Isolation durch seinen dezentralen Ansatz noch weiter vorantreibt als früher CVS oder jetzt Subversion. Aber der Einsatz eines Versionskontrollsystems <strong>kann nur ein erster Schritt sein</strong>. Abgesehen davon: zeitgemäße Softwareentwicklung ohne Versionskontrollsystem ist ein Widerspruch in sich. </p>
<p>Heute lassen sich die meisten Systeme, die wir für Entwicklung und Test benötigen ohne Probleme für jeden Entwickler bereitstellen. Eine eigene Datenbank auf dem Laptop, ein <a href="http://mina.apache.org/ftpserver/">lokaler FTP-</a> oder Mailserver oder auch Applikation-Server sind immer möglich. Manche dieser Systeme müssen sogar nicht festinstalliert werden, sondern <strong>können im Rahmen eines Builds installiert</strong> und konfiguriert werden. JBoss, <a href="https://glassfish.dev.java.net/">GlassFish</a> und <a href="http://tomcat.apache.org/">Apache Tomcat</a> können aus ZIP-Archiven vollständig installiert und angepaßte Konfigurationsdateien anschließend generiert werden. Wird eine saubere Installation gebraucht, wird die alte gelöscht und eine neue automatisch installiert. Mit etwas Ehrgeiz ist das durchaus möglich.</p>
<p>Aber Isolation bringt noch weitere Vorteile für die Software-Entwicklung: </p>
<ul>
<li><strong>Ruhe und Ungestörtheit</strong>, weil es nicht ungewollt zu Konflikten mit den Arbeiten von anderen Entwicklern im Team kommt. Änderungen werden nur noch gewollt zusammengeführt.</li>
<li><strong>Verbesserung der Reproduzierbarkeit</strong>, weil alle positiven und negativen Effekte nur durch mich selber verursacht wurden und beispielsweise Testergebnisse so nicht verfälscht werden.</li>
<li><strong>Besseres Konfigurationsmanagement und Setup</strong>, weil Isolation als Ziel besondere Maßnahmen erfordert, die zwangsläufig auch zu Zielen wie besserer Modularisierung und Konfigurierbarkeit führen.</li>
</ul>
<p>Wenn wir beim Aufbau unserer Entwicklungslandschaft Isolation <strong>konsequent von Anfang an</strong> verfolgen und beachten, erhalten wir die Chance <strong>besser im Team zusammenarbeiten</strong> zu können, weil wir es dann geschafft haben <strong>gegenseitige Abhängigkeiten</strong> weiter aufzulösen. Gerade für agil arbeitende Teams sollte Isolation immer ein zu erreichendes Ziel sein, den deren Fehlen <strong>stört den Arbeitsfluß</strong>.</p>
<div class="ressource"><strong>Quellen und Verweise</strong></p>
<ul>
<li><a target="_blank" href="http://www.swe-blog.net/blog/archives/tag/entwicklungslandschaftserie">Alle Artikel der Entwicklungslandschaften-Serie</a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.swe-blog.net/blog/archives/109/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Entwicklungslandschaft Teil 2 &#8211; Schnelligkeit</title>
		<link>http://www.swe-blog.net/blog/archives/103</link>
		<comments>http://www.swe-blog.net/blog/archives/103#comments</comments>
		<pubDate>Sat, 26 Sep 2009 06:39:40 +0000</pubDate>
		<dc:creator>Oliver Fischer</dc:creator>
				<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Blühende Landschaften]]></category>
		<category><![CDATA[Entwicklungslandschaft]]></category>
		<category><![CDATA[Entwicklungslandschaft.Serie]]></category>
		<category><![CDATA[Entwicklungsumgebung]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[Infrastruktur]]></category>

		<guid isPermaLink="false">http://www.swe-blog.net/blog/?p=103</guid>
		<description><![CDATA[ Woher das Wort Schnelligkeit kommt weiß ich leider nicht. Auch ein Blick in den Kluge konnte mir nicht weiterhelfen. Für eine Entwicklunglandschaft bedeutet Schnelligkeit aber etwas ähnliches wie für den Sportler. Im Sport wird Schnelligkeit in zwei Arten aufgeteilt:

Aktionsschnelligkeit und 
Reaktionsschnelligkeit

Aktionsschnell ist jemand, der etwas in kürzerer Zeit machen kann als andere, zum Beispiel [...]]]></description>
			<content:encoded><![CDATA[<p><a href='http://www.swe-blog.net/blog/wp-content/uploads/2009/09/entwicklungslandschaft-schnelligkeit.png'><img src="http://www.swe-blog.net/blog/wp-content/uploads/2009/09/entwicklungslandschaft-schnelligkeit.png" alt="Schnelligkeit als Kriterium einer Entwicklungsumgebung" title="Schnelligkeit als Kriterium einer Entwicklungsumgebung" width="270" height="200" class="alignleft size-full wp-image-104" /></a> Woher das Wort Schnelligkeit kommt weiß ich leider nicht. Auch ein Blick in den <a href="http://de.wikipedia.org/wiki/Etymologisches_W%C3%B6rterbuch_der_deutschen_Sprache" target="_blank">Kluge</a> konnte mir nicht weiterhelfen. Für eine Entwicklunglandschaft bedeutet Schnelligkeit aber etwas ähnliches wie für den Sportler. Im Sport wird Schnelligkeit in zwei Arten aufgeteilt:</p>
<ul>
<li><strong>Aktionsschnelligkeit</strong> und </li>
<li><strong>Reaktionsschnelligkeit</strong></li>
</ul>
<p><strong>Aktionsschnell</strong> ist jemand, der etwas in kürzerer Zeit machen kann als andere, zum Beispiel Laufen. <strong>Reaktionsschnell</strong> ist jemand, der sich in kurzer Zeit auf Signale und Reize reagieren kann.</p>
<p>Auch Entwicklungsumgebungen kennen solche zwei Arten der Schnelligkeit. Die Aktionsschnelligkeit einer Entwicklungumgebung ist die Fähigkeit Entwicklungsaufgaben in möglichst kurzer Zeit effizient durchführen zu können. </p>
<p>Eine <strong>gute Build-Umgebung</strong> erlaubt es uns schnell überprüfen zu können, ob unser Code gebaut werden kann. Eine <strong>gute Testumgebung</strong> schafft uns die Möglichkeit unsere Änderungen schnell überprüfen zu können. Habe ich etwas kaputt gemacht?</p>
<p>Eine Entwicklungslandschaft kann zwar nicht reaktionsschnell sein, zumindest nicht direkt, aber sie kann eine hohe <strong>Änderungsschnelligkeit</strong> haben. Das heißt nichts anderes, als daß sich Änderungen in der Entwicklungslandschaft schnell vornehmen lassen. </p>
<p>Bis hier wird jeder sicherlich zustimmen können und jeder wird wohl auch ein Build-Script haben, daß seinen Code baut oder zumindest etwas ähnliches. Doch gehört dazu noch mehr als das, was in den meisten Entwicklungsumgebungen zu finden ist. Uns geht die Aktionsschnelligkeit <strong>verloren</strong>, wenn wir bei häufigen Tätigkeiten immer manuell eingreifen müssen. Wir sind zwar bei den einzelnen Schritten schnell, verlieren dann aber Zeit beispielsweise mit Kopieren von Dateien oder ähnlichem. </p>
<p>Aber wozu brauchen wir diese Schnelligkeit eigentlich? Sicher will keiner lange auf irgendetwas warten. Das ist klar. Wir brauchen diese Schnelligkeit vorallem für eins: <strong>um flexibel zu bleiben</strong>. Wir alle sind in der einen oder anderen Art faul und sobald bestimmte Aufgaben uns zu aufwendig erscheinen, versuchen wir sie zu umgehen. Wir bauen oder testen weniger und ab dem Punkte sind wir auf dem absteigenden Ast...</p>
<p>Und wie kommen wir zu einer schnellen Entwicklungsumgebung:</p>
<ul>
<li>Analysieren Sie die Abhängigkeiten in ihrer Entwicklungsumgebung und durchtrennen sie sie dort, wo sie nicht notwendig sind.</li>
<li>Cachen Sie Zwischenergebnisse wo immer möglich. Nicht alles muß immer wieder erzeugt oder generiert werden.</li>
<li>Wählen sie die richtigen Tools aus.</li>
</ul>
<p>Um wirklich schnell zu sein, braucht es aber auch einen hohen Automatisierunggrad. Aber das ist ein anderes Thema...</p>
<div class="ressource"><strong>Quellen und Verweise</strong></p>
<ul>
<li><a target="_blank" href="http://www.swe-blog.net/blog/archives/tag/entwicklungslandschaftserie">Alle Artikel der Entwicklungslandschaften-Serie</a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.swe-blog.net/blog/archives/103/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sonnenuntergang</title>
		<link>http://www.swe-blog.net/blog/archives/100</link>
		<comments>http://www.swe-blog.net/blog/archives/100#comments</comments>
		<pubDate>Mon, 07 Sep 2009 06:00:35 +0000</pubDate>
		<dc:creator>Oliver Fischer</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Gernot Starke]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[Infras]]></category>

		<guid isPermaLink="false">http://www.swe-blog.net/blog/?p=100</guid>
		<description><![CDATA[Von Eclipse als Entwicklungsumgebung war ich noch nie begeistert. Eclipse war mir immer zu groß, langsam und schwerfällig. Wohl auch berechtigt, wenn man im Vergleich dazu Intellij IDEA von Jetbrains  aus St. Petersburg benutzt. 
Daher hat mich "I stopped using Eclipse..." Artikel im Blog von Gernot Starke richtig aufrichtig gefreut.
Dazu passend hier noch ein [...]]]></description>
			<content:encoded><![CDATA[<p>Von Eclipse als Entwicklungsumgebung war ich noch nie begeistert. Eclipse war mir immer zu groß, langsam und schwerfällig. Wohl auch berechtigt, wenn man im Vergleich dazu <a href="http://www.jetbrains.com/idea/index.html" target="_blank">Intellij IDEA</a> von <a href="http://www.jetbrains.com/" target="_blank">Jetbrains </a> aus St. Petersburg benutzt. </p>
<p>Daher hat mich "<a target="_blank" href="http://it-and-more.blogspot.com/2009/09/i-stopped-using-eclipse.html">I stopped using Eclipse...</a>" Artikel im Blog von Gernot Starke richtig aufrichtig gefreut.</p>
<p>Dazu passend hier noch ein Ausschnitt von der XING-Seite eines ehemaligen Kollegen:</p>
<p><a href='http://www.swe-blog.net/blog/wp-content/uploads/2009/09/eclipse-must-die.png'><img src="http://www.swe-blog.net/blog/wp-content/uploads/2009/09/eclipse-must-die.png" alt="" title="eclipse-must-die" width="500" height="156" class="aligncenter size-full wp-image-101" /></a></p>
<p>Herzliche Grüße nach Bonn und Köln!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.swe-blog.net/blog/archives/100/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Entwicklungslandschaft Teil 1 &#8211; Blühende Landschaften</title>
		<link>http://www.swe-blog.net/blog/archives/99</link>
		<comments>http://www.swe-blog.net/blog/archives/99#comments</comments>
		<pubDate>Sat, 05 Sep 2009 10:13:14 +0000</pubDate>
		<dc:creator>Oliver Fischer</dc:creator>
				<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Entwicklungslandschaft]]></category>
		<category><![CDATA[Entwicklungslandschaft.Serie]]></category>
		<category><![CDATA[Entwicklungsumgebung]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[Infrastruktur]]></category>

		<guid isPermaLink="false">http://www.swe-blog.net/blog/?p=99</guid>
		<description><![CDATA[Softwareentwickler verbringen die meiste Zeit ihrer Arbeit mit ihrer Entwicklungsumgebung. Daher bin ich oft überrascht, auf welch schlecht aufgebauten Entwicklungsumgebungen ich in Software-Projekten stoße. 
Vielleicht sollte ich aber eher von Entwicklungslandschaft als von -umgebung sprechen, da für mich alles zur Entwicklungslandschaft zählt, was wir für unsere Software-Entwicklung benötigen. Das schließt alles mit ein, angefangen vom [...]]]></description>
			<content:encoded><![CDATA[<p>Softwareentwickler verbringen die meiste Zeit ihrer Arbeit mit ihrer Entwicklungsumgebung. Daher bin ich oft überrascht, auf welch schlecht aufgebauten Entwicklungsumgebungen ich in Software-Projekten stoße. </p>
<p>Vielleicht sollte ich aber eher von Entwicklungslandschaft als von -umgebung sprechen, da für mich alles zur Entwicklungslandschaft zählt, was wir für unsere Software-Entwicklung benötigen. Das schließt alles mit ein, angefangen vom Datenbanksystem bis hin zu Issue-Tracking-System.</p>
<p>Schon <a target="_blank" href="http://www.cs.st-andrews.ac.uk/~ifs/index.html">Ian Sommerville</a> nennt als eine zentrale Anfoderung an Software-Entwicklungsumgebungen (-landschaften), daß verschiedene Werkzeuge für unterschiedliche Phasen zur Verfügung stehen sollen, die Menge der Funktionen der Entwicklungsumgebung aber zu jeder Zeit durch neue Werkzeuge erweitern lassen muss, um neue Funktionen integrieren zu können, da wir nicht wissen, welche Funktionen später umzusetzen sind. Kurz gesagt, sie soll flexibel sein.</p>
<p><a href='http://www.swe-blog.net/blog/wp-content/uploads/2009/09/entwicklungslandschaft-allgemein.png'><img src="http://www.swe-blog.net/blog/wp-content/uploads/2009/09/entwicklungslandschaft-allgemein.png" alt="" title="Aspekte einer Entwicklungslandschaft" width="400" height="295" class="alignleft size-full wp-image-102" /></a></p>
<p>Oft sind Entwicklungslandschaften jedoch das ganze Gegenteil: starr und sogar hinderlich bei der Arbeit. Im einfachsten Falle kosten sie einfach nur Zeit. Die Probleme in einer Entwicklungslandschaft fangen schon an, wenn mehrere Entwickler dazu gezwungen sind auf der gleichen Datenbank parallel zu entwickeln und enden in stundenlangenen Installationen von Tools und deren Konfiguration. </p>
<p>Dabei muß unsere Entwicklungslandschaft genauso flexibel oder besser gesagt agil <img src='http://www.swe-blog.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  sein wie wir selber. Die <strong>gute Entwicklungsumgebung</strong> muß uns bei allen Änderungen unterstützen, uns einladen neues auszuprobieren und flexibel zu bleiben. Sobald wir eine Änderung, einen Test oder Idee verwerfen, nur weil sie nicht mit <strong>angemessenem</strong> Aufwand mit unserer Entwicklungslandschaft umzusetzen ist, ist es Zeit über sie nachzudenken.</p>
<p>Damit dies einfacher fällt, habe ich hier meine Kriterien für eine gute Entwicklungslandschaft zusammengestellt:</p>
<ul>
<li><strong>Angemessenheit</strong> Eine Entwicklungslandschaft muß vom Entwicklungs- und Pflegeaufwand zur Projektgröße und -dauer passen. Je größer, je länger oder je mehr Entwickler an dem Projekt teilnehmen, desto mehr rentiert sich auch ein größerer Aufwand für die Entwicklungsumgebung.
<li><strong>Zweckdienlichkeit</strong> Alle Komponenten der Entwicklungslandschaft sind effektiv für ihren Einsatzzweck und effizient einsetzbar.
<li><strong>Isolation</strong> Jeder Entwickler muß die Möglichkeit und Sicherheit haben, Änderungen unabhängig von anderen durchführen zu können und auch nicht durch die Änderungen anderer ungewollt beeinflußt zu werden. Und hierbei denke ich nicht nur an den Einsatz eines Versionskontrollsystems.
<li><strong>Automatisierung</strong> Wiederkehrende Tätigkeiten müssen automatisierbar sein. Die Entwicklungsumgebung muß hierfür die notwendige Unterstützung anbieten. Stichwörter sind hier beispielsweise <a href="http://ant.apache.org">Ant</a> und <a href="http://maven.apache.org">Maven</a>.
<li><strong>Schnelligkeit</strong> Jede regelmäßig ausgeführte Tätigkeit muss sich in der Entwicklungslandschaft schnell ausführen lassen.
<li><strong>Anpassbarkeit</strong> Jeder Entwickler muß die Möglichkeit haben seine persönliche Entwicklungslandschaft an seinen Erfordernissen entsprechend zu konfigurieren.
<li><strong>Erweiterbarkeit</strong> Neue temporär und permantente Funktionen müssen sich leicht in die bestehende Entwicklungslandschaft integrieren lassen.
<li><strong>Neutralität</strong> Einzelne Komponenten der Entwicklungslandschaft müssen sich leicht gegen andere Tools mit einer äquivalenten Funktionalität austauschen lassen. Funktionalität und Werkzeug müssen also so weit wie möglich orthogonal sein.
</ul>
<p>In den nächsten Tagen werde ich die einzelnen Punkte näher erläutern...</p>
<div class="ressource"><strong>Quellen und Verweise</strong></p>
<ul>
<li><a target="_blank" href="http://www.swe-blog.net/blog/archives/tag/entwicklungslandschaftserie">Alle Artikel der Entwicklungslandschaften-Serie</a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.swe-blog.net/blog/archives/99/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
