bluebay2014 - stock.adobe.com

Automatisches Testen als Teil des Continuous Deployment

Kontinuierliche Tests und Integration sind die Basis für einen kontinuierliche Bereitstellung ohne Probleme. Der Weg dorthin führt über automatisierte Tests.

Der traditionelle Ansatz für Software besteht darin, in regelmäßigen Abständen neue Releases bereitzustellen. Dabei werden die erforderlichen Änderungen zunächst gesammelt und dann einem bestimmten Release für einem späteren Zeitpunkt zugewiesen. Dies hilft Entwicklern, alle Änderungen an den Anwendungen in einer effizienten Form zu organisieren.

Doch das bedeutet auch Verzögerungen. Bei einem weborientierten Geschäftsmodell sind die Fachbereiche jedoch über jede Verzögerung frustriert. Als Folge wurden Entwicklungstechniken entworfen, mit denen die Modernisierung der Software schneller möglich ist.

Unter dem Begriff Continuous Deployment (kontinuierliche Bereitstellung) sind Verfahren und Tools zusammengefasst, mit denen die Entwicklungs- und Operations-Teams (DevOps) die erforderlichen Änderungen in den Anwendungen vornehmen können, ohne dass die Softwareintegrität verloren geht. Im weitesten Sinne ist Continuous Deployment eine Integrationsaufgabe, bei der fortlaufend Änderungen auf Komponentenebene anfallen.

Rapid Development oder Rapid Deployment Tools unterstützen die Entwicklungsteams bei der Softwareentwicklung. Das Ganze ähnelt einem Fließbandprozess, bei dem auch jeweils kleine Erweiterungen einfach in einen kontinuierlichen Produktionsfluss integriert werden.

Theoretisch reagiert damit die Software besser und schneller auf Geschäftsanforderungen. Continuous Deployment kann jedoch auch zu schwerwiegenden Softwarefehlern oder zum vollständigen Systemausfall führen. Wie also testet man Software in einer kontinuierlichen Entwicklungs- und Deployment-Umgebung? Continuous Integration (kontinuierliche Integration, CI) führt zu einem kontinuierlichen Einsatz, bei dem das Testen im Mittelpunkt des Erfolgs steht.

Mit Continuous Testing (kontinuierliche Tests) beginnen

Kontinuierliches Testen ist nicht nur ein Tool – es ist ein Modell. Es erfordert drei Dinge:

  1. Passen Sie zunächst die Änderungen an, die mit bestimmten Anwendungen/Komponenten verbunden sind, um ein gezieltes Testen zu ermöglichen. Das ist nicht trivial: Moderne Anwendungen sind hoch integriert und Updates können von einer Anwendung zur anderen fließen.
  2. Richten Sie eine Test-Pipeline ein, um Änderungen zu sammeln, die sich auf gemeinsame Komponenten für den gesamten Entwicklungs- und Produktionsverlauf auswirken. Organisieren Sie Änderungen, damit Sie keine Änderungen an Komponenten vornehmen, die bereits bei früheren Änderungen aktualisiert wurden.
  3. Die für das Testen verwendeten Verfahren und Daten müssen eine vollständige Bewertung aller Änderung ermöglichen. Dazu gehören auch Regressionstest der betroffenen Komponenten, um sicherzustellen, dass ein Update nicht ein anderes bricht.

Der erste und zweite dieser Punkte sind Teil der kontinuierlichen Integration, der dritte ist das automatisierte Testen.

Bei der kontinuierlichen Integration werden alle Änderungen dynamisch in funktionierende Anwendungen eingefügt, und nicht durch regelmäßige Releases. Somit ist Continuous Integration die Grundlage für ein erfolgreiches Continuous Deployment.

Der Testprozess qualifiziert eine neue Software für den letzten Schritt: Dem Einsatz in einer Produktionsumgebung. Die Tests basieren auf Anwendungsfälle, in denen die funktionalen Änderungen in Bezug auf bestimmte I/O-Beziehungen beschrieben sind. Die Fachabteilung entwickelt die Anwendungsfälle aus den vorgeschlagenen Änderungen mithilfe von Unternehmens- oder Softwarearchitekten, die das Business-zu-Software-Verhältnis der Anwendung kennen.

Spezielle Anwendungsfälle sind eine gute Ausgangslage, um die Tests von individuellen Änderungen zu definieren. Anstatt zu versuchen, einen Testprozess zu automatisieren, bei dem mehrere Änderungen an denselben Komponenten unabhängig voneinander ablaufen, sollten Sie sich auf Trigger verlassen. Komponentenänderungen lösen die Aufnahme von Use Cases aus, die das Testen von Komponenten ermöglichen. Man sollte die Use Cases stetig aktualisieren, um alle Änderungen an dem Punkt abzubilden, an dem ein Trigger einen Übergang in die Testdatenentwicklung und schließlich das Testen einleitet.

Eine erfolgreiche kontinuierliche Integration hängt davon ab, dass das Team spezifische Anwendungsfälle generiert, die bestimmte Änderungen durch kontinuierliche Entwicklung unterstützt und zu Continuous Deployment führt. Es gibt einen Trend in der Softwareentwicklung, anwendungsorientierte Modelle zu bevorzugen. Hierzu stehen zahlreiche Tools und Frameworks für das Managen von Enterprise-Software zur Verfügung, unter anderem die Rational-Produkte von IBM und Unified Method von Oracle, die Use Cases und Testelemente enthalten.

Unter dem Begriff Continuous Deployment sind Verfahren und Tools zusammengefasst, mit denen die DevOps-Teams die erforderlichen Änderungen in den Anwendungen vornehmen können, ohne dass die Softwareintegrität verloren geht.

Verwenden Sie eine umfassende Suite oder ein Testgenerierungswerkzeug, um Anwendungsfälle in eine Testgenerierung umzuwandeln. Die Kernaktivität beim Testen für Continuous Deployment ist die Erstellung und Planung der eigentlichen Tests nicht als diskrete Komponenten, sondern als integrierte Anwendungen. Ein Paket mit dem richtigen Umfang und den richtigen Funktionen sorgt dafür, dass CI und kontinuierliche Bereitstellung funktionieren. Ein beliebtes Werkzeug ist das Open-Source-Automatisierungs-Tool von Jenkins, welches das Blue-Ocean-CI-Element enthält. Travis CI und TeamCity werden ebenfalls für CI-Pipelines eingesetzt.

Für eine umfassende, kontinuierliche Bereitstellung sollten Sie sich auf Tools verlassen, die die Möglichkeit bieten, Testdaten aus der Unified Modeling Language (UML) oder Use Cases zu generieren, das heißt das Tool integriert die Daten unter realistischen Bedingungen in die Anwendung. Es gibt Tools, die sich speziell auf automatisierte Tests der CI-Funktionalität konzentrieren.

Automatisierung einsetzen

Automatisierte Testwerkzeuge unterscheiden sich in Bezug auf das Ausmaß, in dem sie die tatsächliche Nutzung der Anwendungen nachahmen können, im Aktivitätslevel und im Standort der Benutzer. Zum Beispiel werden Lasttests manchmal als Performance-Test bezeichnet, aber der Benutzer muss die spezifischen Eigenschaften des automatisierten Testpakets überprüfen, um festzustellen, ob es tatsächlich die Workloads für echte Performance-Tests erzeugen kann und die verschiedenen Punkte der Datenintegration aus der realen Welt widerspiegelt. Letzteres ist besonders wichtig für Anwendungen mit geografisch verteilten Komponenten, wie zum Beispiel bei Cloud-nativen Designs.

Nicht alle automatisierten Testwerkzeuge überprüfen auch die Testergebnisse. Das gilt insbesondere dann, wenn das Testergebnis Datenbank-Updates statt oder zusätzlich zu den sichtbaren Antworten auf dem Bildschirm beinhaltet. Anwendungen mit ereignis- oder nachrichtengesteuerten Eingaben können schwer darauf zu testen sein, ob die Nachrichtenformate in einem automatisierten Paket zu interpretieren sind. Wenn Sie eine Testergebnisanalyse benötigen, führen Sie einen Pilotversuch durch, um die Fähigkeit des Tools zur Entschlüsselung der Antworten und zur Bestätigung der Testergebnisse ohne manuelle Überprüfung zu validieren.

Jedes Unternehmen wünscht sich eine Software, die auf die Bedürfnisse des Unternehmens eingeht. Continuous Deployment kann dieses Ziel nur erreichen, wenn die Softwarequalität nicht beeinträchtigt wird. Sie können den Geschäftsbetrieb und die Sicherheits- sowie Compliance-Ziele mit geeigneten Testwerkzeugen sicherstellen, die in moderne, schnelle Entwicklungspraktiken integriert sind. Um sicherzustellen, dass die Unternehmensziele erreicht werden, integrieren Sie neue Komponenten, um die resultierenden Versionen effizient und gründlich zu programmieren und zu testen.

Folgen Sie SearchEnterpriseSoftware.de auch auf Twitter, Google+, Xing und Facebook!

Nächste Schritte

Softwareverteilung automatisieren: Continuous Delivery in der Praxis.

Sieben Tipps und Best Practices für effiziente Jenkins-Umgebungen.

Continuous-Integration-Plattform CloudBees Jenkins um AWS-Integration erweitert.

Erfahren Sie mehr über Softwareentwicklung