<?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>Infrastruktur Archive - Entwicklungshilfe NRW</title>
	<atom:link href="https://entwicklungshilfe.nrw/blog/tag/infrastruktur/feed/" rel="self" type="application/rss+xml" />
	<link>https://entwicklungshilfe.nrw/blog/tag/infrastruktur/</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>Infrastruktur Archive - Entwicklungshilfe NRW</title>
	<link>https://entwicklungshilfe.nrw/blog/tag/infrastruktur/</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>Ticketsystem mit Versionskontrolle</title>
		<link>https://entwicklungshilfe.nrw/blog/2015/12/29/ticketsystem-mit-versionskontrolle/</link>
					<comments>https://entwicklungshilfe.nrw/blog/2015/12/29/ticketsystem-mit-versionskontrolle/#respond</comments>
		
		<dc:creator><![CDATA[Andreas Mautz]]></dc:creator>
		<pubDate>Tue, 29 Dec 2015 12:22:16 +0000</pubDate>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[Infrastruktur]]></category>
		<category><![CDATA[Ticketsystem]]></category>
		<category><![CDATA[Versionskontrolle]]></category>
		<guid isPermaLink="false">http://www.entwicklungshilfe.nrw/blog/?p=79</guid>

					<description><![CDATA[<p>Ein Ticketsystem mit Versionskontrolle ist eine geeignete Grundlage für Freelancer und kleine Agenturen, um Softwareentwicklungsprojekte zu managen. Zudem hilft eine Versionskontrolle wie git dabei, Änderungen am Code zu deployen. Redmine 3 mit Gitolite 3 installieren Eine gelungene, kostenfreie Kombination für ein Ticketsystem mit Versionskontrolle bieten Redmine als Ticketsystem und git als Versionskontrolle. Gitolite dient dabei als Mittler, um Nutzer des [&#8230;]</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2015/12/29/ticketsystem-mit-versionskontrolle/">Ticketsystem mit Versionskontrolle</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Ein Ticketsystem mit Versionskontrolle ist eine geeignete Grundlage für Freelancer und kleine Agenturen, um Softwareentwicklungsprojekte zu managen. Zudem hilft eine Versionskontrolle wie git dabei, Änderungen am Code zu deployen.</p>
<p><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/23750809531_24c0a4b8e6_o-e1451303431955.jpg" rel="attachment wp-att-107"><img loading="lazy" decoding="async" class="wp-caption alignleft wp-image-107 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/23750809531_24c0a4b8e6_o-e1451303431955-300x197.jpg" alt="Ticketsystem mit Versionskontrolle" width="300" height="197" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/23750809531_24c0a4b8e6_o-e1451303431955-300x197.jpg 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/23750809531_24c0a4b8e6_o-e1451303431955-768x504.jpg 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/23750809531_24c0a4b8e6_o-e1451303431955-1024x672.jpg 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/23750809531_24c0a4b8e6_o-e1451303431955-214x140.jpg 214w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<h2>Redmine 3 mit Gitolite 3 installieren</h2>
<p>Eine gelungene, kostenfreie Kombination für ein Ticketsystem mit Versionskontrolle bieten <a href="http://www.redmine.org/" target="_blank" rel="noopener noreferrer">Redmine</a> als Ticketsystem und <a href="https://git-scm.com/" target="_blank" rel="noopener noreferrer">git</a> als Versionskontrolle. <a href="https://github.com/sitaramc/gitolite" target="_blank" rel="noopener noreferrer">Gitolite</a> dient dabei als Mittler, um Nutzer des Ticketsystems gegenüber dem eigenen Git-Server zu authentifizieren und so die Versionskontrolle über das Ticketsystem steuerbar zu machen. Mehr dazu gibt es im neuen Jahr in einem eigenen Blog-Beitrag, den ich dann hier verlinke.</p>
<h2>Voraussetzungen für die neue Infrastruktur</h2>
<p>Dieser Artikel ist eine Anleitung, wie man auf einem eigenen, dafür geeigneten Server diese Kombination aufsetzt.<br />
Ausgegangen wird hier von <a href="https://www.debian.org/" target="_blank" rel="noopener noreferrer">Debian</a> als Betriebssystem, und der eingeloggte User ist root. Es wird vorausgesetzt, dass man Pakete installieren und einen einfachen Editor wie vim oder nano benutzen kann.</p>
<p>Zunächst installiert man die grundlegenden Softwarepakete, die benötigt werden:</p>
<pre class="lang:default decode:true" title="benötigte Pakete für das Ticketsystem mit Versionskontrolle">apt-get install rubygems gitolite3 build-essential libssh2-1 libssh2-1-dev cmake libgpg-error-dev mysql apoache2
</pre>
<p>Anschließend werden dem System zwei User für git (&#8222;git&#8220;) und Redmine (&#8222;redmine&#8220;) hinzugefügt:</p>
<pre class="lang:default decode:true " title="User anlegen">adduser --system --shell /bin/bash --gecos 'Git Administrator' --group --disabled-password --home /opt/gitolite git
adduser --system --shell /bin/bash --gecos 'Redmine Administrator' --group --disabled-password --home /opt/redmine redmine
</pre>
<p>Da das Ticketsystem später die Kontrolle über die Versionskontrolle ausüben soll, legen wir einen SSH-Key für den User <em>redmine</em> an:</p>
<pre class="lang:default decode:true " title="redmine ssh-key">su redmine
ssh-keygen -t rsa -N '' -f ~/.ssh/redmine_gitolite_admin_id_rsa
exit
</pre>
<h2>Versionskontrolle kontrollieren</h2>
<p>Nun kann Gitolite mit</p>
<pre>dpkg-reconfigure gitolite3</pre>
<p>neu konfiguriert werden, da die Konfiguration bei Installation ein paar Settings anders setzt, als wir es gerne hätten. Die Parameter zur Konfiguration sind:<br />
user: git<br />
repos path: /opt/gitolite<br />
admin ssh-key: /opt/redmine/.ssh/redmine_gitolite_admin_id_rsa.pub</p>
<p>Redmine und Gitolite benötigen teilweise sudo-Rechte für den jeweilig anderen User, Redmine für die Installation temporär sogar darüber hinaus. Dazu konfigurieren wir unseren Server für das Ticketsystem mit Versionskontrolle mit</p>
<pre class="lang:default decode:true">visudo</pre>
<p>Folgendes wird zusätzlich eingetragen:</p>
<p># temp &#8211; *REMOVE* after installation<br />
redmine ALL=(ALL) NOPASSWD:ALL</p>
<p># redmine gitolite integration<br />
redmine ALL=(git) NOPASSWD:ALL<br />
git ALL=(redmine) NOPASSWD:ALL</p>
<h2>Installation des Ticketsystems Redmine</h2>
<p>Jetzt wird Redmine installiert. Dazu loggen wir uns als User <em>redmine</em> ein und wechseln in sein Home-Verzeichnis.</p>
<pre class="lang:default decode:true">sudo su - redmine
cd ~
</pre>
<p>Wir befinden uns jetzt in /opt/redmine, wo wir den aktuellen Code über github ziehen.</p>
<pre class="lang:default decode:true">git init
git remote add origin https://github.com/redmine/redmine.git
git fetch -p
</pre>
<p>Da wir uns im Home-Verzeichnis befinden, schließen wir noch ein paar Verzeichnisse und Dateien aus:</p>
<pre>vim .gitignore</pre>
<p>Auszuschließende Items sind zum Beispiel:<br />
.ssh/<br />
.bash_history</p>
<p>Als nächstes checken wir die aktuelle stabile Version aus.</p>
<pre class="lang:default decode:true">git add .gitignore
git commit -m 'local gitignore'
git checkout 3.1-stable
</pre>
<p>An dieser Stelle kann man jetzt noch die Quelle vom Original zu einer eigenen Quelle verschieben.</p>
<pre class="lang:default decode:true">git remote rm origin
git remote add origin __URL__
</pre>
<p>Wir benutzen Redmine mit einer MySQL-Datenbank. Sollte noch kein MySQL-Server installiert sein, bitte nachholen. Ansonsten mit</p>
<pre class="lang:default decode:true">mysql -u root -p -v -e "CREATE DATABASE redmine CHARACTER SET utf8; CREATE USER '__USER__'@'localhost' IDENTIFIED BY '__PASSWORD__'; GRANT ALL PRIVILEGES ON redmine.* TO '__USER__'@'localhost';"
</pre>
<p>__*__ bitte mit geeigneten Werten ersetzen.</p>
<p>Das oben erstellte Login verwenden wir nun zur Konfiguration von Redmine. Wir kopieren die Config-Templates und editieren diese:</p>
<pre class="lang:default decode:true">cd /opt/redmine/config
cp database.yml.example database.yml
cp configuration.yml.example configuration.yml
</pre>
<pre class="lang:default decode:true">vim database.yml
vim configuration.yml
</pre>
<p>Erweiterte Erläuterungen zur Konfiguration gibt es <a href="http://www.redmine.org/projects/redmine/wiki/RedmineInstall#Step-3-Database-connection-configuration" target="_blank" rel="noopener noreferrer">hier für die Datenbank</a> und <a href="http://www.redmine.org/projects/redmine/wiki/RedmineInstall#Configuration" target="_blank" rel="noopener noreferrer">hier für Generelles</a>.</p>
<p>Danach wechseln wir zurück ins Home-Verzeichnis und beginnen mit der Installation. Zur eigentlichen Installation von Redmine müssen wir im Gemfile noch eine Anpassung vornehmen.</p>
<pre class="lang:default decode:true">cd ~
sudo gem install bundler
nano Gemfile
</pre>
<p>Hier ändern wir die mysql2-Version auf 4.2.0, wenn man Percona als MySQL-Server in der Version 5.6 benutzen möchte.</p>
<p>Jetzt wird endlich installiert:</p>
<pre>bundle install --without development test postgresql sqlite
rake generate_secret_token
RAILS_ENV=production rake db:migrate
</pre>
<h2>Plugins für das Ticketsystem</h2>
<p>Nachdem Redmine grundlegend installiert wurde, kümmern wir uns jetzt um die Plugins:</p>
<pre class="lang:default decode:true">cd ~/plugins
git clone https://github.com/jbox-web/redmine_bootstrap_kit.git
git clone https://github.com/jbox-web/redmine_git_hosting.git
cd redmine_bootstrap_kit/
git checkout 0.2.4
cd ../redmine_git_hosting/
git checkout 1.2.0
cd ~
bundle install --without development test
bundle exec rake redmine:plugins:migrate RAILS_ENV=production NAME=redmine_git_hosting
</pre>
<p>Der eingangs erstellte SSH-Key wird jetzt in das Plugin verlinkt:</p>
<pre class="lang:default decode:true">ln -s /opt/redmine/.ssh/redmine_gitolite_admin_id_rsa /opt/redmine/plugins/redmine_git_hosting/ssh_keys/redmine_gitolite_admin_id_rsa
ln -s /opt/redmine/.ssh/redmine_gitolite_admin_id_rsa.pub /opt/redmine/plugins/redmine_git_hosting/ssh_keys/redmine_gitolite_admin_id_rsa.pub
</pre>
<h2>Das Ticketsystem mit Versionskontrolle überprüfen</h2>
<p>Wir wechseln jetzt auf die Seite des Users <em>git</em> und überprüfen Gitolite.</p>
<pre class="lang:default decode:true">sudo su - git
sed -i 's/$GL_GITCONFIG_KEYS = ""/$GL_GITCONFIG_KEYS = ".*"/g' /opt/gitolite/.gitolite.rc
exit
ssh -i .ssh/redmine_gitolite_admin_id_rsa git@localhost info
</pre>
<p>Dabei sollte eine Antwort ähnlich wie diese hier kommen:<br />
hello admin, this is git@__SERVER__ running gitolite3 3.6.1-2 (Debian) on git 2.1.4</p>
<p>R W gitolite-admin<br />
R W testing</p>
<p>Als letztes wird nun Redmine mittels des Passenger-Moduls zum Laufen gebracht. Es wird vorausgesetzt, dass ein entsprechender vhost-Eintrag existiert, der auf /opt/redmine/public verweist. Das Passenger-Modul installiert man mit</p>
<pre>passenger-install-apache2-module</pre>
<p>und trägt danach die in der Installation erzeugten Pfade in die apache-Konfiguration ein.</p>
<p><em>Bei mir hat diese Anleitung zum Aufsetzen eines Ticketsystems mit Versionskontrolle bisher immer sehr gut funktioniert. Wenn ihr Probleme habt, schreibt bitte in die Kommentare, damit diese Anleitung ständig verbessert werden kann. Gleichzeitig können wir durch den regen Ausstausch mit euch aber auch die Qualität unserer <a href="http://www.entwicklungshilfe.nrw/seminare/oh-my-zsh-mit-agnoster-theme/">PHP-Schulungen für Webentwickler</a> noch weiter erhöhen.</em></p>
<p><strong>Quellen und weiterführende Links:</strong><br />
<a href="https://github.com/redmine/redmine" target="_blank" rel="noopener noreferrer">Redmine</a><br />
<a href="http://gitolite.com/gitolite/install.html" target="_blank" rel="noopener noreferrer">Gitolite</a><br />
<a href="https://nsaunders.wordpress.com/2012/04/24/redmine-gitolite-integration/" target="_blank" rel="noopener noreferrer">Redmine und Gitolite</a><br />
<a href="https://www.redmine.org/projects/redmine/wiki/HowTo_Install_Redmine_2_integrated_with_Gitolite_2_on_Debian_Wheezy_with_Apache_and_Phusion_Passenger" target="_blank" rel="noopener noreferrer">Apache Passenger</a><br />
<a href="http://redmine-git-hosting.io/get_started/" target="_blank" rel="noopener noreferrer">Redmine git hosting</a><br />
<a href="https://www.redmine.org/plugins/redmine_git_hosting" target="_blank" rel="noopener noreferrer">Redmine git hosting Plugin-Seite</a></p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2015/12/29/ticketsystem-mit-versionskontrolle/">Ticketsystem mit Versionskontrolle</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://entwicklungshilfe.nrw/blog/2015/12/29/ticketsystem-mit-versionskontrolle/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
