Jitsi ist ein ganzer Softwarestack, also eine Sammlung von Programmen, die der Kommunikation mittels Text, Audio und Video dienen.

Ursprünglich war das Internet nicht für Übertragung von Signalen in Echtzeit vorgesehen, wie das für Video- und Audiosignale erforderlich ist. Mit der Jahrtausendwende war die Übertragungskapazität jedoch soweit angewachsen, dass auch solche Kommunikation über das Internet möglich wurde. Jitsi ist freie Software, die diese Anwendungen für die Verwendung in Ihrem Unternehmen implementiert. Die bekannteste Anwendung besteht aus der Abhaltung von Videokonferenzen.

Hintergrund und Entstehung von Jitsi

Erste Anfänge des Projekts gehen auf ein Studentenprojekt aus dem Jahr 2003 zurück. Zuerst bestand Jitsi aus einem Messenger in der Programmiersprache Java. Schritt für Schritt kamen dann Übertragungen von Audio- und Videosignalen hinzu. Eine wesentliche Rolle spielte dabei das Protokoll XMPP.

Mittlerweile ist Jitsi zu einer Sammlung von quelloffenen Programmen für Videokonferenzen und Videokommunikation angewachsen. Zur Verfügung stehen auch APIs, also Interfaces, die frei verwendet werden können. Mittels dieser APIs können Sie eine beliebige Anwendung durch Videoübertragung erweitern.

Zahlreiche Protokolle und Codecs werden von Jitsi unterstützt. Dazu zählen seit dem Beginn des Projekts SIP und XMPP. Für manche Standards steht die Entwicklung einer Einbindung noch aus.

Seit dem Jahr 2018 wird das Jitsi-Projekt von der Firma 8×8 Inc. in den USA weiterentwickelt. Seit seinem Start erlebte Jitsi ein kontinuierliches Wachstum, durch die Covid-Krise hat sich die Anzahl der Nutzer auf eine zweistelligen Millionenzahl erhöht.

Jitsi Meet

Jitsi Meet ist eine Webanwendung zur Organisation von Videokonferenzen auf der Basis des WebRTC-Standards. Geschrieben ist das Projekt in JavaScript. Es bildet einen Softwarestack, der von dem XMPP-Server Prosody verwaltet wird.

Die Jitsi Videobridge fungiert als Server, der mittels der Selective Forwarding Unit oder SFU ein Videosignal an die Teilnehmer weiterleitet. Dieses Protokoll zeichnet sich dadurch aus, dass es auf dem Server relativ wenig Rechenleistung erfordert.

Der Client für jeden Teilnehmer an einer Videoschaltung ist eine Webapplikation. Die von Jitsi implementierte technische Lösung kann für die Teilnehmer höhere Anforderungen an die verfügbare Bandbreite stellen.

Clients können an Videokonferenzen einfach mittels ihres Webbrowsers teilnehmen. Es ist also keine Installation von Software dafür notwendig. Das System ist unter allen gebräuchlichen Betriebssystemen für Desktops und mobile Geräte lauffähig.

Jitsi Meet zeichnet sich auch dadurch aus, dass für seine Verwendung kein Benutzerkonto erforderlich ist. Es kann also auch anonym verwendet werden. Videoanrufe werden mit einer Ende-zu-Ende Verschlüsselung gesichert. Für Kommunikation von ganzen Gruppen wird die Verschlüsselung zwar auch eingesetzt, die Daten werden in der Jitsi Videobridge jedoch für die Verteilung entschlüsselt. Die Firma 8×8 betont jedoch, dass das nur aus technischen Gründen notwendig ist und die Videosignale unter keinen Umständen gespeichert werden.

Zu weiteren von Jitsi Meet gebotenen Funktionen gehören die Folgenden.

Moderatoren können nur bestimmte Teilnehmer zulassen, die sich mit Passwort legitimieren müssen.

Während der Videoübertragung können die Clients mittels einer Chat-Funktion Textnachrichten austauschen.

Der Bildschirm kann zwischen Teilnehmern geteilt werden. Teilnehmer sehen dann den Bildschirm eines bestimmten Clients in der Videoübertragung. Das ist besonders für Präsentationen von Vorteil und entspricht Standardfunktionen bei anderen Anbietern von Videokonferenzsoftware.

Für noch intensivere Zusammenarbeit können verschiedene Teilnehmer einer Videokonferenz gemeinsam ein Dokument bearbeiten. Um die ausgetauschten Informationen nicht zu verlieren, lässt sich eine Konferenz auch aufnehmen.

Jitsi Desktop

Wie der Name vermuten lässt, muss diese Software auf dem Computer eines Clients installiert werden. Jitsi Desktop bietet Kommunikation in Bild und Ton, die verschlüsselt wird. Ein Teilnehmer kann seinen Bildschirmdurch einen anderen freigeben. Jitsi Desktop wird nicht mehr von der Firma 8×8 betreut, aber von einer Gemeinschaft von Entwicklern weitergeführt.

Anwendungen von Jitsi

Schon vor der Covid-Krise hat sich ein Interesse an neuen Formen des Arbeitens eingestellt. Die Notwendigkeit der Bewältigung der Krise hat der Verwendung von Videokonferenzsoftware einen beträchtlichen Schub verschafft.

Wenn Reisen aus welchen Gründen auch immer nicht möglich oder nicht effizient sind, lassen sich die entsprechenden Kontakte oft genug durch die Übertragung eines Videosignals ersetzen. Es ist zu erwarten, dass diese Möglichkeiten auch nach dem Ende der Pandemie weiter wesentlich intensiver als bisher genutzt werden. Viele Unternehmen hatten gerade durch die vorhandene Notwendigkeit auch die Chance, notwendige von überflüssigen Reisen unterscheiden zu lernen. Diese Unterscheidung wird auch in Zukunft eine wesentliche Rolle spielen.

Noch größer sind die Umwälzungen im Bildungsbereich. Mit geschlossenen Schulen und anderen Einrichtungen hat sich Lernen per Video eingebürgert. Das persönliche Treffen von Schülern und Studenten ist nicht ganz verzichtbar. Es kann aber sinnvoll durch Aktivitäten online ergänzt werden. Jitsi empfiehlt sich schon durch seine freie Verfügbarkeit für diesen Zweck.

Bei Trello handelt es sich um ein kostengünstiges Online-Tool, das in erster Linie für das Projektmanagement sowie die Arbeit in Teams zum Einsatz kommt. Außerdem lassen sich Online-Kanban-Boards durch den Einsatz des Tools schnell und einfach erstellen, was häufig im Rahmen von agilen Teams verwendet wird. Wie Trello genau funktioniert, welche Möglichkeit in der Zusammenarbeit im Unternehmen bietet und welche Vorteile es bietet, lesen Sie in diesem Artikel.

Anforderungen an verteilte Teams

Auch wenn aufgrund der aktuellen Pandemielage viele Ihrer Mitarbeiter aus dem Home-Office tätig sind, müssen dennoch alle für ihren Projektbeitrag mit den relevanten Informationen versorgt werden. Dieses Problem wurde in der Vergangenheit oft durch das Versenden von E-Mails gelöst. Die Kommunikation per E-Mail stellt jedoch nur eine grobe Steuerung des Informationsflusses bereit. Viele Mitarbeiter werden so mit ablenkenden und redundanten Informationen versorgt, die sie von ihrer Arbeit ablenken und die Produktivität äußerst negativ beeinflussen.

Der Begriff New Work im Kontext der modernen Arbeitswelt

Mit dem Begriff New Work wird die Umsetzung flexibler und dynamischer Arbeitsmodelle bezeichnet. Durch den Einsatz moderner Informationstechnologien werden neue Möglichkeiten eröffnet, um den Arbeitsstil mit wesentlich mehr Wahlmöglichkeiten zu gestalten. Wenn dieses Modell erfolgreich implementiert wird, sind die direkten Folgen eine bessere Effizienz und eine höhere Motivation bei den Mitarbeitern. Diese innovativen Arbeitsmodelle werden durch den Einsatz moderner Technologien und Tools, wie beispielsweise Remote Desktop oder Trello unterstützt.

Was ist Trello?

Bei Trello handelt es sich um eine webbasierte Projektmanagement-Software, mit der Sie in Eigenregie oder im Team diverse Aufgaben erstellen, verwalten und steuern können. Das Tool wurde im Jahr 2011 erstmals in einer Betaversion der breiten Öffentlichkeit zur Verfügung gestellt. Die Basis für alle Aktivitäten stellt das Trello-Board dar. Auf diesem können Sie mit Karten und Listen arbeiten. In der Basisversion von Trello ist die Software völlig kostenlos. Falls Sie jedoch zusätzliche Funktionalitäten benötigen, wie beispielsweise eine erweiterte Kalenderfunktion, dann müssen Sie dafür bezahlen. Die Premiumversion mit kostenpflichtigen Features ist für circa 10 Euro pro Monat und Benutzer erhältlich.

Was ist das sogenannte Trello-Board?

Dia Arbeitsweise des Projektmanagement-Tools Trello orientiert sich stark an dem eines Kanban-Boards, ist jedoch rein online umgesetzt. Wie bei Kanban und Wrike, einem weiteren bekannten Online-Tool für die Arbeit in Gruppen, kommt der Visualisierung eine entscheidende Rolle zu. Die Teammitglieder können anhand der Karten eines Boards den gesamten Workflow eines Projekts nachverfolgen und die einzelnen Schritte sind jederzeit für alle Teammitglieder ersichtlich. Dasselbe Trello-Board können alle Teammitglieder standortunabhängig voneinander gemeinsam nutzen und schnell und wirkungsvoll die einzelnen Projektschritte umsetzen.

Welche Vorteile bietet das Tool Trello?

Der Einsatz von Trello bringt eine Vielzahl unterschiedlicher Vorteile mit sich, die eine effizientere und zielgerichtet Teamarbeit begünstigen:

– Visuelle Elemente: Das Tool ist dank seiner Karten, Boards und Listen sehr gut strukturiert und sieht auch gut aus. Insbesondere Menschen, die visuell veranlagt sind, werden sich an der Arbeit mit Trello erfreuen.

– Intuitives Bedienkonzept: Das Tool überzeugt mit einem sehr intuitiven Bedienkonzept. Sie benötigen keine umfangreichen Schulungen und Kurse um mit der Projektmanagement-Software arbeiten zu können.

– Hohe Flexibilität: Mit Trello lässt sich eine Vielzahl verschiedener Projekte organisieren und verwalten. Das Tool gibt keinen festen Plan vor, sondern Sie als Projektleiter haben die Möglichkeit, wie Sie Ihr Projekt mit Trello strukturieren möchten.

Bytecode ist ein Begriff aus dem Informatikbereich und wird im Zusammenhang mit einer virtuellen Maschine genutzt. Dieser spezielle Code stellt eine Befehlssammlung für die virtuelle Maschine dar. Nicht bei allen Quelltext-Kompilierungen wird ein Maschinencode erstellt. Für bestimmte Umgebungen und bei bestimmten Programmiersprachen wird ein Zwischencode benötigt. Der Zwischencode wird als Bytecode bezeichnet. Ein Beispiel für eine Programmiersprache, die einen solchen Code erstellt ist Java. Der Code entsteht nicht von realer Hardware abhängig, sondern wird durch eine semantische Quelltextanalyse erstellt. Während der Quelltext im Original schwer interpretierbar und lang sein kann, ist ein Bytecode im Vergleich kompakt. Des Weiteren kann der Code effizient interpretiert werden.

Programmiersprache und Quelltext

Programmiersprache ist ein Begriff, den viele Menschen kennen, aber nur wenige Menschen haben eine Vorstellung davon, was eine Programmiersprache bedeutet. Algorithmen und Datenstrukturen, auch als Rechenvorschriften bezeichnet, müssen formuliert werden, damit ein PC diese ausführen kann. Eine solche formale Sprache wird als Programmiersprache bezeichnet. Die Rechenvorschriften werden in schrittweise Anweisungen verpackt. Die entstehenden Muster (Textmuster) werden als Syntax bezeichnet. Die Programmiersprachen werden heutzutage mehr problemorientiert eingesetzt und nutzen, im Falle der höheren Programmiersprachen, maschinenunabhängige Ausdrucksweisen. Programme, die mit höheren Programmiersprachen geschrieben wurden, können automatisch in Maschinensprache umgewandelt werden. Über die Maschinensprache können die Programme ausgeführt werden. Der verwendete Programmcode wird auch als Quellcode oder Quelltext bezeichnet. Der Quelltext ist der lesbare Text des Programms, der in einer bestimmten Programmiersprache geschrieben ist. In der heutigen Zeit werden visuelle Programmiersprachen verwendet. Durch visuelle Programmierbaren kann das Programmieren erleichtert und der Zugang auch für Einsteiger in Programmiersprachen interessant gestaltet werden.

JVM – Java Virtual Machine

Java ist die Bezeichnung für eine Laufzeitumgebung und eine Programmiersprache. Eine sogenannte Laufzeitumgebung dient dazu, kompakte Programme zu erstellen, die auf nahezu jedem Betriebssystem laufen. Java kann daher nicht nur auf PCs genutzt werden, sondern wird auch bei Smart-TVs, Tablet-PCs, Smartphones und Servern eingesetzt. Auch Spielekonsolen verwenden Java.

JVM ist die Abkürzung für die virtuelle Maschine von Java, die Bytecode einsetzt. Der Bytecode wird in eine Maschinensprache übersetzt (Just-in-time-Kompilierung), die der jeweilige Prozessor eines Systems als Maschinencode-Routinen ausführt. Das Ergebnis der Just-in-time-Kompilierung wird auch als Kompilat bezeichnet. Das Kompilat benötigt, um ausgeführt werden zu können eine virtuelle Maschine (JVM) auf dem ausführenden Rechner.

Bytecode und virtuelle Maschine

Durch einen Bytecode können mehrere Programmiersprachen für dieselbe virtuelle Maschine verwendet werden. Die Java Virtual Machine kann beispielsweise auch für Groovy, Java und Scala eingesetzt werden. Es können auch andere Programmiersprachen genutzt werden. Würde der Compiler eine direkte Übersetzung wagen und so einen Maschinencode für verschiedene Betriebssysteme bereitstellen, dann würde ein hoher Aufwand entstehen. Der Aufwand kann durch den Bytecode-Compiler reduziert werden, denn JVM und Kompilat laufen auf mehreren Architekturen und Betriebssystemen.

JVM und Bytecode – gibt es Nachteile?

Wird ein Bytecode von Ihnen genutzt, dann kann die Startzeit des Programms, das die virtuelle Maschine darstellt, negativ beeinflusst werden. Die Beeinflussung der Startzeit wird aber nicht so beeinträchtigt, dass der Nutzer es wahrnimmt. Während Startzeiten kaum reduziert werden, können Ausführungszeiten durch JIT-Compiler positiv beeinflusst werden. JIT-Compiler werden auch Just-in-time-Compiler genannt und sorgen dafür, dass Bytecode-Fragmente in Maschinencode-Fragmente übersetzt werden. Diese Übersetzung findet während der Programmausführung statt und kann die Ausführungszeit reduzieren.

Compiler und Decompiler

Compiler werden auch als Kompilierer bezeichnet. „Compile“ bedeutet „zusammentragen“. Ein Kompilierer trägt Quellcodes zusammen, die in eine definierte Form übersetzt werden. Die Quellcodes sind in einer bestimmten Programmiersprache geschrieben, die dann in eine von der jeweiligen Computerplattform ausführbare Variante übersetzt und direkt ausgeführt werden kann.

Der Decompiler wird auch Dekompilierer genannt und besitzt zudem die Bezeichnung Reverse Engineering Compiler oder Reverse Compiler. Es handelt sich dabei um ein Computerprogramm. Dieses Computerprogramm kann einen Maschinencode wieder in einen Quelltext umwandeln. Der Decompiler ist in der Lage, den Compiler-Vorgang umzukehren.

Dissassembler und Dekompilierer sind nicht dasselbe. Die sogenannte Assemblersprache wird auch als alternative Darstellungsform eines Maschinencodes bezeichnet. Normalerweise kann die Compilierung nicht umgekehrt werden, Dekompilierer übersetzen den Code quasi wieder in eine Version des Quelltexts, die Ähnlichkeit mit dem Ursprungsquelltext haben kann. Bestimmte Fragmente, wie beispielsweise Kommentare sowie die ursprüngliche Formatierung gehen bei der Dekompilierung verloren. Sogenannte Debuginformationen können allerdings nach der Dekompilierung wieder auftauchen. So können beispielsweise Module, Variablennamen und Funktionsnamen wiedergeholt werden.

Bytecode und Dekompilierung

Bytecode kann dekompiliert werden. Programme wie .NET und Java ermöglichen eine unkomplizierte Dekompilierung, während die Dekompilierung von Maschinencode in der Regel komplizierter ist. Bei der Dekompilierung bleiben Namen von öffentlichen Bezeichnern und Typinformationen erhalten. Dennoch ist der Programmcode nach der Dekompilierung der ursprünglichen Quelldatei nur ähnlich.

Die Abkürzung API ist englischen Ursprungs und steht für Application Programming Interface. API bezeichnet eine Programmierschnittstelle, deren Anbindung auf Source-Code-Ebene realisiert wird. Programmierschnittstellen kommen in einer Vielzahl unterschiedlicher Anwendungen zum Einsatz und werden im Bereich der Webentwicklung häufig in Form von Web-APIs eingesetzt.

Was genau ist eine Programmierschnittstelle?

Eine API wird in der Regel eingesetzt, um Daten zwischen einem zentralen Computer-Programm und einzelnen Anwendungsteilen einheitlich und standardkonform auszutauschen. Der Austausch der Informationen und Befehle wird einheitlich nach einer zuvor definierten Struktur und strikten Syntax vollzogen. Eine Programmierschnittstelle bietet Entwicklern die Möglichkeit, ein Computer-Programm zu modularisieren und dadurch sowohl Entwicklung als auch Verwaltung der Anwendung wesentlich zu vereinfachen. Die einzelnen Programmteile, die über eine API miteinander verbunden sind, stellen bestimmte Funktionalitäten bereit und sind von dem Rest der Anwendung klar getrennt.

Die gesamte Kommunikation zwischen den einzelnen Anwendungsmodulen wird ausschließlich über die genau spezifizierte Programmierschnittstelle vollzogen. Wenn Entwickler eine API bereitstellen, erfolgt das in vielen Fällen in Kombination mit einer detaillierten Dokumentation der genauen Syntax, der bereitgestellten Funktionen und Features und der möglichen Argumente. Moderne APIs kommen in einer Vielzahl unterschiedlicher Bereiche zum Einsatz. So kann beispielsweise über ein Application Programming Interface auf einzelne Hardwarekomponenten, eine bestimmte Datenbank, Betriebssystembefehle, Benutzeroberflächen und viele weitere Komponenten zugegriffen werden.

Das Application Programming Interface ist von einem User Interface (Benutzeroberfläche) zu unterscheiden. Während ein User Interface in erster Linie als Schnittstelle zwischen der Anwendung und dem Anwender fungiert, kann eine API als Äquivalent zur maschinenverständlichen und automatisierten Kommunikation betrachtet werden. Die Benutzerschnittstelle nimmt dabei die Daten von Anwendern entgegen, leitet diese an die richtige Anlaufstelle im Rahmen der Anwendung weiter und stellt die Ergebnisse dem Benutzer bereit.

Eine API hingegen hat keine Interaktion mit dem Benutzer, sondern ist in erster Linie für die Verarbeitung der von einem Anwendungsmodul entgegengenommenen Daten verantwortlich.

Welche API-Typen gibt es?

Application Programming Interfaces gibt es in unterschiedlichen Variationen, die jeweils auf die speziellen Anforderungen und Bedürfnisse des jeweiligen Einsatzszenarios angepasst sind. Moderne APIs lassen sich prinzipiell in vier verschiedene API-Klassen einteilen, und zwar:

– objektorientierte APIs

– dateiorientierte APIs

– protokollorientierte APIs

– funktionsorientierte APIs

Während dateiorientierte Programmierschnittstellen primär durch den Einsatz verschiedener Dateisystemaufrufe einzelne Dateien und Dateisysteme ansprechen, verwenden funktionsorientierte APIs in erster Linie Funktionen und deren Parameter zur Kommunikation. Objektorientierte APIs arbeiten in Kombination mit sogenannten „Schnittstellenanzeiger“ und bieten im Vergleich zu den rein funktionsorientierten Programmierschnittstellen eine höhere Flexibilität. Das wesentliche Charakteristikum von protokollorientierten Schnittstellen spiegelt sich in ihrer Unabhängigkeit von bestimmten Betriebssystemen und Hardwarekonfigurationen wider.

Welche Vorteile bietet der Einsatz einer API?

Der konsequente Einsatz von APIs bringt eine Reihe unterschiedlicher Vorteile mit sich. Sehr umfangreiche und komplexe Software-Projekte lassen sich durch die Verwendung von Programmierschnittstellen modularisieren und besser strukturieren, sodass die Entwicklung und Wartung des Software-Produkts wesentlich vereinfacht wird. Einzelne Funktionalitäten und Features lassen sich als Programmmodule realisieren, was zu einer sauberen und übersichtlichen Gesamtstruktur führt. Darüber hinaus macht der Einsatz des modularen Programmcodes in Kombination mit den Programmierschnittstellen die Anwendung weniger Anfällig für Fehler und Bugs, die sich später nur mit großer Mühe beheben lassen. Werden einzelne Funktionen nicht korrekt ausgeführt, dann müssen lediglich die betroffenen Module näher inspiziert werden.

Ein weiterer wesentlicher Vorteil einer gut dokumentierten und sauber programmierten API gegenüber Apps ohne Programmierschnittstelle ist die Auslagerung von Entwicklungsarbeiten. So kann die Entwicklung bestimmter Komponenten mit relativ geringem Aufwand an eine externe Software-Schmiede oder einen Freelance-Entwickler outgesourced werden. Außerdem können externe Entwickler selbst Funktionalitäten für die Anwendung implementieren. Dies wirkt sich  positiv auf die Flexibilität und Attraktivität des Software-Projektes aus, was  klare Wettbewerbsvorteile mit sich bringt. Ein Pluspunkt, der für den Einsatz von APIs spricht, spiegelt sich in der Langzeitstabilität des Software-Produkts wider. Entwickler können den Programmcode anpassen, ohne dass Programmmodule betroffen sind. Funktionalitäten lassen sich dadurch relativ einfach implementieren bei einer gleichzeitigen Senkung der Kosten und des Arbeitsaufwandes.

Welche APIs sind besonders beliebt?

Programmierschnittstellen kommen heutzutage in vielen unterschiedlichen Bereichen moderner Software-Entwicklung zum Einsatz. Im World Wide Web sind beispielsweise viele öffentliche Web-APIs vorzufinden, mit denen sich Angebote bekannter Online-Services, wie beispielsweise Spotify oder YouTube, in eigene Anwendungen einbinden lassen. Beispielsweise sind APIs zu folgenden Web-Services verfügbar:

– DHL

– PayPal

– YouTube

– TikTok

– Twitter

– Spotify

– Google Maps

– Twitch

– Instagram

Im Bereich der Webentwicklung kommen Programmierschnittstellen oft bei Content-Management-Systemen und Web-Shops zum Einsatz. Dadurch lassen sich verschiedene Online-Börsen, Bewertungssysteme, Bezahldienste und Versanddienstleister sowie viele weitere Web-Services mit relativ wenig Aufwand in die eigene Plattform integrieren. Einen besonderen Typ von Web-Schnittstellen stellen APIs zur Authentisierung und Autorisierung im World Wide Web dar. Standardisierte APIs wie OAuth (Open Authorization) oder OpenID bieten Usern die Möglichkeit, sich auf anderen Portalen einzuloggen, ohne vorher explizit ein Benutzerkonto anlegen zu müssen. So ist zum Beispiel eine einzige Benutzeridentität durch den Einsatz dieser APIs auf vielen verschiedenen Portalen und Web-Services nutzbar.

Der Begriff Continuous Delivery (CD) ist englischen Ursprungs und bedeutet in die deutsche Sprache übersetzt so viel wie „fortwährende Lieferung“. Bei Continuous Delivery handelt es sich um ein Konzept aus dem Bereich der Softwareentwicklung, das sich in den letzten Jahren einer enormen Beliebtheit erfreut. Im folgenden Artikel gehen wir auf das Thema Continuous Delivery im Detail ein und beleuchten die speziellen Eigenschaften sowie die Vor- und Nachteile dieser innovativen Methode von allen Seiten.

Definition

Bei Continuous Delivery handelt es sich um ein Modell, das in der modernen Softwareentwicklung in Kombination mit DevOps immer beliebter wird und sich allmählich als Standard in der Softwarebranche etabliert. CD wird in der Softwareentwicklung eingesetzt, um Entwicklung, Bereitstellung, Feedback und Qualitätsmanagement in regelmäßigen kurzen Abständen ununterbrochen und parallel laufen zu lassen. Durch den Einsatz moderner CD-Methoden wird der gesamte Prozess der Entwicklung positiv beeinflusst und viel effizienter umgesetzt. So bekommt der Kunde beispielsweise das Produkt früher ausgeliefert, obwohl dieses noch nicht ganz fertig ist. Entwickler werden im Rahmen von Continuous Delivery kontinuierlich mit Feedback durch flächendeckende Tests versorgt, die nach jeder Änderung am Quellcode automatisch durchgeführt werden. CD beschreibt also einen dynamischen Prozess, der sämtliche Prozesse der Softwareentwicklung miteinander vereint und automatisiert. Dadurch lassen sich aufwendige und schwerfällige Arbeitsschritte minimieren. Continuous Delivery kommt in vielen bekannten Unternehmen zum Einsatz, wie beispielsweise Microsoft, Google und Red Hat.

Prinzipien und Praktiken der Continuous Delivery

Im Rahmen traditioneller Vorgehensweisen in der Softwareentwicklung wird das Endprodukt erst dann dem Kunden übergeben, wenn alle notwendigen Funktionen und Features implementiert sind, es ohne Probleme läuft und im Rahmen der Qualitätssicherung keine größeren Mängel gefunden wurden. Das Softwareprodukt wird dann anschließend von dem Entwickler mit regelmäßigen Patches und Aktualisierungen versorgt. Entwicklerteams, die auf moderne CD-Prozesse setzen, können die Software in einem viel früheren Entwicklungsstadium an den Kunden ausliefern, während das Produkt noch aktiv weiterentwickelt wird. Die ersten Versionen des Softwareprodukts enthalten in der Regel nur die Kernfunktionalitäten, die der Kunde in realer Umgebung testen kann. Der Kunde selbst nimmt keinen relevanten Platz im Rahmen der Qualitätssicherung ein.

Die auf diese Weise gewonnene Resonanz hilft dem Entwicklerteam, noch während der Entwicklungsphase vorhandene Funktionalitäten zu optimieren. Außerdem bekommt das zuständige Team wichtige Hinweise darüber, welche Funktionalität als nächstes implementiert werden sollte. Ohne Continuous Delivery sind diese einzelnen Schritte äußerst schwer zu implementieren und können sehr schnell zu Frust auf beiden Seiten führen. Der Kunde erwartet schließlich ein fertiges und funktionales Softwareprodukt, das seinen individuellen Wünschen und Anforderungen entspricht. Das Entwicklerteam weiß jedoch bis dahin überhaupt nicht, welche Anforderungen das überhaupt sind. Wenn die Kommunikation über den gesamten Entwicklungsprozess stattfindet, dann können Wünsche des Kunden viel schneller und präziser berücksichtigt und Unklarheiten vermieden werden.

Welche Vorteile bietet Continuous Delivery?

Continuous Delivery bringt mit anderen Methoden der modernen Softwareentwicklung, wie beispielsweise Continuous Integration und Continuos Deployment eine Vielzahl verschiedener Vorteile.

Automatisierung von Software-Einführungsprozessen: Durch den Einsatz der Continuous Delivery können Entwicklerteams Änderungen an der Codebasis automatisch erstellen und testen lassen sowie für die Produktionseinführung vorbereiten. Dadurch wird der Prozess der Software-Bereitstellung wesentlich schneller und effizienter gestaltet.

Steigerung der Entwicklerproduktivität: CI-Prinzipien und Praktiken steigern die Produktivität der Entwicklerteams, da sich Entwickler nicht mehr um manuelle Aufgaben kümmern müssen. Sie können sich stattdessen voll und ganz auf die Entwicklung, Bereitstellung und Optimierung des Produktes konzentrieren.

Bugs werden schneller entdeckt und behoben: Entwicklerteams sind in der Lage, Fehler (Bugs) im Softwareprodukt zu entdecken und zu beheben, noch bevor sie sich zu größeren Problemen entwickeln. Die Beseitigung von Bugs nimmt später nicht selten viel Zeit und Arbeitsstunden in Anspruch. Da der gesamte Entwicklungsprozess im Rahmen der Continuous Delivery automatisiert ist, können zusätzliche Tests der Codebasis schnell und einfach durchgeführt werden.

Schnellere Bereitstellung von Patches und Updates: Dank der CI-Praktiken können Entwicklerteams Updates und Patches für Kunden viel regelmäßiger und schneller bereitstellen.

Continuous Delivery Phasen

Bei jeder Änderung an der Codebasis wird die sogenannte „Continuous Delivery Pipeline“ gestartet und der Testprozess ausgeführt. Die Continuous Delivery Pipeline setzt sich dabei aus folgenden Phasen zusammen:

  1. Commit Stage: Die Commit Stage ist die erste Testphase. Hier werden die Software-Versionen validiert, die benötigten Software-Komponenten gebaut und notwendige Unit-Tests realisiert. Nachdem die Tests erfolgreich durchgeführt wurden, ist diese Phase abgeschlossen.
  2. Acceptance Test Stage: In der zweiten Testphase werden Akzeptanztests durchgeführt. Akzeptanztests setzen sich aus Systemtests (Wie gut funktioniert das Softwareprodukt auf der Seite des Nutzers) und Integrationstests (Wie ist das Zusammenspiel der einzelnen Softwarekomponenten) zusammen.
  3. Feedback und Fehlerbehebung: In dieser Phase werden auftretende Fehler protokolliert und als Feedback an das zuständige Entwicklerteam geschickt. Das kann beispielsweise über Messaging-Programme, E-Mail oder dedizierte Tools realisiert werden.
  4. Manuelle Prüfung: Je nach Bedarf werden in dieser Phase manuelle Tests realisiert.
  5. Installation auf dem Zielsystem: Sollten alle Tests mit positivem Feedback abgeschlossen sein, dann wird in dem letzten Schritt das Softwareprodukt auf dem Zielsystem manuell installiert. Um dies zu erledigen sind meist nur wenige Mausklicks notwendig. Wenn auch diese Phase automatisiert ist, dann spricht man von Continuous Deployment.

Softwareprodukte werden heutzutage in der Regel in Teams entwickelt, die ihre Arbeitsergebnisse in einer zentralen Build-Umgebung zu einer Einheit zusammenführen müssen. Der Continuous Integration-Ansatz (CI) sorgt dafür, dass neue Softwarekomponenten sofort flächendeckenden Tests unterzogen und danach zusammengeführt werden. Anstatt dies beispielsweise nur einmal täglich zu machen, werden im Rahmen des CI-Ansatzes neue Software-Builds erstellt, sobald eine Komponente für die Integration zugelassen wurde.

Softwareentwicklung und Kompilierung: ein Blick in die Vergangenheit

Eine Softwareanwendung setzt sich in der Regel aus einer Vielzahl einzelner Module zusammen. Dementsprechend ist die Vorgehensweise bei der Softwareentwicklung an diese speziellen Gegebenheiten angepasst, sodass das Gesamtprojekt häufig analog zu diesen Modulen von mehreren einzelnen Teams parallel entwickelt wird. Früher wurden Änderungen und Erweiterungen an dem Softwareprodukt in vielen Fällen in Form eines „Tagewerks“ realisiert. Konkret bedeutet das, dass die Zusammenführung der Änderungen, die von den isolierten Entwicklerteams innerhalb eines Arbeitstages erschaffen wurden, nur einmal täglich im Rahmen einer Kompilierung auf dem zentralen Build-Server konsolidiert wurden.

Erst danach wurden die neuen Funktionen und Features des Softwareprodukts im Kontext der erweiterten Codebasis getestet. Dieser traditionelle Ansatz der Softwareentwicklung birgt enorme Gefahren und Risiken. Falls ein neu geschaffener Code nicht kontinuierlich integriert und flächendeckenden Tests unterzogen wird, werden eventuelle Fehler im Code zu spät erkannt. Die Folgen sind zeitintensive und kostspielige Rückkopplungsprozesse. Vor der Einführung der Continuous Integration mussten einzelne Teams auf die Fertigstellung anderer benötigter Softwarekomponenten anderer Entwicklerteams warten, was sich auf die Effizienz des gesamten Projekts äußerst negativ auswirkt.

Continuous Integration im Überblick

Die Continuous Integration-Methoden, die in innovativen Unternehmen in Kombination mit DevOps zum Einsatz kommen, beziehen sich auf die kontinuierliche Integration einzelner Softwarekomponenten in die Gesamtcode-Basis (Codebase) des Softwareprojekts. Die wesentlichen Vorteile dieser Arbeitsweise spiegeln sich in den überschaubaren Schritten wider, die einen kontinuierlichen Arbeitsfluss fördern und die Möglichkeit bieten, Fehler in der Programmierung frühzeitig zu erkennen und zu beseitigen. Durch die gesteigerte Arbeitseffizienz ergibt sich eine höhere Softwarequalität. Die Arbeitsweise im Rahmen des Continuous Integration-Ansatzes unterscheiden sich stark, von der im obigen Absatz beschriebenen traditionellen Vorgehensweise. In Unternehmen, bei denen die kontinuierliche Integration zum Einsatz kommt, wird eine hohe Flexibilität gefordert.

Konkret bedeutet das, dass die in den kleineren Schritten vorgenommenen Änderungen oder Erweiterungen an dem Softwareprodukt in regelmäßigen Abständen zusammengeführt und getestet werden. Die Einspeisung wird über ein Versionsverwaltungssystem wie beispielsweise GitHub oder Bitbucket in einem unterteilten Code-Repository realisiert. Auf diesem Wege lassen sich Versionskontrollen durchführen, indem Build-Prozesse automatisiert werden, sodass stets die aktuelle Code-Version aus dem Repository übernommen wird.

Vor- und Nachteile von Continuous Integration

Obwohl der Continuous Integration-Ansatz zahlreiche Vorteile mit sich bringt, zeigt sich im Alltag auch, dass CI nicht nur Vorteile hat. Dass die langwierige Integrationsphase am Ende eines Softwareprojekts abgekürzt werden kann, lässt sich nicht beschreiten. Auftauchende Probleme können frühzeitig beseitigt werden. Für eingespielte Teams ist die Umstellung auf Continuous Integration jedoch oft mit Komplikationen verbunden. Anstatt dann effizienter zu arbeiten, kann das Verfahren sogar mehr Zeit in Anspruch nehmen.

Vorteile:

– kontinuierliches Feedback

– Fehler lassen sich frühzeitig identifizieren

– eine granulare Arbeitsweise wird gefördert

aktuelle und funktionsfähige Versionen sind stets verfügbar

– alle Änderungen werden im Detail protokolliert

Nachteile:

– es müssen flächendeckende Test-Abläufe entwickelt und implementiert werden

– Umstellung von einem gewohnten Arbeitsprozess

– es werden zusätzliche Server und Entwicklungsumgebungen benötigt

Welche Tools kommen bei Continuous Integration zum Einsatz?

Der Continuous Integration-Ansatz lässt sich grundsätzlich ohne spezielle Tools umsetzen. Das ist jedoch oft mit viel Aufwand verbunden und erfordert einiges an Disziplin. Aus diesem Grund ist es viel einfacher, sich die Arbeit mit den richtigen Tools zu erleichtern. Diese helfen meist bei der Versionskontrolle und beim Kompilieren und Erstellen von Builds. Die bekanntesten CI-Werkzeuge sind:

Jenkins: Hierbei handelt es sich um ein bekanntes Java-Programm, das im Rahmen moderner Continuous Integration und Continuous Delivery-Prozesse eingesetzt wird.

Travis CI: Dieses Tools ist insbesondere wegen seiner reibungslosen Integration mit GitHub beliebt. Für Open Source-Projekte ist es kostenlos, für kommerzielle Softwareprojekte muss eine offizielle Lizenz gekauft werden.

Bamboo: Auch hier handelt es sich um ein Tool, das in der Programmiersprache Java erstellt ist. Wie Travis CI ist es für kommerzielle Projekte normalerweise kostenpflichtig, während es für Open Source-Projekte kostenlos genutzt werden kann.

CodeShip: Dieses Tool basiert auf der Container-Technologie, die von IT-Größen wie Google, Microsoft und Red Hat aktiv weiterentwickelt wird und aus der modernen Softwareentwicklung nicht mehr wegzudenken ist.

Einsatzgebiete

Continuous Integration ist insbesondere im Umfeld agiler Softwareentwicklung in Kombination mit DevOps sehr beliebt. Dieser moderne Ansatz hat immer zum Ziel, in kleinen, übersichtlichen Schritten zu arbeiten. Heutzutage gibt es keine Rechtfertigung, ein Softwareprojekt ohne einen Continuous Integration-Ansatz zu betreiben. Dies liegt vor allem an dem Erfahrungsschatz sowie der großen Anzahl an verfügbaren Tools. CI kann sein volles Potenzial jedoch erst dann entfalten, wenn alle Team-Mitglieder optimal in alle Prozesse eingebunden werden und das System mittragen. Aus diesem Grund kommt einer reibungslosen Kommunikation eine sehr wichtige Rolle zu.