Nachvollziehbare Arbeitsaufteilung
Jede Implementierungsaufgabe ist mit einer konkreten Anforderung oder einem Akzeptanzkriterium verknüpft — nicht mit einer lose verwandten Funktionsbeschreibung.
Entwicklung & Integration · Schritt 04 · Wie wir arbeiten
Das Solution Design liefert eine getestete Spezifikation und festgelegte Akzeptanzkriterien. In dieser Phase wird diese Spezifikation in funktionierende, verifizierte Software überführt — integriert mit den Systemen, neben denen sie betrieben werden muss, und gegenüber den vor der Entwicklung definierten Kriterien nachgewiesen.
Entwicklung ist hier keine Interpretation. Jede Implementierungsentscheidung lässt sich auf eine während des Designs erstellte Spezifikation zurückführen — nicht auf das, was ein Entwickler vermutlich als Absicht angenommen hat.
Nicht diese Frage
"Läuft der Code?"
Stattdessen diese Frage
"Erfüllt das erstellte System die vor Beginn definierten Akzeptanzkriterien — unter realen Integrationsbedingungen und nicht nur isoliert?"
Implementierung · Verifikation · Integration · Rückverfolgbarkeit · Lieferdisziplin
Warum Entwicklung dem Design folgt
Jeder Input für diese Phase wurde während des Solution Designs erstellt: das Lösungs-Spezifikationsdokument, der Prototyp-Evaluationsbericht und die Akzeptanzkriterien & der Testplan. Entwicklung anhand einer ungetesteten Spezifikation würde das Risiko, das durch das Prototyping abgebaut werden sollte, einfach zurück in den Produktionscode verlagern.
Lösungsspezifikation + Akzeptanzkriterien → Verifizierte Implementierung
Warum Lieferdisziplin wichtig ist
Die Leistungsfähigkeit bei der Softwareauslieferung bemisst sich nicht allein daran, wie schnell ein Team Code schreibt. Forschung von Forsgren, Humble und Kim — veröffentlicht in Accelerate: The Science of Lean Software and DevOps (2018), basierend auf dem mehrjährigen Forschungsprogramm DevOps Research and Assessment (DORA) über tausende Organisationen — identifizierte zwei Kategorien technischer Leistungskennzahlen, die gemeinsam gemessen werden müssen: Durchsatz und Stabilität.
Durchlaufzeit
Wie lange es dauert, bis eine validierte Änderung vom Commit in einen bereitstellbaren Zustand gelangt.
Forsgren, Humble & Kim, Accelerate (2018); DORA, State of DevOps-Forschung.
Fehlerquote bei Änderungen
Der Prozentsatz der Änderungen, die einen Defekt einführen, der eine Behebung erfordert.
Forsgren, Humble & Kim, Accelerate (2018); DORA, State of DevOps-Forschung.
Ein Team, das schnell ausliefert, aber häufig Dinge kaputt macht, erzielt laut dieser Forschung keine gute Leistung — ebenso wenig wie ein Team, das sicher ausliefert, aber zu langsam ist, um relevant zu sein. OpenQCore berücksichtigt in dieser Phase beide Dimensionen, statt nur die Geschwindigkeit zu optimieren.
Von der Spezifikation zur Implementierung
Implementierungsarbeit wird direkt aus der Lösungsspezifikation und den Akzeptanzkriterien abgeleitet — nicht aus einem allgemeinen Verständnis dessen, "worauf das Design hinauswollte."
Jede Implementierungsaufgabe ist mit einer konkreten Anforderung oder einem Akzeptanzkriterium verknüpft — nicht mit einer lose verwandten Funktionsbeschreibung.
Eine Aufgabe ist nicht dann abgeschlossen, wenn der Code geschrieben ist. Sie ist abgeschlossen, wenn sie das verknüpfte Akzeptanzkriterium unter Testbedingungen erfüllt.
Wenn die Implementierung eine Lücke oder Unklarheit in der Spezifikation aufdeckt, wird die Spezifikation aktualisiert und überprüft — nicht stillschweigend von der Person neu interpretiert, die an jenem Tag den Code schreibt.
Testgetriebene Verifizierung
OpenQCore strukturiert die Verifikation gemäß der Testpyramide — ein weithin verwendetes Konzept, popularisiert von Mike Cohn, das darauf abzielt, die Testabdeckung über die Schichten eines Systems zu verteilen, anstatt sie in langsamen, teuren End-to-End-Tests zu konzentrieren.
Schnelle, isolierte Überprüfung einzelner Komponenten gegenüber ihrem spezifizierten Verhalten — einschließlich ihres Verhaltens bei ungültigen Eingaben.
Überprüfung, dass Komponenten gemäß den während des Lösungsdesigns definierten Datenverträgen korrekt interagieren.
Überprüfung kompletter Arbeitsabläufe anhand der vor Entwicklungsbeginn definierten Akzeptanzkriterien — die kleinste, teuerste Ebene, reserviert für das, was dies wirklich erfordert.
Das Ziel ist nicht eine maximale Anzahl von Tests. Es ist das Vertrauen darin, dass die Akzeptanzkriterien tatsächlich erfüllt sind — auf der kostengünstigsten Ebene, die dies beweisen kann.
Integrations- und Vertragstests
Die während des Lösungsdesigns festgelegten Daten- und API-Verträge werden nicht als informell zu befolgende Dokumentation behandelt. OpenQCore wendet consumer-driven contract testing an — einen Ansatz, der in Werkzeugen wie Pact formalisiert ist — bei dem jeder Integrationspunkt gegen einen ausführbaren Vertrag verifiziert wird, den beide Seiten der Integration erfüllen müssen.
Das ist besonders wichtig für Systeme, die sich an bestehende Infrastruktur anschließen müssen: Ein Vertrag, der nur durch manuelle Überprüfung geprüft wird, kann stillschweigend abdriften, wenn sich eine der Seiten ändert. Ein automatisch getesteter Vertrag kann das nicht.
Code-Review & statische Verifikation
Weit zitierte Forschung zur Peer-Code-Review — einschließlich der bei Cisco Systems durchgeführten Studie und popularisiert durch Cohen et al. in 'Best Kept Secrets of Peer Code Review' — fand heraus, dass die Effektivität von Reviews stark von Tempo und Umfang abhängt: Kleinere, häufigere Reviews ohne Zeitdruck entdecken deutlich mehr Fehler als große, schnell durchgeführte Reviews.
OpenQCore wendet strukturierte Code-Reviews neben automatisierter statischer Analyse an — Stil-, Komplexitäts- und bekannte-Schwachstellen-Scans — als dauerhafte Verifikationsschicht, nicht als optionale Höflichkeitsprüfung vor dem Merge.
Continuous-Integration-Pipeline
Commit → automatisierter Build → Unit- & Integrationstests → statische & Sicherheitsanalyse → Vertragsverifikation → bereit für die Bereitstellung.
Manuelle, inkonsistente Verifikation skaliert nicht und liefert kein verlässliches Signal dafür, ob eine Änderung tatsächlich sicher freigegeben werden kann — eine Entscheidung, die in der nächsten Phase, Deployment & Enablement, getroffen wird. Was diese Phase garantiert, ist, dass eine Änderung, die dieses Tor erreicht, bereits gegen denselben automatisierten Standard verifiziert wurde wie jede vorherige Änderung.
Sichere Entwicklungspraktiken
Die Entwicklungspraktiken von OpenQCore stimmen mit der Struktur überein, die im Secure Software Development Framework (SP 800-218) des NIST beschrieben ist — sie organisieren Sicherheitsaktivitäten rund um die Vorbereitung der Organisation, den Schutz der Software, die Produktion gut gesicherter Software und die Reaktion auf Schwachstellen.
Automatisiertes Scannen von Drittanbieterabhängigkeiten auf bekannte Schwachstellen als Teil der Standard-Pipeline, nicht eine periodische manuelle Prüfung.
Strukturierte Betrachtung, wie eine Komponente missbraucht werden könnte, basierend auf den während des Lösungsdesigns definierten Ausfallmodi.
Zugriffs- und Berechtigungsbereiche werden auf dem kleinstmöglichen Niveau implementiert, das die Spezifikation erfüllt — nicht auf dem breitesten, weil es bequemer wäre.
Das Verifizierungs-Gate für Integration
Jede Änderung muss ein definiertes Verifizierungs-Gate erreichen, bevor sie für die Bereitstellung in Betracht gezogen werden kann.
Alle Abnahmekriterien sind erfüllt und wurden durch automatisierte Tests, Vertragsprüfungen und Sicherheitsscans verifiziert.
Konkrete, identifizierte Fehler müssen behoben werden, bevor diese Änderung weitergeführt werden kann.
Die Implementierung hat gezeigt, dass die Spezifikation selbst unter realen Bedingungen nicht standhält — die richtige Reaktion ist, die Spezifikation zu überarbeiten, nicht sie durch Programmierarbeit zu umgehen.
Ein Sicherheits-, Compliance- oder Architektur-Risiko wurde identifiziert, das eine Entscheidung über die Zuständigkeit des Entwicklungsteams hinaus erfordert.
Eine Pipeline, die immer "Bereit für die Bereitstellung" erreicht, verifiziert nichts.
Was diese Phase produziert
Je nach Umfang des Engagements erzeugt diese Phase:
Implementierung, die zur Spezifikation rückverfolgbar ist und alle definierten Verifizierungsebenen besteht.
Ergebnisse von Unit-, Integrations- und End-to-End-Tests, die den Abnahmekriterien zugeordnet sind.
Ausführbare Verifikation jedes während des Lösungsdesigns definierten Integrationspunkts.
Dokumentierte Überprüfungshistorie und Behebung aufgeworfener Probleme.
Befunde aus Abhängigkeits-, Schwachstellen- und statischer Analyse sowie deren Behebung.
Die automatisierte Verifizierungspipeline, die auf diese Änderung und jede folgende Änderung angewendet wird.
Von Entwicklung bis Bereitstellung & Aktivierung
Entwicklung & Integration erzeugt Software, die gegen ihre Spezifikation verifiziert wurde — nicht jedoch Software, die bereits freigegeben, überwacht oder unter realer Produktionslast als stabil erwiesen ist. Die nächste Phase regelt, wie, wann und wie sicher diese Software tatsächlich in die Produktion gelangt.
Lösungsspezifikation → Verifizierte Implementierung → Bereitstellung & Aktivierung
Schritt 05
Verifizierte Software sicher, bewusst und mit einem definierten Rückrollpfad in die Produktion freigeben.
Forschungs- und methodische Referenzen
Forsgren, N., Humble, J. & Kim, G. — Accelerate: The Science of Lean Software and DevOps (2018); Google Cloud, DORA-Studie zum Stand von DevOps
Quelle der oben genannten Metriken zur Lieferleistung.
Cohn, M. — Succeeding with Agile (2009)
Quelle des in der testgetriebenen Verifizierung oben erwähnten Konzepts der Testpyramide.
Cohen, J. et al. — Best Kept Secrets of Peer Code Review (SmartBear, basierend auf Forschung bei Cisco Systems)
Quelle der oben genannten Erkenntnisse zur Wirksamkeit von Code-Reviews.
Pact / Consumer-Driven Contracts
Ein etabliertes Vorgehen für ausführbare, automatisch verifizierte Integrationsverträge, das im Abschnitt zu Integrationstests oben erwähnt wird.
NIST — Secure Software Development Framework, SP 800-218
Quelle der im Abschnitt zu sicheren Entwicklungspraktiken oben erwähnten Struktur.