Wie Continuous Integration für hoch-qualitative Arbeit sorgt
Umso komplexer Projekte werden desto herausfordernder wird es, weiterhin hohe Qualität zu liefern: Automatisierung hilft uns dabei, genauer gesagt Continuous Integration (CI)
Was bedeutet Continuous Integration?
„Kontinuierliche Integration“ heißt, dass die Arbeit der Programmierer/-innen regelmäßig zusammengeführt und automatisch überprüft wird.
Ziel ist es dass Arbeiten an verschiedenen Features zwar gleichzeitig ausgeführt werden können, die Code-Änderungen aber möglichst schnell wieder miteinander kombiniert werden. Dadurch laufen die Entwicklungen nicht zu weit auseinander und das Risiko wird minimiert, dass die Arbeit von Entwickler A die Arbeit von Entwickler B beeinflusst, ohne dass dies bemerkt wird.
Zugleich führt man automatische Überprüfungen des Codes ein, weil es mit wachsender Code-Menge und -Komplexität erstens unwirtschaftlich und zweitens rein personell unbewältigbar wird, das manuell zu tun. Diese Tests laufen nachdem ein/e Entwickler/in seine Änderungen zur Verfügung stellt.
Was kann mittels Continuous Integration automatisiert werden?
In unseren Projekten umfasst Continuous Integration:
- Automatisiere Tests (Unit-Tests, Komponenten-/Integration-Tests, Funktionale/End-to-End-Tests)
- Automatisiertes Setup einer Test-Umgebung mit Datenbanken und Media-Assets
- Automatisierte Überprüfung auf Einhaltung von Coding-Standards und Best Practices
- Automatisierte Erstellung von Code-Metriken
- Automatisierte Überprüfung der verwendeten Komponenten auf bekannte Sicherheitslücken
- Automatisierte Optimierung von Ressourcen (z.B. Komprimierung und Minifizierung von Dateien)
- Automatisierte Generierung von API-Dokumentation
- Automatisierte Vorbereitung des Codes für die Auslieferung („Deployment“) in Test-, Staging- und Live-Systeme
Ist Continuous Integration nicht aufwändig und damit teuer?
Wir stecken viel Zeit in die Etablierung und weitere Verbesserung unserer Prozesse. Dabei legen wir darauf Wert, dass wir neue Projekte sofort auf Basis von CI angelegt werden und bestehende Projekte leicht in diesen Ablauf überführt werden können.
Bei der Überführung bestehender Projekte in ein solches Setup können trotzdem erst einmal ein paar Stunden Aufwand entfallen, deren Gegenwert sich für manchen Kunden nicht gleich erschließt. Auch im laufenden CI-Projekt kann es zu sporadischen Wartungsaufwänden kommen, wobei wir hier von wenigen Stunden pro Jahr sprechen.
In Sachen Gegenwert muss man sich folgende Frage vor Augen halten: was ist die Alternative?
- Funktionalitäten werden gar nicht getestet oder manuell getestet was zeitaufwändiger und fehleranfälliger ist, deswegen meist nur ad-hoc durchgeführt wird
- Code wird nicht oder nur stichprobenweise und manuell auf Coding-Standards und Best Practices überprüft
- Es gibt keine objektive Nachvollziehbarkeit und Überprüfung, ob der Projekt-Code wartbar und unübersichtlich bleibt (Thema „technical debt„)
- Unsichere Komponenten könnten im Produkt-System zum Einsatz kommen oder es muss immer manuell auf die Versionen der Extensions geachtet werden
- Assets wie Bilder, CSS- und JS-Dateien werden nicht optimiert oder müssen manuell optimiert werden
Diese manuellen Arbeiten wollen wir sowohl unseren Kunden (weil teuer) als auch uns selbst (weil nicht besonders spannend) ersparen. Sie führen insgesamt zu mehr Kosten und weniger Gewinn im Gesamtgeschäft.
Das heißt, sobald mein Projekt das „Continuous Integration“-Pickerl hat läuft alles perfekt und CI kostet nichts mehr?
Ganz ehrlich: nein.
Man kann Risiken reduzieren, man stößt früher auf tatsächliche und potentielle Defekte sowie Gefahren, man erspart sich bestimmte Handgriffe. Dennoch gibt es Fehler und Optimierungspotentiale, an denen man kontinuierlich arbeiten muss. Zum Beispiel wird in Projekten normalerweise nie 100% automatisierte Test-Abdeckung erreicht, weil das unverhältnismäßig hohen Aufwand bedeutet und auch erst einmal bezahlt sein will. Werden aber besonders komplexe und wichtige Bereiche der Site automatisiert getestet, dann ist bereits einiges gewonnen. Das frühe Auffinden von Verbesserungsmöglichkeiten im Code und die Optimierung von Ressourcen resultiert in besseren und schnelleren Websites.
Jeder Schritt in Richtung CI ist gerade für langfristige Projekte ein Schritt in die richtige Richtung, weil er Ihnen kurz- bis mittelfristig Qualitätssteigerungen und Kostensenkungen bringt.
Was tut LimeSoda, um Continuous Integration so gut wie möglich für mich einzusetzen?
Wir arbeiten an mehreren Fronten:
- Zentrales Setup für alle Projekte
Verbesserungen am Setup werden ohne oder mit geringem Aufwand in den Projekten implementiert. - Software- und Projektspezifische Anpassungen
Jedes Projekt ist einzigartig. Wir verwenden z.B. spezielle Checks für Magento oder TYPO3, die auf die jeweilige Software zugeschnitten sind. - Ständiger Ausbau unserer Infrastruktur und Tools
Wir investieren eine vierstellige Zahl an internen Stunden in die Verbesserung dieser Abläufe. - Interne Schulungen und Wissens-Weitergabe
Wir behandeln die oben genannten Themen in unseren „LimeAcademies“ und halten unsere Kenntnisse und Best-Practices in unserem Knowledge-Management-Tool fest. Manuelle Code-Reviews (ja, es kann nicht alles automatisiert überprüft werden!) helfen unseren Junior-EntwicklerInnen und Coding-Haudegen, sich zu verbessern.
Gefällt mir gut – ich will Continuous Integration in meinem Projekt!
Wenn Sie in den letzten Jahren Kunde/Kundin von uns geworden sind besteht bereits eine gute Chance, dass Ihr Projekt Teil unseres „LimeWorkflow“ und daher bereits auf unserer CI-Infrastruktur läuft. Langjährige Bestandskunden sind ebenfalls zumindest zum Teil umgestellt.
Da wir ohne Abklärung mit unseren Kund/-innen aber nur ein sinnvolles Minimum an CI-Aufwand für ein Projekt betreiben freuen wir uns darüber, wenn Sie sich näher dafür interessieren und wir gemeinsam an der weiteren Optimierung Ihres Projekts arbeiten können.