Simulation Driven Development (SDD) ist eine effiziente Methode zur Entwicklung komplexer verteilter Systeme und Prozesse. Im Unterschied zu herkömmlichen Methoden werden während des gesamten Entwicklungsprozesses (bzw. Produktlebenszyklus) Simulationsmodelle des zu entwickelnden Systems und dessen Umgebung eingesetzt. Diese ermöglichen die Abbildung statischer und dynamischer Systemeigenschaften, wodurch die Spezifikationsqualität und -geschwindigkeit enorm gesteigert werden kann. Die eingesetzten Simulationsmodelle werden im Verlauf des Entwicklungsprozesses zur Analyse, Evaluierung, Validierung, Verifikation und Optimierung verwendet. Zusätzlich zu den das zu entwickelnde System abbildenden Simulationsmodellen, kommt bei SDD ein Simulationsmodell des Entwicklungsprozesses selbst zum Einsatz. Dieses ermöglicht die Automatisierung von Entwicklungsschritten in Form von Workflows, wie bspw. Testzyklen, Optimierungszyklen, Versionierung und Dokumentenaustausch mit Komponentenherstellern. SDD kann wie jede Projektmanagementmethode sowohl klassisch (z.B. Wasserfall-Modell) als auch agil (z.B. Scrum) eingesetzt werden.
Durch den permanenten und frühzeitigen Einsatz von Simulationsmodellen ermöglicht SDD Tag-Eins-Validierung/Verifikation. Entwicklungs- und Integrationsfehler können so schneller lokalisiert und behoben werden. Die Produktunsicherheit wird bereits in den frühen Entwicklungsphasen enorm abgesenkt. Die folgende Abbildung veranschaulicht Simulation Driven Development in Form eines weiterentwickelnden V-Modells:
Während der Anforderungsanalyse werden die Nutzeranforderungen an das zu entwickelnde System erfasst und in ein erstes konzeptionelles Simulationsmodell überführt. Dieses bildet das dynamische Nutzerverhalten und die Interaktion der Nutzer mit dem zu entwickelnden System in Form betrieblicher Einsatzszenarien (Use Cases) ab. Es erlaubt erste Analysen und bildet die Grundlage für die späteren Akzeptanztests. Die Einhaltung der Nutzeranforderungen wird durch die Verknüpfung der Modellelemente mit einer Anforderungsverwaltung sichergestellt.
In der sich anschließenden Phase Systementwurf werden die Systemanforderungen (funktional und nicht-funktional) erfasst und erweitern das Simulationsmodell aus der Anforderungsanalyse um abstrakte Funktions- und Architektur-Modellelemente. Im Ergebnis entsteht eine ausführbare Spezifikation zur frühzeitigen Verifikation und Validierung des Systems gegen betriebliche Einsatzszenarien. Das Simulationsmodell bildet die Grundlage für die späteren End-to-End-(E2E) und Performance-Tests. Durch Verknüpfung der Modellelemente mit einer Anforderungsverwaltung wird die Einhaltung der Systemanforderungen sichergestellt.
Im nächsten Schritt wird der Architekturentwurf durchgeführt. Ziel ist es das System in Komponenten zu unterteilen und deren Schnittstellen und Abhängigkeiten zu beschreiben. Das Simulationsmodell aus dem Systementwurf wird hierfür um Modellelemente für Architekturkomponenten (Subsysteme), Protokolle und Ausführungseinheiten erweitert. Durch Simulation kann die entworfene Architektur verifiziert und validiert werden. Insbesondere Integrationsprobleme zwischen Subsystemen infolge dynamischer Kopplungseffekte können erkannt und behoben werden. Zudem ermöglicht das Simulationsmodell die Analyse und Evaluierung verschiedenen Architekturvarianten, Mapping von Funktion in Architektur und durch Anbindung von Optimieralgorithmen die Auffindung einer optimalen Systemarchitektur. Das Simulationsmodell dient als Ausgangspunkt für die späteren Integrationstests.
Daraufhin wird der Komponentenentwurf durchgeführt und für jede Komponente spezifiziert wie diese umgesetzt werden soll. Grundlage bildet das Simulationsmodell aus der vorhergehende Phase. Dieses enthält die Anforderungen an die Komponenten und wird so erweitert, dass deren Funktionalität inklusive dynamischer Interaktion mit benachbarten Komponenten abgebildet wird. Das Simulationsmodell ermöglicht die Validierung und Optimierung jeder Komponente gegen das Gesamtsystem und bildet die Grundlage für die späteren Unit-Tests.
Nachdem System, Architektur und Komponenten spezifiziert wurden kommt es zur eigentlich Umsetzung, zur Implementierung. Im Ergebnis liegt ein Prototyp vor, der gegen die im Simulationsmodell spezifizierten Anwendungs- und Testfälle verifiziert und validiert werden muss. Hierzu wird die reale Implementierung des Systems mittels In the Loop Simulation an das virtuelle Simulationsmodell angebunden. Im ersten Schritt werden die Komponenten bzw. Funktionen im Rahmen von Unit-Tests isoliert getestet. Anschließend werden die Komponenten gekoppelt und Integrationstests durchgeführt. Daraufhin wird das System als Ganzes mittels Systemtests (E2E, Performance) geprüft. Letztlich wird durch Akzeptanztests sichergestellt, dass alle Nutzeranforderungen umgesetzt wurden.