Zum Inhalt springen

Wie nimmt man unabhängige Frontend-Releases ab?

Eine grüne Einzelpipeline beweist nicht das Gesamtprodukt

Abschnitt betitelt „Eine grüne Einzelpipeline beweist nicht das Gesamtprodukt“
Shell Pipeline ✅
Remote A Pipeline ✅
Remote B Pipeline ✅
Remote C Pipeline ✅
Gesamtprodukt ❌

Dieser Zustand wirkt zunächst widersprüchlich. Jede beteiligte Pipeline ist erfolgreich, und trotzdem lässt sich die zusammengesetzte Anwendung nicht benutzen. Vielleicht kann ein Remote nicht geladen werden. Vielleicht liefert die Shell einen anderen Authentifizierungskontext als erwartet. Vielleicht funktioniert das Mounting, aber beim Unmounting bleibt globaler Zustand zurück. Vielleicht ist das Artefakt korrekt gebaut, aber unter der veröffentlichten Adresse nicht erreichbar.

Die grünen Einzelpipelines sind deshalb nicht wertlos. Sie haben nur jeweils eine begrenzte Aussage getroffen. Die Shell hat ihre Verantwortung geprüft. Die Remotes haben ihre Verantwortung geprüft. Offen blieb die Frage, ob diese Teile in der aktuell ausgelieferten Kombination tatsächlich zusammenarbeiten.

Die naheliegende Gegenreaktion wäre, jede Änderung wieder vollständig im Gesamtsystem abzunehmen. Dann müsste jeder Remote-Release durch eine zentrale Umgebung, eine lange End-to-End-Pipeline und eine gemeinsame Freigabe. Technisch blieben die Artefakte getrennt. Organisatorisch und operativ wäre die Architektur erneut gekoppelt.

Die entscheidende Frage lautet deshalb nicht, ob lokal oder integriert getestet werden soll. Sie lautet:

Welche Verantwortung soll auf welcher Abnahmefläche nachgewiesen werden?

Ein unabhängig veröffentlichbares Remote benötigt eine eigene, realistische Abnahmefläche. Wie umfangreich diese Umgebung sein muss, hängt vom Verantwortungsbereich und vom Risiko des Releases ab. Je nach Testziel kann sie mit Stubs, realen Backends, ephemeren Systemen oder einem eigenständig startbaren fachlichen Schnitt arbeiten. Ein gezielter Smoke Test mit dem für den Release vorgesehenen Shell-Stand verifiziert anschließend die Composition.

Unabhängige Releases brauchen unabhängige Abnahme – aber keine isolierte Selbstgewissheit.

Mehrere erfolgreiche Pipelines für Shell und Remotes stehen einer fehlerhaften zusammengesetzten Anwendung gegenüber. Zwischen den lokalen Prüfergebnissen und dem Gesamtprodukt ist eine zusätzliche Prüfgrenze für die Composition eingezeichnet.

Unabhängige Veröffentlichung braucht unabhängige Abnahme

Abschnitt betitelt „Unabhängige Veröffentlichung braucht unabhängige Abnahme“

Ein Remote ist nicht bereits deshalb unabhängig, weil seine Pipeline ein eigenes Artefakt erzeugt. Das Artefakt kann separat versioniert, gebaut und veröffentlicht werden. Praktisch relevant wird diese Unabhängigkeit jedoch erst, wenn das verantwortliche Team den Release-Kandidaten auch eigenständig bewerten kann.

Dazu muss es den Kandidaten starten, realistisch bedienen, automatisiert testen und fachlich oder visuell abnehmen können. Es muss definierte Abhängigkeiten bereitstellen oder gezielt anbinden können. Vor allem darf die Bewertung nicht grundsätzlich den vollständigen Aufbau des Gesamtprodukts voraussetzen.

Abnahme bezeichnet hier nicht nur eine manuelle Freigabe. Gemeint ist die nachvollziehbare Bewertung des konkreten Release-Kandidaten – durch automatisierte Tests, fachliche Prüfung, visuelle Kontrolle oder eine Kombination daraus.

Ein separates Artefakt ohne eigene Abnahmefläche ist unabhängig auslieferbar, aber nicht unabhängig verifizierbar.

Das bedeutet nicht, dass ein Remote vollständig isoliert betrieben werden muss. Eine unabhängige Abnahmefläche darf ein echtes Backend, einen Identity Provider oder andere gemeinsame Dienste verwenden. Entscheidend ist, dass das Team diese Fläche für den eigenen Release eigenständig bereitstellen oder verlässlich nutzen kann, ohne auf eine zentrale Gesamtfreigabe angewiesen zu sein.

Eine solche Umgebung darf deutlich kleiner sein als das Gesamtprodukt. Sie muss jedoch den Verantwortungsbereich des Releases ausreichend realistisch abbilden. Eine Umgebung, deren Vereinfachungen die relevanten Risiken ausblenden, schafft keine belastbare Unabhängigkeit. Ebenso wenig ist eine vollständige Produktlandschaft automatisch die bessere Testumgebung, wenn nur ein klar begrenztes Remote-Risiko bewertet werden soll.

Für unabhängig veröffentlichte Remotes ist eine klassische Einteilung nach Unit-, Integrations- und End-to-End-Tests allein wenig hilfreich. Wichtiger ist die Reichweite des Risikos, das ein Test abdecken soll.

lokales Implementierungsrisiko
└── Unit- und Komponententests
fachliches Remote-Risiko
└── Abnahme in einer eigenen Remote-Umgebung
Vertragsrisiko
└── Contract Tests und überprüfte Stubs
Composition-Risiko
└── gezielter Smoke Test in der aktuellen Shell
produktweiter Ablauf
└── wenige systemweite End-to-End-Tests

Ein lokaler Validator benötigt keine vollständige Produktshell. Ein fachlicher Ablauf innerhalb eines Produktbereichs sollte nicht erst in einer zentralen Gesamtsystemumgebung nachgewiesen werden. Ein geänderter Plattformvertrag lässt sich nicht zuverlässig durch zusätzliche Komponententests absichern. Und ein korrekt getestetes Remote kann trotzdem an der realen Composition scheitern.

Die Größe eines Tests sollte der Reichweite des Risikos entsprechen.

Damit entsteht keine starre Pyramide, sondern eine Verteilung von Verantwortungen. Je weiter ein Risiko über den eigenen Schnitt hinausreicht, desto stärker muss die Prüfung echte Integrationsgrenzen einbeziehen. Je lokaler das Risiko bleibt, desto weniger sollte seine Abnahme von fremden Systemteilen abhängen.

Der Mini-Host als kleinste realistische Abnahmefläche

Abschnitt betitelt „Der Mini-Host als kleinste realistische Abnahmefläche“

Für viele Remotes ist ein Mini-Host die kleinste brauchbare Abnahmefläche. Er startet das Remote nicht als isolierte Komponentenansammlung, sondern in einem kontrollierten Plattformkontext.

Remote im Mini-Host
├── eigener Einstiegspunkt
├── Routing
├── Theme und Locale
├── definierter AuthContext
├── Plattformadapter
└── API-Stubs oder reale API-Anbindung

Der Mini-Host ist keine Kopie der Produktshell. Würde er Navigation, Layout, globale Zustände, Fachlogik und sämtliche Integrationen der echten Shell nachbauen, entstünde lediglich eine zweite Shell, die dauerhaft synchron gehalten werden müsste. Damit würde die Abnahmefläche selbst zu einer neuen Kopplung.

Seine Aufgabe ist kleiner. Er stellt die Verträge und technischen Voraussetzungen bereit, die das Remote für seine Ausführung benötigt. Dazu können Routing, Theme, Locale, ein definierter Authentifizierungskontext, Plattformadapter und ein kontrollierter Zugriff auf APIs gehören.

In dieser Umgebung lassen sich Navigation innerhalb des Produktbereichs, Loading-, Empty- und Error-States, unterschiedliche UI-Capabilities und responsive Darstellung prüfen. Auch fachliche Use Cases, das Verhalten bei nicht verfügbaren Abhängigkeiten, Mounting und Bereinigung sowie die Bedienbarkeit des echten Release-Kandidaten gehören hierher.

Der Mini-Host simuliert die Plattformgrenze. Er simuliert nicht das gesamte Produkt.

Damit wird die Fachlichkeit nicht von der realen Plattform entkoppelt, sondern gegen einen expliziten Plattformvertrag geprüft. Genau diese Begrenzung macht den Mini-Host wertvoll: Er bietet genug Realität für eine belastbare Remote-Abnahme, ohne jede lokale Prüfung an die Verfügbarkeit des Gesamtprodukts zu binden.

Ein Remote ist nur dann unabhängig testbar, wenn seine Abnahme nicht grundsätzlich die vollständige Shell voraussetzt.

Stubs sind für eine eigene Abnahmefläche attraktiv. Sie liefern reproduzierbare Daten, definierte Fehlerzustände und gezielte Berechtigungssituationen. Sie starten schnell, konkurrieren nicht mit gemeinsam genutzten Testsystemen und eignen sich für Pull-Request-Previews. Randfälle, die in realen Umgebungen schwer herzustellen sind, lassen sich kontrolliert abbilden.

Diese Kontrolle kann jedoch trügerisch sein. Ein Stub kann weiterhin alle Tests bestehen, obwohl der reale Provider seinen Vertrag verändert hat. Ein zusätzliches Pflichtfeld, ein anderer Statuscode oder eine abweichende Lifecycle-Reihenfolge taucht in der lokalen Simulation womöglich nie auf.

Ein Stub darf deshalb nicht nur eine frei erfundene Nachbildung dessen sein, was das Remote gerade bequem benötigt. Er sollte aus einem überprüften Vertrag entstehen oder gegen denselben Vertrag geprüft werden wie der reale Provider.

Bei Plattformverträgen betrifft das beispielsweise AuthContext, Theme, Locale, Navigation, Notifications sowie Mounting- und Lifecycle-Schnittstellen. Bei API-Verträgen betrifft es Request- und Response-Strukturen, Statuscodes, Fehlermodelle, Pflichtfelder und fachlich relevante Varianten.

Remote
└── erwartet Vertrag
Stub
└── bildet denselben Vertrag ab
Plattform oder API
└── weist die Erfüllung des Vertrags nach

Contract Tests verbinden damit die unabhängige Abnahme mit der realen Integration. Ihre relevante Frage lautet nicht, ob ein Stub plausibel aussieht, sondern ob Consumer und Provider weiterhin denselben vereinbarten Vertrag erfüllen.

Ein Stub ist nur dann vertrauenswürdig, wenn er denselben überprüften Vertrag wie die echte Plattform oder API abbildet.

Contract Tests ersetzen dabei keine fachliche Abnahme. Sie prüfen nicht, ob ein Use Case verständlich, vollständig oder fachlich korrekt umgesetzt wurde. Sie sichern die Grenze ab, auf der diese Abnahme beruht.

Unabhängige Remote-Abnahme bedeutet nicht automatisch, alle Abhängigkeiten zu simulieren. Ein Remote kann im Mini-Host oder über einen eigenen Einstiegspunkt gestartet werden und gleichzeitig eine bestehende Entwicklungs- oder Testumgebung verwenden.

Remote
├── Mini-Host oder eigener Einstiegspunkt
└── bestehende Entwicklungs- oder Testumgebung

Diese Variante prüft tatsächliche HTTP-Verträge, reale Authentifizierung, echte Datenformate und konkrete Fehlerantworten. Auch fachliche Abläufe über das Backend sowie die Integration mit bestehenden Daten und Diensten werden sichtbar.

Der Vorteil liegt in der höheren Realitätsnähe bei überschaubarem Infrastrukturaufwand. Das Team muss nicht für jeden Release eine vollständige Umgebung bereitstellen und kommuniziert dennoch mit realen Systemen.

Dafür entstehen andere Abhängigkeiten. Eine gemeinsame Testumgebung kann instabil oder zeitweise nicht verfügbar sein. Testdaten verändern sich. Mehrere Teams beeinflussen sich gegenseitig. Bestimmte Ausgangszustände lassen sich nur schwer reproduzieren. Ein fehlgeschlagener Test kann deshalb sowohl auf einen Fehler im Release-Kandidaten als auch auf einen fremden Zustand der Umgebung hinweisen.

Stubs und reale Systeme sind somit keine Qualitätsstufen. Sie beantworten unterschiedliche Fragen. Stubs eignen sich besonders für kontrollierbare Zustände und reproduzierbare Randfälle. Reale Backends erhöhen die Aussagekraft hinsichtlich der tatsächlich betriebenen Kommunikation.

Unabhängige Abnahme bedeutet nicht, dass alle Abhängigkeiten simuliert werden. Sie bedeutet, dass das Team die benötigte Abnahmefläche unabhängig verwenden kann.

Wenn weder lokale Stubs noch gemeinsam genutzte Backends den benötigten Grad an Realität und Reproduzierbarkeit liefern, kann eine ephemere Umgebung sinnvoll sein. Sie wird für einen Branch oder Pull Request erzeugt und nach Abschluss wieder entfernt.

Pull Request
Release-Kandidat bauen
temporäre Umgebung bereitstellen
├── Remote
├── benötigte APIs
├── Datenbank
└── notwendige Infrastruktur
automatisierte E2E-Tests und Abnahme
Umgebung entfernen

Eine solche Umgebung kann reale Systemkomponenten mit einem reproduzierbaren Ausgangszustand verbinden. Sie vermeidet Konkurrenz um eine gemeinsame Testumgebung und macht genau den Release-Kandidaten erreichbar, der aus dem Pull Request entstanden ist. Automatisierte Tests und manuelle Abnahme arbeiten dadurch auf demselben Stand.

Der Release-Kandidat existiert nicht nur als abstraktes Pipeline-Artefakt. Ein Preview-Link macht ihn für fachliche Abnahme, visuelle Kontrolle, Barrierefreiheitsprüfungen, responsive Darstellung, unterschiedliche Testidentitäten sowie gezielte Error-, Empty- und End-to-End-Szenarien zugänglich.

Eine Preview ist jedoch kein Beweis dafür, dass die reale Composition funktioniert. Sie prüft das Remote in der bereitgestellten Umgebung. Die aktuelle Produktshell bleibt eine separate Integrationsgrenze.

Ephemere Umgebungen haben außerdem einen Preis. Bereitstellung und Start dauern länger. Infrastrukturkosten steigen. Testdaten und abhängige Dienste müssen automatisiert vorbereitet werden. Die betriebliche Komplexität wächst erheblich, sobald Umgebungen zuverlässig erzeugt, beobachtet und wieder entfernt werden sollen.

Ob der Branch-Workflow dabei einem GitHub Flow ähnelt oder anders organisiert ist, ändert das Architekturprinzip nicht. Ebenso ist zweitrangig, ob GitHub Actions, GitLab, Azure DevOps oder ein anderes System die Umgebung bereitstellt. Entscheidend ist, ob die zusätzliche Realitätsnähe das Risiko und die Kosten des konkreten Releases rechtfertigt.

Der vollständige SCS als mögliche vertikale Abnahmefläche

Abschnitt betitelt „Der vollständige SCS als mögliche vertikale Abnahmefläche“

In einer vertikal geschnittenen Self-contained-Systems-Architektur kann die eigene Abnahmefläche über das Remote hinausreichen.

Fachlicher SCS
├── Remote oder eigenständiges Frontend
├── eigene APIs
├── eigene Datenbank
├── Authentifizierungsintegration
├── Storage
└── weitere fachlich notwendige Infrastruktur

Damit lässt sich der vollständige fachliche Schnitt eigenständig starten und prüfen. Je nach Domäne können dazu ein Identity Provider wie Keycloak, eine Datenbank, Object Storage wie MinIO, ein Message Broker oder weitere fachlich benötigte APIs gehören.

Diese Form der unabhängigen Abnahme entsteht nicht allein durch Microfrontends, sondern durch eine weitergehende vertikale Architektur des Gesamtsystems. Das Team besitzt dann nicht nur ein separates Frontend-Artefakt, sondern einen eigenständig betreibbaren fachlichen Ausschnitt.

Der vollständige SCS ist eine mögliche Abnahmefläche, nicht die Mindestanforderung jedes Remotes. Für viele Produktbereiche wäre eine solche Umgebung unnötig teuer oder organisatorisch gar nicht verfügbar. Sie ist dort sinnvoll, wo Verantwortung, Datenhaltung und Betrieb ohnehin vertikal geschnitten sind.

Die möglichen Abnahmeflächen bilden keine lineare Reifegradleiter.

Remote + Stubs
└── kontrollierte UI- und Zustandsprüfung
Remote + bestehendes Backend
└── Frontend gegen reale APIs
Remote + ephemere vertikale Umgebung
└── reproduzierbare Integration des Release-Kandidaten
vollständig startbarer SCS
└── Abnahme des gesamten fachlichen Schnitts
Release-Kandidat + aktuelle Shell
└── Verifikation der Composition

Die größte und teuerste Umgebung ist nicht automatisch die beste. Ein vollständiger fachlicher SCS kann für einen kleinen visuellen Fehler unverhältnismäßig sein. Ein frei erfundener Stub kann für eine kritische Änderung am Authentifizierungsablauf zu wenig Realität bieten. Eine gemeinsame Backend-Umgebung kann für einen einfachen Read-Use-Case ausreichen, für reproduzierbare Fehlerfälle aber ungeeignet sein.

Die Auswahl hängt vom Verantwortungsbereich, von der Risikoreichweite und der Kritikalität der Änderung ab. Ebenso relevant sind Bereitstellungszeit, Infrastrukturkosten, benötigte Realitätsnähe und Reproduzierbarkeit.

Die Abnahmeumgebung sollte nicht möglichst groß sein. Sie sollte den Verantwortungsbereich und das Risiko des Releases realistisch abbilden.

So klein wie möglich testen bedeutet nicht künstlich isoliert testen.

Fünf gleichwertige Abnahme- und Integrationsflächen zeigen ein Remote mit Stubs, einem bestehenden Backend, einer ephemeren Umgebung, einem vollständigen fachlichen SCS sowie der aktuellen Produktshell für den Composition-Smoke-Test.

Die Fachlichkeit wird in der eigenen Umgebung geprüft

Abschnitt betitelt „Die Fachlichkeit wird in der eigenen Umgebung geprüft“

Die eigene Remote- oder SCS-Umgebung ist der Ort für die tiefe fachliche Abnahme. Dort sollten die Use Cases des Produktbereichs, das UI-Verhalten, Validierung, lokale Navigation, Fehler- und Leerzustände sowie Berechtigungsprojektionen geprüft werden. Auch das Zusammenspiel mit den verantworteten APIs und fachliche End-to-End-Szenarien innerhalb des eigenen Schnitts gehören in diese Umgebung.

Diese Tests dürfen umfangreich sein. Sie dürfen unterschiedliche Datenlagen, Identitäten und Fehlersituationen durchspielen. Sie dürfen interne Navigation und mehrere fachliche Schritte umfassen. Das verantwortliche Team besitzt sowohl das notwendige Domänenwissen als auch die Fähigkeit, Fehler unmittelbar zuzuordnen.

Die fachliche Abnahme gehört dorthin, wo die fachliche Verantwortung liegt.

Die Shell sollte deshalb nicht für jede Formularregel, jede interne Statusvariante und jeden lokalen Use Case erneut als vollständige Testumgebung dienen. Sonst wird aus der Composition-Schicht schleichend wieder eine zentrale Abnahmeplattform für sämtliche Produktbereiche.

Die Composition wird in der echten Shell verifiziert

Abschnitt betitelt „Die Composition wird in der echten Shell verifiziert“

Nach der eigenständigen Abnahme bleibt ein gezielter Integrationstest mit der aktuellen Produktionsshell oder dem für den Release vorgesehenen Shell-Stand notwendig.

Ziel-Shell
+
Release-Kandidat des Remotes
└── Composition-Smoke-Test

Dieser Test wiederholt nicht die gesamte Fachlichkeit. Er prüft, ob das veröffentlichbare Artefakt in der realen Composition funktioniert. Dazu gehört, ob es erreichbar ist, geladen und aktiviert werden kann und ob Mounting sowie Unmounting korrekt ablaufen. Die reale Route muss erreichbar sein. AuthContext, Theme, Locale und weitere Plattformverträge müssen korrekt ankommen.

Mindestens ein kritischer Einstieg in den Produktbereich sollte funktionieren. Navigation zu und von dem Remote darf nicht beschädigt sein. Das Remote darf die übrige Shell nicht beeinträchtigen. Auch ein definierter Fehlerzustand sollte so dargestellt werden können, wie es die reale Plattform vorsieht.

Die Fachlichkeit wird in der eigenen Abnahmefläche geprüft. Die Composition wird in der echten Shell verifiziert.

Der Composition-Test bleibt bewusst klein. Er weist nach, dass zwei unabhängig geprüfte Verantwortungsbereiche in ihrer aktuellen Kombination zusammenpassen. Er ist keine zweite vollständige Fachabnahme und kein Ersatz für die tieferen Tests des Remotes.

Zwei verbundene Prüfbereiche zeigen links die tiefe fachliche Abnahme in der eigenen Umgebung und rechts den bewusst schmalen Composition-Test in der aktuellen Produktshell.

Vollständige End-to-End-Tests bleiben sinnvoll, wenn ein Use Case tatsächlich mehrere Produktbereiche umfasst.

Login
→ Navigation zu Remote A
→ fachliche Änderung
→ backendseitiger Zustand wird aktualisiert
→ Wechsel zu Remote B
→ produktweit sichtbare Projektion

Dieser Ablauf besitzt ein produktweites Risiko. Er hängt nicht nur von der Fachlichkeit eines Remotes oder von dessen Plattformvertrag ab, sondern von einem fachlichen Ergebnis, das über mehrere Verantwortungsgrenzen hinweg im Produkt sichtbar wird. Genau dafür ist ein systemweiter Test angemessen.

Nicht sinnvoll ist es, jede lokale Formularvalidierung oder interne Remote-Funktion über die vollständige Shell, alle Remotes, sämtliche Backends und eine gemeinsame Gesamtsystemumgebung abzunehmen. Solche Tests sind langsam, teuer und schwer zu diagnostizieren. Vor allem verschieben sie lokale Verantwortung in eine zentrale Pipeline.

Produktweite Tests prüfen produktweite Risiken. Sie sollten nicht die lokale Teststrategie jedes Remotes ersetzen.

Je größer die Testumgebung, desto selektiver sollten die dort geprüften Szenarien sein. Ein kleiner Bestand wirklich produktweiter Abläufe ist meist belastbarer als eine umfangreiche Sammlung lokaler Detailtests, die nur zufällig durch das Gesamtprodukt navigieren.

Affected-Strategien wählen die relevanten Prüfungen aus

Abschnitt betitelt „Affected-Strategien wählen die relevanten Prüfungen aus“

Nicht jede Änderung betrifft jedes Remote und nicht jede Änderung benötigt alle Teststufen. Affected-Strategien helfen dabei, den Prüfaufwand anhand von Änderungen und modellierten Abhängigkeiten zu begrenzen.

Änderung im Pull Request
Affected-Ermittlung
├── betroffene Remotes bauen
├── relevante Tests ausführen
├── notwendige Preview bereitstellen
└── betroffene Composition prüfen

Ein Monorepo-Werkzeug wie Nx kann anhand seines Projektgraphen und der geänderten Eingaben ermitteln, welche Projekte oder Targets betroffen sein können. Daraus lassen sich Builds, Unit- und Komponententests, Contract Tests, End-to-End-Tests, Preview-Deployments oder Composition-Smoke-Tests auswählen.

Affected ist dabei keine eigene Testart und keine Qualitätsgarantie. Die Strategie entscheidet, welche Prüfungen aufgrund einer Änderung relevant erscheinen. Sie entscheidet nicht, wie tief diese Prüfungen sein müssen.

Affected bestimmt, was aufgrund einer Änderung geprüft werden sollte. Es bestimmt nicht, wie tief diese Prüfung sein muss.

Die Qualität der Auswahl hängt vom korrekt modellierten Projekt- und Abhängigkeitsgraphen ab. Versteckte Laufzeitkopplungen, dynamische Konfiguration oder externe Verträge können von einer statischen Analyse übersehen werden. Eine grüne Affected-Pipeline beweist daher nicht automatisch die reale Composition. Sie reduziert gezielt Aufwand, ersetzt aber keine bewusst definierte Integrationsstrategie.

Versionskombinationen gezielt statt vollständig prüfen

Abschnitt betitelt „Versionskombinationen gezielt statt vollständig prüfen“

Mit unabhängigen Releases entstehen mehrere potenziell kombinierbare Versionen. Eine vollständige Matrix skaliert jedoch nicht.

mehrere Shell-Versionen
× mehrere Remote-Versionen
× weitere Remotes
× mehrere Browser
= kaum beherrschbare Testmatrix

Die Architektur sollte deshalb festlegen, welche Kombinationen tatsächlich unterstützt werden. Typisch relevant sind die aktuelle Produktions-Shell mit einem neuen Remote-Kandidaten sowie eine neue Shell mit den aktuell produktiven Remotes. Während einer Migration können zusätzlich alte und neue Vertragsversionen oder tatsächlich parallel aktive Varianten geprüft werden.

Nicht jede technisch denkbare Versionskombination ist eine unterstützte Produktkonfiguration.

Getestet werden sollte der zugesagte Unterstützungsbereich, nicht jede historische Kombination. Diese Begrenzung ist kein Verzicht auf Qualität, sondern eine Voraussetzung dafür, die wichtigen Kombinationen zuverlässig prüfen zu können.

Alle Prüfungen vor dem Deployment beziehen sich auf einen Release-Kandidaten. Sie können nicht beweisen, dass genau dieses Artefakt unter der realen Adresse verfügbar ist und von der produktiven Shell geladen wird.

Nach der Veröffentlichung sollte deshalb ein kleiner Smoke Test folgen.

veröffentlichtes Artefakt
├── erreichbar
├── aktivierbar
├── zentrale Route funktioniert
├── kritischer Einstieg funktioniert
└── keine unmittelbar erhöhte Fehlerrate

Der Test kann technische und einen kleinen fachlichen Anteil besitzen. Er prüft beispielsweise, ob das Remote-Artefakt erreichbar ist, Manifest oder Einstiegspunkt gültig sind, das Mounting gelingt und der Authentifizierungskontext erkannt wird. Ein kleiner, sicher wiederholbarer Lese-Use-Case kann als fachlicher Einstieg dienen. Begleitend sollte die Telemetrie keine unmittelbar erhöhte Fehlerrate zeigen.

Dieser Smoke Test wiederholt nicht die vollständige Abnahme. Er beantwortet eine andere Frage.

Vor dem Release wird der Kandidat geprüft. Nach dem Release wird geprüft, ob genau dieses Artefakt im realen Produkt angekommen ist.

Unabhängige Abnahme ohne isolierte Selbstgewissheit

Abschnitt betitelt „Unabhängige Abnahme ohne isolierte Selbstgewissheit“

Am Ende kann weiterhin folgendes Bild entstehen:

Remote Tests ✅
Contract Tests ✅
Preview-Abnahme ✅
Shell Tests ✅
Composition ?

Die Antwort darauf ist nicht eine einzige, immer vollständige Gesamtpipeline. Sie ist eine bewusst gestaffelte Teststrategie.

Remote-Verantwortung
└── eigene Abnahmefläche
Vertragsgrenze
└── Contract Tests
Composition
└── gezielter Shell-Smoke-Test
produktweiter Prozess
└── wenige systemweite E2E-Tests
veröffentlichtes Artefakt
└── Post-Deployment-Smoke-Test

Ein unabhängig veröffentlichbares Remote benötigt eine Abnahmefläche, die sein Team selbstständig bereitstellen und kontrollieren kann. Diese Umgebung kann mit Stubs, realen Backends, ephemerer Infrastruktur oder einem eigenständig startbaren fachlichen SCS arbeiten. Entscheidend ist nicht ihre maximale Größe, sondern ob sie Verantwortung und Risiko des Releases realistisch abbildet.

Die Fachlichkeit wird in der eigenen Abnahmefläche geprüft. Die Composition wird in der echten Shell verifiziert. Ein Stub ist nur dann vertrauenswürdig, wenn er denselben überprüften Vertrag wie der reale Provider abbildet. Produktweite Tests prüfen produktweite Risiken. Affected bestimmt, was geprüft werden sollte. Es bestimmt nicht, wie tief diese Prüfung sein muss.

Grüne Einzelpipelines sind kein Problem. Problematisch ist eine Architektur, in der niemand die Composition prüft. Die Integration muss geprüft werden, ohne die gesamte Fachlichkeit wieder in eine zentrale Testpipeline zu ziehen.

Unabhängige Releases brauchen unabhängige Abnahme – aber keine isolierte Selbstgewissheit.

Ein Release ist nicht unabhängig, wenn seine Abnahme weiterhin das gesamte Produkt voraussetzt.