Skript zur Vorlesung Softwaretechnik Folge 8 Methoden für Entwurf und Realisierung IT Kompaktkurs Sommersemester 2001 Prof. Dr. Herbert Fischer Fachhochschule Deggendorf
1 Methoden für Entwurf und Realisierung 1.1 Überblick Wir werden in diesem Kapitel das methodische Vorgehen in der Phase Entwurf und Realisierung der Softwareentwicklung genauer ansehen. Das Strukturierte Design (Structured Design =SD)! Wir werden uns zunächst mit den Zielen und Aufgaben des Softwareentwurfs beschäftigen. Dabei werden wir den Begriff Software-Architektur klären. Die Kenntnis der funktionalen Abstraktion ist Voraussetzung für das Verständnisse der in der Entwurfsphase verwendeten Strukturdiagramme. Wir werden am Beispiel einer Bibliotheksverwaltung die Entwurfsphase mit Unterstützung eines SE-Tools durchführen. Am Ende werden wir besprechen, wir man einen vorliegenden Entwurf für die Realisierung der Software verwenden kann. Strukturierter Entwurf (und Realisierung) Structured Design (SD) Software-Architektur Funktionale Abstraktion Strukturdiagramme Realisierung Abbildung 1: Strukturierter Entwurf und Realisierung Prof. Dr. Herbert Fischer Seite: 2 Stand: 03.05.01, Datei: skript8.doc
Wir sehen uns nochmals den Gesamtüberblick der Softwareentwicklung an, quasi als Standortbestimmung. Wir befinden uns in der Entwurfs-Phase, also kurz vor der Realisierung! Phasen der Softwareentwicklung Entwicklungsrichtung Anforderungen & Planung Analyse & Definition Entwurf Entwicklungsrichtung Realisierung & Modultest Integrations- & Systemtest Auslieferung & Installation Wartung Abbildung 2: Phasen der Softwareentwicklung Prof. Dr. Herbert Fischer Seite: 3 Stand: 03.05.01, Datei: skript8.doc
1.2 Zielsetzung des Software-Entwurfs Zielsetzung des Software-Entwurfs ist eine Software-Architektur. Dabei geht es um die Design-Entscheidung, welche Teile der Strukturierten Analyse in Software umgesetzt werden sollen und wie die Struktur des künftigen Software-Systems aussehen soll Üblicherweise spricht man dabei von Systemkomponenten und deren Beziehungen untereinander. Eine Systemkomponente ist ein abgegrenzter Teil eines Software-Systems und dient als Baustein für die physikalische Struktur einer Software-Anwendung. Ziele und Aufgaben des Software-Entwurfs Entwurf einer Software-Architektur Beschreibung der Struktur des Software- Systems mit Systemkomponenten und Beziehungen Beispiele prozedural: Funktionen objektorientiert: Klassen Abbildung 3: Ziele und Aufgaben des Software-Entwurfs Beispiele für Systemkomponenten sind beispielsweise: Funktionen für prozedurale Entwürfe Klassen für objektorientierte Entwürfe Prof. Dr. Herbert Fischer Seite: 4 Stand: 03.05.01, Datei: skript8.doc
1.3 Grundlagen 1.3.1 Software-Architektur Wir sehen uns zu Beginn dieses Abschnitts ein einfaches Beispiel für die Software-Architektur einer betriebswirtschaftlichen Software-Anwendung im folg. Ausschnitt an: Stammdatenverwaltung Einkauf Verkauf Beispiel: Software-Architektur Stammdatenverwaltung Systemkomponenten Einkauf Verkauf Abbildung 4: Beispiel einer Software-Architektur Besteht nun eine Software-Architektur aus vielen Komponenten, dann ist Strukturierung notwendig. Prof. Dr. Herbert Fischer Seite: 5 Stand: 03.05.01, Datei: skript8.doc
1.3.2 Schichtenarchitektur Hierzu wird der Entwurf in verschiedenen Schichten dargestellt, es entsteht eine Schichtenarchitektur. Ein Entwurf in Schichtenarchitektur hat folgende Eigenschaften: Komponenten innerhalb einer Schicht können beliebig aufeinander zugreifen Zwischen den Schichten gelten strengere Kommunikationsregeln Man könnte einen komplexen Entwurf einer betriebswirtschaftlichen Anwendungen in die Schichten Benutzeroberfläche Anwendungskomponenten Datenhaltung strukturieren. Schichten-Architektur Komponenten der Benutzeroberfläche Anwendungskomponenten Komponenten der Datenhaltung Abbildung 5: Schichten-Architektur Prof. Dr. Herbert Fischer Seite: 6 Stand: 03.05.01, Datei: skript8.doc
Man könnte sich eine Schichtenarchitektur für den Entwurf eines Warenwirtschaftssystems vorstellen. Auf der Schicht der Benutzeroberfläche sind die Komponenten Dialog und Batch Die Anwendungsschicht befinden sich die Komponenten Auftragsverwaltung, etc. Die Datenkomponenten wären beispielsweise Kunden, Aufträge und Lieferanten Beispiel Warenwirtschaftssystem (Ausschnitt) Dialog Hintergrund Auftragsverwaltung Kunden Aufträge Lieferanten Abbildung 6: Beispiel einer Schichtenarchitektur (Ausschnitt eines Warenwirtschaftssystems) Prof. Dr. Herbert Fischer Seite: 7 Stand: 03.05.01, Datei: skript8.doc
1.4 Hauptaufgaben des Software-Entwurfs Die Hauptaufgaben des Software-Entwurfs lassen sich zusammenfassen: Es wird eine Software-Architektur entworfen, welche die Zerlegung des definierten System (aus Systemanalyse und definition) der Systemkomponeten die Strukturierung durch Anordnung der Systemkomponenten (Schichtenarchitketur) und die Beschreibung der Beziehungen zwischen den Systemkomponenten zum Ziel hat. Hauptaufgaben des Software-Entwurfs Entwerfen einer Software-Architektur Zerlegung Strukturierung Beziehungen zwischen den Systemkomponenten Ergebnisse: Software-Architektur Spezifikation jeder Systemkomponente Abbildung 7: Hauptaufgaben des Software-Entwurfs Für die Komposition geeigneter Systemkomponenten ist die Kreativität und Erfahrung eines bzw einer Software-Designers/in gefragt. Prof. Dr. Herbert Fischer Seite: 8 Stand: 03.05.01, Datei: skript8.doc
1.5 Funktionale Abstraktion 1.5.1 Schema der funktionalen Abstraktion Um die Systemkomplexität zu reduzieren nutzen wir das Prinzip der Abstraktion. Wichtig dabei ist, dass eine Funktion erklärt, was sie leisten kann. Wie die Dienstleistung erbracht wird ist dabei uninteressant. Die Anwendung der Funktion liefert stets ein korrektes Ergebnis! Eine schematische Darstellung der funktionalen Abstraktion sehen Sie in der folgenden Abbildung. Funktionalen Abstraktion Schema Eingabe Ausgabe WAS WIE Abbildung 8: Schema der funktionalen Abstraktion Prof. Dr. Herbert Fischer Seite: 9 Stand: 03.05.01, Datei: skript8.doc
Erläuterung anhand eines praktischen Beispiels: Funktionale Abstraktion Beispiel Kapital Zinssatz Zeit Zinsberechnung Zins C++ Funktionsaufruf Abbildung 9: Beispiel eines funktionalen Abstraktion Zur Zinsberechnung ist es wichtig die Voraussetzungen zur Berechnung und das erwartete Ergebnis zu beschreiben. Es ist uninteressant, wie die Zinsberechnung ausgeführt wird. Kurz gesagt: Wichtig ist, dass das Ergebnis stimmt! Prof. Dr. Herbert Fischer Seite: 10 Stand: 03.05.01, Datei: skript8.doc
1.5.2 Schritte der funktionalen Abstraktion Für eine vollständige Spezifikation einer funktionalen Abstraktion sind folgenden Schritte erforderlich: Aufgabenbeschreibung (WIE) Eingabeparameter mit Datentyp Ausgabeparameter mit Datentyp und Abhängigkeiten von den Eingabeparametern Voraussetzungen und Vorbedingungen Bedingungen nach der Abstraktion Verhalten bei Fehlern Leistungsmerkmale Spezifikation der funktionalen Abstraktion Aufgabenbeschreibung (WIE) Eingabeparameter mit Datentyp Ausgabeparameter mit Datentyp und Abhängigkeiten von den Eingabeparametern Voraussetzungen und Vorbedingungen Bedingungen nach der Abstraktion Verhalten bei Fehlern Leistungsmerkmale Abbildung 10: Spezifikation der funktionalen Abstraktion Prof. Dr. Herbert Fischer Seite: 11 Stand: 03.05.01, Datei: skript8.doc
1.6 Strukturdiagramme 1.6.1 Aufgabe und Verwendung von Strukturdiagrammen Zielsetzung des Software-Entwurfs ist ja eine Software-Architektur, welche uns als Vorlage für die anschließende Realisierung dienen soll. Strukturdiagramme werden zur grafischen Darstellung von funktionalen Systemkomponenten verwendet. Die funktionale Abstraktion hilft uns dabei, die Aufrufstruktur und die Datenflüsse zwischen den Systemkomponenten deutlich zu machen. Strukturdiagramme grafische Darstellung der Software-Architektur funktionale Abstraktion Aufrufstruktur der Systemkomponenten Datenflüsse zwischen Systemkomponenten Abbildung 11: Strukturdiagramme Prof. Dr. Herbert Fischer Seite: 12 Stand: 03.05.01, Datei: skript8.doc
1.6.2 Notation für Strukturdiagramme Die Basisnotation für Strukturdiagramme besteht aus Rechtecken (Funktionen), Sechsecken (Datenbereiche) und Pfeilen (Datenflüssen). Je nach Spezifikation der Parameter unterscheiden wir Einfach-Pfeile und Doppelpfeile als Datenflüsse (leerer Kreis) Kontrollflüsse (gefüllter Kreis) Hybridflüsse (Kreis mit Punkt) Für Funktionsrückgabepfeile werden mit Doppelpfeilen dargestellt und entsprechend der Parameterspezifikation unterschieden. Basisnotation für Strukturdiagramme Funktion (Rechteck) Datenbereich (Sechseck) Parameter für Funktionsübergabe (Pfeil) Parameter für Funktionsrückgabe (Doppelpfeil) Datenparameter (Pfeilbeginn: leerer Kreis) Kontrollparameter (Pfeilbeginn: gefüllter Kreis) Hybridparameter (Pfeilbeginn: Kreis mit Punkt) Abbildung 12: Basisnotation für Strukturdiagramme Prof. Dr. Herbert Fischer Seite: 13 Stand: 03.05.01, Datei: skript8.doc
1.6.3 Praktisches Beispiel Wie sieht nun ein Strukturdiagramm in der Praxis des Software-Entwurfs aus? Es ist sinnvoll, einen Ausschnitt aus der Bibliotheksverwaltung anzusehen. Dieses Beispiel hatten wir auch schon im Rahmen der Strukturierten Analyse verwendet. Einen kleinen Ausschnitt unserer Diskussion sehen wir in diesem Strukturdiagramm. Es wurde mit einem CASE-Tool namens INNOVATOR der Firma MID GmbH angefertigt. Strukturdiagramm eines Bibliotheksverwaltungssystems Abbildung 13: Strukturdiagramm eines Bibliotheksverwaltungssystems Prof. Dr. Herbert Fischer Seite: 14 Stand: 03.05.01, Datei: skript8.doc
1.7 Übergangs von der Strukturierten Analyse zum Strukturierten Entwurf Wie können wir denn die Ergebnisse der Phase Analyse und Definition für den Softwareentwurf nutzen? Bei Vorlage von Kontext- und Datenflußdiagrammen mit Prozeßspezifikation aus der Structured Analysis kann man sich im Structured Design an diesen Vorgaben orientieren. Die funktionale Abstraktion muss mit Kreativität und Erfahrung erreicht werden. Mit Einsatz eines SE-Tools kann man jedoch beim Software-Design auf die Prozesse und Datenflüsse der Analyse referenzieren. Auch die Aufrufparameter können aus dem bereits existierenden Data Dictionary bezogen bzw. ergänzt werden. Eine andere Möglichkeit besteht darin, eine Transformation einer Strukturierten Analyse (SA) in ein Strukturiertes Design (SD) durchzuführen. Diese Vorgehensweise beinhaltet Handlungsempfehlungen, ersetzt jedoch keines Falls die bereits mehrfach erwähnte Kreativität und Erfahrung. Im übrigen wird hier auf die einschlägige Literatur, wie im Skript angegeben, verwiesen. Prof. Dr. Herbert Fischer Seite: 15 Stand: 03.05.01, Datei: skript8.doc
1.8 Realisierung 1.8.1 Einzelaufgaben Wie gehen davon aus, dass aus der Entwurfsphase eine Software-Architektur mit geeigneten Systemkomponenten vorliegt. Folgende Einzelaufgaben sind während der Realisierung von Systemkomponenten durchzuführen: Konzeption von Datenstrukturen und Algorithmen Strukturierung des Programms Dokumentation des Quellcodes Umsetzung der Entwurfskonzepte in Syntaxkonstrukte der verwendeten Programmiersprache Angaben zu Zeit- und Speicherbedarf des Programms in Abhängigkeit der Eingabegrößen Test der entwickelten Systemkomponenten einschließlich Testplanung und Testfallerstellung Software-Realisierung Aufgaben Konzeption von Datenstrukturen und Algorithmen Strukturierung des Programms Dokumentation des Quellcodes Umsetzung der Entwurfskonzepte in Syntaxkonstrukte Angaben zu Zeit- und Speicherbedarf des Programms Test der entwickelten Systemkomponenten (Testplanung und Testfallerstellung) Abbildung 14: Aufgaben der Software-Realisierung Je besser Analyse und Entwurf einer Softwarelösung durchdacht ist, desto weniger Probleme sind in der Realisierungphase zu erwarten. Prof. Dr. Herbert Fischer Seite: 16 Stand: 03.05.01, Datei: skript8.doc
1.8.2 Unterstützungsmöglichkeiten Der Übergang von der Strukturdiagrammen zur Realisierung ist ja doch noch ein großer Sprung. Aber auch hierfür gibt es Unterstützungsmöglichkeiten. Viele SE-Tools bieten hier rechnergestützte Basiskonzepte wie Struktogramme oder Programmablaufpläne an. Hier nochmals zur Erinnerung ein Struktogramm. Struktogramm (Mehrfachauswahl) Ausdruck Fall 1 Anw. 1 Fall 2 default Anw. 2 Fall 3 Ausnahme- Anw. 3 Anweisungen Anweisung(en) Abbildung 15: Struktogramme zur Realisierungsvorbereitung Mit diesem Basiskonzept in man in der Lage einen Softwarentwurf, beispielsweise als Strukturdiagramm, in ein Struktogramm zu konvertieren. Eingabe- und Ausgabeparameter der entworfenen Systemkomponenten und Funktionen werden in Struktogrammen angelegt. Funktionsspezifikationen aus der Entwurfsphase dienen als Kommentar für die nun anstehende Implementierung der Systemkomponenten in der Syntax der verwendeten Programmiersprache. Prof. Dr. Herbert Fischer Seite: 17 Stand: 03.05.01, Datei: skript8.doc
1.9 Aufgaben 1.9.1 Funktionale Abstraktion und Funktions-Prototypen Aus der Programmierung in C bzw. C++ kennen Sie den Begriff des Funktionsprototypen. Die Funktion MAX soll den größeren von zwei Werten bestimmen. Erläutern Sie das Prinzip der funktionalen Abstraktion anhand eines Schaubildes für die Funktion MAX. Formulieren Sie den zugehörigen Funktionsprototypen in C-Pseudocode. Prof. Dr. Herbert Fischer Seite: 18 Stand: 03.05.01, Datei: skript8.doc