Anforderungsanalyse, Definition und Implementierung einer Netzwerkkommunikationsschicht für ein modulares Simulations- und VR-System Belegverteidigung von Markus Müller am 23.09.2006
Inhalt Ausgangssituation Ziele Vorgehensweise Anforderungsanalyse und Evaluation Entwurf Implementierung Automatisiertes Testen Ergebnisse Ausblick TU Dresden, 22.09.2006 Markus Müller Folie 2 von 17
Ausgangssituation Entwicklung: Interaktiver Maschinensimulator Kooperation zwischen EADS/Dornier GmbH und dem Institut für Fördertechnik, Baumaschinen und Logistik Modulares aber proprietäres Simulations- und VR-System Verteiltes Kommunikations- und Visualisierungssystem ODO von Joscha Metze Hochwertige Visualisierungsanwendung Kommunikationsschnittstelle für verteilte Komponenten Konzept zur Generalisierung zu einem Framework für verteilte Simulations- und VR-Anwendungen Zentrale Steuerung und Zustandskontrolle, Konfiguration, Werkzeuge zur Content-Erstellung, generische Komponenten für Eingabe und Verarbeitung TU Dresden, 22.09.2006 Markus Müller Folie 3 von 17
Ausgangssituation Host:Sound Sound Host:Cab Cab SimulationControl SoundParameters TerrainInformation Host:Simulation Host:Database Host:Motion MotionControl Simulation TerrainManipulation Database Motion VisualisationParameters TerrainInformation VisualisationParameters TerrainInformation Host:Visualisation1 Host:Visualisation2 Visualisation Visualisation TU Dresden, 22.09.2006 Markus Müller Folie 4 von 17
Ausgangssituation Verwendete Netzwerkkommunikationsschicht Komponenten kommunizieren über ein RPC-System XML-IDL (Interface Definition Language) und XSL- Transformation anstelle von RPC-Stub-Compiler Flexibel und einfach zu verwenden Aber: Erfahrung hat gezeigt, dass nicht alle funktionalen Anforderungen erfüllt werden TU Dresden, 22.09.2006 Markus Müller Folie 5 von 17
Ziele Umfassende Anforderungsanalyse Aktuelle und zukünftige Anforderungen Evaluation der bestehenden Implementierung Neudefinition der angebotenen Schnittstelle Implementierung in C# und C++ C# ermöglicht RAD (Rapid Application Development) Neuentwicklung in C# anstelle von Hüllklassen für C++ Implementierungsbegleitende Tests Geeignete Strategien und Werkzeuge TU Dresden, 22.09.2006 Markus Müller Folie 6 von 17
Vorgehensweise Analyse Zentrale Anforderungen an verteilte VR-Umgebungen Flexibilität, Heterogenität, Synchronisation, Skalierbarkeit, keine Diskontinuitäten Aber auch: Transparenz, Sicherheit, Fehlerbehandlung, Verwaltbarkeit Szenarioanalyse Betrachtung möglichst vielfältiger Konfigurationen Anforderungen an die Transportschicht Performanz, Zuverlässigkeit, Multicasting/Broadcasting,... TU Dresden, 22.09.2006 Markus Müller Folie 7 von 17
Vorgehensweise Evaluation Ansatz (RPC-System) sehr gut gewählt Schlecht erweiterbar Konfiguration, globale Zustandskontrolle und Fehlerbehandlung problematisch Kleinere Schwächen in der Implementierung Wenig dokumentiert Unvollständige Umsetzung eines Peer-to-Peer-Konzepts TU Dresden, 22.09.2006 Markus Müller Folie 8 von 17
Vorgehensweise Entwurf Client-Server-System Entkopplung von: spezialisierten Bibliotheken und Netzwerkschicht Netzwerkschicht und Transportschicht Erweiterbarkeit Anpassung der Schnittstelle zur Anwendung Datentypen, Aufrufsemantik, Verbindungsereignisse Spezielle Implementierung für Kommunikation zwischen Anwendungen und Kontrollzentrum TU Dresden, 22.09.2006 Markus Müller Folie 9 von 17
Vorgehensweise Clientprozess Serverprozess lokaler Aufruf Rückgabewert lokaler Aufruf Rückgabewert ServerStub ServerStub ClientStub Marshalling Unmarshalling Unmarshalling Marshalling ODONet ODONet Serialisierung Deserialisierung Deserialisierung Serialisierung Transportschicht Transportschicht TU Dresden, 22.09.2006 Markus Müller Folie 10 von 17
Vorgehensweise Implementierung Ähnlichkeit C# - C++ gewünscht Eigene Socket-Klasse abstrahiert von Betriebssystem Teilweise Nachimplementierung von.net-klassen (MemoryStream, BinaryReader, BinaryWriter, Bitconverter) Robuste UDP-Implementierung Keine Fluss- oder Überlastkontrolle wie bei TCP, aber tolerant gegenüber Pufferüberläufen Viele Detailverbesserungen und Optimierungen TU Dresden, 22.09.2006 Markus Müller Folie 11 von 17
Automatisiertes Testen Arten von Tests Unit-Tests Isolierte Tests kleiner Einheiten (Units): einzelne Methoden oder Klassen Integrationstests Zusammenspiel der Units Systemtests Verhalten des Gesamtsystems unter Realbedingungen TU Dresden, 22.09.2006 Markus Müller Folie 12 von 17
Automatisiertes Testen Vorteile von automatisierten Tests Schnell durchführbar Reproduzierbarkeit von Fehlern Einfachere Fehlerlokalisation Testfälle dokumentieren Schnittstelle einer Klasse Werkzeuge vereinfachen Testprozess TU Dresden, 22.09.2006 Markus Müller Folie 13 von 17
Automatisiertes Testen Testwerkzeuge NUnit Zanebug cppunit TestDriven.NET NCover TU Dresden, 22.09.2006 Markus Müller Folie 14 von 17
Automatisiertes Testen Schwierigkeiten beim Testen der Netzwerkbibliothek Schichtenarchitektur viele Klassen hängen von anderen Klassen ab Emulation der Transportschicht nur eingeschränkt möglich (Threads, Callbacks,...) Verschiedene Betriebssysteme und Programmiersprachen Isolierte Unit-Tests sehr aufwändig Deshalb: Wenige Unit-Tests, viele Systemtests Problem: Fehlerlokalisation schwierig TU Dresden, 22.09.2006 Markus Müller Folie 15 von 17
Ergebnisse Einfach und schnell benutzbare Netzwerkbibliothek Angepasste Schnittstellen Flexible Architektur Entkopplung von Anwendung, Kommunikationssteuerung und Transportschicht Verbesserte Konfiguration Ausführliche Dokumentation Zahlreiche Systemtests Prototyp für Kontrollzentrum Generische Simulationskomponente Virtuelles Dosenschießen von Réne Schulte, Réne Janovsky und Torsten Bär, HTW Dresden TU Dresden, 22.09.2006 Markus Müller Folie 16 von 17
Ausblick Netzwerkbibliothek: Komplexere Implementierungen der Schnittstelle zur Transportschicht, z.b. zuverlässiges Broadcasting Integration anderer Netzwerktechnologien, z.b. ATM oder Myrinet.NET Compact Framework Smartphones/PDAs als Eingabegeräte WAN-Kommunikation: Tunneling Anwendungen: Capture-and-Replay: Aufzeichnen von Nachrichten und Abspielen mit veränderter Geschwindigkeit TU Dresden, 22.09.2006 Markus Müller Folie 17 von 17
Vielen Dank für die Aufmerksamkeit!
Szenario - ControlCentre Host:ControlCentre Host:Input Input1 : DirectInputMapper ControlCentre1 : ControlCentre ReportProcess ControlCentre2 : ControlCentre ExecuteScript StateControl StateControl ReportProcess RequestRegistration Register Host:Instance1 Host:Instance2 Host:Instance3 Module1 : Module Module2 : Module Module3 : Module TU Dresden, 22.09.2006 Markus Müller Folie 19 von 17
Szenario Multiplayer Game Host:Player1 Host:Player2 Input1 : DirectInputMapper Input2 : DirectInputMapper InputPlayer1 InputPlayer2 Host:Gameserver : Simulation DataManipulation DataRetrieval : Database VisualisationParameters SoundParameters Host:Output1 Host:Output2 Visualisation1 : Visualisation Visualisation2 : Visualisation Sound1 : Sound Sound2 : Sound TU Dresden, 22.09.2006 Markus Müller Folie 20 von 17
Szenario Single Host Host:Development Environment Host:Development Environment Input1 : DirectInputMapper Input1 : DirectInputMapper Simulation1 : Simulation Simulation1 : Simulation Visualisation1 : Visualisation Visualisation1 : Visualisation Visualisation2 : Visualisation TU Dresden, 22.09.2006 Markus Müller Folie 21 von 17
Tunneling LAN LAN WAN Tunnel Router Router Input High-Performance Simulation-Server Visualisation1 Visualisation2 TU Dresden, 22.09.2006 Markus Müller Folie 22 von 17
Schichtenarchitektur Anwendung anwendungsspezifische Bibliotheken ODONet Transportschicht TU Dresden, 22.09.2006 Markus Müller Folie 23 von 17
Transformationspipeline batch file / shell script NAnt interface definition XSLT processor source code compile & link dynamic link library XSLT stylesheet dependencies TU Dresden, 22.09.2006 Markus Müller Folie 24 von 17