<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>PHP Dozent und Trainer Andreas Mautz</title>
	<atom:link href="https://entwicklungshilfe.nrw/blog/author/andreas-mautz/feed/" rel="self" type="application/rss+xml" />
	<link>https://entwicklungshilfe.nrw/blog/author/andreas-mautz/</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>PHP Dozent und Trainer Andreas Mautz</title>
	<link>https://entwicklungshilfe.nrw/blog/author/andreas-mautz/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Recap Meet Magento 2017 &#8211; Leipzig</title>
		<link>https://entwicklungshilfe.nrw/blog/2017/05/25/recap-meet-magento-2017-leipzig/</link>
					<comments>https://entwicklungshilfe.nrw/blog/2017/05/25/recap-meet-magento-2017-leipzig/#respond</comments>
		
		<dc:creator><![CDATA[Andreas Mautz]]></dc:creator>
		<pubDate>Thu, 25 May 2017 14:15:29 +0000</pubDate>
				<category><![CDATA[Magento]]></category>
		<guid isPermaLink="false">http://www.entwicklungshilfe.nrw/blog/?p=667</guid>

					<description><![CDATA[<p>Das war sie, die größte Meet Magento und damit größte Magento Konferenz in ganz Deutschland. Vom 22. bis 23. Mai öffnete die elfte Meet Magento ihre Tore im Leipziger Pentahotel mit mehr als 800 Teilnehmen von Agenturen, Verkäufern, Entwicklern und Personen rund um das gefühlt mittlerweile beliebteste Shopsystem weltweit. Paul Boisvert startet die Meet Magento [&#8230;]</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2017/05/25/recap-meet-magento-2017-leipzig/">Recap Meet Magento 2017 &#8211; Leipzig</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Das war sie, die größte <a href="http://de.meet-magento.com/">Meet Magento</a> und damit größte Magento Konferenz in ganz Deutschland. Vom 22. bis 23. Mai öffnete die elfte Meet Magento ihre Tore im Leipziger Pentahotel mit mehr als 800 Teilnehmen von Agenturen, Verkäufern, Entwicklern und Personen rund um das gefühlt mittlerweile beliebteste Shopsystem weltweit.</p>
<h2>Paul Boisvert startet die Meet Magento mit der Keynote über Magento 2</h2>
<p>Nach einem leckeren, jedoch kurzen Frühstück begann der erste Tag der Meet Magento mit einer Keynote von Paul Boisvert, dem Head of Product Management bei Magento. Es stellte die Roadmap für Magento2 vor mit einigen interessanten neuen Features sowie der Advanced-CMS-Integration für die Magento Enterprise Edition und dem wichtigen Hinweis, dass jeglicher Support und dementsprechend auch Sicherheitspatches für Magento 1 ab November 2018 eingestellt wird [Das wurde mittlerweile zurückgeszogen, es soll ein <a href="https://magento.com/blog/magento-news/ongoing-magento-1-support">verlängertes EOL für Magento 1</a> geben]. Seiner Meinung &#8211; und der Stimme ich voll zu &#8211; sollten Shop-Betreiber langsam Magento 2 in Angriff nehmen und sich so für die Zukunft mit einer langfristig unterstützen Version von Magento sicher aufstellen. Deshalb sehe er den Fokus der diesjährigen Meet Magento klar auf Magento 2.</p>
<h2>Gute Desktop Version eines Shops besser als schlechter mobile first Ansatz</h2>
<p>Danach ging es für mich nach kurzem Talk mit alten Bekannten auf der Meet Magento in einen weiteren Vortrag von Jan Sperlich, der mir hochgelobt angekündigt wurde. Und ich muss sagen, ich wurde nicht enttäuscht. Die Kernaussage seiner Präsentation war: eine guter Desktop-Shop ist besser als eine schlechte mobile Website. Er präsentierte in einem Praxisbeispiel seines Unternehmens. Durch gezielte Optimierung der Onlinepräsenz (Desktop Website) und auch Optimierung der Darstellung auf mobilen Endgeräten (ohne dedizierte App) war es möglich, die Conversion Rate des besagten Shops signifikant zu erhöhen. Und zwar anders als mit einer separaten mobilen App. Das ließ den gesamten Saal feststellen, dass Responsive-Design anscheinend immer noch weit vor der Useability oder zumindest der Beliebtheit einer mobilen App liegen.</p>
<h2>Suche das wichtigste Feature in einem Shop</h2>
<p>Eher kurz fassen werde ich mich zu dem Talk von Dr. David Urbansky. Nach einer ausgiebigen Mittagspause mit lauter gesundem Zeugs und leckeren Wraps erzählte uns Dr. David Urbansky etwas über seine Theorie des wichtigsten Online-Shop Features überhaupt &#8211; der Suche.<br />
Seine Kernaussage war, dass die Suche mittlerweile das mit Abstand wichtigste Feature einer Website ist. Er präsentierte eine ca 15 Punkte-Liste welche simple und auch komplexe Funktionen einer Suche enthielt und auf den Prüfstand stellte (Synonymsuche, Fön/Haartrockner, etc.). Ein insgesamt eher komplexer Vortrag mit jedoch auch sehr verständlichen Argumenten und Tipps für die Integration einer guten Suchen in Magento 2. Die Umsetzung ist jedoch seiner Meinung nach (auch durch die Magento Suchimplementierung) verbesserungswürdig. Dem Stimme ich und nicht wenige Leute aus dem Saal zu.</p>
<h2>Nutzerfreundlichkeit für Suchmaschinenfreundlichkeit</h2>
<figure id="attachment_680" aria-describedby="caption-attachment-680" style="width: 1920px" class="wp-caption alignleft"><img fetchpriority="high" decoding="async" class="wp-image-680 size-full" src="https://entwicklungshilfe.nrw/wp-content/uploads/2017/06/IMG-20170522-WA0001.jpeg" alt="Meet Magento 2017 - Magento 2 im Fokus" width="1920" height="1080" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2017/06/IMG-20170522-WA0001.jpeg 1920w, https://entwicklungshilfe.nrw/wp-content/uploads/2017/06/IMG-20170522-WA0001-300x169.jpeg 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2017/06/IMG-20170522-WA0001-1024x576.jpeg 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2017/06/IMG-20170522-WA0001-300x169@2x.jpeg 600w" sizes="(max-width: 1920px) 100vw, 1920px" /><figcaption id="caption-attachment-680" class="wp-caption-text">Meet Magento 2017 &#8211; Magento 2 im Fokus</figcaption></figure>
<p>Der letzte Vortrag für mich an diesem Tag war ein meiner Meinung nach sehr interessanter Vortrag von Mario Jung mit der Kernaussage: Baue die Website für den User und nicht für Google/Bing/Yahoo.<br />
Er stellte eine Liste vor mit seinen 10 Tipps, wie man die Nutzerfreundlichkeit im Shop verbessert. Einige dieser Punkte sind sinnvoll und auch SEO-technisch relevant. Ein Vorschlag von Herr Jung, wie die Implementierung eines Chatbots zur Beantwortung von Kundenfragen halte ich jedoch für etwas gewagt. Den Rest seines Vortrags kann ich nur wärmstens empfehlen, denn er empfiehlt auch Testing, Strukturierung und andere sinnvolle Sachen die PHP/Javascript Programmierer gerne mal vergessen. Alles in allem stimmt seine 10 Punkte Liste und sollte bestimmt einigen Entwicklern helfen. Die Liste möchte ich euch nicht vorenthalten:</p>
<ol>
<li>Biete dem Kunden gewohnte Sachen. (Logo links oben, Cart rechts oben, etc)</li>
<li>Produktfilter und erweiterte Suche anbieten</li>
<li>Chatbot (Automatisiert oder mit Person dahinter)</li>
<li>Ladezeit so gering wie möglich halten</li>
<li>Nicht an aussagekräftigen und individuellen Bildern sparen</li>
<li>Professionelle Produktvideos stellen einen zukünftigen Trend dar</li>
<li>Linkbuilding bringt einen erhöhten Traffic</li>
<li>Arbeite mit Screaming-Tools</li>
<li>Nie aufhören zu testen! (A/B-Tests, Unit, whatever)</li>
<li>Frage andere (Kritik annehmen, eventuell sogar ein feature für Kritikannahme bauen)</li>
</ol>
<p>Nach einem bisschen Small Talk mit anderen Magento Entwicklern, sowie viel Kaffee und einem weiteren kleinen Vortrag ging es dann gegen 19 Uhr zur Aftershowparty. Wie jedes Jahr wurde auch diese Aftershowparty in der Moritzbastei abgehalten und bestach durch eine super Atmosphäre. Gesponsert von <a href="https://maxcluster.de/blog/2017/05/30/rueckblick-auf-die-meet-magento-de-2017/">maxcluster</a> gab es für alle reichlich zu Essen und zu Trinken so viel das Herz begehrte.</p>
<h2>Testautomatisierung und Sicherheit</h2>
<p>Der zweite Tag der Meet Magento begann für mich verspätet. Durch gefühlt 300 Talks mit Entwicklern, Agentur-Chefs und Organizern der Meet Magento wurde am Tag der Aftershowparty bis spät in die Nacht &#8222;genetzwerkt&#8220;. Nach dem die Verleihung des Meet Magento Awards bereits vorbei war, ging es für mich direkt weiter in einen Vortrag von <a href="https://twitter.com/fschmengler">Fabian Schmengler</a> über Test Automation in Magento. Er erläuterte verschiedene Methoden um seine Magento Extensions mit verschiedenen Tests zu prüfen. [Ich habe <a href="http://www.entwicklungshilfe.nrw/blog/frontend-testing-mit-codeception/">hier</a> mal über Codeception als Frontend Testframework gebloggt.] [Gratulation an dieser Stelle noch mal an <a href="https://twitter.com/riconeitzel/status/867094308175962113/">Rico Neitzel </a>für den Meet Magento People Award]<br />
Nach einer Mittagspause und reichlich Kaffee zur Beseitigung der Folgen des Vorabends ging es in einen Vortrag von Anna Völkl. Ihr Talk war zum Thema Sicherheit in Online-Shops bzw. die Verbesserung dieser. Sie zeigte einige jüngere Beispiele auf in denen bei großen Online-Shops kritische Sicherheitslücken gefunden wurden. Zudem erklärte sie Methoden und Maßnahmen zur Verbesserung der Security in Magento Shops und deren Extensions. Trotz softwaretechnischer Fokussierung waren auch Monitoring und Konfiguration des Servers Teil Ihres Talks.</p>
<p>Der letzte Vortrag dieses Tages für mich war von Nils Kattau und handelte von der Optimierung der Sales bzw. der Conversion in Online-Shops. Ein sehr interessanter Vortrag mit einigen Praxisbeispielen der jedoch den Rahmen dieses Posts bei weitem sprengen würde.</p>
<h2>Vorher leider den Hackathon verpasst</h2>
<p>Damit war die Meet Magento für mich auch für dieses Jahr schon vorbei. Schlimm genug dass ich es dieses Jahr wieder nicht auf den <a href="https://shop.firegento.com/">Magento Hackathon</a> geschafft habe. Dieser findet jedes 2-3 Tage vor der Meet Magento statt und sticht mit Community-Coding, viel Club-Mate und noch mehr &#8222;Netzwerken&#8220; heraus.</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2017/05/25/recap-meet-magento-2017-leipzig/">Recap Meet Magento 2017 &#8211; Leipzig</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://entwicklungshilfe.nrw/blog/2017/05/25/recap-meet-magento-2017-leipzig/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Entwicklungshilfe NRW schult Team von Online-Marktplatz</title>
		<link>https://entwicklungshilfe.nrw/blog/2016/09/27/entwicklungshilfe-nrw-schult-entwickler-team-von-online-marktplatz/</link>
					<comments>https://entwicklungshilfe.nrw/blog/2016/09/27/entwicklungshilfe-nrw-schult-entwickler-team-von-online-marktplatz/#comments</comments>
		
		<dc:creator><![CDATA[Andreas Mautz]]></dc:creator>
		<pubDate>Tue, 27 Sep 2016 11:18:22 +0000</pubDate>
				<category><![CDATA[Referenzen]]></category>
		<guid isPermaLink="false">http://www.entwicklungshilfe.nrw/blog/?p=623</guid>

					<description><![CDATA[<p>Vergangene Woche war Entwicklungshilfe NRW erfolgreich in Unterfranken im Einsatz. Der in Großwallstadt ansässige Online-Marktplatz für Kfz-Ersatzteile TEILeHABER GmbH hatte für seine Webdeveloper die PHP-Schulung Code Rocker gebucht, um einen ersten Schritt hin in Richtung automatisierter Testverfahren zu machen. Gerade im Webdevelopment erfordern die immer dynamischeren Marktentwicklungen und entsprechend hohen User-Erwartungen ein breites Weiterbildungsangebot für [&#8230;]</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/09/27/entwicklungshilfe-nrw-schult-entwickler-team-von-online-marktplatz/">Entwicklungshilfe NRW schult Team von Online-Marktplatz</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><strong>Vergangene Woche war Entwicklungshilfe NRW erfolgreich in Unterfranken im Einsatz. Der in Großwallstadt ansässige Online-Marktplatz für Kfz-Ersatzteile TEILeHABER GmbH hatte für seine Webdeveloper die PHP-Schulung Code Rocker gebucht, um einen ersten Schritt hin in Richtung automatisierter Testverfahren zu machen.</strong></p>
<p>Gerade im Webdevelopment erfordern die immer dynamischeren Marktentwicklungen und entsprechend hohen User-Erwartungen ein breites Weiterbildungsangebot für Webentwickler. In Metropolen wie Berlin, München und Köln oder Ballungsräumen wie dem Ruhrgebiet gibt es hierzu zahlreiche Möglichkeiten. Etwas anders sieht es hingegen in strukturschwachen Regionen bzw. abseits der großen Wirtschaftszentren aus. Selbst User Groups sind hier eher rar gesät.</p>
<p>&#8222;Wir sind hier in Großwallstadt schon etwas weit vom Schuss, wenn es um inhaltlich aktuelle Weiterbildungsmöglichkeiten für Webdeveloper geht&#8220;, sagt Philipp Packheiser, Geschäftsführer des Online-Marktplatzes für Kfz-Ersatzteile <a href="https://www.teilehaber.de/" target="_blank">TEILeHABER</a>. &#8222;Unsere Mitarbeiter müssten daher schon ins 50 Kilometer entfernte Frankfurt am Main fahren, um sich auf den neuesten Stand bringen zu lassen.&#8220; Ein Problem, dass sich in ähnlicher Weise auch den Auszubildenden des unterfränkischen Ausbildungsbetriebs stellt, da der Lehrplan der örtlichen Berufsschule aufgrund der eingangs umrissenen Situation naturgemäß immer ein wenig der Zeit hinterherhinkt. &#8222;So betrachtet kommt uns das Vor-Ort-Schulungsangebot von Entwicklungshilfe NRW da sehr entgegen&#8220;, so Packheiser weiter. &#8222;Denn wir halten es für absolut unabdingbar, dass sich unsere Entwickler regelmäßig mit modernen Technologien auseinandersetzen.&#8220;</p>
<h2>Einführung automatisierter Frontend-Tests</h2>
<p>Gesucht hatte das 2007 gegründete Unternehmen unter anderem nach Schulungen zu automatisierten Testings und war über einen Fachbeitrag von Roland Golla im PHP Magazin auf Entwicklungshilfe NRW aufmerksam geworden. Die Wahl fiel auf die <a href="http://www.entwicklungshilfe.nrw/code-rocker/">PHP-Schulung Code Rocker</a>, die eine Art Best-of aus dem gesamten Schulungsangebot ist und einen schnellen Einstieg ins Thema ermöglicht. Mit dem 22. September 2016 wurde dann ein Schulungstermin für zwei Fachinformatiker Anwendungsentwicklung, drei Azubis Anwendungsentwicklung und den Scrum Master von TEILeHABER vereinbart.</p>
<p>&#8222;Wenn man eine Plattform betreibt, auf der zig Millionen einzelne Artikel angeboten werden, dann kommt man mit manuellem Frontend-Testing natürlich nicht allzu weit&#8220;, sagt Golla, der als Dozent vor Ort beim Kunden war. &#8222;Beziehungsweise bindet man dadurch jede Menge Kapazitäten, die man besser woanders einsetzen kann.&#8220; Daher bestand das Ziel der ganztägigen, sehr individuell gehaltenen Schulung zum einen darin, einige wichtige neue Technologien und Tools vorzustellen sowie einen ersten automatisierten Test für den Shop umzusetzen, und zum anderen sollte der Workflow des jungen Teams optimiert werden, um damit die Weichen für <a href="https://de.wikipedia.org/wiki/Kontinuierliche_Integration" target="_blank">Continuous Integration</a> zu stellen.</p>
<h2>Tooling und Set-up signifikant verbessert</h2>
<p>Die Schwerpunkte lagen damit auf den Themen <a href="http://www.entwicklungshilfe.nrw/seminare/codeception/">Codeception Frontend Testing</a> und <a href="http://www.entwicklungshilfe.nrw/seminare/phpstorm-best-practice/">PhpStorm Best Practice</a>. Zudem wurde der <a href="https://phpmd.org/" target="_blank">PHP Mess Detector</a> vorgestellt und eingesetzt. Mit diesem lassen sich Probleme im bestehenden Code aufspüren, darunter etwa Flüchtigkeitsfehler. Alles sehr praxisnah und ganz am aktuellen Bedarf des Kunden orientiert. Die größtmögliche Praxisnähe ist ja seit jeher der Kerngedanke von Entwicklungshilfe NRW: Somit sollen die geschulten Teams in die Lage versetzt werden, das neue Wissen sofort praktisch ein- und umsetzen zu können.</p>
<p>&#8222;Der Tag ist echt super gelaufen&#8220;, befindet Golla. &#8222;Die Jungs haben sehr gut mitgemacht und das neue Wissen nur so aufgesaugt. Ich denke, dass ich dem Entwickler-Team von TEILeHABER schon mit diesem ersten Schritt entscheidend weiterhelfen konnte.&#8220; Seiner Einschätzung nach wurde das Tooling und Set-up des Teams dadurch signifikant verbessert. Eine Einschätzung, die Packheiser rundum teilt: &#8222;Wir sind mehr als zufrieden mit dem Ergebnis und können uns gut vorstellen, auch in Zukunft das Weiterbildungsangebot von Entwicklungshilfe NRW zu nutzen.&#8220;</p>
<p><em><a href="http://www.entwicklungshilfe.nrw/" target="_blank">Hier erfahrt ihr mehr über das PHP-Schulungsangebot von Entwicklungshilfe NRW.</a></em></p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/09/27/entwicklungshilfe-nrw-schult-entwickler-team-von-online-marktplatz/">Entwicklungshilfe NRW schult Team von Online-Marktplatz</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://entwicklungshilfe.nrw/blog/2016/09/27/entwicklungshilfe-nrw-schult-entwickler-team-von-online-marktplatz/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Magento-Performance: Flaschenhälse</title>
		<link>https://entwicklungshilfe.nrw/blog/2016/05/13/magento-performance-flaschenhaelse/</link>
					<comments>https://entwicklungshilfe.nrw/blog/2016/05/13/magento-performance-flaschenhaelse/#comments</comments>
		
		<dc:creator><![CDATA[Andreas Mautz]]></dc:creator>
		<pubDate>Fri, 13 May 2016 10:00:41 +0000</pubDate>
				<category><![CDATA[Magento]]></category>
		<guid isPermaLink="false">http://www.entwicklungshilfe.nrw/blog/?p=560</guid>

					<description><![CDATA[<p>Magento-Performance steigern: Der Weg zur erfolgreichen Ladezeit-Optimierung In diesem Artikel befassen wir uns mit den mit der Ladezeit-Optimierung von Magento Shopsystemen. Magento ist ein umfangreiches Shopsystem und ist in bestimmten Konfigurationen anfällig für Performance-Probleme. Die fünf größten Fehler mit teils massiven Auswirkungen auf die Magento-Performance haben wir hier für euch aufgelistet und erklären mögliche Lösungen. [&#8230;]</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/05/13/magento-performance-flaschenhaelse/">Magento-Performance: Flaschenhälse</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Magento-Performance steigern: Der Weg zur erfolgreichen Ladezeit-Optimierung</h2>
<p>In diesem Artikel befassen wir uns mit den mit der Ladezeit-Optimierung von <a href="https://magento.com" target="_blank" rel="noopener noreferrer">Magento</a> Shopsystemen. Magento ist ein umfangreiches Shopsystem und ist in bestimmten Konfigurationen anfällig für Performance-Probleme. Die fünf größten Fehler mit teils massiven Auswirkungen auf die Magento-Performance haben wir hier für euch aufgelistet und erklären mögliche Lösungen.</p>
<h2>Die 5 häufigsten Fehler bei der Ladezeit-Optimierung</h2>
<p><strong>1) Ladezeit-Optimierung durch Verwendung der richtigen Festplatte</strong></p>
<p>Magento ist wie schon erwähnt ein umfangreiches System welches in der Ausführung &#8222;Community Edition&#8220; mehr als 15.000 Dateien beinhaltet. Das auf <a href="http://php.net/" target="_blank" rel="noopener noreferrer">PHP</a> basierende Shopsystem arbeitet mit zahlreichen Funktionen, welche die Festplatte massiv beanspruchen. Dazu gehören das Schreiben in Logfiles (access, system, exception log), das Anfordern von Files (require, file_get_contents) und das Laden von Daten aus der Datenbank. Der Einsatz einer SSD anstelle einer HDD lohnt sich beim professionellen Einsatz von Magento umso mehr, da die Magento-Performance drastisch verbessert wird.</p>
<p><img decoding="async" src="http://www.entwicklungshilfe.nrw/blog/wp-content/uploads/2016/05/hddssd.png" alt="HDD vs SSD" /></p>
<p><a href="https://blog.amasty.com/amasty-research-what-server-optimizations-for-magento-really-work/">Bildquelle: https://blog.amasty.com</a></p>
<p><strong>2) Ladezeit-Optimierung durch Verwendung eines Caches</strong></p>
<p>Magento benutzt wie die meisten großen System ein internes System zum Cachen von Daten, um die Ladezeit zu verkürzen. Es können verschiede Cache-Arten verwendet werden, welche nachfolgende Vorteile und Nachteile mit sich bringen. Wir werden dies anhand von 3 Beispielen kurz erläutern.</p>
<p><strong>2.1) APC / Memcached</strong></p>
<p>Diese beiden Cache-Arten benutzen den internen Speicher (RAM) des Servers zum Cachen der Daten von Magento. Der Nachteil dieser beiden Cache-Varianten ist, dass RAM zum Beispiel auf einem Shared Server nur in Maßen zur Verfügung steht und sparsam damit umgegangen werden muss. Der Vorteil ist dass diese Cache-Arten relativ schnell sind, da sie kleine Datenmengen aus dem RAM schnell ausliefern können.</p>
<p><strong>2.2) Der Datenbankcache</strong></p>
<p>Der Datenbankcache ist eine separate Cache-Art und kann unabhängig von den beiden anderen Cache-Arten benutzt werden. Dieser Cache ist zuständig für das Zwischenspeichern von öfter ausgeführten Queries die sich ansonsten mit minimalen Änderungen wiederholen würden. Magento speichert diese Art von Anfrage im RAM zwischen und führt diese dann aus ohne jedes mal erneut mehrere Datenbankabfragen an den Server zu stellen. Der Datenbankcache kann bei genügend vorhandenem RAM oder schnellem Festplattenspeicher zu einer signifikanten Optimierung der Ladezeit führen, da Magento mehrere Queries pro Seitenaufruf benötigt und diese eingespart werden können.</p>
<p><strong>2.3) Der Filecache</strong></p>
<p>Dieser Cache benutzt das interne Dateisystem zum Vorhalten der Daten. Die Vorzüge dieser Cache-Art ist, dass er in Kombination mit einer SSD sehr schnell ist und die üblichen RAM limits von APC / Memcache getrost ignorieren kann, da er lediglich ein wenig Festplattenkapazität voraussetzt. Der Nachteil jedoch ist, dass diese Art von Cache ohne eine SSD extrem langsam ist. Wie beim Datenbankcache wird der Filecache das gesamte System ohne eine SSD mehr ausbremsen als beschleunigen.</p>
<p><em>Seit der Version 5.5 von PHP wird Zends sogenannter OpCache (Opcode-Cache) mitgeliefert und standardmäßig installiert. Dieser Opcode-Cache ist schnell und kostengünstig in der RAM-Benutzung. Sollte PHP 5.5 oder höher auf dem Magento System installiert sein, empfiehlt es sich den von PHP mitgelieferten OpCache in Kombination mit dem Filecache zu benutzen, sofern eine SSD vorhanden ist.</em></p>
<p><strong>3) SQL Statements</strong></p>
<p>Ein nicht zu verachtender weiterer Punkt in der Liste der Performance-Flaschenhälse sind SQL Statements. Dabei geht es hier nicht um eine bestimmte Art von SQL Statements, sondern um deren Verwendung. Das folgende Beispiel ist ein Auszug aus einem Magento Modul welches 9 Produkte einer Kategorie per AJAX nachlädt und im späteren Verlauf verarbeitet und ausgibt.</p>
<pre class="lang:default decode:true " title="Model innerhalb der Schleife (Falsch)">foreach ($this-&gt;getProductIds() as $productId){
    $product = Mage::getModel('catalog/product')-&gt;load($productId);
    $this-&gt;processProduct($product);
}</pre>
<p>Wie im Code zu sehen ist, werden bei jedem Aufruf des PHP-Skripts die Produkt-IDs geladen und dann in einer foreach Schleife das jeweilige Produktmodel geladen. Das Problem dabei ist, dass jedes Produktmodel einzeln geladen wird und für jedes dieser Produkte mehrere Queries verwendet werden. Bei einer Anzahl von 500 Produkten sind wir somit bei sage und schreibe ca 2500-5000 SQL-Queries, je nachdem wie viele Attribute die besagten Produkte besitzen. Der richtige Weg unter Berücksichtigung der Magento-Performance und Logik sieht wie folgt aus:</p>
<pre class="lang:default decode:true " title="Model außerhalb der Schleife (Richtig)">$collection = Mage:getResourceModel('catalog/product_collection')
    -&gt;addFieldsToFilter('entity_id', array($this-&gt;getProductIds()))
    -&gt;addAttributeToSelect(array('name'));

foreach ($collection as $product){
    $this-&gt;processProduct($product);
}</pre>
<p>Hier wird die ganze Produktkollektion nur ein mal geladen. Nachdem die Filter hinzugefügt wurden, werden die Produkte dann mit einer Schleife über die $collection variable verarbeitet. In diesem Code werden maximal ein bis zwei Dutzend SQL queries verwendet, was sich spürbar auf die gesamte Ladezeit der Seite auswirkt.</p>
<p><a href="http://labs.octivi.com/10-worst-magento-practices/">Quelle Beispiel: http://labs.octivi.com/ (Bad SQL Queries)</a></p>
<p><strong>4) Ladezeit-Optimierung durch Verwendung vorgerenderter Bilder</strong></p>
<p>Magento wird in seiner Standard-Konfiguration mit zahlreichen Bilder ausgeliefert. Sobald ein Shopbetreiber seine Produkte und dazugehörige Bilder anlegt, ist man schnell bei ~20-30 Bildern pro Kategorieseite und noch mehr Bildern auf der Produktdetailseite angelangt. Je nach Berücksichtigung der durchschnittlichen Bildgröße, so um die ~0.5-2 Megabyte an Daten betragen dürfte. Auch Bilder welche in ihrer Dimension zu groß sind, sollten vor dem Verwenden verkleinert werden, um so wertvolle Bandbreite zu sparen und mobile Shopbesucher nicht mit größeren Datenvolumen zu belasten. Die richtige Größe der Bilder sowie deren Optimierung durch ein externes Werkzeug wie <a href="http://optipng.sourceforge.net/" target="_blank" rel="noopener noreferrer">optipng</a> bewirken eine schnellere Ladezeit der Seite durch weniger Datenvolumen und macht sich schnell auch im praktischen Testen bemerkbar.</p>
<figure id="attachment_521" aria-describedby="caption-attachment-521" style="width: 150px" class="wp-caption alignleft"><img decoding="async" class="wp-image-521 size-thumbnail" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/03/transport-1208189_1920-150x150.jpg" alt="Bettwäsche Bild unkomprimiert (112 kilobytes)" width="150" height="150" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/03/transport-1208189_1920-150x150.jpg 150w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/03/transport-1208189_1920-150x150@2x.jpg 300w" sizes="(max-width: 150px) 100vw, 150px" /><figcaption id="caption-attachment-521" class="wp-caption-text"><br />Bettwäsche Bild unkomprimiert (112 Kilobyte)</figcaption></figure>
<figure id="attachment_521" aria-describedby="caption-attachment-521" style="width: 150px" class="wp-caption alignleft"><img decoding="async" class="wp-image-521 size-thumbnail" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/03/transport-1208189_1920-150x150.jpg" alt="Bettwäsche Bild komprimiert via http://tinypng.org/ (42 kilobytes)" width="150" height="150" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/03/transport-1208189_1920-150x150.jpg 150w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/03/transport-1208189_1920-150x150@2x.jpg 300w" sizes="(max-width: 150px) 100vw, 150px" /><figcaption id="caption-attachment-521" class="wp-caption-text"><br />Bettwäsche Bild komprimiert via http://tinypng.org/ (42 Kilobyte)</figcaption></figure>
<p><strong>5) Steigerung der Magento-Performance durch Verwendung der neuesten PHP Version.</strong></p>
<p>PHP hat seit Version 5.5 einen enormen Geschwindigkeitszuwachs erhalten. Jetzt, mit Version 7.0, ist die Sprache auf der Magento sein Grundgerüst aufbaut sogar doppelt so schnell wie sein Vorgänger PHP 5.5 bzw 5.6 und somit um ein Vielfaches schneller als das <a href="http://w3techs.com/technologies/details/pl-php/all/all" target="_blank" rel="noopener noreferrer">immer noch weit verbreitete PHP 5.4</a>. Deshalb ist es empfehlenswert bei einer Magento-Installation, mindestens PHP in der Version 5.5 bzw 5.6 auf dem Server installiert zu haben. Der eingebaute Zend OpCache ab Version 5.5 beschleunigt einen frisch installierten Magento Shop um bis zu ~40% ohne jegliche Änderungen an der Konfiguration oder der Hardware. PHP Version 7.0 steigert diesen Geschwindigkeitszuwachs noch einmal um satte 100% durch die effektivere Handhabung von Arrays und großen Objekten, von welchen Magento durchweg exzessiven Gebrauch macht. Eine Magento-Installation mit PHP 7.0 lädt im Vergleich zu einer Magento installation mit PHP 5.4 um bis zu 1.6 Sekunden schneller.</p>
<p><img loading="lazy" decoding="async" class="alignnone" src="http://www.entwicklungshilfe.nrw/blog/wp-content/uploads/2016/05/magento1.9_php7_response_time-1.png" alt="Magento Antwortzeit mit PHP 7.0" width="24" height="24" /></p>
<p><a href="https://www.mgt-commerce.com/blog/php-7-the-next-big-thing-for-magento/">Bildquelle: https://www.mgt-commerce.com/blog/</a></p>
<h2>Fazit</h2>
<p>Durch Befolgen der genannten 5 Aspekte kann man ohne viel Aufwand bereits eine spürbare Steigerung der Magento-Performance erreichen. Natürlich gibt es weitere Punkte, welche die Geschwindigkeit einer Magento-Installation beschleunigen können. Wir haben uns hier jedoch auf die Punkte mit den prozentual größten Geschwindigkeitseinbußen bei Missachtung konzentriert.</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/05/13/magento-performance-flaschenhaelse/">Magento-Performance: Flaschenhälse</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://entwicklungshilfe.nrw/blog/2016/05/13/magento-performance-flaschenhaelse/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>JavaScript-Optimierung in Magento</title>
		<link>https://entwicklungshilfe.nrw/blog/2016/05/06/javascript-optimierung-magento/</link>
					<comments>https://entwicklungshilfe.nrw/blog/2016/05/06/javascript-optimierung-magento/#respond</comments>
		
		<dc:creator><![CDATA[Andreas Mautz]]></dc:creator>
		<pubDate>Fri, 06 May 2016 10:00:20 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Magento]]></category>
		<guid isPermaLink="false">http://www.entwicklungshilfe.nrw/blog/?p=480</guid>

					<description><![CDATA[<p>Magento, eines der meist verbreitesten Shop-Systeme hat ein gravierendes und lange bekanntes Problem mit dem Umgang mit JavaScript &#8211; wir erklären euch unsere Probleme der JavaScript-Optimierung bei Magento. Einige Magento-Entwickler werden mit hoher Wahrscheinlichkeit schon einmal an dem Punkt angelangt sein, wo der Kunde entweder nach einer Verbesserung der Shop-Ladezeit gefragt hat, oder andere entsprechende [&#8230;]</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/05/06/javascript-optimierung-magento/">JavaScript-Optimierung in Magento</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><a href="https://magento.com" target="_blank" rel="noopener noreferrer">Magento</a>, eines der <a href="http://www.onlineshop-basics.de/ecommerce-studie/shopsoftware.php" target="_blank" rel="noopener noreferrer">meist</a> <a href="http://cometrics.co/statistics/magento-usage/" target="_blank" rel="noopener noreferrer">verbreitesten</a> Shop-Systeme hat ein gravierendes und lange bekanntes Problem mit dem Umgang mit JavaScript &#8211; wir erklären euch unsere Probleme der JavaScript-Optimierung bei Magento. Einige Magento-Entwickler werden mit hoher Wahrscheinlichkeit schon einmal an dem Punkt angelangt sein, wo der Kunde entweder nach einer Verbesserung der Shop-Ladezeit gefragt hat, oder andere entsprechende Maßnahmen zur Erhöhung seiner Performance oder Ähnlichem gefordert hat.</p>
<p>Eine Standard Magento Konfiguration wird bereits mit über 20 JavaScript-Dateien ausgeliefert. Somit ist für die meisten Entwickler schnell klar, dass die Reduzierung des JavaScripts oder dessen Zusammenführung in einer Datei anstatt 20 einen Geschwindigkeitsvorteil und eine bessere Performance bringen wird. Verbunden ist dies mit vergleichsweise wenig Aufwand im Gegenteil zu anderen Optimierungsmaßnahmen. Für solche Fälle bietet Magento standardmäßig die Funktion &#8222;JavaScript-Dateien kombinieren&#8220;, welche jedoch mehr Nachteile als Vorteile mit sich bringt. Die Nachteile werden wir in diesem Blogpost anhand von drei Beispielen detailliert erläutern.</p>
<h2>Die Ausgangssituation:</h2>
<p>Bei der Verwendung des von Magento bereitgestellten Features werden alle JavaScript-Dateien in einer Datei kombiniert, aus der Größe des Contents einen Hash generiert und als Datei abgespeichert. In unseren weiteren Beispielen benutzen wir anstatt der Hashes einfache Namen wie zum Beispiel &#8222;abc.js&#8220; und &#8222;xyz.js&#8220;. Die Magento-Entwickler haben bei der Implementierung ihres Features jedoch einige zum Teil gravierende Fehler nicht berücksichtigt.</p>
<h3>Fehler 1: Minimierte oder kombinierte JavaScript-Dateien können den ganzen Shop unbenutzbar machen!</h3>
<p>Sobald 2-3 minimierte JavaScript-Dateien in das bestehende Shopsystem integriert werden, treten bereits die ersten Probleme auf.<br />
Auch wenn der Entwickler auf die Idee kommen sollte Magentos JavaScript-Dateien zu komprimieren, wird es unter Umständen zu Fehlern kommen.<br />
Das Problem an der Sache ist der Coding-Style der Magento Entwickler. JavaScript ermöglicht es beendete Funktionen ohne Semikolon abzuschließen, wovon die Magento Entwickler sehr oft Gebrauch machen. Sollte nun ein Entwickler die Magento JavaScript-Dateien zur Performance- und/oder Ladezeitoptimierung komprimieren und die Kombinierfunktion einschalten, entstehen dadurch kritische Fehler.</p>
<p>Durch das Komprimieren der Dateien schrumpft der Dateiinhalt auf exakt eine Zeile. Sobald beispielsweise eine &#8222;var&#8220; Deklaration am Anfang der zweiten Datei steht und in der ersten Datei eine Funktion ohne abschließendes Semikolon beendet wurde (was in 95% der Fälle zutrifft), wird der Code fehlerhaft geparsed und beide Dateien verlieren Ihre eigentliche Funktionalität.</p>
<h3>Fehler 2: Kombinieren der JavaScript-Dateien birgt das Risiko, die Ladezeit der Seite zu erhöhen!</h3>
<p>Jetzt fragen sich sicherlich einige, wie dass denn überhaupt möglich ist wenn man doch anstatt 20 Dateien nur noch eine lädt und somit die HTTP-Requests in Folge der JavaScript-Optimierung massiv gesunken sind. Die Frage lässt sich durch ein einfaches Beispiel illustrieren. Nehmen wir an, auf der Startseite des Shops werden die JavaScript-Dateien &#8222;abc.js&#8220; und &#8222;xyz.js&#8220; geladen. Diese Dateien werden überall geladen. Nach dem Aktivieren der Kombination werden diese zu (Beispiel) &#8222;abcdef.js&#8220; kombiniert. Wenn der Nutzer die Startseite besucht wird die Datei einmal ausgeliefert und danach gecached. So weit, so gut. Sollte der Nutzer jedoch eine Produktseite besuchen, welche außer &#8222;abc.js&#8220; und &#8222;xyz.js&#8220; auch noch &#8222;foo.js&#8220; und &#8222;bar.js&#8220; benötigt, wird nochmals eine kombinierte Datei erstellt (Beispiel) &#8211; &#8222;ghijkl.js&#8220;. Da der Nutzer bereits die beiden ersten Dateien im Cache hat, muss der Browser jetzt unnötiger Weise trotzdem beide Dateien in Form von ghijkl.js ausliefern, welche auch &#8222;foo.js&#8220; und &#8222;bar.js&#8220; enthält.</p>
<h3>Fehler 3: Massiver Overhead ohne jeglichen Nutzen bei Verwendung von Protokollen wie SPDY oder HTTP/2</h3>
<p>Falls der Shopbetreiber bzw. dessen Entwickler einen Server betreiben, welcher die Protokolle SPDY oder dessen standardisierten Nachfolger HTTP/2 benutzt, ist die ganze Kombination von JavaScript-Dateien als JavaScript-Optimierung mehr Nachteil als Vorteil. Die HTTP/2 Spezifikation erlaubt es, parallel in nur einer einzigen HTTP-Request JavaScript-Dateien auszuliefern. Je nach Größe und Masse der einzubindenden JavaScript-Dateien kann dies beim Kombinieren zu erheblichen Leistungseinbußen führen. Angenommen ein großer Shop hat 40 JavaScript-Dateien, wobei einer dieser Dateien eine für JavaScript gigantische Größe von 700 Kilobytes hat. Diese Datei wird beim Kombinieren jedes mal gelesen und wieder in die kombinierte Datei geschrieben. Dieser Overhead ist bei der Verwendung von SPDY oder HTTP/2 unnötig und verursacht eine deutlich spür- und messbare Erhöhung der &#8222;Time To First Byte&#8220;, die Zeit die der Shop zum Senden des ersten Bytes an den User braucht.</p>
<h2>Testszenarien und Auswertungen der JavaScript-Optimierung</h2>
<p>Die hier gezeigten Ausschnitte des Testtools <a href="http://www.webpagetest.org/" target="_blank" rel="noopener noreferrer">Webpagetest</a> sollen lediglich der Illustration des Ladevorgangs dienen.<br />
Die Zeiten der einzelnen Dateien sind hier nicht wirklich relevant, da wir kein wiederhol- und überprüfbares Testsetup aufgesetzt haben. Das soll in einem späteren Thread aber folgen.</p>
<p><strong>Ladevorgang bei Verwendung von HTTP/1.1</strong></p>
<figure id="attachment_551" aria-describedby="caption-attachment-551" style="width: 476px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-551 size-full" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/05/http1_unmerged.png" alt="ohne JavaScript-Optimierung" width="476" height="784" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/05/http1_unmerged.png 476w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/05/http1_unmerged-182x300.png 182w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/05/http1_unmerged-182x300@2x.png 364w" sizes="auto, (max-width: 476px) 100vw, 476px" /><figcaption id="caption-attachment-551" class="wp-caption-text">ohne JavaScript-Optimierung</figcaption></figure>
<p><strong>Ladevorgang bei Verwendung von HTTP/1.1 mit Kombinierungstool</strong></p>
<figure id="attachment_550" aria-describedby="caption-attachment-550" style="width: 756px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-550 size-full" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/05/http1_merged.png" alt="JavaScript-Optimierung - einfaches Kombinieren" width="756" height="334" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/05/http1_merged.png 756w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/05/http1_merged-300x133.png 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/05/http1_merged-300x133@2x.png 600w" sizes="auto, (max-width: 756px) 100vw, 756px" /><figcaption id="caption-attachment-550" class="wp-caption-text">JavaScript-Optimierung &#8211; einfaches Kombinieren</figcaption></figure>
<p><strong>Ladevorgang bei Verwendung von HTTP/2</strong></p>
<figure id="attachment_543" aria-describedby="caption-attachment-543" style="width: 420px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-543 size-full" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/05/nonmerged_http2.png" alt="JavaScript-Optimierung durch Verwendung von http/2" width="420" height="887" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/05/nonmerged_http2.png 420w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/05/nonmerged_http2-142x300.png 142w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/05/nonmerged_http2-142x300@2x.png 284w" sizes="auto, (max-width: 420px) 100vw, 420px" /><figcaption id="caption-attachment-543" class="wp-caption-text">JavaScript-Optimierung durch Verwendung von http/2</figcaption></figure>
<p><strong>Ladevorgang bei Verwendung von HTTP/2 mit Kombinierungstool</strong></p>
<figure id="attachment_546" aria-describedby="caption-attachment-546" style="width: 574px" class="wp-caption alignnone"><img loading="lazy" decoding="async" class="wp-image-546 size-full" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/05/merged_http2-1.png" alt="Kombinierte JavaScript-Dateien und http/2" width="574" height="53" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/05/merged_http2-1.png 574w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/05/merged_http2-1-300x28.png 300w" sizes="auto, (max-width: 574px) 100vw, 574px" /><figcaption id="caption-attachment-546" class="wp-caption-text">Kombinierte JavaScript-Dateien und http/2</figcaption></figure>
<h2>Fazit</h2>
<p>Trotz eines eingebauten JavaScript-Kombinierungstools ist es nicht ohne Weiteres möglich, Magentos eingebaute Performance Tools wie &#8222;JavaScript-Dateien kombinieren&#8220; in einem produktivem Umfeld ohne ausgiebiges manuelles Testen zu benutzen. Es können schnell unverschuldet Fehler entstehen, welche die ganze Seite unbenutzbar machen. Des weiteren kann bei Benutzung von Magentos Funktion schnell eine Erhöhung der Seiten-Ladezeit anstatt der gewünschten Reduzierung eintreten.</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/05/06/javascript-optimierung-magento/">JavaScript-Optimierung in Magento</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://entwicklungshilfe.nrw/blog/2016/05/06/javascript-optimierung-magento/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>git-flow &#8211; das Branching-Modell</title>
		<link>https://entwicklungshilfe.nrw/blog/2016/04/29/git-flow-branching-model/</link>
					<comments>https://entwicklungshilfe.nrw/blog/2016/04/29/git-flow-branching-model/#respond</comments>
		
		<dc:creator><![CDATA[Andreas Mautz]]></dc:creator>
		<pubDate>Fri, 29 Apr 2016 10:00:41 +0000</pubDate>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">http://www.entwicklungshilfe.nrw/blog/?p=475</guid>

					<description><![CDATA[<p>In diesem Artikel befassen wir uns mit dem Aufsetzen und der Handhabung von Branches (Zweigen). Wir gehen davon aus, dass du als Leser genug Erfahrung mit der Installation und Handhabung von einfachen Git-Features wie commit, push, und pull hast. In der Welt der Versionskontrollsysteme ist Git mit Abstand eines der effektivsten und einfachsten Tools die [&#8230;]</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/04/29/git-flow-branching-model/">git-flow &#8211; das Branching-Modell</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>In diesem Artikel befassen wir uns mit dem Aufsetzen und der Handhabung von Branches (Zweigen). Wir gehen davon aus, dass du als Leser genug Erfahrung mit der Installation und Handhabung von einfachen Git-Features wie commit, push, und pull hast.</p>
<p>In der Welt der Versionskontrollsysteme ist <a href="https://git-scm.com/">Git</a> mit Abstand eines der effektivsten und einfachsten Tools die uns zur Verfügung stehen, um unseren Arbeitsalltag bzw. unseren Workflow zu optimieren. In diesem Artikel zeigen wir euch, wir ihr Git mit git-flow effektiver nutzt.</p>
<h1>Git Branching</h1>
<p>Wir gehen in unserem Beispiel davon aus, dass zwei neue Features für unser aktuelles Projekt geplant sind. Diese wollen wir, ohne uns als Entwickler gegenseitig auf die Füße zu treten, zeitgleich erledigen.</p>
<p>Dafür gibt es in Versionskontrollsysteme sogenannte Branches. Bei Git enthält jeder Branch eine eigene Kopie des jeweiligen Repositories zum Zeitpunkt der Erstellung des Branches. Den Verlauf einer Feature-Entwicklung im normalen Git-Workflow erklärt der nächste Absatz. Person A erstellt hier zum Beispiel eine Navigation speziell für Smartphones in unserem Projekt.</p>
<h2>Einfacher Workflow ohne Branching-Modell:</h2>
<p>Als erstes beziehen (clonen) wir das Git-Respository vom Server, um eine lokale Kopie des gesamten Projektes zu erhalten. In diesem wird nun auf dem Hauptbranch (Master) das Feature &#8222;Smartphone Navigation&#8220; nach und nach programmiert. Die Schritte schliessen jeweils mit commit und anschliessendem push der Änderungen an das globale Repository ab. Die Webseite auf dem Produktions-Server wird anschliessend mit einem pull aktualisiert.</p>
<p><b>Das Problem an diesem Beispiel ist Folgendes:</b><br />
Sobald eine weitere Person am selben Projekt arbeitet kann es zu Überschneidungen kommen. Angenommen Person A arbeitet an der Smartphone Navigation während Person B einen wichtigen Bugfix einspielt. Dadurch, dass Person B seinen Bugfix so schnell wie möglich auf der Live-Instanz des Projektes haben will, wird nach dem Hinzufügen des Bugfixes sofort der Master-Branch auf den neusten Stand gebracht. Das hat die Nebenwirkung zur Folge, dass auch Teile des Codes von Person A auf den Live-Server geladen werden und somit Probleme bzw. Fehler produzieren werden, da man nicht sicher sein kann, dass Person A seine Arbeit beendet hat. Und seien wir ehrlich &#8211; in Projekten mit mehr als einem Entwickler kommt es IMMER zu solchen Zuständen.</p>
<figure id="attachment_521" aria-describedby="caption-attachment-521" style="width: 150px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-521 size-thumbnail" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/03/transport-1208189_1920-150x150.jpg" alt="Mit git-flow effektiver arbeiten" width="150" height="150" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/03/transport-1208189_1920-150x150.jpg 150w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/03/transport-1208189_1920-150x150@2x.jpg 300w" sizes="auto, (max-width: 150px) 100vw, 150px" /><figcaption id="caption-attachment-521" class="wp-caption-text">Mit git-flow effektiver arbeiten</figcaption></figure>
<h2>Lösungsansatz mit Git und einem einfachen Branching-Modell</h2>
<p>Um solche Probleme zu umgehen hat man in Git die Möglichkeit einen oder mehrere Branches zu erstellen. Ein Branch ist eine Abzweigung der Codebasis zu einem bestimmten Punkt. Ab diesem Punkt kann man auf seinem Zweig (Branch) parallel zum Beispiel zum Hauptstrang in Ruhe entwicklen und erst das fertige Feature wieder zurück mergen.</p>
<p>Hier ein Beispiel:<br />
Person A möchte eine Navigation für Smartphones erstellen ohne jemandem in die Quere zu kommen und geht jetzt wie folgt vor:<br />
Git-Repository vom Server ziehen für eine lokale Kopie des gesamten Projektes. Neuen Branch erstellen mit dem Namen &#8222;develop&#8220;.<br />
Auf diesem Branch kann jetzt unabhängig von anderen Branches weiter gearbeitet werden. Jegliche Änderung auf dem neu erstellten Branch wird zunächst keinerlei Auswirkung auf andere Branches haben. Sobald das neue Feature fertig ist, wird Person A seine Änderungen pushen und seine Änderungen in den Hauptbranch &#8222;mergen&#8220; (zusammenführen).<br />
Dieses Merging vom Branch &#8222;develop&#8220; in den Hauptbranch des Projektes bewirkt, dass alle Änderungen im Smartphone Branch nun auch auf dem Hauptzweig des gesamten Projektes verfügbar sind.</p>
<p>Sollte während der Entwicklungszeit der Smartphone-Navigation Person B einen kritischen Bugfix in den Hauptbranch pushen, kann der Administrator ohne Einfluss der Codeänderungen für die Smartphone-Navigation den Hauptbranch updaten. Der Bugfix der auf dem Hauptbranch von Person B eingefügt wird, hat keinerlei Auswirkungen auf die Arbeit von Person A (Smartphone-Navigation Branch). Auch werden Codeänderungen von Person A keinen Einfluss auf die Arbeit von Person B haben, da beide verschiedene Branches verwenden.</p>
<p>Wenn dann jedoch nach der Fertigstellung der Smartphone-Navigation das gesamte Projekt diese neue Navigation erhalten soll, wird der Branch des neuen Features, in unserem Fall &#8222;develop&#8220;, einfach mit dem Hauptbranch zusammengeführt, woraufhin alle anderen Projektmitglieder die neuen Änderungen schließlich auch erhalten. Ausgenommen davon sind natürlich wieder die Projektmitglieder, die sich gerade auf einem anderen Branch befinden.</p>
<h2>Lösungsansatz git-flow als Branching-Modell</h2>
<p>&#8222;<a href="http://nvie.com/posts/a-successful-git-branching-model" target="_blank" rel="noopener noreferrer">Git-flow</a>&#8220; ist ein Tool das den Workflow von Git erweitert und fest spezifiziert. Es kann per Kommandozeile oder per Tool bedient werden. So bieten zum Beispiel <a href="https://www.sourcetreeapp.com/" target="_blank" rel="noopener noreferrer">Sourcetree von Atlassian</a> und <a href="https://www.jetbrains.com/phpstorm/" target="_blank" rel="noopener noreferrer">PhpStorm</a> Untersützung für git-flow. Die sehr feste Spezifizierung von git-flow hält den Workflows konstant und fördert den dezentralisierten Entwicklungsansatz. Zusätzlich zu den bekannten Hauptzweigen &#8222;master&#8220; und &#8222;develop&#8220; werden sogenannte Support-Branches erstellt, welche später für differenzierte Aufgaben verwendet werden. Diese werden auf verschiedene Art und Weise mit unseren Hauptzweigen &#8222;master&#8220; und &#8222;develop&#8220; zusammengeführt. Wir werden diese Support-Branches anhand von drei Beispielen kurz erklären.</p>
<h3>Support-Branches bei git-flow</h3>
<p>Derzeit haben wir in unserem Projekt zwei Zweige, &#8222;master&#8220; und &#8222;develop&#8220;. &#8222;Master&#8220; ist die aktuelle Live-Version des Projektes während &#8222;develop&#8220; einen aktuellen Entwicklungsstand darstellt. &#8222;Git-flow&#8220; fügt nun drei weitere Arten von Branches zu unserem Workflow: &#8222;release&#8220;, &#8222;feature&#8220;, und &#8222;hotfix&#8220;.</p>
<p><strong>Hotfix-Branches</strong></p>
<p>Der Hotfix-Branch wird von den beteiligten Entwicklern lediglich dazu benutzt Fehlerbehebungen des Live-Systems durchzuführen. Sobald ein Fehler behoben ist, wird der Hotfix-Branch geschlossen und mit &#8222;master&#8220; und &#8222;develop&#8220; zusammengeführt. Dieses führt auf der einen Seite zu einem sauber aktualisierten Live-System und auf der anderen Seite wird der Hotfix in die Entwicklungsschiene transferiert, da sämtliche anderen Branches vom &#8222;develop&#8220; Branch abhängen.<br />
<img decoding="async" class="size-main-full wp-image-521" src="http://nvie.com/img/hotfix-branches@2x.png" alt="Hotfix-Branch Workflow" height="400" />Hotfix-Branch Workflow © <a href="http://nvie.com">nvie.com</a></p>
<p><strong>Feature-Branches</strong></p>
<p>Der Feature-Branch wird als Zweig zur Erstellung neuer Funktionen verwendet. Sobald eine neue Funktionalität abgeschlossen ist, wird der Feature-Branch auf mit dem Develop-Branch zusammengeführt und kann auf einer Testinstanz unabhängig von unserem Master branch getestet werden. Feature-Branches sollten in dieser Struktur lediglich lokal vorkommen.<br />
<img decoding="async" class="size-main-full" src="http://nvie.com/img/merge-without-ff@2x.png" alt="Feature-Branch Workflow" height="400" />Feature-Branch Workflow © <a href="http://nvie.com">nvie.com</a></p>
<p><strong>Release-Branches</strong></p>
<p>Der Release-Branch wird bei jedem neuen Release oder großen Codeänderung (Milestone) benutzt. Ein Release kann zum Beispiel eine Sammlung von verschiedenen Features sein, welche als Release-Branch gruppiert bzw. zusammengefasst werden, um gemeinsam deployed zu werden. Ein Release-Branch sollte immer mit &#8222;master&#8220; als auch &#8222;develop&#8220; zusammengeführt werden, wobei letzterer für die Qualitätssicherung inklusive Testing Vorrang hat.</p>
<h2>Fazit</h2>
<p>Das Arbeiten mit git-flow oder generell die korrekte Nutzung von Branching stellt eine qualitätssichernde sowie Workflow-optimierende Maßnahme da, die uns hilft sauber und getrennt voneinander unseren Aufgaben nach zu gehen, ohne die Arbeit des Anderen zu beeinträchtigen.</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/04/29/git-flow-branching-model/">git-flow &#8211; das Branching-Modell</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://entwicklungshilfe.nrw/blog/2016/04/29/git-flow-branching-model/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Frontend-Testing mit Codeception</title>
		<link>https://entwicklungshilfe.nrw/blog/2016/04/22/frontend-testing-mit-codeception/</link>
					<comments>https://entwicklungshilfe.nrw/blog/2016/04/22/frontend-testing-mit-codeception/#comments</comments>
		
		<dc:creator><![CDATA[Andreas Mautz]]></dc:creator>
		<pubDate>Fri, 22 Apr 2016 10:00:11 +0000</pubDate>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Software Qualität]]></category>
		<guid isPermaLink="false">http://www.entwicklungshilfe.nrw/blog/?p=468</guid>

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

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

					<description><![CDATA[<p>Git ist ein häufig genutztes Versionstool in PHP-Projekten. Allerdings wird häufig mit grafischen Oberflächen wie Sourcetree gearbeitet. Webdeveloper nutzen diese Tools häufig, ohne genau zu wissen, was im Hintergrund genau passiert. Daher zeigen wir dir in diesem Artikel, wie du das alles schnell und effektiv auf der Command Line nutzen kannst. Das hat einige Vorteile: Du bist [&#8230;]</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/02/11/git-auf-der-command-line-cli/">Git auf der Command Line CLI einsetzen</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Git ist ein häufig genutztes Versionstool in PHP-Projekten. Allerdings wird häufig mit grafischen Oberflächen wie <a href="https://www.sourcetreeapp.com/" target="_blank" rel="noopener noreferrer">Sourcetree</a> gearbeitet. Webdeveloper nutzen diese Tools häufig, ohne genau zu wissen, was im Hintergrund genau passiert. Daher zeigen wir dir in diesem Artikel, wie du das alles schnell und effektiv auf der Command Line nutzen kannst. Das hat einige Vorteile: Du bist schneller und hast gleichzeitig viel mehr <a href="http://www.entwicklungshilfe.nrw/blog/category/git-schulung/">Wissen über Git</a> und Kontrolle über deine Software und Arbeitsschritte.</p>
<figure id="attachment_391" aria-describedby="caption-attachment-391" style="width: 300px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/terminal-git-log.png" rel="attachment wp-att-391"><img loading="lazy" decoding="async" class="wp-image-391 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/terminal-git-log-300x148.png" alt="Terminal Git-Log - www.slant.co" width="300" height="148" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/terminal-git-log-300x148.png 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/terminal-git-log-768x380.png 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/terminal-git-log.png 976w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/terminal-git-log-300x148@2x.png 600w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-391" class="wp-caption-text">Terminal Git-Log &#8211; www.slant.co</figcaption></figure>
<p>In Stellenausschreibungen steht heute immer öfter die Anforderung, Git über die Command Line zu nutzen. Gerade bei <a href="https://www.gulp.de/knowledge-base/markt-und-trends/umfrage-ergebnis-noch-junior-oder-schon-senior.html" target="_blank" rel="noopener noreferrer">Senior-Entwicklern</a> wird dieses Wissen bereits explizit vorausgesetzt. Das <a href="https://de.wikipedia.org/wiki/Kommandozeile" target="_blank" rel="noopener noreferrer">Command-Line</a>-Wissen kannst du dann auch anwenden, wenn dir kein Rechner mit Sourcetree zur Verfügung steht, weil du dich vielleicht direkt auf den Linux-Servern lokal oder remote bewegen musst.</p>
<h2>Git Commands, die tatsächlich gebraucht werden</h2>
<p>Es sind nicht so viele <a href="https://confluence.atlassian.com/bitbucketserver/basic-git-commands-776639767.html" target="_blank" rel="noopener noreferrer">Git Commands</a>, die für die tägliche Arbeit gebraucht werden, wie man vielleicht glaubt. Hier mal ein einfacher Task mit den Git-Commands direkt auf der Command Line.</p>
<h3>Git Repository klonen</h3>
<p><strong>git clone https://url.com/example-repo</strong></p>
<figure id="attachment_393" aria-describedby="caption-attachment-393" style="width: 300px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-Repository-klonen.jpg" rel="attachment wp-att-393"><img loading="lazy" decoding="async" class="wp-image-393 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-Repository-klonen-300x213.jpg" alt="Git-Repository klonen" width="300" height="213" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-Repository-klonen-300x213.jpg 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-Repository-klonen-768x546.jpg 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-Repository-klonen-1024x728.jpg 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-Repository-klonen-269x192.jpg 269w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-Repository-klonen.jpg 1920w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-Repository-klonen-300x213@2x.jpg 600w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-Repository-klonen-768x546@2x.jpg 1536w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-Repository-klonen-269x192@2x.jpg 538w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-393" class="wp-caption-text">Git Repository klonen</figcaption></figure>
<p>Mit dem Git Command wird das Repo in das Verzeichnis &#8222;example-repo&#8220; geklont. Gibt man hinter der URL ein anderes Ziel oder Target an, wird ein anderer Ordner genommen. Das macht bei der späteren Anwendung keinen Unterschied, kann aber zu mehr Übersicht in der Dateistruktur genutzt werden. Mit der Angabe von &#8222;.&#8220; wird das Repository in das aktuelle Verzeichnis geklont. Das ist zwar ein seltener Anwendungsfall, spart einem aber bei Bedarf Zeit. Dafür muss der Ordner allerdings vollständig leer sein. Auch die Verzeichnisse der PHP-IDEs, wie <a href="http://www.entwicklungshilfe.nrw/seminare/phpstorm-best-practice/">PhpStorm</a>, dürfen hier nicht vorhanden sein.</p>
<h3>Branch erstellen</h3>
<p><strong>git checkout -b myNewTask</strong><br />
Mit dem Checkout-Befehl und dem Parameter -b wird ein neuer Branch &#8222;myNewTask&#8220; erstellt und automatisch auf diesen gewechselt. Hier ist darauf zu achten, auf welchen Branch man sich zu dem Zeitpunkt der Erstellung befindet, und natürlich auch darauf, dass man den aktuellsten Stand auscheckt – also vorher ein &#8222;git pull&#8220; ausgeführt hat.</p>
<h3>Developing auf dem Branch</h3>
<p><strong>git add . &amp;&amp; git commit -m “#myNewBranch add css file”</strong><br />
oder<br />
<strong>git add layout/mynewtask.css &amp;&amp; git commit -m “#myNewBranch add css file”</strong></p>
<figure id="attachment_392" aria-describedby="caption-attachment-392" style="width: 300px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Developing-auf-dem-Branch.jpg" rel="attachment wp-att-392"><img loading="lazy" decoding="async" class="wp-image-392 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Developing-auf-dem-Branch-300x200.jpg" alt="Developing auf dem Branch" width="300" height="200" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Developing-auf-dem-Branch-300x200.jpg 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Developing-auf-dem-Branch-768x512.jpg 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Developing-auf-dem-Branch-1024x683.jpg 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Developing-auf-dem-Branch.jpg 1920w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Developing-auf-dem-Branch-300x200@2x.jpg 600w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Developing-auf-dem-Branch-768x512@2x.jpg 1536w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-392" class="wp-caption-text">Developing auf dem Branch</figcaption></figure>
<p>Generell soll ja bei jeder funktionierenden Änderung ein Commit gemacht werden. Hier ist Disziplin gefragt. Grafische Tools wie Sourcetree verleiten jedoch dazu, dies zu einem späteren Zeitpunkt zu machen. Hier kann man sehr einfach einzelne geänderte Zeilen separaten Commits zuweisen. Das bedeutet leider noch lange nicht, dass der Commit tatsächlich alles tut, was er soll, und wie gewünscht funktioniert hat.</p>
<p>Insofern ist es besser, regelmäßig kleine Commits zu machen. Der Git-Add-Befehl dient dabei einmal für das separate File und einmal für alles seit dem letzten Commit. Auch hier gilt: Regelmäßige und sinnvolle Commits machen einem das Leben leichter und sind effektiver. Vorher ist es zudem immer sinnvoll, sich die aktuellen Änderungen mit &#8222;git status&#8220; noch einmal anzeigen zu lassen. Denn schließlich kommt es vor, dass man etwas übersehen hat. Das trifft auch auf von der Applikation generierte Files zu, die eventuell noch über .gitignore ausgeschlossen werden müssen.</p>
<h3>Commit Messages</h3>
<figure id="attachment_394" aria-describedby="caption-attachment-394" style="width: 300px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Commit-Messages.jpg" rel="attachment wp-att-394"><img loading="lazy" decoding="async" class="wp-image-394 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Commit-Messages-300x200.jpg" alt="Commit-Messages" width="300" height="200" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Commit-Messages-300x200.jpg 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Commit-Messages-768x512.jpg 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Commit-Messages-1024x682.jpg 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Commit-Messages.jpg 1280w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Commit-Messages-300x200@2x.jpg 600w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-394" class="wp-caption-text">Commit Messages</figcaption></figure>
<p>Damit man die Historie einer Entwicklung nachvollziehen kann, sind Commit Messages wichtig. Diese müssen aussagekräftig sein und beinhalten idealerweise eine <a href="http://www.entwicklungshilfe.nrw/seminare/phpstorm-effektiv-mit-ticketsystem-nutzen/">Ticket-ID</a>. Denn somit können die Arbeitsschritte direkt zugeordnet werden. Nicht aussagekräftige Commit Messages indes schaden dem Team und einem selbst.</p>
<p>Mit <a href="https://git-scm.com/book/uz/v2/Customizing-Git-Git-Hooks" target="_blank" rel="noopener noreferrer">Pre Hooks</a> ist es möglich, Commits ohne Ticket-ID direkt zu unterbinden. Das kann sogar erweitert werden, dass sich das Ticket im richtigen Status befinden muss. Solche Maßnahmen einzuführen und umzusetzen, ist allerdings nicht so einfach wie deren technische Implementierung.</p>
<p>Es gibt einige Spaßseiten zu dem Thema wie beispielsweise <a href="http://www.commitlogsfromlastnight.com/" target="_blank" rel="noopener noreferrer">Commits from last night</a> – dabei ist das Thema doch eigentlich sehr ernst. Denn es dient der Dokumentation der eigenen Arbeit und zeigt, dass du ein Profi bist. Soll heißen: Arbeite immer möglichst professionell. Das ist wichtig und richtig.</p>
<h2>Git-flow installieren und sofort nutzen</h2>
<p><strong>git flow feature start myNewBranch</strong><br />
<strong>git flow feature finish myNewBranch</strong></p>
<figure id="attachment_395" aria-describedby="caption-attachment-395" style="width: 300px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-flow.jpg" rel="attachment wp-att-395"><img loading="lazy" decoding="async" class="wp-image-395 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-flow-300x200.jpg" alt="Git-Flow" width="300" height="200" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-flow-300x200.jpg 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-flow-768x512.jpg 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-flow-1024x683.jpg 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-flow.jpg 1920w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-flow-300x200@2x.jpg 600w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-flow-768x512@2x.jpg 1536w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-395" class="wp-caption-text">Git-flow</figcaption></figure>
<p><a href="http://www.entwicklungshilfe.nrw/seminare/git-flow-git-branching-model-fuer-agile-software-projekte/">Git-flow</a> hat sich in vielen Projekten bewährt und wird vor allem gerne bei neuen Projekten eingesetzt. Auf dem <a href="http://www.rogoit.de/webdesign-typo3-blog-duisburg/category/mac-snippet/" target="_blank" rel="noopener noreferrer">Mac</a> ist es schnell mit <a href="http://brew.sh/" target="_blank" rel="noopener noreferrer">Homebrew</a> installiert, und nach einem &#8222;git flow init&#8220; kann es nach einigen Bestätigungen der Default-Settings sofort eingesetzt werden. Mit dem oben aufgeführten Start-Befehl wird dabei ein neuer Branch aus dem aktuellen Develop Branch erstellt. Danach kann man sein Feature entwickeln und mit dem Finish-Befehl wieder abschließen. Hier wird ein Merge zurück in den Develop Branch ausgeführt und der Feature Branch sofort gelöscht. Falls man das aber nicht unbedingt möchte, geht es auch mit Hotfixes und Releases.</p>
<p>Eine gute Übersicht zu all dem bietet <a href="http://danielkummer.github.io/git-flow-cheatsheet/" target="_blank" rel="noopener noreferrer">http://danielkummer.github.io/git-flow-cheatsheet/</a>. Ausführliche Informationen zu Git-flow gibt es außerdem unter <a href="https://github.com/nvie/gitflow" target="_blank" rel="noopener noreferrer">https://github.com/nvie/gitflow</a>. Wir haben uns im praktischen Einsatz dazu entschlossen, nach dem Git-Flow-Workflow zu arbeiten, die zusammengeführten Branches allerdings zu archivieren und zu erhalten.</p>
<h2>Git-Workflow nur auf der Command Line</h2>
<figure id="attachment_386" aria-describedby="caption-attachment-386" style="width: 337px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-auf-der-Command-Line-CLI.png" rel="attachment wp-att-386"><img loading="lazy" decoding="async" class="wp-image-386 size-full" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-auf-der-Command-Line-CLI.png" alt="Git auf der Command Line CLI" width="337" height="208" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-auf-der-Command-Line-CLI.png 337w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-auf-der-Command-Line-CLI-300x185.png 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-auf-der-Command-Line-CLI-103x65.png 103w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-auf-der-Command-Line-CLI-163x102.png 163w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-auf-der-Command-Line-CLI-103x65@2x.png 206w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-auf-der-Command-Line-CLI-163x102@2x.png 326w" sizes="auto, (max-width: 337px) 100vw, 337px" /></a><figcaption id="caption-attachment-386" class="wp-caption-text">Git auf der Command Line CLI</figcaption></figure>
<p>Der Git-flow ist eine Zusammenfassung von Befehlen, die man selbstverständlich auch eigenhändig und einzeln ausführen kann. In meinen Augen ist aber ein großer Nachteil, dass Branches, die zurückgemerged wurden, auch gelöscht werden.</p>
<p>Persönlich finde ich es zudem besser, Bugfixes auf dem Feature Branch durchzuführen und sich öfter mit dem aktuellen Stand abzugleichen. So kann man die Arbeit auf einem Feature besser dokumentieren. Das Ganze geht manuell auf der Command Line – CLI – wie folgt:</p>
<p>// Aktuellen Develop Branch auschecken und aktualisieren<br />
<strong>git checkout develop</strong><br />
<strong> git pull</strong></p>
<p>// Feature Branch für Jira Ticket SUP-123 erstellen<br />
<strong>git checkout -b feature/SUP-123</strong></p>
<p>// Commits auf das Ticket<br />
<strong>git status</strong><br />
<strong>git add . &amp;&amp; git commit -m “#SUP-123 what i have done”</strong></p>
<p>// Git Pushes sollten mindestens jeden Abend durchgeführt werden – und zwar auf jeden Fall vor den Merges, egal in welche Richtung<br />
<strong>git status</strong><br />
<strong>git push</strong></p>
<p>// Feature Branch zurück in Develop bringen<br />
<strong>git checkout develop</strong><br />
<strong>git pull</strong><br />
<strong>git merge feature/SUP-123</strong><br />
<strong>git status</strong></p>
<p>// Tag setzen<br />
<strong>git tag -a v1.2.0 -m “Version v1.2.0”</strong><br />
// Push mit Tags<br />
<strong>git push &amp;&amp; git push &#8211;tags</strong></p>
<p>Die oben aufgeführten Commands in <a href="http://www.entwicklungshilfe.nrw/seminare/oh-my-zsh-mit-agnoster-theme/">oh-my-zsh</a><br />
// Aktuellen Develop Branch auschecken und aktualisieren<br />
<strong>gco develop</strong><br />
<strong>gl</strong></p>
<p>// Feature Branch für Jira Ticket SUP-123 erstellen<br />
<strong>gcb feature/SUP-123</strong></p>
<p>// Commits auf das Ticket<br />
<strong>gst</strong><br />
<strong>gaa &amp;&amp; gcmsg “#SUP-123 was ich gerade getan habe”</strong><br />
<strong>gst</strong></p>
<p>// Git Push sollte mindestens jeden Abend durchgeführt werden – und zwar auf jeden Fall vor den Merges, egal in welche Richtung<br />
<strong>gst</strong><br />
<strong>gp</strong></p>
<p>// Feature Branch zurück in Develop bringen<br />
<strong>gco develop</strong><br />
<strong>gl</strong><br />
<strong>gm feature/SUP-123</strong><br />
<strong>gst</strong></p>
<p>// Tag setzen<br />
<strong>git tag -a v1.2.0 -m “Version v1.2.0”</strong></p>
<p>// Push mit Tags<br />
<strong>gp &amp;&amp; gp &#8211;tags</strong></p>
<p>Mit oh-my-zsh sind eine Vielzahl von Git Commands als Alias abgelegt. Im praktischen Einsatz kommen in meinen Augen die oben abgebildeten zum Tragen. Allein gaa &amp;&amp; gcmsg &#8222;my message&#8220; bringen einem sehr viel, da sie ein häufiger Anwendungsfall sind. Auch gc für git checkout geht schnell in Fleisch und Blut über.</p>
<h2>Probleme mit Git</h2>
<p><a href="https://www.ralfebert.de/git/mergekonflikte-beheben/" target="_blank" rel="noopener noreferrer">Git-Konflikte</a> sind ein großes Thema bei Git und natürlich auch Themen wie Rebase. Aber in diesem Artikel gehe ich nicht zusätzlich auf diese Themen ein. In Zukunft werden wir hier in unserem <a href="http://www.entwicklungshilfe.nrw/blog/">Webdevelopment-Blog</a> das Thema Git auch in anderen Zusammenhängen aufgreifen. Auch gehe ich nicht auf Tools, wie <a href="https://github.com/jonas/tig" target="_blank" rel="noopener noreferrer">Tig</a> ein. Aber natürlich ist es wichtig und richtig, mit visuellen Tools zu arbeiten.</p>
<h2>Fazit zu Git auf der Command Line CLI</h2>
<p>Git ist in der heutigen Zeit des Webdevelopments der Quasi-Standard. Jeder Entwickler, egal ob Frontend oder Backend, muss damit umgehen können. Man braucht und darf keine Ausreden bei der Nutzung einer Command Line haben. Nur so wird man zum Profi – sonst ist man nur ein Anwender. Ein User.</p>
<p>In diesem Artikel ist ein einfaches Beispiel über die Entwicklung eines <a href="https://www.atlassian.com/git/tutorials/comparing-workflows/" target="_blank" rel="noopener noreferrer">Feature Branches</a> abgebildet. Man sieht ganz deutlich, dass nur wenige Commands nötig sind. Es ist wichtig, diese einfachen Vorgänge zu 100 Prozent auf der Command Line durchführen zu können und dies auch regelmäßig zu tun. Nur so lernt man Git richtig.</p>
<h2>Unsere Git-PHP-Schulung</h2>
<figure id="attachment_396" aria-describedby="caption-attachment-396" style="width: 300px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/git-flow-php-schulung.jpg" rel="attachment wp-att-396"><img loading="lazy" decoding="async" class="wp-image-396 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/git-flow-php-schulung-300x143.jpg" alt="Git-Flow PHP-Schulung" width="300" height="143" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/git-flow-php-schulung-300x143.jpg 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/git-flow-php-schulung-768x365.jpg 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/git-flow-php-schulung-702x336.jpg 702w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/git-flow-php-schulung.jpg 800w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/git-flow-php-schulung-300x143@2x.jpg 600w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-396" class="wp-caption-text">Git-flow: PHP-Schulung</figcaption></figure>
<p>Git wird von vielen Webdevelopern benutzt. Sie haben es aber leider häufig nicht verinnerlicht oder verstanden, warum man damit genau so arbeitet, wie man es tut. In unserer Schulung gehen wir ganz praktisch vor und erklären Git von den Grundlagen bis zu praktischen und etablierten Workflows. Wir gehen auf die Anwendungsfehler ein und geben unsere persönliche Erfahrung direkt an die Teilnehmer weiter. Es ist eine sehr individuelle Intensiv-Schulung. Alle Informationen zu dem Thema gibt es auf<br />
<a href="http://www.entwicklungshilfe.nrw/seminare/git-flow-git-branching-model-fuer-agile-software-projekte/">http://www.entwicklungshilfe.nrw/seminare/git-flow-git-branching-model-fuer-agile-software-projekte/</a></p>
<p><em>Wie nutzt du Git bislang? Hast du es schon mal per Command Line versucht, und wie sind da ggf. deine Erfahrungswerte?</em></p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/02/11/git-auf-der-command-line-cli/">Git auf der Command Line CLI einsetzen</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://entwicklungshilfe.nrw/blog/2016/02/11/git-auf-der-command-line-cli/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<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 loading="lazy" 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 loading="lazy" 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 loading="lazy" 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>
	</channel>
</rss>
