<?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 Qualität Archive - Entwicklungshilfe NRW</title>
	<atom:link href="https://entwicklungshilfe.nrw/blog/category/software-qualitaet/feed/" rel="self" type="application/rss+xml" />
	<link>https://entwicklungshilfe.nrw/blog/category/software-qualitaet/</link>
	<description>PHP-Schulungen für effektive Webentwicklung, praxisorientierte Workshops und Seminare für besseres Webdevelopment</description>
	<lastBuildDate>Mon, 23 Sep 2019 18:15:15 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>

<image>
	<url>https://entwicklungshilfe.nrw/wp-content/uploads/2026/02/cropped-favicon-32x32.png</url>
	<title>Software Qualität Archive - Entwicklungshilfe NRW</title>
	<link>https://entwicklungshilfe.nrw/blog/category/software-qualitaet/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Frontend-Testing mit Codeception</title>
		<link>https://entwicklungshilfe.nrw/blog/2016/04/22/frontend-testing-mit-codeception/</link>
					<comments>https://entwicklungshilfe.nrw/blog/2016/04/22/frontend-testing-mit-codeception/#comments</comments>
		
		<dc:creator><![CDATA[Andreas Mautz]]></dc:creator>
		<pubDate>Fri, 22 Apr 2016 10:00:11 +0000</pubDate>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Software Qualität]]></category>
		<guid isPermaLink="false">http://www.entwicklungshilfe.nrw/blog/?p=468</guid>

					<description><![CDATA[<p>Codeception ist ein PHP basiertes Framework für automatisiertes Frontend-Testing. Es liefert abgesehen von Tools für Akzeptanztests auch weitreichende Tools für Unit-Tests. In diesem Artikel gehen wir jedoch weitestgehend auf die Funktion der Akzeptanztests ein, also die Tests, die den Fall simulieren dass ein User sich gerade durch eine Webseite klickt. Im nachfolgenden Absatz möchte ich [&#8230;]</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/04/22/frontend-testing-mit-codeception/">Frontend-Testing mit Codeception</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Codeception ist ein PHP basiertes Framework für automatisiertes Frontend-Testing. Es liefert abgesehen von Tools für Akzeptanztests auch weitreichende Tools für Unit-Tests. In diesem Artikel gehen wir jedoch weitestgehend auf die Funktion der Akzeptanztests ein, also die Tests, die den Fall simulieren dass ein User sich gerade durch eine Webseite klickt. Im nachfolgenden Absatz möchte ich zunächst die Installation und die generelle Verwendung von Codeception für das Frontend-Testing erläutern, sowie auf die Basisfunktion der Akzeptanztests eingehen. Codeception ermöglicht es, reale Testszenarien anhand von festgelegten Abläufen zu durchlaufen, ohne selbst den Browser zu öffnen.</p>
<h2>Die Installation</h2>
<p>Codeception kann <a href="http://codeception.com/install" target="_blank">hier</a> via Composer installiert werden. Jedoch wird davon in unserem Beispiel kein Gebrauch gemacht, da wir den sofortigen Einsatz von Codeception auf einer frischen VM realisieren, und somit keinen Composer installiert haben.</p>
<p><strong>Mac/Linux:</strong><br />
Auf dem Mac bzw Linux und Unix derivaten kann Codeception auch per Command-line installiert werden.</p>
<pre class="lang:default decode:true " title="Codeception installieren">wget http://codeception.com/codecept.phar &amp;&amp; php codeception.phar bootstrap</pre>
<p>mit diesem beidem Befehlen wird Codeception installiert und dessen Ordnerstruktur erstellt.</p>
<p><strong>Windows:</strong><br />
Auf Windows muss das installationsarchiv <a href="http://codeception.com/install" target="_blank">hier</a> manuell heruntergeladen werden von:</p>
<p>Nach der Installation auf Windows hat Codeception die benötigte Ordnerstruktur erstellt.</p>
<p>Sollte das Frontend-Testing mit Google Chrome, Firefox oder anderen Browsern durchgeführt werden, wird auch Selenium benötigt. Die Installation kann auf einem Mac/Linux per Kommandozeile mit folgenden Befehlen geschehen.</p>
<p>Mac: </p>
<pre class="lang:default decode:true " title="Codeception installieren">brew install selenium-server</pre>
<p>Linux: </p>
<pre class="lang:default decode:true " title="Codeception installieren">apt-get install selenium-server</pre>
<p>Auf Windows muss der Selenium Server von http://selenium.org heruntergeladen und installiert werden.</p>
<p>Nachdem Selenium und Codeception installiert sind, gestaltet sich der Rest der Konfiguration relativ einfach. Zunächst können im &#8222;_env&#8220; Verzeichnis von Codeception sogenannte Testumgebungen angelegt werden, welche der Reihe nach von Codeception durchlaufen und abgearbeitet werden. Ein Beispiel für einen solche Datei sieht wie folgt aus.</p>
<figure style="width: 300px" class="wp-caption alignleft"><img decoding="async" title="Chrome Konfigurationsdatei (Full HD)" src="http://www.entwicklungshilfe.nrw/blog/wp-content/uploads/2016/04/Bildschirmfoto-2016-04-20-um-10.30.27.png" title="Chrome Konfigurationsdatei (Full HD)" alt="Frontend-Testing mit Codeception" /><figcaption class="wp-caption-text">Chrome Konfigurationsdatei (Full HD test)</figcaption></figure>
<p>In diesem .yml file wird festgelegt, dass der zu testende Browser Google Chrome sein wird.<br />
Des Weiteren wird festgelegt, dass wir in der Auflösung 1920&#215;1080 testen werden.<br />
Die URL kann pro Testumgebung jeweils eine URL beinhalten, welche in unserem Testszenario momentan auf einen unserer Testserver zeigt.</p>
<h2>Vorbereitungen für das Frontend-Testing</h2>
<p>Nachdem wir unsere Umgebungsvariablen festgelegt haben, können wir uns der nächsten wichtigen Datei widmen. Die Datei __bootstrap.php aus dem Verzeichnis &#8222;acceptance&#8220; wird vor jedem Test aufgerufen und erlaubt es, Variablen zu deklarieren die dann in den jeweiligen Testszenarien verwendet werden können. Diese Variablen bestehen den ganzen Test über und können von den verschiedenen Szenarien gemeinsam benutzt werden. Eine sinnvolle Verwendung dieser Datei wäre zum Beispiel eine Funktion zum erkennen des benutzten Browsers, um in den Tests darauf entsprechend reagieren zu können und die Tests für den jeweiligen Browser besser anzupassen.</p>
<p>Beispiel: Sollte die Funktion in __bootstrap.php ein mobiles Endgerät entdecken, kann der darauf folgende Test in seinem Testszenario darauf reagieren und zum Beispiel die mobile Navigation anstatt die normale Navigation Testen.</p>
<p>Hinweis: Bevor die Testszenarien durchlaufen werden können, muss Selenium entweder auf Windows mit einem Doppelklick, oder auf Mac bzw Linux/Unix derivaten mit dem Konsolenbefehl &#8222;selenium-server -p 4444&#8220; gestartet werden.</p>
<h2>Das Testszenario</h2>
<p>Kommen wir nun zu den eigentlichen Tests. Jedes Testszenario das wir anlegen wollen, muss sich im &#8222;acceptance&#8220; Verzeichnis befinden. Jede PHP datei außer __bootstrap.php wird dort für jede einzelne Testumgebung die wir im &#8222;_env&#8220; Verzeichnis liegen haben durchlaufen. Haben wir zum Beispiel ein Testszenario wie &#8222;Navigation.php&#8220; im &#8222;acceptance&#8220; folder, wird dieses Szenario für chrome_1920x1080.yml aufgerufen.<br />
Ein Beispiel eines solchen Tests sieht wie folgt aus.</p>
<pre class="lang:default decode:true " title="Navigations-Testszenario">
<?php
    $I = new AcceptanceTester($scenario);
    $I->amOnPage("/");
    $I->wantTo("test elements of the navigation (upper categories)");
    $I->click(".menu-button");
    $I->click("#nav-wide .level0.nav-1 a span");
    $I->moveMouseOver("#nav-wide .level0.nav-1 a span");
    $I->click(".level1.nav-1-1  a span");
?>
</pre>
<p>Der obrige test wurde mit dem Befehl &#8222;php codecept.phar run acceptance &#8211;env chrome_1920x1080&#8220; aufgerufen. Für jede weitere Testumgebung die in die Testszenarien eingebunden werden soll, wird eine weitere &#8211;env Direktive benötigt.</p>
<p>Beispiel 2 Browser:</p>
<pre class="lang:default decode:true " title="Codeception installieren">php codecept.phar run acceptance --env chrome_1920x1080 --env firefox_1920x1080</pre>
<p><strong>Hint:</strong> Während eines Tests der Funktionen wie $i-&gt;moveMouseOver() enthält darf die Maus nicht bewegt werden!</p>
<figure style="width: 300px" class="wp-caption alignleft"><img decoding="async" src="http://www.entwicklungshilfe.nrw/blog/wp-content/uploads/2016/04/Bildschirmfoto-2016-04-20-um-12.55.18.png" alt="Footer Testszenario" /><figcaption class="wp-caption-text">Footer Testszenario (acceptance/FooterCept.php)</figcaption></figure>Wie man in unserem Test sehen kann, wird hier der Anmeldebereich einer Website getestet. Es handelt sich hierbei um einen simplen Test der einzig und allein die jeweilige Login-Seite ansteuert und das Form-Feld mit Daten befüllt. Die einfache Syntax von Codeception macht es dem Entwickler einfach in einer kurzen Zeit verständliche und benutzbare Testszenarien zu schreiben. </p>
<p>Je nach Generalisierung der Tests wie Beispielsweise oben beschrieben, lässt dich der Test für mehrere Anwendungszwecke verwenden. In unserem Fall ist der oben zu sehende Test für jegliches Login-Formular einer Magento-Shop Webseite einsetzbar.</p>
<p>Nachdem Codeception die Tests erfolgreich (oder auch nicht) beendet hat, wenden wir uns dem Verzeichnis &#8222;records&#8220; zu. Im Verzeichnis &#8222;records&#8220; befinden sich Screenshots von jedem einzelnen Schritt unserer Tests und dem Ergebnis. Es bleibt einem die Möglichkeit entweder die Datei &#8222;index.html&#8220; zu öffnen und sich in einem minimalistisch gestalteten Web-interface durch die Ergebnisse zu klicken oder sich die einzelnen Fehlgeschlagenen Tests heraus zu suchen. Fehlgeschlagene Tests haben eine &#8222;.fail.&#8220;-Endung im Dateiname und sind direkt in &#8222;records&#8220; Ordner zu finden.</p>
<p><strong>Hint:</strong> Der Befehl $i-&gt;wait() veranlasst Codeception dazu, eine gewisse Zeit zu warten und einen neuen Screenshot zu erstellen.</p>
<h2>Fazit:</h2>
<p>Codeception ist ein effizient einsetzbares Tool mit noch kleinen Schönheitsfehlern, wie zum Beispiel das unnötige Erstellen eines Screenshots nach Verwendung des $i-&gt;wait() Befehls, die einen Entwickler jedoch keinesfalls am produktiven Einsatz des Frameworks hindern. Es stellt mit seiner einfachen Syntax und leichten Bedienbarkeit eine effektive Methode für das Frontend-Testing dar.</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/04/22/frontend-testing-mit-codeception/">Frontend-Testing mit Codeception</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://entwicklungshilfe.nrw/blog/2016/04/22/frontend-testing-mit-codeception/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Besuch beim Magento 2 Hackathon in Paderborn</title>
		<link>https://entwicklungshilfe.nrw/blog/2016/02/16/magento-2-hackathon/</link>
					<comments>https://entwicklungshilfe.nrw/blog/2016/02/16/magento-2-hackathon/#respond</comments>
		
		<dc:creator><![CDATA[Andreas Mautz]]></dc:creator>
		<pubDate>Tue, 16 Feb 2016 07:53:55 +0000</pubDate>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[Software Qualität]]></category>
		<category><![CDATA[Workshop]]></category>
		<guid isPermaLink="false">http://www.entwicklungshilfe.nrw/blog/?p=294</guid>

					<description><![CDATA[<p>Am 23. und 24. Januar 2016 fand bei code-x GmbH in Paderborn ein Hackathon zur neuesten Magento-Version statt. Als Magento-Entwickler mit einem bereits angefangenen Magento-2-Projekt für einen unserer Kunden bei webvisum &#8222;musste&#8220; ich also einfach daran teilnehmen. Mein Plan als Magento-Entwickler für das Wochenende Mein Plan war es eigentlich, für mein bestehendes Projekt und die darin schon gefundenen Stolpersteine [&#8230;]</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/02/16/magento-2-hackathon/">Besuch beim Magento 2 Hackathon in Paderborn</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Am 23. und 24. Januar 2016 fand bei <a href="http://www.code-x.de/" target="_blank" rel="noopener noreferrer">code-x GmbH</a> in Paderborn ein Hackathon zur neuesten Magento-Version statt. Als Magento-Entwickler mit einem bereits angefangenen Magento-2-Projekt für einen unserer Kunden bei <a href="http://webvisum.de" target="_blank" rel="noopener noreferrer">webvisum</a> &#8222;musste&#8220; ich also einfach daran teilnehmen.</p>
<h2>Mein Plan als Magento-Entwickler für das Wochenende</h2>
<p>Mein Plan war es eigentlich, für mein bestehendes Projekt und die darin schon gefundenen Stolpersteine Hilfe zu finden. Aus Entwickler-Sicht ist das Projekt relativ klein, da es sich lediglich um eine Migration von Magento 1.x auf 2.x ohne aktivierte Einkaufsmöglichkeit handelt. Damit entfällt die ganze Warenkorb/Checkout/AfterSales-Funktionalität. Auch E-Mail-Templates sind nicht großartig zu beachten. Das Projekt enthält jedoch ein komplettes Redesign. Damit kam es mir als Einstiegsprojekt für eine Migration sehr gelegen.</p>
<p>Die Stolpersteine, die sich so auftaten, während ich mich alleine mit den Dokus ans Projekt machte, tauchten an diesem Wochenende auch bei anderen auf – puuh, ich war also nicht alleine.</p>
<p>Da wäre zum Beispiel die einfache Aufgabe, Nummer 2 erstmal ans Laufen zu kriegen. Der Umstieg der anwesenden, durch die Bank erfahrenen alten Magento-Hasen auf das Neue-und-Alles-ist-besser-Magento gelang nicht ganz so flüssig, wie die Magento-Marketingler das gerne auf allen Kanälen hinausschreien. Beim ersten Anlegen des Projektes damals liefen bei mir die Installation und auch alles andere reibungslos. Beim Anlegen der neuen Installation für das Wochenende aber hatte ich dann Probleme damit und habe mir nebenbei mit einem Update von Version 2.0.0 auf 2.0.1 das oben beschriebene Projekt so zerschossen, dass nur noch ein Backup half.</p>
<p>Auch die ersten Schritte eines eigenen Templates mit der Frage &#8222;Wie bekomme ich jetzt Magento dazu, meinen Style auszuliefern?&#8220; kamen mir seltsam bekannt vor.</p>
<h2>Was wirklich geschah am Wochenende</h2>
<p>Nun ja, was soll ich sagen &#8230;? Ich habe zum ersten Mal eine Pre-Party verpasst und bin erst morgens am Tag der Veranstaltung angereist. Man wird halt nicht jünger. Da ich wegen meiner Diplomarbeit letztes Jahr recht selten auf Firegento-Events war, musste man auch erstmal ordentlich netzwerken und persönlich werden. Da das aber einer der Hauptgründe für mich ist, solche Events zu besuchen, fing ich damit an. Also MacBook auf, Magento 2 laden und anfangen zu quatschen. Alibimäßig hatte ich mich deswegen auch in die Gruppe &#8222;Ist Magento 2 Mist?&#8220; geschmissen. Das ging so den ganzen Samstag: Versuchen Magento zu installieren, quatschen über das letzte halbe Jahr, auf den Bildschirm gucken, ob die Kiste vorankommt, essen, quatschen. Zack war abends, und man saß noch in einer kleinen Runde im Brauhaus. Man ahnt es: quatschen.</p>
<p>Der nächste Tag sollte produktiver werden, und ich gesellte mich direkt zum Team &#8222;Migration von Firegento-PDF auf Magento 2&#8220;, dem ich samstags schon ein wenig helfen konnte.</p>
<p>Der Sonntag verlief dann recht flüssig mit richtiger Arbeit an Magento 2. Bis zum Versuch, die Abschlusspräsentation per Videokonferenz mit gleich zwei Ablegern des Hackathons zu halten. Am Ende gelang es irgendwie, und es ging für mich zurück nach Köln (Notiz an mich: App entwickeln, die für Events Fahrgemeinschaften erzwingt).</p>
<p>Schönen Dank an dieser Stelle an code-x fürs Gastgeben und an die Sponsoren!</p>
<figure id="attachment_407" aria-describedby="caption-attachment-407" style="width: 150px" class="wp-caption alignleft"><img decoding="async" class="wp-image-407 size-thumbnail" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/magento-2-hackathon-150x150.jpg" alt="Magento 2 Hackathon" width="150" height="150" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/magento-2-hackathon-150x150.jpg 150w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/magento-2-hackathon-150x150@2x.jpg 300w" sizes="(max-width: 150px) 100vw, 150px" /><figcaption id="caption-attachment-407" class="wp-caption-text">Teilnehmer Magento 2 Hackathon</figcaption></figure>
<h1>Was ich über Magento 2 gelernt habe</h1>
<p>Zusammenfassend lässt sich sagen: Nicht alles läuft glatt am Anfang jeder neuen Version – das ist das tägliche Brot für uns PHP-Entwickler. Ich war nicht alleine mit meinen Problemen und habe Trost und Hilfe bekommen. Da ich schon etwas tiefer in der Materie drin war, konnte ich auch selbst ein paar Mal helfen. Schönes Gefühl.</p>
<p>Magento 2 ist schon ein ausgereifteres Softwareprodukt als die damalige Frühversion von Magento 1 – aber aus meiner Sicht noch nicht wirklich startklar als Shop-System-Lösung für deutsche Kunden. Zudem sind bisher zu wenige Module portiert. In welchem Zeitrahmen sich das ändert, bleibt abzuwarten und zu beobachten. Die Neugierde und der Wille, mit Magento 2 zu arbeiten, war an dem Wochenende jedoch deutlich spürbar.</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/02/16/magento-2-hackathon/">Besuch beim Magento 2 Hackathon in Paderborn</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://entwicklungshilfe.nrw/blog/2016/02/16/magento-2-hackathon/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Legacy Code – Entstehung, Ursache und Auswirkung</title>
		<link>https://entwicklungshilfe.nrw/blog/2016/01/28/legacy-code-entstehung-und-ursache/</link>
					<comments>https://entwicklungshilfe.nrw/blog/2016/01/28/legacy-code-entstehung-und-ursache/#respond</comments>
		
		<dc:creator><![CDATA[Andreas Mautz]]></dc:creator>
		<pubDate>Thu, 28 Jan 2016 08:03:41 +0000</pubDate>
				<category><![CDATA[PHP-Schulung]]></category>
		<category><![CDATA[Software Qualität]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Infrastruktur]]></category>
		<category><![CDATA[Seminar]]></category>
		<category><![CDATA[Training]]></category>
		<category><![CDATA[Workshop]]></category>
		<guid isPermaLink="false">http://www.entwicklungshilfe.nrw/blog/?p=191</guid>

					<description><![CDATA[<p>In aktuellen Webdesign-Projekten ist Legacy Code zu einem sehr großen Problem geworden: Dadurch drohen nicht wenige Projekte in naher Zukunft zu scheitern und erhebliche Kosten zu verursachen. Dabei ist das Problem schon länger in allen Unternehmensebenen bekannt – allerdings wird es für kurzfristige Gewinne und neue Projektziele immer wieder übergangen. &#8222;Later equals never&#8220; sagte mahnend schon Robert C. Martin. [&#8230;]</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/01/28/legacy-code-entstehung-und-ursache/">Legacy Code – Entstehung, Ursache und Auswirkung</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>In aktuellen Webdesign-Projekten ist Legacy Code zu einem sehr großen Problem geworden: Dadurch drohen nicht wenige Projekte in naher Zukunft zu scheitern und erhebliche Kosten zu verursachen. Dabei ist das Problem schon länger in allen Unternehmensebenen bekannt – allerdings wird es für kurzfristige Gewinne und neue Projektziele immer wieder übergangen. <a href="http://alvinalexander.com/programming/clean-code-quotes-robert-c-martin" target="_blank" rel="noopener noreferrer">&#8222;Later equals never&#8220;</a> sagte mahnend schon <a href="https://de.wikipedia.org/wiki/Robert_Cecil_Martin" target="_blank" rel="noopener noreferrer">Robert C. Martin</a>. Doch in den Führungsetagen wird das Thema oft sogar komplett ausgeblendet. Dabei richtet Legacy Code nicht nur auf technischer Ebene, sondern auch im Team erhebliche Schäden an.</p>
<h2>Legacy-Code-Probleme sind überall bekannt</h2>
<figure id="attachment_245" aria-describedby="caption-attachment-245" style="width: 300px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Legacy-Code-Probleme-sind-bekannt.jpg" rel="attachment wp-att-245"><img fetchpriority="high" decoding="async" class="wp-image-245 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Legacy-Code-Probleme-sind-bekannt-300x200.jpg" alt="Legacy Code Probleme sind bekannt" width="300" height="200" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Legacy-Code-Probleme-sind-bekannt-300x200.jpg 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Legacy-Code-Probleme-sind-bekannt-768x512.jpg 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Legacy-Code-Probleme-sind-bekannt-1024x682.jpg 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Legacy-Code-Probleme-sind-bekannt.jpg 1280w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Legacy-Code-Probleme-sind-bekannt-300x200@2x.jpg 600w" sizes="(max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-245" class="wp-caption-text">Legacy-Code-Probleme sind bekannt</figcaption></figure>
<p>&#8222;Nirgends werden tote Pferde so weit geritten wie in der Software-Entwicklung&#8220; heißt es auf meiner <a href="http://www.rolandgolla.de/" target="_blank" rel="noopener noreferrer">Website</a>. Nicht von ungefähr. Denn als <a href="http://www.entwicklungshilfe.nrw/dozenten/profil/speaker/roland/">Trainer und Dozent</a> im Bereich der Software-Qualität kann ich infrage kommende Code-Stellen, die nach Robert C. Martin gerne als &#8222;Code smells&#8220; bezeichnet werden, auch ohne die Unterstützung von Software sehr schnell ausfindig machen. Zudem sind sie unter Webdevelopern durchaus bekannt. Aber sie werden aus Zeitgründen umschifft.</p>
<p>Dabei ist Legacy Code längst kein Problem mehr, welches nur auf den Backend-PHP-Teil betrifft. Denn da heute Webapplikationen geschrieben werden, ist der Anteil von Javascript beträchtlich – und in den kommenden Jahren wird sich das noch weiter verschieben: API-Schnittstellen, Webservices und Microservices werden den Teil des Backends in der Applikation darstellen und unterschiedlichste Clients im Frontend die bereitgestellten Daten verarbeiten. Mit Technologien wie <a href="https://facebook.github.io/react/" target="_blank" rel="noopener noreferrer">React</a> und <a href="https://angularjs.org/" target="_blank" rel="noopener noreferrer">AngularJS</a> zeichnet sich hier ein sehr klares Bild des zukünftigen Webdevelopments ab.</p>
<h2>Legacy-Code-Nester in Webdevelopment-Projekten</h2>
<figure id="attachment_246" aria-describedby="caption-attachment-246" style="width: 300px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Legacy-Code-Nester-in-Webdevelopment-Projekten.jpg" rel="attachment wp-att-246"><img decoding="async" class="wp-image-246 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Legacy-Code-Nester-in-Webdevelopment-Projekten-300x200.jpg" alt="Legacy Code Nester in Webdevelopment Projekten" width="300" height="200" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Legacy-Code-Nester-in-Webdevelopment-Projekten-300x200.jpg 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Legacy-Code-Nester-in-Webdevelopment-Projekten-768x512.jpg 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Legacy-Code-Nester-in-Webdevelopment-Projekten-1024x682.jpg 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Legacy-Code-Nester-in-Webdevelopment-Projekten.jpg 1280w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Legacy-Code-Nester-in-Webdevelopment-Projekten-300x200@2x.jpg 600w" sizes="(max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-246" class="wp-caption-text">Legacy-Code-Nester in Webdevelopment-Projekten</figcaption></figure>
<p>Bei den Frontend-Teilen eines Webprojekts braucht man gar nicht lange zu suchen. Große Ansammlungen sind hier z. B. main.css, style.css und natürlich script.js und app.js. Das sind große und historisch gewachsene Files, die immer nur erweitert werden und selten ein <a href="http://www.entwicklungshilfe.nrw/workshops/moderierte-code-reviews/">Code-Refactoring</a> gesehen haben. Auch im Bereich der Backend-Entwicklung wird trotz Software-Design und Patterns oft nicht sauber gearbeitet.</p>
<p>Eben dort ist <a href="http://www.entwicklungshilfe.nrw/seminare/phpstorm-best-practice/">PhpStorm</a> eine große Hilfe: Code, der offensichtlich nicht verwendet wird, wird farbig ausgegraut und kann so recht zuverlässig entfernt werden. Aber auch hier ist große Vorsicht geboten: Ohne <a href="http://www.entwicklungshilfe.nrw/code-rocker/">automatisierte Tests</a> ist es nahezu unmöglich, effektiv zu arbeiten. Fakt aber ist, dass durch die gewachsene Komplexität und die schlechte Lesbarkeit viel Zeit und Motivation verloren gehen. Wenn man da überhaupt noch durchsteigt. Dann wird gerne kapituliert, was sogar bis zur Krankmeldung gehen kann. Hier Licht reinzubringen, ist, wenn man es nicht regelmäßig macht, ein immenser, unausweichlicher und stetig wachsender Kostenfaktor.</p>
<h2>Legacy Code verursacht weitaus höhere Projektkosten</h2>
<figure id="attachment_248" aria-describedby="caption-attachment-248" style="width: 300px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Legacy-Code-kostet-viel-Geld.jpg" rel="attachment wp-att-248"><img loading="lazy" decoding="async" class="wp-image-248 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Legacy-Code-kostet-viel-Geld-300x200.jpg" alt="Legacy Code kostet viel Geld" width="300" height="200" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Legacy-Code-kostet-viel-Geld-300x200.jpg 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Legacy-Code-kostet-viel-Geld-768x512.jpg 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Legacy-Code-kostet-viel-Geld-1024x682.jpg 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Legacy-Code-kostet-viel-Geld.jpg 1280w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Legacy-Code-kostet-viel-Geld-300x200@2x.jpg 600w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-248" class="wp-caption-text">Legacy Code kostet viel Geld</figcaption></figure>
<p>Webdevelopment-Projekte sind in einem schlechten Software-Zustand nicht mehr wartbar, zumal nach und nach immer mehr Bugs ans Tageslicht kommen. Das richtet großen Schaden in sämtlichen Bereichen einer Firma an und kann diese sogar in den Ruin treiben.</p>
<p>Auch Kunden ist das mittlerweile klar geworden: Rund 30 Prozent Mehrkosten sind als On-Top-Budget für Software-Qualität längst eine feste kalkulatorische Größe. Damit werden dann beispielsweise automatisierte Tests eingeführt, um den Entwicklungsprozess optimieren zu können.</p>
<h2>Legacy Code verhindert die Weiterentwicklung der Berufssparte</h2>
<figure id="attachment_249" aria-describedby="caption-attachment-249" style="width: 300px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Legacy-Code-verhindert-die-Weiterentwicklung-der-gesamten-Berufssparte.jpg" rel="attachment wp-att-249"><img loading="lazy" decoding="async" class="wp-image-249 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Legacy-Code-verhindert-die-Weiterentwicklung-der-gesamten-Berufssparte-300x200.jpg" alt="Legacy Code verhindert die Weiterentwicklung der gesamten Berufssparte" width="300" height="200" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Legacy-Code-verhindert-die-Weiterentwicklung-der-gesamten-Berufssparte-300x200.jpg 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Legacy-Code-verhindert-die-Weiterentwicklung-der-gesamten-Berufssparte-768x512.jpg 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Legacy-Code-verhindert-die-Weiterentwicklung-der-gesamten-Berufssparte-1024x682.jpg 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Legacy-Code-verhindert-die-Weiterentwicklung-der-gesamten-Berufssparte.jpg 1280w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Legacy-Code-verhindert-die-Weiterentwicklung-der-gesamten-Berufssparte-300x200@2x.jpg 600w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-249" class="wp-caption-text">Legacy Code verhindert die Weiterentwicklung der Berufssparte</figcaption></figure>
<p>Wenn die verfügbaren Ressourcen eines Webdevelopment-Teams völlig aufgebraucht werden, leiden darunter Weiterbildung und Motivation sowie die Bereitschaft, sich mit Herzblut in seine Arbeit einzubringen. Code wird dann sprichwörtlich hingerotzt. Dabei ist gerade bei der heutigen Programmierung ein enorm hohes und komplexes Wissen gefragt. Das kann nicht mal eben mit einer einzelnen PHP-Schulung abgebildet werden.</p>
<p>Zudem wird es Junior-Webdevelopern auf diese Weise nahezu unmöglich gemacht, sich in die vorhandenen Strukturen zu integrieren. Hinzu kommt die vertane Zeit. Denn sich mit Problemen aus einer &#8222;anderen technischen Epoche&#8220; auseinandersetzen zu müssen, ist nicht zielführend. Innovationen und Sprünge in der Entwicklung sind so nicht machbar. Man steckt im Sumpf der Legacy-Projekte fest.</p>
<h2>Refactoring ist der Anfang vom Ende des Legacy Codes</h2>
<figure id="attachment_251" aria-describedby="caption-attachment-251" style="width: 300px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Refactoring-Anfang-vom-Ende-fuer-Legacy-Code.jpg" rel="attachment wp-att-251"><img loading="lazy" decoding="async" class="wp-image-251 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Refactoring-Anfang-vom-Ende-fuer-Legacy-Code-300x208.jpg" alt="Refactoring Anfang vom Ende für Legacy Code" width="300" height="208" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Refactoring-Anfang-vom-Ende-fuer-Legacy-Code-300x208.jpg 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Refactoring-Anfang-vom-Ende-fuer-Legacy-Code-768x533.jpg 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Refactoring-Anfang-vom-Ende-fuer-Legacy-Code-1024x710.jpg 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Refactoring-Anfang-vom-Ende-fuer-Legacy-Code.jpg 1280w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Refactoring-Anfang-vom-Ende-fuer-Legacy-Code-300x208@2x.jpg 600w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-251" class="wp-caption-text">Refactoring ist der Anfang vom Ende des Legacy Codes</figcaption></figure>
<p>Software-Qualität entsteht durch Refactoring von Quellcode. Man spricht hier auch von &#8222;Aushärten&#8220;. In allen Arbeitsbereichen wird dabei noch einmal über die bestehende Arbeit geschaut, um diese zu korrigieren und zu verbessern. Sogar ein einfacher Blog-Artikel wie dieser hier bekommt dadurch mehr als zehn Revisionen.</p>
<p>Betrachtet man hingegen Code-Stellen, bleibt man im unteren einstelligen Bereich. Hier muss wesentlich mehr Zeit investiert und eingeplant werden. Dies ist dann zugleich eine Investition in das eigene Webdevelopment-Team. Denn warum sollte man sich schwieriger und langsamer in Projekten bewegen, bloß weil der Kunde an diesem Punkt keinen Bedarf sieht …? Schließlich geht es nicht zuletzt um die eigene Software-Qualität – und damit letztlich auch um Lebensqualität.</p>
<h2>Wir können Software-Projekte nicht neu schreiben</h2>
<figure id="attachment_252" aria-describedby="caption-attachment-252" style="width: 300px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Wir-koennen-Software-Projekte-nicht-neu-schreiben.jpg" rel="attachment wp-att-252"><img loading="lazy" decoding="async" class="wp-image-252 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Wir-koennen-Software-Projekte-nicht-neu-schreiben-300x210.jpg" alt="Wir können Software-Projekte nicht neu schreiben" width="300" height="210" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Wir-koennen-Software-Projekte-nicht-neu-schreiben-300x210.jpg 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Wir-koennen-Software-Projekte-nicht-neu-schreiben-768x536.jpg 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Wir-koennen-Software-Projekte-nicht-neu-schreiben-1024x715.jpg 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Wir-koennen-Software-Projekte-nicht-neu-schreiben.jpg 1280w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Wir-koennen-Software-Projekte-nicht-neu-schreiben-300x210@2x.jpg 600w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-252" class="wp-caption-text">Wir können Software-Projekte nicht neu schreiben</figcaption></figure>
<p>Noch immer gibt es die Illusion, dass eine Website alle paar Jahre komplett neu gemacht werden muss. Selbst auf Internetseiten, die an Werbekampagnen gebunden sind, soll dies zutreffen. Doch in &#8222;Wegwerf-Seiten&#8220; wurde in aller Regel keine aufwendige Business-Logik implementiert – wie etwa in Bereichen des E-Commerce. Insofern ist es purer Wahnsinn, zu denken, man könne mit den vorhandenen personellen Ressourcen parallel einfach mal eine neue Seite entwickeln. Das ist der falsche Weg.</p>
<figure id="attachment_265" aria-describedby="caption-attachment-265" style="width: 300px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/same-old-thinking.png" rel="attachment wp-att-265"><img loading="lazy" decoding="async" class="wp-image-265 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/same-old-thinking-300x150.png" alt="Same old thinking – same old result" width="300" height="150" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/same-old-thinking-300x150.png 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/same-old-thinking.png 600w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-265" class="wp-caption-text">Same old thinking – same old result</figcaption></figure>
<p>&#8222;Same old thinking – same old result&#8220; ist hier ein Problem an sich. Es verhindert, dass sich Entwickler mit neuem Wissen frisch ans Werk machen können, zumal dadurch alte Probleme am Ende nur neu verpackt werden. Zudem ergeben sich beträchtliche Spannungen, wenn ein Teil des Teams neue Software schreiben muss, während der andere Teil den bestehenden Teil weiterpflegt. So kommt nur unnötige Unruhe auf, die dem Teamgeist schadet und das Projekt behindert. Allerdings ist es ohne Weiteres möglich, bestimmte Routen eines Projekts neu zu erstellen und somit sukzessiv Teile zu erneuern. <a href="http://www.entwicklungshilfe.nrw/kontakt/">Zu diesem Thema beraten wir gerne</a>.</p>
<h2>Mit Pair Programming Probleme erkennen und lösen</h2>
<figure id="attachment_253" aria-describedby="caption-attachment-253" style="width: 300px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Teamarbeit-Legacy-Code.jpg" rel="attachment wp-att-253"><img loading="lazy" decoding="async" class="wp-image-253 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Teamarbeit-Legacy-Code-300x196.jpg" alt="Teamarbeit Legacy Code" width="300" height="196" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Teamarbeit-Legacy-Code-300x196.jpg 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Teamarbeit-Legacy-Code-768x503.jpg 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Teamarbeit-Legacy-Code-1024x670.jpg 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Teamarbeit-Legacy-Code-214x140.jpg 214w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Teamarbeit-Legacy-Code.jpg 1280w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Teamarbeit-Legacy-Code-300x196@2x.jpg 600w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Teamarbeit-Legacy-Code-214x140@2x.jpg 428w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-253" class="wp-caption-text">Legacy Code: Pair Programming als Lösung</figcaption></figure>
<p>Vor allem Refactoring im Team bietet eine hervorragende Möglichkeit, mit Pair-Programming anzufangen. Nutzt man diese Chance, so bildet man gleich auch das Webdevelopment-Team weiter und spart eine ganze Menge Zeit, die sonst für Absprachen und Konventionen nötig wäre. Gerade der &#8222;doppelte Blick&#8220; ist ja der Schlüssel dafür, Probleme zu erkennen und aus einem anderen Blickwinkel betrachten zu können. Wir bieten Schulungen mit genau diesem Ziel an. Da der Start mit <a href="http://www.entwicklungshilfe.nrw/workshops/moderiertes-pair-programming/">Pair Programming</a> jedoch nicht immer ganz einfach ist, ist eine externe Meinung umso wichtiger, damit es hier nicht zum Kompetenzgerangel kommt.</p>
<h2>Legacy Code und der innere Schweinehund</h2>
<figure id="attachment_254" aria-describedby="caption-attachment-254" style="width: 300px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Legacy-Code-und-der-Schweinehund.jpg" rel="attachment wp-att-254"><img loading="lazy" decoding="async" class="wp-image-254 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Legacy-Code-und-der-Schweinehund-300x199.jpg" alt="Legacy Code und der Schweinehund" width="300" height="199" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Legacy-Code-und-der-Schweinehund-300x199.jpg 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Legacy-Code-und-der-Schweinehund-768x510.jpg 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Legacy-Code-und-der-Schweinehund-1024x680.jpg 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Legacy-Code-und-der-Schweinehund.jpg 1280w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Legacy-Code-und-der-Schweinehund-300x199@2x.jpg 600w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-254" class="wp-caption-text">Legacy Code und der innere Schweinehund</figcaption></figure>
<p>Sport ist gut für die Gesundheit, gesunde Ernährung ohnehin, und Bewegung tut ihr Übriges. Ein gesunder Körper kann am Ende immer auf einen gesunden Geist zählen. Und halten wir zur Genüge daran? Nein. Wir verfügen über einen regelrechten Ausreden-Katalog, der von täglichen Problemen bis hin zum Wetter immer eine passende Ausrede für uns parat hält. Und dabei ist es doch einfach nur eine Kopfsache.</p>
<p>So ist es auch in der Software-Entwicklung. Hier verhalten wir uns aus mehreren Gründen unvernünftig. Wobei oft gar nicht erst nach Gründen gesucht, sondern ebenso wie beim Thema Sport &amp; Gesundheit bei jeder Gelegenheit der &#8222;Keine-Zeit-Joker&#8220; ausgespielt wird. Einfach mal mit einem festen Termin über zwei Stunden in der Woche freitags ab 16 Uhr starten! Das kommt auch erstmal gut an. Aber hier sind Ausdauer und Disziplin gefragt!</p>
<h2>Wenn der Budget-Plan keine Software-Qualität zulässt</h2>
<figure id="attachment_255" aria-describedby="caption-attachment-255" style="width: 1280px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-255 size-full" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Geschäftsfuehrung-und-Legacy-Code.jpg" alt="Geschäftsführung und Legacy Code" width="1280" height="853" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Geschäftsfuehrung-und-Legacy-Code.jpg 1280w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Geschäftsfuehrung-und-Legacy-Code-300x200.jpg 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Geschäftsfuehrung-und-Legacy-Code-768x512.jpg 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Geschäftsfuehrung-und-Legacy-Code-1024x682.jpg 1024w" sizes="auto, (max-width: 1280px) 100vw, 1280px" /><figcaption id="caption-attachment-255" class="wp-caption-text">Geschäftsführung und Legacy Code</figcaption></figure>
<p>Investitionen in die Software-Qualität und in das Personal sind dringend notwendig. Aber oft lässt der Budget-Plan dies nicht zu. Doch wie weit kommt man mit einem Auto mit brennender Motorleuchte, ohne einen Motorschaden zu riskieren …? Schlimmstenfalls bis zum Totalschaden. Gleichermaßen riskant ist ein solch &#8222;blindes&#8220; Vorgehen in der Software-Entwicklung. Und noch einmal: Darunter leidet immer auch die Stimmung in der gesamten Firma.</p>
<p>In puncto Software-Qualität muss also die richtige Entscheidung getroffen werden! Es gilt, konsequent Ziele zu beschließen und zu erreichen. Der Prozess muss kontrolliert und überwacht werden.</p>
<h2>Mit zu viel Legacy Code werden Entwickler verheizt</h2>
<figure id="attachment_256" aria-describedby="caption-attachment-256" style="width: 300px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Arbeitsmarkt-und-Arbeitssituation-bei-viel-Legacy-Code.jpg" rel="attachment wp-att-256"><img loading="lazy" decoding="async" class="wp-image-256 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Arbeitsmarkt-und-Arbeitssituation-bei-viel-Legacy-Code-300x200.jpg" alt="Arbeitsmarkt und Arbeitssituation bei viel Legacy Code" width="300" height="200" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Arbeitsmarkt-und-Arbeitssituation-bei-viel-Legacy-Code-300x200.jpg 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Arbeitsmarkt-und-Arbeitssituation-bei-viel-Legacy-Code-768x512.jpg 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Arbeitsmarkt-und-Arbeitssituation-bei-viel-Legacy-Code-1024x682.jpg 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Arbeitsmarkt-und-Arbeitssituation-bei-viel-Legacy-Code.jpg 1280w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Arbeitsmarkt-und-Arbeitssituation-bei-viel-Legacy-Code-300x200@2x.jpg 600w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-256" class="wp-caption-text">Arbeitsmarkt und Arbeitssituation bei zu viel Legacy Code</figcaption></figure>
<p>Als Webentwickler mit Berufserfahrung findet man derzeit in jeder Stadt Arbeitgeber und kann sofort eine Stelle besetzen. Die Stellen selbst sind dabei, auch wenn die Gehälter einander entsprechen, höchst unterschiedlich. Wird der Entwickler gefordert und gefördert – oder doch nur verheizt? Etwa durch zu viel Legacy Code. Letzteres findet man überall. Ersteres vielleicht in den vier großen Städten. Vor allem Berlin zeigt, wie es geht. Und gerade deshalb gibt es dort auch so tolle Erfolgsstories.</p>
<p>Der Ruf der Entwicklungsabteilung und der Software-Qualität im Unternehmen ist ein zunehmend wichtiges Entscheidungskriterium für die Karriere. Daher gilt auch hier: Ist der Ruf erst ruiniert … Treffen Unternehmen indes die richtigen Entscheidungen, so festigt man die bestehenden Strukturen und macht sich attraktiv für neue Bewerber.</p>
<h2>Mein Fazit zum Thema Legacy Code</h2>
<figure id="attachment_257" aria-describedby="caption-attachment-257" style="width: 300px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Fazit-Legacy-Code.jpg" rel="attachment wp-att-257"><img loading="lazy" decoding="async" class="wp-image-257 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Fazit-Legacy-Code-300x200.jpg" alt="Fazit Legacy Code" width="300" height="200" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Fazit-Legacy-Code-300x200.jpg 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Fazit-Legacy-Code-768x511.jpg 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Fazit-Legacy-Code-1024x682.jpg 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Fazit-Legacy-Code.jpg 1280w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Fazit-Legacy-Code-300x200@2x.jpg 600w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-257" class="wp-caption-text">Fazit Legacy Code</figcaption></figure>
<p>Legacy Code ist nach wie vor ein großes Problem, das sich nur mit Arbeit lösen lässt. Doch ist man diesen Weg einmal gegangen, dann lohnt er sich. Denn klar ist:</p>
<ul>
<li>Die Software-Qualität steigt.</li>
<li>Die Kunden sind zufriedener.</li>
<li>Die Abteilungen können effektiv arbeiten.</li>
<li>Der Spaß kehrt zurück an den Arbeitsplatz.</li>
</ul>
<p>So betrachtet ist die gezielte und intensive Beschäftigung mit Legacy Code ein notwendiges Übel. Denn niemand mag es, ständig aufzuräumen und Ordnung zu halten. Für Profis gehört aber genau das nun einmal dazu.</p>
<p><em>Welche Erfahrungen hast du mit Legacy Code gemacht? Du kannst gerne das Kommentarfeld unter diesem Beitrag nutzen, um deine Erfahrungen mit anderen zu teilen.</em></p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/01/28/legacy-code-entstehung-und-ursache/">Legacy Code – Entstehung, Ursache und Auswirkung</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://entwicklungshilfe.nrw/blog/2016/01/28/legacy-code-entstehung-und-ursache/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Continuous Integration: Eine Einführung in PHPCI</title>
		<link>https://entwicklungshilfe.nrw/blog/2016/01/21/continuous-integration-mit-phpci/</link>
					<comments>https://entwicklungshilfe.nrw/blog/2016/01/21/continuous-integration-mit-phpci/#comments</comments>
		
		<dc:creator><![CDATA[Andreas Mautz]]></dc:creator>
		<pubDate>Thu, 21 Jan 2016 08:25:06 +0000</pubDate>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Software Qualität]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<guid isPermaLink="false">http://www.entwicklungshilfe.nrw/blog/?p=196</guid>

					<description><![CDATA[<p>Tools für Continuous Integration dienen dem automatischen Testing von Code in einer Entwicklungsumgebung. In diesem Beitrag erfahrt ihr zunächst einmal, wie man PHP Continuous Integration installiert. Continuous what? Als Dozent für die PHP-Schulungen von Entwicklungshilfe NRW interessiere ich mich über die reine PHP-Entwicklung hinaus für das Thema Continuous Integration (CI). Neben der lokalen Entwicklung mit Tools wie Vagrant [&#8230;]</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/01/21/continuous-integration-mit-phpci/">Continuous Integration: Eine Einführung in PHPCI</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Tools für Continuous Integration dienen dem automatischen Testing von Code in einer Entwicklungsumgebung. In diesem Beitrag erfahrt ihr zunächst einmal, wie man PHP Continuous Integration installiert.</p>
<figure id="attachment_227" aria-describedby="caption-attachment-227" style="width: 300px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Continuous-Integration-PHPCI.jpg" rel="attachment wp-att-227"><img loading="lazy" decoding="async" class="wp-image-227 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Continuous-Integration-PHPCI-300x200.jpg" alt="Continuous Integration: Eine Einführung in PHPCI" width="300" height="200" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Continuous-Integration-PHPCI-300x200.jpg 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Continuous-Integration-PHPCI-768x512.jpg 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Continuous-Integration-PHPCI-1024x683.jpg 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Continuous-Integration-PHPCI.jpg 1920w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Continuous-Integration-PHPCI-300x200@2x.jpg 600w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Continuous-Integration-PHPCI-768x512@2x.jpg 1536w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-227" class="wp-caption-text">Continuous Integration: Eine Einführung in PHPCI</figcaption></figure>
<h2>Continuous what?</h2>
<p>Als Dozent für die PHP-Schulungen von Entwicklungshilfe NRW interessiere ich mich über die reine PHP-Entwicklung hinaus für das Thema Continuous Integration (CI). Neben der lokalen Entwicklung mit Tools wie Vagrant und PhpStorm zur schnellen und guten Programmierung an PHP-Applikationen ist eine stabile Pipeline zum Testen und Ausliefern (Deployment) des Codes Gold wert. Funktionierende Automatisierung spart immer Zeit und Geld. Wenn zusätzlich dabei noch getestet wird, schlafe ich als Entwickler direkt ruhiger. CI-Tools machen genau das: Sie testen in einer Entwicklungsumgebung euren Code. Jeder Durchlauf eines Prozesses wird dabei &#8222;Build&#8220; genannt. Ziel ist es, durch automatisierte Tests und die vorherige saubere Entwicklung einen fehlerfreien Build auszuliefern.</p>
<p>Vielen Entwicklern wird <a href="http://jenkins-ci.org/" target="_blank" rel="noopener noreferrer">Jenkins</a> (bzw. Hudson) ein Begriff sein. Wer andere Erfahrungen mit ähnlichen Tools gemacht hat, kann das gerne als Kommentar hier mit einbringen.</p>
<h1>PHPCI als Continuous Integration Tool</h1>
<p>Heute gebe ich eine kleine Einführung in PHP Continuous Integration, kurz <a href="https://www.phptesting.org/" target="_blank" rel="noopener noreferrer">PHPCI</a>. Als PHP-Entwickler habe ich zwar gute Erfahrungen mit Jenkins gemacht – ich finde aber den Ansatz von PHPCI besser, als CI-Tool für PHP-Projekte in PHP geschrieben zu sein. So verstehe ich als Entwickler das Tool besser. Obwohl PHPCI noch <a href="https://www.phptesting.org/news" target="_blank" rel="noopener noreferrer">ein recht junges Projekt ist</a>, finde ich die derzeitige Funktion schon brauchbar, und es macht Spaß, damit zu experimentieren. Das Github-Projekt findet ihr <a href="https://github.com/Block8/PHPCI" target="_blank" rel="noopener noreferrer">hier</a>. Doch vor dem Vergnügen kommt erstmal kurz die Arbeit, sprich die Installation. Als Voraussetzung wird hier von einem Debian-basierten Webserver mit installiertem Apache und MySQL-Server ausgegangen. Paketinstallationen auf einem Server sowie das Tool <a href="https://getcomposer.org/" target="_blank" rel="noopener noreferrer">composer</a> sollten euch geläufig sein.</p>
<h2>Installation von PHPCI</h2>
<p>Zunächst wechseln wir in das Webverzeichnis des Servers (default /var/www):</p>
<pre class="lang:default decode:true">cd /var/www
</pre>
<p>Nun erstellen wir per composer das PHPCI-Projekt. Bei dem letzten Befehl solltet ihr eure Datenbank-Zugangsdaten zur Hand haben.</p>
<pre class="lang:default decode:true">composer create-project block8/phpci phpci --keep-vcs --no-dev
cd phpci &amp;&amp; composer install
./console phpci:install
</pre>
<p>Das Ergebnis sollte so aussehen:</p>
<figure id="attachment_198" aria-describedby="caption-attachment-198" style="width: 1024px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-198 size-large" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpci_console-1024x346.png" alt="Konsolenausgabe bei der Continuous Integration Tool Installation" width="1024" height="346" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpci_console-1024x346.png 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpci_console-300x101.png 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpci_console-768x259.png 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpci_console-1024x346@2x.png 2048w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpci_console-300x101@2x.png 600w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpci_console-768x259@2x.png 1536w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption id="caption-attachment-198" class="wp-caption-text">Konsolenausgabe bei der Continuous Integration Tool Installation</figcaption></figure>
<p>Eine einfache Vhost-Konfigurationsdatei, die dem Apache hinzugefügt und aktiviert wird, reicht zum Aufrufen unseres neuen Tools zur Continuous Integration:</p>
<pre class="lang:default decode:true">    ServerAdmin __ADMIN__@__SERVER__
    ServerName phpci.__SERVER__
    DocumentRoot /var/www/phpci/public
    
        DirectoryIndex index.php
        Options Indexes FollowSymlinks MultiViews
        Require all granted
        AllowOverride All
        
    LogLevel warn

</pre>
<p>Solltet ihr nicht mit einer Seite wie dieser hier empfangen werden, schaut bitte in die <a href="https://www.phptesting.org/wiki/Installing-PHPCI" target="_blank" rel="noopener noreferrer">Installationshilfe</a> auf der PHPCI-Seite nach oder schreibt uns hier.</p>
<p>Wenn ihr jetzt die eingetragene URL aufruft, seht ihr die Startseite eures neuen CI-Tools, und ihr könnt euch einloggen.</p>
<p>Dieser komplette Installationsvorgang dauert keine 30 Minuten. PHPCI ist eine kostenlose, quelloffene Variante, die euch in die Lage versetzt, sehr schnell eine eigene Build-Pipeline als Grundlage für eine Continuous-Integration-, Continuous-Delivery- oder Continuous-Deployment-Strategie aufzubauen. Um die beiden letztgenannten Punkte geht es an dieser Stelle allerdings nicht.</p>
<h2>Weitere Posts zum Thema Continuous Integration</h2>
<p>Ich versuche, hier so schnell wie möglich weitere Anleitungen über PHPCI zu posten. Geplant sind derzeit auf jeden Fall:</p>
<ul>
<li>Aufsetzen eines versionskontrollebasierten PHP-Projektes in PHPCI</li>
<li>Unit-Tests mit PHPCI</li>
<li>Acceptance-Tests mit Codeception in PHPCI</li>
<li>Weitere Tests wie Mess Detection und Code Coverage</li>
</ul>
<p><em>Ich hoffe, meine kurze Anleitung war hilfreich für euch. Wenn ihr noch Fragen dazu habt, könnt ihr diese gerne unter Verwendung der Kommentarfunktion stellen. Ansonsten verlinke ich relevante Posts hier.</em></p>
<p>Einen detaillierten Überblick über unsere PHP-Schulungen für Webentwickler findet ihr übrigens auf der <a href="http://www.entwicklungshilfe.nrw/">Website von Entwicklungshilfe NRW</a>.</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/01/21/continuous-integration-mit-phpci/">Continuous Integration: Eine Einführung in PHPCI</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://entwicklungshilfe.nrw/blog/2016/01/21/continuous-integration-mit-phpci/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
	</channel>
</rss>
