Softwarefachleute sind notorisch gut darin, für Dinge des gesunden Menschenverstands coole Namen zu erfinden. „Plattform-Engineering“ ist ein aktuelles Beispiel dafür, bei dem etablierte Prinzipien mit der Innovation cloudnativer Frameworks kombiniert werden.
Im Kern geht es beim Plattform-Engineering darum, die Softwareentwicklung durch die Einführung eines einheitlichen, verwalteten Toolsets zu vereinheitlichen und damit die Grundlage für eine höhere Teamproduktivität zu schaffen. Reifere Branchen wissen das bereits seit Jahrzehnten.
Was ist Plattform-Engineering?
Plattform-Engineering bezeichnet die Praxis, die grundlegende Softwareinfrastruktur und Systeme für Anwendungen und Dienste zu entwerfen, aufzubauen und zu verwalten. Dazu gehören die Verwaltung physischer und cloudbasierter Infrastruktur, die Automatisierung von Prozessen, die Integration verschiedener Tools, die Gewährleistung von Sicherheit und Compliance, die Überwachung der Leistung sowie die Aufrechterhaltung hoher Verfügbarkeit und Notfallwiederherstellung.
Dieser Bereich ist entscheidend für die Gewährleistung robuster, skalierbarer und sicherer technischer Umgebungen, die eine effiziente Entwicklung und Bereitstellung von Anwendungen ermöglichen.
Plattform-Engineering markiert die Entwicklung von isolierten Bemühungen hin zu einem harmonisierten Ökosystem und verbessert dabei sowohl die Entwicklererfahrung als auch die betriebliche Effizienz.
Der Wandel von individueller Exzellenz zu kollektiver Kompetenz
Ein einzelner Entwickler oder „Softwarehandwerker“ kann eine Gruppe anfangs mit seinem individuell zusammengestellten Toolkit übertreffen. Die Anforderungen eines wachsenden Softwareunternehmens geben jedoch schon bald der Kunst der Teamarbeit den Vorrang – Kommunikation, Zusammenarbeit und der strategische Austausch von Tools und Prozessen.
Plattform-Engineering ist eine ausgefeilte Antwort auf diese Herausforderungen der Skalierung. Es umfasst die Zusammenstellung und Verwaltung einer Reihe von Anwendungen und Tools, die als gemeinsame Grundlage dienen und es Entwicklern ermöglichen, durch die Integration und Weiterentwicklung bereits vorhandener Module Innovationen zu schaffen.
Die Aufgabe eines Plattform-Engineering-Teams besteht darin, eine interne Entwicklerplattform (IDP) zu schaffen, die die Grenzen der traditionellen Anwendungs-entwicklung durch die Einbindung von Frameworks wie Kubernetes überwindet und eine Selbstbedienungsumgebung fördert, die Entwickler befähigt.
Das Handwerkerprinzip gilt auch für das Testen: Ein kompetenter, zur Automatisierung fähiger explorativer Tester ist wahrscheinlich die effektivste Qualitätssicherungskraft, die man finden kann. Die Herausforderung liegt jedoch in der Skalierbarkeit. Testautomatisierung existiert häufig in Silos, wobei Einzelpersonen mit Tools wie Selenium auf ihre jeweils eigene Weise Lösungen entwickeln. Der Weggang oder die Beförderung dieser Personen führt oft dazu, dass ihre Nachfolger die bestehenden Systeme vollständig überarbeiten müssen, da sie möglicherweise einen anderen Ansatz bei der Nutzung der Tools verfolgen.
Gemeinsame Testplattformen: Zusammenarbeit fördern
Eine gemeinsame Testplattform würde dagegen eine produktive Zusammenarbeit zwischen professionellen Testern, Geschäftsanwendern und Entwicklern ermöglichen. Eine solche Plattform wie Copado's Robot Testing würde nicht nur den Austausch und die Wiederverwendung von Tests, Daten und Ergebnissen erleichtern, sondern auch die Transparenz bei der Qualitätsbewertung fördern. Mit Infrastruktur als Code (ein weiterer cooler Name für etwas, das dem gesunden Menschenverstand entspricht) lassen sich Testumgebungen effizient in der Cloud bereitstellen und allen Beteiligten bedarfsgesteuerter Zugriff und Transparenz bieten.
Im Zeitalter der Microservices muss die Funktionalität einzelner Komponenten, die von Plattformen wie Docker und Kubernetes orchestriert werden, im Hinblick auf die kognitive Belastung und die Auswirkungen auf die Nutzer genau untersucht werden. Hier kommen die Prinzipien des Site-Zuverlässigkeitsengineerings (SRE) zum Einsatz. Sie stellen sicher, dass Systeme zuverlässig sind und die Betriebsteams mit robusten Alarmierungswerkzeugen wie Puppet sowie Überwachungslösungen ausgestattet sind, um die Beobachtbarkeit aufrechtzuerhalten.
Herausforderungen des Plattform-Engineerings
Trotz seiner offensichtlichen Vorteile ist Plattform-Engineering nicht frei von Herausforderungen. Es erfordert eine sorgfältige Verwaltung und kontinuierliche Weiterentwicklung. Viele erfolgreiche Produktunternehmen haben Schwierigkeiten, eine gemeinsame Plattform für ihre Produkte zu entwickeln, sodass es unrealistisch wäre, von IT-Abteilungen zu erwarten, diese Fähigkeiten von vornherein zu besitzen. Deshalb gewinnen umfassende, übergeordnete Anwendungsplattformen wie Salesforce sowie Entwicklerplattformen wie Git oder Azure DevOps zunehmend an Bedeutung. Dasselbe geschieht bei Testplattformen, allerdings etwas langsamer.
Da Anwendungen durch das Zusammensetzen von Komponenten aus einer gemeinsamen Plattform erstellt werden, sind die Qualität und Robustheit dieser Plattform von entscheidender Bedeutung. Jedes Problem mit der Plattform kann potenziell alle darauf aufbauenden Anwendungen beeinträchtigen. Daher müssen sich Plattform und Anwendungen gleichzeitig weiterentwickeln, wobei die Plattform stets einen Vorsprung behalten muss, um Stabilität zu gewährleisten.
Das Testen der Plattform muss vom Testen der Anwendungen getrennt werden, unabhängig davon, ob Sie in der Produktion testen oder nicht. Ersteres ist tendenziell technischer und konzentriert sich auf Unit-Tests, APIs, Skalierbarkeit und Leistung, während Letzteres eher geschäftsprozessbasiert und naturgemäß ein End-to-End-Test ist.
Qualität über den gesamten Plattformlebenszyklus hinweg sicherstellen
Da Unternehmen cloudnative Ansätze übernehmen, ist die Robustheit ihrer Plattform von größter Bedeutung. Jedes Problem innerhalb der Plattform könnte weitreichende Auswirkungen haben. Deshalb ist eine klare Abgrenzung zwischen Plattformtests und Anwendungstests entscheidend. Diese Trennung ermöglicht einen gezielten Ansatz für Skalierbarkeit und Leistung: Ersterer konzentriert sich auf die technischen Aspekte wie APIs, Letzterer auf die Funktionalität für Endanwender.
Software und Tools für das Plattform-Engineering erklärt
Im Plattform-Engineering verwalten und optimieren verschiedene Softwaretools die Prozesse, die beim Erstellen, Bereitstellen und Warten von Infrastrukturen und Anwendungen anfallen.
Betrachten wir ein Tool wie Postman. Ursprünglich als Nebenprojekt entwickelt, um API-Workflows bei der Entwicklung und beim Testen zu vereinfachen, ist Postman ein hervorragendes Tool für einzelne Tester. Wird es jedoch in einen Workflow für kontinuierliche Integration und kontinuierliche Bereitstellung (CI/CD) integriert, erweitern sich seine Möglichkeiten erheblich und es erfüllt innerhalb einer Cloud-Plattform einen umfassenderen Zweck. Es ermöglicht ein schnelles und unkompliziertes Testen von APIs und liefert dem Benutzer sofortiges Feedback.
Mit zunehmender Größe des Teams werden die Einschränkungen von Postman deutlich. Obwohl es sich hervorragend für manuelle Tests und Erkundungen eignet, stößt es in kollaborativen Umgebungen an seine Grenzen, in denen automatisierte, wiederholbare und skalierbare Tests erforderlich sind. Wenn ein Softwarebetrieb wächst, werden Aspekte wie Kommunikation, gemeinsame Nutzung und Wiederverwendung entscheidend und stellen die Leistung des Einzelnen häufig in den Schatten.
Weitere wichtige Tools für das Plattform-Engineering sind:
- Tools für die Containerisierung
- Docker: Zum Erstellen, Bereitstellen und Ausführen von Anwendungen in Containern.
- Kubernetes: Eine Plattform zur Container-Orchestrierung, die die Bereitstellung, Skalierung und den Betrieb von Anwendungscontainern über Cluster von Hosts hinweg automatisiert.
- Tools für Infrastruktur als Code (IaC):
- Terraform: Wird verwendet, um Infrastrukturen sicher und effizient zu erstellen, zu ändern und zu versionieren.
- Ansible: Ein Open-Source-Tool für die Softwarebereitstellung, das Konfigurationsmanagement und die Bereitstellung von Anwendungen.
- Puppet: Ein weiteres beliebtes Tool für das Konfigurationsmanagement.
- Tools für kontinuierliche Integration und kontinuierliche Bereitstellung (CI/CD):
- Jenkins: Ein Open-Source-Automatisierungsserver, der zur Automatisierung von Teilen der Softwareentwicklung verwendet wird.
- GitLab CI/CD: Bietet eine optimierte Möglichkeit, Phasen des Lebenszyklus der Anwendungsentwicklung zu automatisieren.
- CircleCI: Bietet kontinuierliche Integration und Bereitstellung, damit Entwicklungsteams Code schnell veröffentlichen können.
- Tools für Monitoring und Beobachtbarkeit:
- Prometheus: Ein Open-Source-Monitoringsystem mit einer Zeitreihendatenbank.
- Grafana: Zur Visualisierung und Überwachung von Metriken.
- Elasticsearch, Logstash und Kibana (ELK-Stack): Beliebt für die Protokollierung und Visualisierung von Daten.
- Cloud-Dienstanbieter:
- Amazon Web Services (AWS): Bietet eine große Auswahl an Cloud-Diensten.
- Microsoft Azure: Bietet Cloud-Computing-Dienste.
- Google Cloud Platform (GCP): Bietet eine Sammlung von Cloud-Computing-Diensten.
- Versionskontrollsysteme:
- Git: Ein verteiltes Versionskontrollsystem zur Nachverfolgung von Änderungen am Quellcode.
- GitHub: Eine Plattform zum Hosten und Verwalten von Git-Repositorys.
- Tools für Sicherheit und Compliance:
- HashiCorp Vault: Zur Absicherung, Speicherung und Zugriffskontrolle für Token, Passwörter, Zertifikate, API-Schlüssel und andere Geheimnisse.
- SonarQube: Bewertet die Codequalität und identifiziert Schwachstellen.
- Service-Mesh-Werkzeuge:
- Istio: Eine offene Plattform zum Verbinden, Verwalten und Absichern von Microservices.
- Linkerd: Bietet Beobachtbarkeit, Zuverlässigkeit und Sicherheit für Microservices.
- Frameworks für serverlose Architekturen:
- AWS Lambda: Ermöglicht die Ausführung von Code, ohne Server bereitzustellen oder zu verwalten.
- Serverless Framework: Vereinfacht die Entwicklung von Anwendungen mit serverlosen Architekturen.
- Datenbankverwaltung:
- MongoDB: Eine beliebte NoSQL-Datenbank.
- PostgreSQL: Eine fortschrittliche quelloffene relationale Datenbank.
Das Versprechen des Plattform-Engineerings
Obwohl Plattform-Engineering eine höhere Produktivität von Entwicklern verspricht, ist die Ausschöpfung dieses Potenzials leichter gesagt als getan. Die Plattform muss sorgfältig verwaltet, auf Stabilität getestet werden und darf nicht zum Engpass werden. Dieses ehrgeizige Ziel erfordert eine gemeinsame Anstrengung innerhalb der DevOps-Teams – vom DevOps-Ingenieur bis zum Produktteam. Eine erfolgreiche Implementierung hängt von einer nahtlosen Orchestrierung, der Effizienz der Pipelines und einem Engagement für kontinuierliche Integration und kontinuierliche Bereitstellung ab. Effektive Testverfahren und ein auf Automatisierung ausgerichtetes Werkzeugset sind Voraussetzungen für erfolgreiches Plattform-Engineering.
Interessiert an weiteren Informationen zu KI und Softwaretests? Abonnieren Sie den QA-Lead-Newsletter für die neuesten Entwicklungen.
