<?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>PHP hates me - Der PHP Blog &#187; Qualitätssicherung</title>
	<atom:link href="http://www.phphatesme.com/archives/category/qualitatssicherung/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.phphatesme.com</link>
	<description>PhpHatesMe, but that&#039;s ok!</description>
	<lastBuildDate>Wed, 08 Sep 2010 15:38:18 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Weniger Code-Redundanz durch Design Patterns</title>
		<link>http://www.phphatesme.com/blog/qualitatssicherung/weniger-code-redundanz-durch-design-patterns/</link>
		<comments>http://www.phphatesme.com/blog/qualitatssicherung/weniger-code-redundanz-durch-design-patterns/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 05:00:27 +0000</pubDate>
		<dc:creator>ebene7</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Qualitätssicherung]]></category>
		<category><![CDATA[phmnetwork]]></category>

		<guid isPermaLink="false">http://blog.ebene7.com/?p=1287</guid>
		<description><![CDATA[Heute habe ich eine Artikel für euch, der mir besonders gefällt, weil er auf einfache Weise mehrere interessante Themen vereint. Und, wie sollte es auch anders sein, geht es wieder um unsere Models, um Entwurfsmuster und den Weltfrieden. *hust*
Bevor ich aber nun der Miss World 2010 die Scherpe streitig mache, fange ich lieber mal an&#8230;
Stellen [...]]]></description>
			<content:encoded><![CDATA[Heute habe ich eine Artikel für euch, der mir besonders gefällt, weil er auf einfache Weise mehrere interessante Themen vereint. Und, wie sollte es auch anders sein, geht es wieder um unsere Models, um Entwurfsmuster und den Weltfrieden. *hust*
Bevor ich aber nun der Miss World 2010 die Scherpe streitig mache, fange ich lieber mal an&#8230;
Stellen [...]]]></content:encoded>
			<wfw:commentRss>http://www.phphatesme.com/blog/qualitatssicherung/weniger-code-redundanz-durch-design-patterns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Einfache UnitTests für Magento</title>
		<link>http://www.phphatesme.com/blog/qualitatssicherung/einfache-unittests-fur-magento/</link>
		<comments>http://www.phphatesme.com/blog/qualitatssicherung/einfache-unittests-fur-magento/#comments</comments>
		<pubDate>Tue, 24 Aug 2010 05:00:39 +0000</pubDate>
		<dc:creator>ebene7</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Qualitätssicherung]]></category>
		<category><![CDATA[phmnetwork]]></category>

		<guid isPermaLink="false">http://blog.ebene7.com/?p=1118</guid>
		<description><![CDATA[Seit nun knapp fünf Monaten stelle ich mich der Herausforderung saubere Softwareentwicklung und Magento in Einklang zu bringen. Ein kleiner Schritt in diese Richtung war der Einsatz von UnitTests, um mögliche Fehler während der Entwicklung schneller zu finden.
Viele Fehler treten bei Magento schon durch eine fehlerhafte Konfiguration auf, was zur Folge haben kann, dass wir [...]]]></description>
			<content:encoded><![CDATA[Seit nun knapp fünf Monaten stelle ich mich der Herausforderung saubere Softwareentwicklung und Magento in Einklang zu bringen. Ein kleiner Schritt in diese Richtung war der Einsatz von UnitTests, um mögliche Fehler während der Entwicklung schneller zu finden.
Viele Fehler treten bei Magento schon durch eine fehlerhafte Konfiguration auf, was zur Folge haben kann, dass wir [...]]]></content:encoded>
			<wfw:commentRss>http://www.phphatesme.com/blog/qualitatssicherung/einfache-unittests-fur-magento/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ZPress: Ich werde Geschichte schreiben</title>
		<link>http://www.phphatesme.com/blog/qualitatssicherung/zpress-ich-werde-geschichte-schreiben/</link>
		<comments>http://www.phphatesme.com/blog/qualitatssicherung/zpress-ich-werde-geschichte-schreiben/#comments</comments>
		<pubDate>Mon, 09 Aug 2010 05:00:27 +0000</pubDate>
		<dc:creator>ebene7</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Qualitätssicherung]]></category>
		<category><![CDATA[phmnetwork]]></category>

		<guid isPermaLink="false">http://blog.ebene7.com/?p=1191</guid>
		<description><![CDATA[Vor ein paar Tagen habe ich den leicht ehrgeizigen Plan gefasst, ein Blog-System selber zu schreiben und es einfach ZPress zu nennen. Dem nicht genug, werde ich nun auch noch Geschichte schreiben. Ob mit ZPress ist ungewiss, aber zumindest dafür.
Bevor ich euch aber nun total verwirre, erzähle ich besser mal worum es geht.
Eine Anwendung zu [...]]]></description>
			<content:encoded><![CDATA[Vor ein paar Tagen habe ich den leicht ehrgeizigen Plan gefasst, ein Blog-System selber zu schreiben und es einfach ZPress zu nennen. Dem nicht genug, werde ich nun auch noch Geschichte schreiben. Ob mit ZPress ist ungewiss, aber zumindest dafür.
Bevor ich euch aber nun total verwirre, erzähle ich besser mal worum es geht.
Eine Anwendung zu [...]]]></content:encoded>
			<wfw:commentRss>http://www.phphatesme.com/blog/qualitatssicherung/zpress-ich-werde-geschichte-schreiben/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP bekommt frischen CRAP</title>
		<link>http://www.phphatesme.com/blog/softwaretechnik/php-bekommt-frischen-crap/</link>
		<comments>http://www.phphatesme.com/blog/softwaretechnik/php-bekommt-frischen-crap/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 05:00:15 +0000</pubDate>
		<dc:creator>Volker Dusch</dc:creator>
				<category><![CDATA[Qualitätssicherung]]></category>
		<category><![CDATA[Softwaretechnik]]></category>

		<guid isPermaLink="false">http://www.phphatesme.com/?p=6432</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>Nein, keine zwanzig neuen Active Record basierten Frameworks mit eigenen Template Engines oder was ihr euch sonst so gedacht habt beim Lesen der Überschrift.</p>
<p>Der &#8220;CRAP Index&#8221; ist eine junge Code-Metrik die versucht nah am Wortschatz und an den Gedankengängen von Entwicklern zu sein. Man könnte auch sagen: &#8220;Der WTF-Faktor einer Funktion&#8221;.<span id="more-6432"></span></p>
<p>Die meisten von euch werden einfache Metriken wie die &#8220;LOC, Codezeilen&#8221; und die &#8220;ELOC, Ausführbare Codezeilen&#8221; kennen. Treue Leser des Blogs kennen vielleicht auch die &#8220;<a href="http://www.phphatesme.com/blog/softwaretechnik/softwaremetrik-zyklomatische-komplexitat/">Zyklomatische Komplexität</a>, Anzahl der Verzweigungen in einer Funktion&#8221; und die &#8220;NPath Complexity, Anzahl der Ausführungspfade durch eine Funktion&#8221;. Diese altgedienten Metriken leisten bei der QS gute Dienste sind aber etwas abstrakt. <em>&#8220;Die Zyklomatische Komplexität des Codes den du gerade commited hast ist ziemlich hoch&#8221;</em> ist ein Satz den man seltener hören wird als, mal ganz unverblümt kommuniziert, <em>&#8220;was für ein unverständlicher Mist ist das denn&#8221;</em>.</p>
<p>Die CRAP Metrik, übrigens mit dem lange nicht so nett klingenden &#8220;Change Risk Analysis and Predictions&#8221; ausgeschrieben, kommt aus der Javawelt und wurde vor etwa drei Jahren mit <a href="http://www.crap4j.org/">Crap4j</a> jedem einfach zugänglich. Für uns PHPler wird diese Metrik mit dem bevorstehenden Release von PHPUnit 3.5 interessant da sie im neuen <a href="http://sebastian-bergmann.de/archives/877-CRAP-in-PHPUnit-3.5.html">&#8220;Code Coverage Report&#8221;</a> für jede Funktion mit aufgelistet wird. Eine Beta Version bzw. RC1 ist schon einige Zeit <a href="http://pear.phpunit.de/">verfügbar</a>.</p>
<p>Die Berechnung des CRAP Index ist realtiv trivial und zeigt auch gleich auf wieso wir dafür PHPUnit, bzw. Unittests im allgemeinen, brauchen:</p>
<p>Der Crap Index einer Funktion (f) berechnet sich aus der Zyklomatische Komplexität / &#8220;Cyclomatic Complexity&#8221; (comp), und der Code Coverage (cc) der Funktion, also dem prozentualen Anteil der Codezeilen die von unseren Unittests durchlaufen werden.</p>
<p>Die Formel sieht nicht trivial aus aber wird hoffentlich durch das folgende Bild deutlich greifbarer.</p>
<blockquote><p>CRAP-Index(f) = comp(f)^2 * (1 – cc(f)/100)^3 + comp(f)</p></blockquote>
<p><a href="http://www.phphatesme.com/upload/2010/07/crap-index-overview.png"><img class="alignnone size-medium wp-image-6433" src="http://www.phphatesme.com/upload/2010/07/crap-index-overview-300x255.png" alt="" width="300" height="255" /></a></p>
<p>Auf der X-Achse ist die Code Coverage von 100 bis 0 Prozent, auf der Y-Achse die Zyklomatische Komplexität von 1 bis 30. Mit der Grafik wird, hoffentlich, schnell deutlich das eine Funktion umso besser bewertet wird je einfacher sie ist und je ausführlicher getestet. Der Schwellenwert für &#8220;This is Crap&#8221; ist hier mit 30 gewählt, aber das soll nur eine Richtlinie sein. Um eine bessere, d.h. niedrige, Bewertung zu erreichen kann man also entweder die Komplexität einer Funktion reduzieren oder sie besser Testen. Gerade beim Implementieren von Algorithmen wird man hier nicht &#8220;gezwungen&#8221; eine Funktion ggf. unsinniger weiße aufzuteilen sonst kann sie durch Tests &#8220;akzeptabel&#8221; machen.</p>
<p>Mit dieser Zahl kann man also einfach(er) Aussagen über die Verständlichkeit und Wartbarkeit von Code treffen. Ein einfacher &#8220;getter&#8221; oder &#8220;setter&#8221; wird selbst wenn er garnicht getestet ist ziemlich verständlich sein. Es ist nicht sonderlich schwer ihn zu warten. Eine halbwegs komplexe Funktion wird ohne Tests schnell über den Schwellenwert geraten und Änderungen sind dort auch nicht mehr einfach durchzuführen. Gibt es allerdings einige Tests, so was wir uns beim Refactoren darauf verlassen können nichts Kaput zu machen, ist auch der CRAP-Index unter dem Schwellenwert. Funktionen die eine Zyklomatische Komplexität von 30 oder mehr haben können wir allerdings auch mit noch so guter Code Coverage nicht mehr &#8220;retten&#8221;, sie sind oftmals zu komplex und gut wartbar zu sein.</p>
<p>Wenn also morgen euer Kollege zu euch kommt und sagt &#8220;Dein Code ist ganz schön CRAPpy&#8221; wisst ihr jetzt was gemeint ist.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phphatesme.com/blog/softwaretechnik/php-bekommt-frischen-crap/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Einsatz von Staging Systemen</title>
		<link>http://www.phphatesme.com/blog/qualitatssicherung/einsatz-von-staging-systemen/</link>
		<comments>http://www.phphatesme.com/blog/qualitatssicherung/einsatz-von-staging-systemen/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 05:00:55 +0000</pubDate>
		<dc:creator>Sebastian Bauer</dc:creator>
				<category><![CDATA[Qualitätssicherung]]></category>

		<guid isPermaLink="false">http://www.phphatesme.com/?p=6405</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>Wir  alle kennen das Spielchen: jeder Entwickler hat seinen eigenen VHost  oder ähnliches, in dem munter vor sich her entwickelt wird. Irgendwann  wird alles integriert, schnell die Unit-Tests angeschmissen, alles  läuft, wunderbar, dann können wir ja auf das Produktivsystem kopieren.  Die neuenSources sind keine 5 Minuten auf dem Produktivsystem und schon  kracht es. Aber was ging schief?<span id="more-6405"></span></p>
<p>Für solche Probleme gibt es oft verschiedene  Ursachen. Um solche Probleme zu vermeiden, sollte man sich natürlich  Gedanken um einen ordentlichen Deployment-Prozess machen, mit dem man  schnell wieder auf einen funktionierenden Stand zurückspringen kann.  Viele solcher Probleme rühren aber oft daher, dass eine Integration  nicht ordentlich getestet werden konnte oder manche Probleme auch  einfach erst mit einer Datenbasis auftreten, wie sie höchstens das  Produktivsystem, nicht aber das Entwicklungssystem hat.</p>
<p>Zur Vermeidung solcher  Probleme empfehlen sich Staging Systeme. Ein Staging System beschreibt  eine Serverinstanz, welche mit der Umgebung des Produktivsystems  möglichst identisch sein sollte, im Optimalfall also auch die gleiche  Hardware. Das ist natürlich in den meisten Teams oder Projekten eine  recht utopische Vorstellung, daher muss es nicht zwingend eine eigene  Hardwarelösung sein. Ein virtueller Server macht hier ebenfalls einen  ausreichenden Job.</p>
<p>Aber  fangen wir von vorne an. Welche Aspekte sind denn für ein sinnvolles  Staging System wichtig? Auf jeden Fall sollten Staging-und  Produktivsystem die gleiche Softwareplatform haben. Das bedeutet es  sollte in jedem Fall das gleiche Betriebssystem in der gleichen Version  laufen, alle verwendeten Softwarepakete (PHP, Datenbankserver usw)  sollten zwingend in der gleichen Version installiert sein und es sollte  auch der gleiche Umfang an Software installiert sein, in einer möglichst  identischen Konfiguration. Natürlich lassen sich gewisse Abweichungen  in der Konfiguration nicht vermeiden. Wenn wir etwa auf unserem  Produktivsystem auf Grund des verfügbaren RAM höhere Speicherlimits  haben, als auf dem Staging System, dann ist das eben nicht zu vermeiden,  stellt insofern kein aber Problem dar, weil weniger Speicher für den  Testfall ja durchaus von Vorteil sein kann, um früher Probleme beim  Speicherverbrauch aufzudecken. In jedem Fall sollte man allerdings davon absehen, das Staging System als VHost auf dem Produktivserver laufen zu lassen. Zum Beispiel würden somit jegliche Tests an der Konfiguration des VHosts des Staging Systems, die einen Neustart der Serverdienste benötigen, auch das Produktivsystem beeinflussen.</p>
<p>Die Applikation, die wir deployen, sollte  ferner natürlich ebenfalls möglichst identisch konfiguriert sein. Die  Quelldateien sollten beide auf dem gleichen Stand und aus dem gleichen  Branch stammen. Auf dem Staging System dürfen sich ausschließlich nur  die Änderungen befinden, die auch tatsächlich integriert wurden und live  gehen sollen.</p>
<p>Ein spannender Punkt ist letztlich  dann noch die Datenbank und die damit verbundene Datenbasis. Das Ziel  eines Staging Systems ist es natürlich immer möglichst identisch an das  Produktivsystem heranzukommen, das gilt also auch für die Datenbasis.  Auf Grund der eingeschränkten Platzverhältnisse auf einem Staging System  ist das aber oft nicht realistisch machbar. Selbst wenn wir die gesamte  Datenbank spiegeln können, haben wir damit ja immer noch nicht zwingend  auch alle restlichen Daten auf dem Staging System verfügbar, wie etwa  Useruploads etc.</p>
<p>Hier  muss man genauer prüfen und von Projekt zu Projekt entscheiden. Je nach  System empfiehlt es sich die gesamten Datenstämme gewisser  Nutzergruppen zu kopieren, mit denen man etwa arbeiten möchte. Es müssen  also nicht zwingend alle Daten für alle Nutzer sein, aber man sollte  sicherstellen, dass man zumindest aus gewissen Nutzergruppen  verschiedene Testfälle abdecken kann.</p>
<p>Für das “Überschreiben” der Daten auf  dem Staging Server durch aktuelle Daten vom Produktivsystem ist es  ratsam, ein Script zu schreiben. Das hat den einfachen Hintergrund, dass  man so auch “auf Knopfdruck” schnell und einfach auf dem Staging System  eine aktuelle Datenbasis erhält, mit der man etwa auch Probleme  reproduzieren kann, die vielleicht erst auf dem Produktivsystem  aufgetreten sind. Dieses Script ist im Optimalfall parametrisiert,  sodass man bequem wählen kann, in welchem Umfang und aus welchem Bereich  Daten kopiert werden sollen. Das ist natürlich ebenfalls stark  Projektabhängig und man muss dafür das System und seine Abhängikeiten  gut kennen.</p>
<p>Zuletzt sollte das  Staging System natürlich in den Deploymentprozess eingebunden sein. Es  dürfen etwa keine Änderungen auf das Produktivsystem gehen, ohne vorher  im vollen Umfang der Integration auf dem Staging System getestet worden  zu sein. Ferner sollte man etwa eine Abnahme durch den Product Owner in  einem SCRUM Team ausschließlich auf dem Staging System machen und nicht  an irgendwelchen Entwicklerbuilds, die nicht vollständig integriert sind  etc.</p>
<p>Das war mal soweit ein  kleiner Überblick darüber, was Staging System so mit sich bringen  sollte und worauf geachtet werden sollte. Das alles sind mehr ein paar  allgemein gehaltene Ratschläge, denn wie so vieles in der  Softwareentwicklung, ist der Einsatz verschiedener Mittel nie “einfach  so” möglich, sondern stark abhängig von der Umgebung. Generell bieten  Staging Systeme aber einige Vorteile. Ganz davon abgesehen, dass sie  helfen eine fehlerhafte Integration zu vermeiden und Probleme vor dem  Aufschlagen auf dem Produktivsystem aufzudecken. Sie sind noch dazu eine  große Hilfe, wenn auf dem Produktivsystem Probleme auftreten, die sich  auf dem Entwicklersystem nicht reproduzieren lassen. Wenn man die  Möglichkeit hat, sich ohne weiteres seine Datenbasis auf das Staging  System zu spiegel, um dort zu testen, spart das oft viel Zeit und damit  auch Geld.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phphatesme.com/blog/qualitatssicherung/einsatz-von-staging-systemen/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Clean Code &#8211; Überflüssige Kommentare</title>
		<link>http://www.phphatesme.com/blog/softwaretechnik/clean-code-uberflussige-kommentare/</link>
		<comments>http://www.phphatesme.com/blog/softwaretechnik/clean-code-uberflussige-kommentare/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 05:00:24 +0000</pubDate>
		<dc:creator>Volker Dusch</dc:creator>
				<category><![CDATA[Qualitätssicherung]]></category>
		<category><![CDATA[Softwaretechnik]]></category>

		<guid isPermaLink="false">http://www.phphatesme.com/?p=6303</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>Im Informatikstudium erfährt man in einem Fach das man auf &#8220;Softwareentwicklung&#8221; verallgemeinern kann meistens wie wichtig es ist SÄMTLICHEN Quellcode zu dokumentieren. Als Grundgedanke ist das auch absolut erstrebenswert doch möchte ich hier nochmal die Frage aufwerfen wann zu viele bzw. falsche Kommentare mehr schaden als nutzen.</p>
<p>Nils hat sich vor längerer Zeit schon einmal mit <a href="http://www.phphatesme.com/blog/softwaretechnik/kommentare/">Kommentaren direkt im Quellcode</a> beschäftigt und damit wie man sie durch bessere Methodennamen vermeiden kann. Außerdem gib es im PHP-Magazin einen sehr schönen Artikel zum <a href="http://it-republik.de/php/artikel/Code-Smells---wenn-es-stinkt-wechsle-es!-3098.html">Kommentar-Smell</a>.</p>
<p>Meine Argumentationsgrundlage soll hier &#8220;Zeit&#8221; sein. Sourcecode wir öfter gelesen als geschrieben und sollte so geschrieben werden, dass er schnell erfassbar und verständlich ist. Deswegen einigen wir uns für Projekte auf Coding-Standards und nehmen uns &#8211; meistens/hoffentlich &#8211; Zeit dafür Methoden aussagekräftig zu benennen.</p>
<p>Etwas Beispielcode der gerne auch mal mit dem Satz &#8220;Ihr habt gesagt ich soll alles dokumentieren !&#8221; einhergeht und mir physischen Schmerz bereitet.</p>
<pre>&lt;?php

class meineKlasse {

    /**
     * Konstruktur
     */
    public function __construct() {
    }

    // ... Methoden der Klasse

}</pre>
<p>Dieser Code ist auf mindestens zwei Ebenen verstörend.</p>
<p>Der Kommentar absolut überflüssig. Er beinhaltet keinerlei Information und hilft niemandem der auch nur ein kleiner bischen PHP kann weiter. Das Einzige das er erreicht ist, dass jeder der die Klasse öffnet ihn ggf. kurz überfliegt und damit Zeit verschwendet.</p>
<p>Wie wäre es mit <em>&#8220;Erstellt eine Instanz von meineKlasse&#8221; </em> ?</p>
<p>Das wäre noch schlimmer, mehr Wörter, mehr Zeit, immer noch keine Information und beim umbenennen der Klasse müsste man ihn auch noch anpassen.</p>
<p>Ich finde hier kann man sich den kompletten DocBlock sparen. Wenn ihr euch in eurem Projekt darauf geeinigt habt, dass alles einen DocBlock hat, würde ich vorschlagen den einfach leer zu lassen. Wenn das auch nicht erlaubt ist würde ich sehr gerne von euch hören wieso und euch ggf. empfehlen diese Regel zu ändern. Es nützt nichts Entwickler damit zu beschäftigen Trivialitäten niederzuschreiben, es senkt meiner Erfahrung nach sogar die Qualität der restlichen Dokumentation wenn die Leute mit einer &#8220;muss irgendwas über alles schreiben damit der Code Sniffer zufrieden ist&#8221; Mentalität an die Sache herangehen, ob bewusst oder unbewusst.</p>
<p>Der einfachste Weg hier die Problematik zu umgehen ist aber den Konstruktor einfach komplett zu löschen.  Er erfüllt im Moment keine Funktion ! Er ist sogar mögliche Fehlerquelle da er den &#8220;parent&#8221; Konstruktor nicht aufruft, etwas das automatisch geschieht wenn diese 5 Codezeilen gelöscht würden. Solche leeren Konstruktoren kommen meistens daher, dass sie in einem Klassentemplate existieren und an den Stellen an denen sie nicht gebraucht werden nicht gelöscht werden.</p>
<p>Also spart Zeit und erhöht die &#8220;Information pro Bildschirmseite&#8221; wo es sinnvoll ist. Eurer zukünftiges Ich wird es euch danken.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phphatesme.com/blog/softwaretechnik/clean-code-uberflussige-kommentare/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
		<item>
		<title>vfsStream &#8211; a better approach for file system dependent tests</title>
		<link>http://www.phphatesme.com/blog/tools/vfsstream-a-better-approach-for-file-system-dependent-tests/</link>
		<comments>http://www.phphatesme.com/blog/tools/vfsstream-a-better-approach-for-file-system-dependent-tests/#comments</comments>
		<pubDate>Mon, 07 Jun 2010 13:00:00 +0000</pubDate>
		<dc:creator>Nils Langner</dc:creator>
				<category><![CDATA[Qualitätssicherung]]></category>
		<category><![CDATA[Tools & Helferlein]]></category>
		<category><![CDATA[Vorträge]]></category>

		<guid isPermaLink="false">http://www.phphatesme.com/blog/tools/vfsstream-a-better-approach-for-file-system-dependent-tests/</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>Have you ever been annoyed by testing classes or functions operating on the file system? Be it tests that rely on presence of physical files, the problem of not cleaning up correctly after the test run or checking that your algorithm creates the correct directories and files with correct file permissions. Then this is for you: vfsStream to the rescue!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phphatesme.com/blog/tools/vfsstream-a-better-approach-for-file-system-dependent-tests/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
