<?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>Continuous Integration Archive - Entwicklungshilfe NRW</title>
	<atom:link href="https://entwicklungshilfe.nrw/blog/tag/continuous-integration/feed/" rel="self" type="application/rss+xml" />
	<link>https://entwicklungshilfe.nrw/blog/tag/continuous-integration/</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>Continuous Integration Archive - Entwicklungshilfe NRW</title>
	<link>https://entwicklungshilfe.nrw/blog/tag/continuous-integration/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>PhpStorm mit dem Ticketsystem Redmine nutzen</title>
		<link>https://entwicklungshilfe.nrw/blog/2016/01/31/phpstorm-mit-ticketsystem-redmine-nutzen/</link>
					<comments>https://entwicklungshilfe.nrw/blog/2016/01/31/phpstorm-mit-ticketsystem-redmine-nutzen/#respond</comments>
		
		<dc:creator><![CDATA[Andreas Mautz]]></dc:creator>
		<pubDate>Sun, 31 Jan 2016 18:57:11 +0000</pubDate>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Entwicklertools]]></category>
		<category><![CDATA[Configuration]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Infrastruktur]]></category>
		<category><![CDATA[Seminar]]></category>
		<category><![CDATA[Training]]></category>
		<category><![CDATA[Versionskontrolle]]></category>
		<category><![CDATA[Workshop]]></category>
		<guid isPermaLink="false">http://www.entwicklungshilfe.nrw/blog/?p=305</guid>

					<description><![CDATA[<p>In diesem Tutorial für Webdeveloper zeige ich, wie man die Entwicklungsumgebung PhpStorm mit dem Ticketsystem Redmine verbindet und das Tasksystem von PhpStorm zusammen mit git-flow als Workflow umsetzen kann. Voraussetzungen für einen erfolgreichen Workflow Grundlage für den hier gezeigten Workflow sind PhpStorm als IDE mit installiertem git-flow-Plugin sowie ein funktionierendes Ticketsystem Redmine. Natürlich gibt es Alternativen zu [&#8230;]</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/01/31/phpstorm-mit-ticketsystem-redmine-nutzen/">PhpStorm mit dem Ticketsystem Redmine nutzen</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>In diesem Tutorial für Webdeveloper zeige ich, wie man die Entwicklungsumgebung PhpStorm mit dem Ticketsystem Redmine verbindet und das Tasksystem von PhpStorm zusammen mit git-flow als Workflow umsetzen kann.</p>
<h3>Voraussetzungen für einen erfolgreichen Workflow</h3>
<p>Grundlage für den hier gezeigten Workflow sind <a href="https://www.jetbrains.com/phpstorm/" target="_blank" rel="noopener noreferrer">PhpStorm</a> als IDE mit installiertem <a href="https://plugins.jetbrains.com/plugin/7315" target="_blank" rel="noopener noreferrer">git-flow-Plugin</a> sowie ein funktionierendes Ticketsystem <a href="http://www.redmine.org/" target="_blank" rel="noopener noreferrer">Redmine</a>. Natürlich gibt es Alternativen zu dieser Kombination. PhpStorm arbeitet mit sehr vielen Systemen zusammen, und auch andere IDEs haben ähnliche Funktionen. Der Workflow im Versionskontrollsystem basiert auf unserer <a href="http://presentations.entwicklungshilfe.nrw/git_flow.html">git-flow-Präsentation</a> und ist aus meiner Sicht zwar im Feinen anpassbar, im Groben aber alternativlos.</p>
<h3>Ticketsystem Redmine richtig einstellen</h3>
<p>Das Ticketsystem sollte von außen erreichbar sein. Der zur Verknüpfung benutzte User sollte im Ticketsystem aktiv sein und Projekte und Tasks – im Weiteren auch Issues genannt – zugewiesen haben. Zusätzlich muss die REST-Api in der Konfiguration des Ticketsystems aktiviert sein.</p>
<figure id="attachment_322" aria-describedby="caption-attachment-322" style="width: 1024px" class="wp-caption alignleft"><img fetchpriority="high" decoding="async" class="wp-image-322 size-large" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/redmine_setting-1024x148.png" alt="Einstellungen im Ticketsystem redmine für PhpStorm" width="1024" height="148" /><figcaption id="caption-attachment-322" class="wp-caption-text">Einstellungen im Ticketsystem redmine für PhpStorm</figcaption></figure>
<h3>In PhpStorm geht es weiter</h3>
<p>In PhpStorm geht man zunächst über die Tastenkombi cmd+&#8220;,&#8220; (Mac) in die Einstellungen und navigiert zu Tools -&gt; Tasks -&gt; Servers. Dort setzt man nach Auswahl des Ticketsystems die URL und Zugangsdaten zu seinem Ticketsystem.</p>
<figure id="attachment_314" aria-describedby="caption-attachment-314" style="width: 1024px" class="wp-caption alignleft"><img decoding="async" class="wp-image-314 size-large" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_task_server-1024x689.png" alt="PhpStorm-Einstellungen für die Verbindung mit dem Ticketsystem" width="1024" height="689" /><figcaption id="caption-attachment-314" class="wp-caption-text">PhpStorm-Einstellungen für die Verbindung mit dem Ticketsystem</figcaption></figure>
<p>Ein Klick auf den Test-Button liefert das Ergebnis:</p>
<figure id="attachment_308" aria-describedby="caption-attachment-308" style="width: 1024px" class="wp-caption alignleft"><img decoding="async" class="wp-image-308 size-large" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_settings-1024x420.png" alt="PhpStorm mit dem Ticketsystem Redmine" width="1024" height="420" /><figcaption id="caption-attachment-308" class="wp-caption-text">PhpStorm mit dem Ticketsystem Redmine</figcaption></figure>
<p>Im zweiten Reiter stellt man die Commit-Einstellungen ein. Das Ticketsystem Redmine ist in der Lage, Commit-Nachrichten auszulesen und darauf zu reagieren. Eine sinnvolle Einstellung zur Automatisierung spart hier wertvolle Zeit.</p>
<figure id="attachment_313" aria-describedby="caption-attachment-313" style="width: 1024px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-313 size-large" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_tasks_settings_2-1024x682.png" alt="Einstellungen in PhpStorm für die Verbindung mit dem Ticketsystem" width="1024" height="682" /><figcaption id="caption-attachment-313" class="wp-caption-text">Einstellungen in PhpStorm für die Verbindung mit dem Ticketsystem</figcaption></figure>
<h2>Optimaler Workflow in PhpStorm mit dem Ticketsystem Redmine</h2>
<p>Die Voraussetzungen sind hier ein Projekt im ausgecheckten develop-Branch, ein vorhandenes Ticket und eine eingerichtete Entwicklungsumgebung.</p>
<p>Die Steuerungsleiste für das Taskmanagement befindet sich im rechten oberen Bereich.</p>
<figure id="attachment_307" aria-describedby="caption-attachment-307" style="width: 838px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-307 size-full" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_settings_server_task.png" alt="Leiste für die Ticketsystemsteuerung" width="838" height="52" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_settings_server_task.png 838w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_settings_server_task-300x19.png 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_settings_server_task-768x48.png 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_settings_server_task-300x19@2x.png 600w" sizes="auto, (max-width: 838px) 100vw, 838px" /><figcaption id="caption-attachment-307" class="wp-caption-text">Leiste für die Ticketsystemsteuerung</figcaption></figure>
<p>Über das Dropdown kommt man in den &#8222;Task öffnen&#8220;-Dialog.</p>
<figure id="attachment_321" aria-describedby="caption-attachment-321" style="width: 750px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-321 size-full" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_open_task-e1454265308986.png" alt="Öffnen einer Issue in PhpStorm" width="750" height="401" /><figcaption id="caption-attachment-321" class="wp-caption-text">Öffnen einer Issue in PhpStorm</figcaption></figure>
<p>Nach erfolgreichem Öffnen eines Tasks sollte man eine für den Task eingerichtete Changelist in PhpStorm und auf Ebene der Versionskontrolle einen Feature-Branch ausgecheckt haben.</p>
<figure id="attachment_312" aria-describedby="caption-attachment-312" style="width: 1024px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-312 size-large" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_changelist2-1024x361.png" alt="Fortschritt im PHP-Projekt" width="1024" height="361" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_changelist2-1024x361.png 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_changelist2-300x106.png 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_changelist2-768x271.png 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_changelist2-1024x361@2x.png 2048w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_changelist2-300x106@2x.png 600w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_changelist2-768x271@2x.png 1536w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption id="caption-attachment-312" class="wp-caption-text">Fortschritt im PHP-Projekt</figcaption></figure>
<p>Sollte man seine relevanten Entwicklungen lokal abgeschlossen haben, kommt der Zeitpunkt, an dem man seinen Code committet. Durch die Nutzung der taskrelevanten Changelisten ist dies selbst bei Bearbeitung mehrerer Issues in einem Projekt durchschaubar. Zudem verringern die voreingestellten Informationen aus dem Ticketsystem die manuell einzugebenden Informationen.</p>
<figure id="attachment_311" aria-describedby="caption-attachment-311" style="width: 1024px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-311 size-large" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_commit-1024x772.png" alt="Commit der neuen Dateien" width="1024" height="772" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_commit-1024x772.png 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_commit-300x226.png 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_commit-768x579.png 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_commit.png 1517w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_commit-300x226@2x.png 600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption id="caption-attachment-311" class="wp-caption-text">Commit der neuen Dateien</figcaption></figure>
<p>Vor dem anschließenden Push zeigt PhpStorm eine Zusammenfassung der Änderungen.</p>
<figure id="attachment_320" aria-describedby="caption-attachment-320" style="width: 1024px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-320 size-large" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_push-1024x1008.png" alt="Push in unser zentrales Versionskontrollsystem" width="1024" height="1008" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_push-1024x1008.png 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_push-300x295.png 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_push-768x756.png 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_push.png 1170w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_push-300x295@2x.png 600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption id="caption-attachment-320" class="wp-caption-text">Push in unser zentrales Versionskontrollsystem</figcaption></figure>
<p>Als Abschluss muss man das Feature leider noch manuell über das git-flow-Plugin schließen, aber ich hoffe, dass das in naher Zukunft automatisiert wird.</p>
<figure id="attachment_317" aria-describedby="caption-attachment-317" style="width: 526px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-317 size-full" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_gitflow-e1454265851423.png" alt="Der Feature Branch wird geschlossen" width="526" height="351" /><figcaption id="caption-attachment-317" class="wp-caption-text">Der Feature Branch wird geschlossen</figcaption></figure>
<p>Als Meldung sollte PhpStorm einblenden, dass der Feature-Branch erfolgreich zurückgemerged wurde.</p>
<figure id="attachment_318" aria-describedby="caption-attachment-318" style="width: 750px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-318 size-full" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_tasks-e1454265896201.png" alt="Erfolgsmeldung aus PhpStorm für unseren Workflow" width="750" height="112" /><figcaption id="caption-attachment-318" class="wp-caption-text">Erfolgsmeldung aus PhpStorm für unseren Workflow</figcaption></figure>
<p>Es kann zudem vorkommen, dass PhpStorm die Changelist nicht löscht. Um die Ordnung nicht zu verlieren, hilft das manuelle Löschen.</p>
<figure id="attachment_316" aria-describedby="caption-attachment-316" style="width: 750px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-316 size-full" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_changelist-e1454265959607.png" alt="Manuelles Löschen der Changelist in PhpStorm" width="750" height="441" /><figcaption id="caption-attachment-316" class="wp-caption-text">Manuelles Löschen der Changelist in PhpStorm</figcaption></figure>
<p>Außerdem kann es helfen, bei zu vielen Issues in der Liste auch diese manuell zu löschen.</p>
<figure id="attachment_315" aria-describedby="caption-attachment-315" style="width: 750px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-315 size-full" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_tasks_2-e1454266031571.png" alt="Entfernen der Issue aus der Taskliste" width="750" height="218" /><figcaption id="caption-attachment-315" class="wp-caption-text">Entfernen der Issue aus der Taskliste</figcaption></figure>
<h3>Überprüfung in der Versionskontrolle und im Ticketsystem Redmine</h3>
<p>Wer ähnlich wie wir <a href="http://www.entwicklungshilfe.nrw/blog/ticketsystem-mit-versionskontrolle/">Redmine mit gitolite und dem redmine git hosting</a> nutzt, kann jetzt in seinem Projekt bei Redmine im Projektarchiv seinen neuen Workflow überprüfen.</p>
<figure id="attachment_309" aria-describedby="caption-attachment-309" style="width: 1024px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-309 size-large" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/workflow_redmine-1024x162.png" alt="Workflow Ansicht im Ticketsystem Redmine" width="1024" height="162" /><figcaption id="caption-attachment-309" class="wp-caption-text">Workflow-Ansicht im Ticketsystem Redmine</figcaption></figure>
<p>Weiterführende Informationen zum Beispiel vom PhpStorm-Hersteller Jetbrains bekommt ihr <a href="https://www.jetbrains.com/phpstorm/help/tasks.html" target="_blank" rel="noopener noreferrer">hier</a>.</p>
<p><em>Nutzt ihr in euren PHP-Projekten eine andere Kombination von Ticketsystem, Versionskontrolle und IDE? Wenn ja, dann schreibt uns hier doch bitte mal, welche das sind. Denn von einem solchen Know-how-Austausch profitieren ja letztlich alle. Die oben beschriebene Kombination <a href="http://www.entwicklungshilfe.nrw/seminare/phpstorm-effektiv-mit-ticketsystem-nutzen/">schulen</a> wir übrigens auch.</em></p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/01/31/phpstorm-mit-ticketsystem-redmine-nutzen/">PhpStorm mit dem Ticketsystem Redmine nutzen</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://entwicklungshilfe.nrw/blog/2016/01/31/phpstorm-mit-ticketsystem-redmine-nutzen/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 loading="lazy" 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="auto, (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 loading="lazy" 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="auto, (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>
