<?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/"
	xmlns:series="http://unfoldingneurons.com/"
	>

<channel>
	<title>DaRaFF&#039;s Blog &#187; testen</title>
	<atom:link href="http://daraff.ch/tag/testen/feed/" rel="self" type="application/rss+xml" />
	<link>http://daraff.ch</link>
	<description>Gedanken über Themen, die mich beschäftigen</description>
	<lastBuildDate>Sun, 05 Feb 2012 07:02:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Software – Hauptsache es läuft…</title>
		<link>http://daraff.ch/2010/07/software-hauptsache-es-lauft/</link>
		<comments>http://daraff.ch/2010/07/software-hauptsache-es-lauft/#comments</comments>
		<pubDate>Tue, 27 Jul 2010 11:38:18 +0000</pubDate>
		<dc:creator>DaRaFF</dc:creator>
				<category><![CDATA[Qualität]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[software qualität]]></category>
		<category><![CDATA[testen]]></category>

		<guid isPermaLink="false">http://daraff.ch/?p=1051</guid>
		<description><![CDATA[Immer wieder höre ich den Satz von Entwicklern und Chef&#8217;s: &#8220;Hauptsache das Programm läuft&#8230;&#8221;. Inzwischen reagiere ich ziemlich allergisch gegen diese Aussage und versuche dann auch prompt den Leuten zu erklären, warum es nicht genügt, dass ein Programm einfach nur &#8230; <a href="http://daraff.ch/2010/07/software-hauptsache-es-lauft/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Immer wieder höre ich den Satz von Entwicklern und Chef&#8217;s: &#8220;Hauptsache das Programm läuft&#8230;&#8221;. Inzwischen reagiere ich ziemlich allergisch gegen diese Aussage und versuche dann auch prompt den Leuten zu erklären, warum es nicht genügt, dass ein Programm einfach nur läuft. Häufig mit mässigem Erfolg. Ich versuche in diesem Post aber aufzuzeigen, was ich darüber denke, wie Softwareentwicklung funktionieren muss.</p>
<p>Schlüsselfaktoren für eine langfristig gute und qualitativ hochwertige Software sind:</p>
<ul>
<li>Kommunikation zwischen den beteiligten Personen (Projektleiter, Entwickler, Kunde)</li>
<li>Automatisierung wo es nur geht -&gt; Continuous integration</li>
<li>Stimmung / Motivation im Team -&gt; <a href="http://daraff.ch/2010/06/wie-werde-ich-ein-besserer-softwareentwickler/" target="_blank">Der Wille sich ständig verbessern zu wollen</a></li>
<li>Abdeckung der Software durch Tests -&gt; Unit Tests, Integration Tests, &#8230;</li>
<li>Kontinuierliches Refactoring -&gt; Die Software ändert sich schliesslich immer</li>
<li>Regelmässige Code Reviews</li>
<li>Modularer und unabhängiger Aufbau der Softwarekomponenten</li>
</ul>
<p>Es ist zwar etwas zusammengewürfelt, aber ich möchte einfach noch ein paar Gedanken zu den oben aufgezählten Punkten erwähnen.</p>
<p><strong>Wenn das Programm läuft ist man nur halb fertig</strong></p>
<p>Wenn man glaubt, das man mit einer Funktion fertig ist, hat man normalerweise etwa die hälfte geschafft (ausser man entwickelt mit TDD, da ist&#8217;s besser)Wenn bei uns die Lehrlinge jeweils sagen, dass sie fertig sind, frage ich sie:</p>
<ul>
<li> Ist der Code dokumentiert?</li>
<li>Ist der Code mit Tests abgedeckt?</li>
<li>Hat jemand ein Review von deinem Code gemacht?</li>
<li>Hast du den Code schon refaktorisiert bzw. aufgeräumt?</li>
<li>Läuft es auch auf einer anderen Installation?</li>
</ul>
<p>Natürlich ist die Antwort eigentlich immer nein (wahrscheinlich wie bei den meisten Entwicklern). Man sollte sich also auch unter Zeitdruck immer fragen, ob die Aufgabe auch wirklich erledigt ist. Niemals sollte man sich damit zufrieden geben, dass es einfach nur läuft, auch wenn einem dies jemand anders so vermitteln will.</p>
<p><strong>Modularer Aufbau von Software</strong></p>
<p>Inzwischen bin ich der festen Überzeugung, dass Software modular aufgebaut und in kleine Teile unterteilt sein sollte. Viele kleine Legosteine, welche keine Abhängigkeiten haben, sind viel einfacher zu einem ganzen zusammenzufügen, also grosse und undurchschaubare Konstrukte. Zwei wichtige Prinzipien sind hier <a href="http://www.clean-code-developer.de/wiki/CcdOrangerGrad#SeparationofConcerns" target="_blank">Separation of Concern</a> und <a href="http://www.clean-code-developer.de/wiki/CcdGelberGrad#DependencyInversionPrinciple" target="_blank">Dependency Inversion Principle</a>.</p>
<p><strong>Testen</strong></p>
<p>Immer wieder höre ich, dass z.B. Unit Testing nur Zeit benötigt und eigentlich gar nicht soviel bringt. Diesem Punkte kann ich absolut nicht zustimmen. Testing ist etwas absolut essentielles.</p>
<p>Schreibe ich Tests, formuliere ich meine Anforderungen an die Funktion. Ausserdem stelle ich sicher, dass meine Architektur im kleinen gut ist (bei zu vielen Abhängigkeiten wird es schwierig überhaupt zu testen). Zudem muss ich keine Angst vor Refactorings haben. Aussagen wie diese gibt es nicht mehr: &#8220;Ich mach mal lieber nichts an dieser Funktion, ich weiss ja nicht, ob sie nachher noch funktioniert&#8221;.</p>
<p><strong>Refactoring</strong></p>
<p>Refactoring ist immer wieder nötig, da sich die Software auch ständig ändert. Wer kein Refactoring macht, sondern alles an das Bestehende anhängt, wird über kurz oder lang einen riesen Krüppel generieren.</p>
<p><strong>Code Reviews</strong></p>
<p>Code Reviews haben mehrere Vorteile. Man kann mit anderen kommunizieren und so auch seinen Horizont erweitern. Ausserdem sieht jemand anders häufig Fehler oder unklare Konstrukte, die einem so nie aufgefallen wären.</p>
<p><strong>Zusammenhang zwischen Code Reviews, Modularität, Testing und Refactoring</strong></p>
<p>Die Zusammenhänge ergeben sich eigentlich von alleine. Um gute Software, sprich unabhängige, modulare Software zu produzieren, muss man sie mit Tests abdecken. Da sich Software ständig ändert, muss sie Refaktorisiert werden, ohne Tests ist dies nicht ohne Fehler möglich. Die Code Reviews unterstützen diesen Prozess.</p>
 <p><a href="http://daraff.ch/?flattrss_redirect&amp;id=1051&amp;md5=fb5e0f660963b83bfd209e540e63c881" title="Flattr" target="_blank"><img src="http://daraff.ch/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://daraff.ch/2010/07/software-hauptsache-es-lauft/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<atom:link rel="payment" href="http://daraff.ch/?flattrss_redirect&amp;id=1051&amp;md5=fb5e0f660963b83bfd209e540e63c881" type="text/html" />
	</item>
		<item>
		<title>Javascript Unit Testing mit JsTestDriver</title>
		<link>http://daraff.ch/2010/07/javascript-unit-testing-mit-jstestdriver/</link>
		<comments>http://daraff.ch/2010/07/javascript-unit-testing-mit-jstestdriver/#comments</comments>
		<pubDate>Sat, 24 Jul 2010 06:00:07 +0000</pubDate>
		<dc:creator>DaRaFF</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Qualität]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[jstestdriver]]></category>
		<category><![CDATA[mock]]></category>
		<category><![CDATA[software qualität]]></category>
		<category><![CDATA[test driven development]]></category>
		<category><![CDATA[testen]]></category>
		<category><![CDATA[xUnit]]></category>

		<guid isPermaLink="false">http://daraff.ch/?p=1009</guid>
		<description><![CDATA[Einführung Da ich mich momentan sehr für Qualität in der Softwareentwicklung interessiere, darf das Unit Testing natürlich nicht fehlen. Mit PHPUnit konnte ich nun schon einige sehr positive Erfahrungen machen. Da auch viele PHP Projekte mit Javascript arbeiten, suchte ich &#8230; <a href="http://daraff.ch/2010/07/javascript-unit-testing-mit-jstestdriver/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>Einführung</strong></p>
<p>Da ich mich momentan sehr für Qualität in der Softwareentwicklung interessiere, darf das Unit Testing natürlich nicht fehlen. Mit PHPUnit konnte ich nun schon einige sehr positive Erfahrungen machen. Da auch viele PHP Projekte mit Javascript arbeiten, suchte ich deshalb auch nach einen Testwerkezeug für JS.<br />
Auf der Webseite <a href="http://testdrivenwebsites.com/2010/04/19/java-script-xunit-style-frameworks-comparison/" target="_blank">Test Driven Websites</a> bin ich auf einen schönen Javascript Unit Testing Framework Vergleich gestossen. Der Favorit war ganz klar JsTestDriver und nach einigem weiteren Surfen im Netz, hat sich für mich dieser Eindruck bestätigt. Da es sehr viele Test Frameworks für Javascript gibt, habe ich den allgemeinen Eindrücken im Netz einfach vertraut und mich für JsTestDriver entschieden.</p>
<p><strong>Highlights von JsTestDriver</strong></p>
<ul>
<li>xUnit konformer Syntax (sprich, der Syntax lehnt sich an PHPUnit oder Junit an)</li>
<li>Die Tests benötigen kein HTML File, wie in anderen JS Testframeworks</li>
<li>Client/Server Architektur für Tests (Das Prinzip ist ähnlich wie bei Selenium) -&gt; Der Test-Server muss somit nicht lokal laufen</li>
<li>Durch die Client/Server Architektur können mehrere Browser gleichzeitig getestet werden</li>
<li>Plugin für Eclipse und IntelliJ IDEA &#8211; bei jedem Save werden die Tests automatisch durchgeführt</li>
<li>Plugin Architektur &#8211; JsTestDriver bietet Plugins um andere Unit Testing Frameworks oder auch Mocking Frameworks zu integrieren</li>
<li>Problemlos in Continuous Integration Prozess integrierbar</li>
</ul>
<p><strong>Stolpersteine</strong></p>
<ul>
<li>JsTestDriver besitzt keine Möglichkeit zu mocken (ok, alle anderen JS Frameworks auch nicht). Es kann aber problemlos ein Mocking Framework eingebunden werden</li>
<li>Achtung bei globalen Variablen/Funktionen/Objekte &#8211; werden die globalen Variablen beim Testdurchlauf überschrieben, haben sie beim nächsten Durchlauf immer noch den überschriebenen Wert. Dies gilt so lange, bis entweder der Server neu gestartet wird, oder das Source File, wo die Variable deklariert wurde verändert wird. Der Grund ist Performance: Der Server cacht alle .js Dateien und lädt sie nur neu, wenn eine Datei auch verändert wurde.</li>
</ul>
<p><strong>Installation</strong></p>
<p>Auf der JsTestDriver <a href="http://code.google.com/p/js-test-driver/wiki/GettingStarted" target="_blank">Homepage</a>, wird sehr einfach beschrieben, wie man das Framework installieren und konfigurieren kann.<br />
Auf der <a href="http://blog.james-carr.org/2009/06/16/more-test-driven-development-with-javascript-jstestdriver/" target="_blank">Homepage</a> von James Carr erfährt man weitere nette Details über JsTestDriver.</p>
<p><strong>Code Example</strong></p>
<pre class="brush:js">TestCase("MyTestCase", {
    setUp: function() {
        //...
    },

    testAssertionWithMessage: function() {
        assertTrue("this is not true", false);
    },

    testAssertionWithoutMessage: function() {
        var actual = 5;
        assertEqual(5, actual);
    },

    tearDown: function() {
        //...
    }
};</pre>
<p><strong>Fazit</strong></p>
<p>JsTestDriver ist für mich absolut empfehlenswert. Ich konnte mich dank den PHPUnit Kenntnissen sehr rasch im Framework zurechtfinden und hatte schon nach kurzer Zeit die ersten Tests geschrieben. Die grössten Vorteile sind für mich: CI, erweiterbar mit anderen Frameworks, Multibrowsertesting</p>
 <p><a href="http://daraff.ch/?flattrss_redirect&amp;id=1009&amp;md5=20fc354db0d3ab153a353c81f1313d65" title="Flattr" target="_blank"><img src="http://daraff.ch/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://daraff.ch/2010/07/javascript-unit-testing-mit-jstestdriver/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<atom:link rel="payment" href="http://daraff.ch/?flattrss_redirect&amp;id=1009&amp;md5=20fc354db0d3ab153a353c81f1313d65" type="text/html" />
	</item>
		<item>
		<title>Buchrezension Selenium</title>
		<link>http://daraff.ch/2010/07/buchrezension-selenium/</link>
		<comments>http://daraff.ch/2010/07/buchrezension-selenium/#comments</comments>
		<pubDate>Sat, 17 Jul 2010 11:47:46 +0000</pubDate>
		<dc:creator>DaRaFF</dc:creator>
				<category><![CDATA[Buchrezension]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[automatisierung]]></category>
		<category><![CDATA[integrationstest]]></category>
		<category><![CDATA[oberflächentest]]></category>
		<category><![CDATA[selenium]]></category>
		<category><![CDATA[testen]]></category>
		<category><![CDATA[tool]]></category>
		<category><![CDATA[webapplikation]]></category>

		<guid isPermaLink="false">http://daraff.ch/?p=955</guid>
		<description><![CDATA[Mit dem heutigen Artikel möchte ich eine weitere Buchrezension präsentieren. Es handelt sich um das Buch Selenium &#8211; Web-Applikationen automatisiert testen von Michael Kain. Kurze Erklärung zum Thema Selenium ist ein browserunabhängiges Tool, um automatisierte Oberflächen-Tests in Webapplikationen zu generieren &#8230; <a href="http://daraff.ch/2010/07/buchrezension-selenium/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Mit dem heutigen Artikel möchte ich eine weitere Buchrezension präsentieren. Es handelt sich um das Buch Selenium &#8211; Web-Applikationen automatisiert testen von Michael Kain.</p>
<p><iframe src="http://rcm-de.amazon.de/e/cm?lt1=_blank&#038;bc1=FFFFFF&#038;IS2=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=daraff-21&#038;o=3&#038;p=8&#038;l=as1&#038;m=amazon&#038;f=ifr&#038;asins=3937514570" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></p>
<p><span style="font-weight: normal;" mce_style="font-weight: normal;"><span mce_name="strong" mce_style="font-weight: bold;" style="font-weight: bold;" class="Apple-style-span">Kurze Erklärung zum Them</span></span><span style="font-weight: normal;" mce_style="font-weight: normal;"><span mce_name="strong" mce_style="font-weight: bold;" style="font-weight: bold;" class="Apple-style-span">a</span></span></p>
<p>Selenium ist ein browserunabhängiges Tool, um automatisierte Oberflächen-Tests in Webapplikationen zu generieren und dann auch durchzuführen. Es ist somit möglich, verhalten von Benutzern 1:1 nachzuspielen und in einem continuous integration Prozess zu verwenden.</p>
<p><span style="font-weight: normal;" mce_style="font-weight: normal;"><span mce_name="strong" mce_style="font-weight: bold;" style="font-weight: bold;" class="Apple-style-span">Teil 1 &#8211; Einführung</span></span></p>
<p>Im ersten Teil des Buches wird eine Einführung zu Selenium dargelegt. Was gibt es in Selenium für Module und für welche Art von Tests kann das Tool verwendet werden.</p>
<p><span style="font-weight: normal;" mce_style="font-weight: normal;"><span mce_name="strong" mce_style="font-weight: bold;" style="font-weight: bold;" class="Apple-style-span">Teil 2 &#8211; Die Selenium Module</span></span></p>
<p>Im zweiten Teil des Buches werden einem die verschiedenen Selenium Module und Selenese erklärt.</p>
<ul>
<li>Selenese -&gt; Sprache</li>
<li>Selenium IDE -&gt; Firefox Plugin, um sich Tests einfach über den Browser zusammenzuklicken</li>
<li>Selenium Remote Control -&gt; Testsequenzen über einen Remote Server absetzen und ausführen</li>
<li>Selenium Grid -&gt; Ausführen von Tests auf mehreren Servern mit versch. Browsern und versch. Betriebsystemen</li>
</ul>
<p><span style="font-weight: normal;" mce_style="font-weight: normal;"><span mce_name="strong" mce_style="font-weight: bold;" style="font-weight: bold;" class="Apple-style-span">Teil 3 &#8211; Tips und Tricks + API</span></span></p>
<p>Im letzten Teil des Buches werden noch ein paar Tricks zu verschiedenen Themen aufgezeigt und am Schluss gibt es nochmals eine detaillierte Auflistung der API zu sehen.</p>
<p><span style="font-weight: normal;" mce_style="font-weight: normal;"><span mce_name="strong" mce_style="font-weight: bold;" style="font-weight: bold;" class="Apple-style-span">Fazit</span></span></p>
<p>Das Buch listet alle Module und Befehle von Selenium auf und erklärt diese. Es ist sozusagen ein Selenium &#8211;help. Daher hielt sich meine Begeisterung während des Lesens auch in Grenzen.</p>
<p>Folgende Punkte wurden nicht oder nur in einigen wenigen Sätzen angesprochen:</p>
<ul>
<li>Was sind best practises für Oberflächentests?</li>
<li>Wie wird ein solcher Oberflächentest sinnvollerweise aufgebaut?</li>
<li>Was für eine Testabdeckung macht Sinn?</li>
<li>Welche Teile einer Applikation sollten mit Oberflächentests getestet werden?</li>
<li>Wie können/sollen Unittests mit Oberflächentests kombiniert werden?</li>
<li>Wie können die Testergebnisse sinnvoll validiert werden?</li>
<li>&#8230;</li>
</ul>
<p>Unter Selenium HQ findet man die im Buch beschriebenen Infos auch, einfach auf Englisch.</p>
<p>Trotz der negativen Buchkritik ist Selenium ein sensationelles Instrument, um Oberflächentests zu automatisieren. Ich werde bei Gelegenheit noch einen Artikel darüber schreiben, wenn dies von euch gewünscht wird.</p>
<p><span mce_name="strong" mce_style="font-weight: bold;" style="font-weight: bold;" class="Apple-style-span">Weiterführende Quellen</span></p>
<ul>
<li><a href="http://seleniumhq.org/" mce_href="http://seleniumhq.org/" target="_blank">http://seleniumhq.org/</a></li>
</ul>
 <p><a href="http://daraff.ch/?flattrss_redirect&amp;id=955&amp;md5=35bb66a7202f6fd568181ac6d3ca0abb" title="Flattr" target="_blank"><img src="http://daraff.ch/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://daraff.ch/2010/07/buchrezension-selenium/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<atom:link rel="payment" href="http://daraff.ch/?flattrss_redirect&amp;id=955&amp;md5=35bb66a7202f6fd568181ac6d3ca0abb" type="text/html" />
	</item>
	</channel>
</rss>

