<?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; Qualität</title>
	<atom:link href="http://daraff.ch/category/softwareengineering/qualitat/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>Warum sollte man einen Codsniffer verwenden?</title>
		<link>http://daraff.ch/2012/02/warum-sollte-man-einen-codsniffer-verwenden/</link>
		<comments>http://daraff.ch/2012/02/warum-sollte-man-einen-codsniffer-verwenden/#comments</comments>
		<pubDate>Sat, 04 Feb 2012 15:30:22 +0000</pubDate>
		<dc:creator>DaRaFF</dc:creator>
				<category><![CDATA[Qualität]]></category>
		<category><![CDATA[Tools / Frameworks]]></category>

		<guid isPermaLink="false">http://daraff.ch/?p=1689</guid>
		<description><![CDATA[Ich habe zwar nächsten Dienstag meine Abschlussprüfungen, aber das Thema Codesniffer brennt mir momentan auf den Nägeln In letzter Zeit habe ich mich viel mit Testing und Softwarequalität beschäftigt. Da ich von diesen Themen und Tools überzeugt bin, habe ich &#8230; <a href="http://daraff.ch/2012/02/warum-sollte-man-einen-codsniffer-verwenden/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ich habe zwar nächsten Dienstag meine Abschlussprüfungen, aber das Thema Codesniffer brennt mir momentan auf den Nägeln <img src='http://daraff.ch/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>In letzter Zeit habe ich mich viel mit Testing und Softwarequalität beschäftigt. Da ich von diesen Themen und Tools überzeugt bin, habe ich sie bedenkenlos eingesetzt. Im Geschäft habe ich auch Jenkins aufgesetzt und betrieben.</p>
<h1>Überzeugungsarbeit für den Codesniffer</h1>
<p>Ich versuchte stets die Leute in den Projekten davon zu überzeugen, dass sie phpcs (PHP Codesniffer) auf der Konsole vor dem einchecken durchlaufen lassen sollten und dann entsprechend den Fehlern die Korrekturen durchführen sollten. Als sie meine Anweisung mit einem &#8220;WARUM?&#8221; erwiderten, antwortete ich jeweils, dass der Code so halt einheitlicher und aufgeräumter wirkt.</p>
<h1>Warum überhaupt einen Codesniffer verwenden?</h1>
<p>Auf einmal fragte ich mich selber, warum man einen Codesniffer einsetzen sollte. Bringt es dem Kunden einen Nutzen, wenn der Code dahinter &#8220;schön&#8221; und einheitlich aussieht? Ich versuchte also herauszufinden, warum es Sinn ergibt, wenn man sich Standards bei der Formatierung hält.</p>
<p>Ich forschte also ein bisschen nach und bin auf zwei gute Erklärungen gestossen.</p>
<h1>Keine Unterbrechung des Flows</h1>
<p>Es ist allseits bekannt, dass etwas neues, unerwartetes viel mehr Energie kostet. Genauso ist es bei einem Codestyle, der die ganze Zeit wechselt. Man benötigt neben dem Lösen des Problems noch viel Energie, die verschiedenen Codestyles mental aufzuarbeiten.</p>
<p>Wenn man einen bestimmen Codestyle kennt, kann man sich auf die wahren Probleme konzentrieren. Die Klammern, Einrückungen usw. verschwinden und man konzentriert sich auf die Aufgabe.</p>
<p>Je weniger der Entwickler oder Reviewer gestört wird, desto schneller ist er mit seiner Arbeit fertig. Dies hat also einen positiven Nutzen für den Kunden.</p>
<h1>Keine Diskussionen mehr über den Codestyle</h1>
<p>Wenn man sich auf einen Standard einigt (z.B. Symfony2, PEAR, Zend, &#8230;), so müssen sich die Entwickler nicht mehr darüber streiten, wie Code formatiert werden soll. Dies bringt dem Kunden einen unmittelbaren nutzen, nämlich keine verschwendete Zeit mit Diskussionen über den Codestyle.</p>
<p>&nbsp;</p>
<h1>Feedback</h1>
<p>Was haltet ihr vom Einsatz eines Codesniffers?</p>
<p>Warum sollte man ihn einsetzen oder warum gerade nicht?</p>
<p>Ich würde mich über Feedback freuen!</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
 <p><a href="http://daraff.ch/?flattrss_redirect&amp;id=1689&amp;md5=97b04e47ca0bc86bcdd34d335b42c684" 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/2012/02/warum-sollte-man-einen-codsniffer-verwenden/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<atom:link rel="payment" href="http://daraff.ch/?flattrss_redirect&amp;id=1689&amp;md5=97b04e47ca0bc86bcdd34d335b42c684" type="text/html" />
	</item>
		<item>
		<title>Crap Code &#8211; Warum gibt es so viel schlechte Software?</title>
		<link>http://daraff.ch/2010/12/crap-code-warum-gibt-es-so-viel-schlechte-software/</link>
		<comments>http://daraff.ch/2010/12/crap-code-warum-gibt-es-so-viel-schlechte-software/#comments</comments>
		<pubDate>Wed, 01 Dec 2010 12:32:42 +0000</pubDate>
		<dc:creator>DaRaFF</dc:creator>
				<category><![CDATA[Qualität]]></category>
		<category><![CDATA[clean code]]></category>
		<category><![CDATA[software qualität]]></category>

		<guid isPermaLink="false">http://daraff.ch/?p=1484</guid>
		<description><![CDATA[Inspiriert vom Artikel von Nils Langner auf phphatesme &#8211; Sauber bleiben! Ein paar Ansätze &#8211; möchte ich nun aus meiner Sicht ein paar wichtige Gründe aufzählen, warum es so viel schlechte Software in dieser grossen weiten Welt gibt. Es geht &#8230; <a href="http://daraff.ch/2010/12/crap-code-warum-gibt-es-so-viel-schlechte-software/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Inspiriert vom Artikel von Nils Langner auf phphatesme &#8211; <a href="http://www.phphatesme.com/blog/projektwerk/sauber-bleiben-ein-paar-ansatze/">Sauber bleiben! Ein paar Ansätze</a> &#8211; möchte ich nun aus meiner Sicht ein paar wichtige Gründe aufzählen, warum es so viel schlechte Software in dieser grossen weiten Welt gibt. Es geht hier nicht darum, wie es aus Kundensicht aussieht, sondern was hinter den Kulissen, nämlich dem Sourcecode läuft.</p>
<h1>Die Softwareentwicklungsbranche ist noch zu wenig professionell</h1>
<p>Einige Personen und Firmen mögen zwar professionell sein, aber sicher nicht die grosse Masse.<br />
Gemäss <a href="http://www.clean-code-developer.de/">Clean Code Developer</a> bedeutet</p>
<pre>Professionalität = Bewusstheit + Prinzipien</pre>
<p>Es muss ein Bewusstsein und ein Wille vorhanden sein, sauberen “schönen” Code aufgrund von Prinzipien zu erstellen. Es muss einem Bewusst sein, was passiert, wenn man sich nicht an die Prinzipien hält und jeder gerade so entwickelt, wie es ihm passt.</p>
<h1>Es ist auch mit schlechter Software möglich Geld zu verdienen</h1>
<p>Und das nicht mal wenig. Wenn man eine schlechte Applikation ausliefert, welche viele Fehler hat, kann man auch häufig viel Geld für Korrekturen und Erweiterungen verlangen. Somit ermöglicht dies auch eher unprofessionellen Firmen sehr viel Geld zu verdienen und so weiter zu fahren wie bisher.</p>
<h1>Kunden haben zu wenig Erfahrung mit Software</h1>
<p>Es ist klar das es für viele Kunden schwierig einzuschätzen ist, ob ein Produkt / eine Firma professionell ist. Häufig bindet sich ein Kunde mit hohen Investitionen an ein Produkt / eine Firma. Die nachfolgenden teuren Korrekturen und Erweiterungen sind immer noch günstiger, wie ein Wechsel auf ein anderes Produkt. Daher fährt man mit dem gleichen Kurs weiter. Erst wenn eine hohe Schmerzgrenze erreicht ist, kann sich der Kunde für einen Wechsel entscheiden.</p>
<h1>Die Branche entwickelt sich sehr schnell weiter</h1>
<p>Was gestern noch richtig war, kann heute schon veraltet sein. Schlechter Code der vor 10 Jahren geschrieben wurde, ist heute immer noch schlecht. Aber Methodiken haben sich mit der Zeit verändert. Softwaredesigns, welche vor 10 Jahren ein absoluter Hype waren, sind heute schon ein bisschen angestaubt.</p>
 <p><a href="http://daraff.ch/?flattrss_redirect&amp;id=1484&amp;md5=1fafed5f8ca32913dbb3552a3045bfee" 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/12/crap-code-warum-gibt-es-so-viel-schlechte-software/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		<atom:link rel="payment" href="http://daraff.ch/?flattrss_redirect&amp;id=1484&amp;md5=1fafed5f8ca32913dbb3552a3045bfee" type="text/html" />
	</item>
		<item>
		<title>PHP Codesniffer &#8211; Regeln definieren mit ruleset.xml</title>
		<link>http://daraff.ch/2010/09/php-codesniffer-regeln-definieren-mit-ruleset-xml/</link>
		<comments>http://daraff.ch/2010/09/php-codesniffer-regeln-definieren-mit-ruleset-xml/#comments</comments>
		<pubDate>Wed, 01 Sep 2010 17:56:14 +0000</pubDate>
		<dc:creator>DaRaFF</dc:creator>
				<category><![CDATA[Qualität]]></category>
		<category><![CDATA[Tools / Frameworks]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[phpcs]]></category>
		<category><![CDATA[software qualität]]></category>

		<guid isPermaLink="false">http://daraff.ch/?p=1370</guid>
		<description><![CDATA[Aktuell beschäftige ich mich intensiv mit Softwarequalität und darum möchte ich einen Bericht über den aktuellsten PHP_CodeSniffer schreiben. Regelsets definieren &#8211; der alte Weg Vor einigen Monaten habe ich den CodeSniffer durch die Artikelserie von Nils auf phphatesme entdeckt. Der &#8230; <a href="http://daraff.ch/2010/09/php-codesniffer-regeln-definieren-mit-ruleset-xml/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Aktuell beschäftige ich mich intensiv mit Softwarequalität und darum möchte ich einen Bericht über den aktuellsten PHP_CodeSniffer schreiben.</p>
<h4><strong>Regelsets definieren &#8211; der alte Weg</strong></h4>
<p>Vor einigen Monaten habe ich den CodeSniffer durch die <a href="http://www.phphatesme.com/blog/tools/php-code-sniffer-parameter-und-eigene-regelsets-standard/" target="_blank">Artikelserie von Nils auf phphatesme</a> entdeckt. Der CodeSniffer wurde von mir direkt ausprobiert. Kurze Zeit später habe ich eigene Regeln erstellt (Regelset Ordner mit PHP kopieren und anpassen&#8230;), was aber eine recht mühsame Angelegenheit ist. Zum Glück gibt es jetzt eine neue Möglichkeit&#8230;</p>
<h4><strong>Regelsets definieren  - neu mit XML</strong></h4>
<p><span style="color: #000000;">Ab der Version 1.3.0 kann man die Regeln sehr einfach mit einem XML File konfigurieren. Hier ein Beispiel:</span></p>
<p><script src="http://gist.github.com/563640.js"></script></p>
<p>Das XML sagt folgendes:</p>
<ul>
<li>Nimm alle PEAR Sniff Regeln</li>
<li>Schliesse von PEAR die Regeln LineLength und ScopeIndent aus</li>
<li>Ergänze eine einzelne Regel OpeningFunctionBraceKernighanRitchie</li>
</ul>
<p>Somit hat man (wenn man die Regeln mit <a href="http://pear.php.net/package/PHP_CodeSniffer/docs/1.3.0a1/" target="_blank">Namen</a> kennt) innerhalb von wenigen Minuten seine eigenes Ruleset zusammengestellt. Weitere Tips gibts bei <a href="http://www.squizlabs.com/view?a=2697" target="_blank">Squizlabs</a> nachzulesen.</p>
<h4><strong>Anwendung Regelset</strong></h4>
<p><strong>Möglichkeit 1</strong></p>
<p>Das Regelset kann ich nun im Standards Ordner von Codesniffer ablegen (unter Ubuntu /usr/share/php/PHP/CodeSniffer/Standards/&lt;RegelsetName&gt;/ruleset.xml).</p>
<p>Danach einfach folgenden Aufruf machen:</p>
<p>phpcs &#8211;standard=&lt;RegelsetName&gt; /path/to/code</p>
<p><strong>Möglichkeit 2</strong></p>
<p>Das XML kann irgendwo abgelegt werden und muss dann so aufgerufen werden:</p>
<p>phpcs &#8211;standard=/path/to/ruleset.xml /path/to/code</p>
 <p><a href="http://daraff.ch/?flattrss_redirect&amp;id=1370&amp;md5=e566fda542119eac44c45fb71c4bc067" 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/09/php-codesniffer-regeln-definieren-mit-ruleset-xml/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<atom:link rel="payment" href="http://daraff.ch/?flattrss_redirect&amp;id=1370&amp;md5=e566fda542119eac44c45fb71c4bc067" type="text/html" />
	</item>
		<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>
	</channel>
</rss>

