Modellbasierte Spezifikation und Design

Die Anforderungen an Software werden zunehmend komplexer und die Anzahl der Systeme wächst, die Daten miteinander austauschen müssen.

Entscheidend für ein erfolgreiches Software-Design sind

  • eine klare Definition der Anforderungen
  • eine genaue Beschreibung des Systemverhaltens und der zu verarbeitenden Daten
  • ein gemeinsames Verständnis des zu entwickelnden Systems

Wir setzen dabei auf eine modellgetriebene Entwicklung. Dabei nutzen unsere Software­entwickler UML (Unified Modeling Language) Modellierungs­werkzeuge wie Enterprise Architect, die den gesamten Prozess der Software­entwicklung unterstützen.
 

Vorgehen Software-Design, Software-Entwicklung und Software-Implementierung

Bei einem Software-Entwicklungs-/Implementierungs-Projekt gehen wir folgendermaßen vor:

  • Geschäftsprozess­analyse: In enger Abstimmung mit den Fachbereichen unserer Auftraggeber bilden wir alle Prozesse und Beteiligten aus Geschäftssicht in Diagrammen ab. Dies geschieht sowohl auf einem hohen Level bis hin zur genauen Beschreibung einzelner Aktivitäten. Dadurch wird sichergestellt, dass alle Anwendungsfälle vollständig und korrekt beschrieben sind, die das System unterstützen muss.
     
  • Systemanalyse: Bei der Systemanalyse werden die Anwendungsfälle, die Prozess­beteiligten und Aktivitäten aus Systemsicht und technisch beschrieben. Es werden logisch getrennte Systembereiche (Domains) gebildet und Verbindungen mit externen Systemen dargestellt.
     
  • Architektur: Maßgeblich für die Systemarchitektur sind die Anforderungen, die in den beiden Schritten zuvor spezifiziert wurden. Unsere Software-Architekten erarbeiten auf dieser Basis ein Systemdesign, das Anwendungsfälle und Prozesse auf funktionalen Einheiten abgebildet, die sogenannten Komponenten. Ganz im Sinne der service­orientierten Architektur (SOA) kapseln diese Komponenten ihre gesamten Funktionen und bieten diese über plattform­übergreifende Standard­schnittstellen für andere Komponenten oder auch andere Systeme an.
     
  • Design: Vor der konkreten Software-Entwicklung werden die Masken der Benutzer­oberfläche (GUI) definiert. Dabei wird der Ablauf der möglichen Dialoge als auch die konkrete Gestaltung der Masken festgelegt. Um die Daten des Systems objektorientiert ablegen und verwalten zu können, wird ein sogenanntes Klassenmodell erstellt, das die einzelnen Objekte (z.B. Auto) mit deren Attributen (z.B. Motor) abbildet. Das Designmodell ist immer noch unabhängig von der eingesetzten Technologie.
     
  • Implementierung: Die konkrete Entwicklung und damit auch das Festlegen auf eine Technologie finden in der Implementierungs­phase statt. Dabei wird das Designmodell in ein Implementierungs­modell überführt, das eng an die gewählte Technologie angelehnt ist. Aus diesem Implementierungs­modell wiederum werden große Teile des eigentlichen Quellcodes generiert. Dieser Schritt sorgt für eine deutliche Reduktion der Entwicklungszeit, da die Schreibarbeit für einfachste Funktionen nicht mehr nötig ist und manuelle Fehlerquellen ausgeschlossen werden. Dieser Schritt wird inkrementell durchgeführt, sollten weitere Funktionen benötigt werden. Diese werden dann im Designmodell modelliert, ins Implementierungs­modell transformiert und von dort wieder in den Quellcode generiert. Auch Schnittstellen können wir so teilautomatisiert erzeugen. Die Software­entwickler erweitern dann diesen Quellcode mit der Programmlogik.
     
  • Test: Basierend auf den Anwendungsfällen erstellen wir einzelne Tests und umfangreiche Testszenarien, die die Funktionalität des Systems sicherstellen. Die unterschiedlichen Tests werden ebenfalls in den o.g. Modellen hinterlegt und als Testcode generiert.