Kapitel 5 - Entwurfsprozess"
|
Inhalt
|
- Entwurf - Ziele, Struktur und Prozess
- Datenflussdiagramme
- Tests und Verifikation
- Modularisierung
- UI-Entwurf
|
Entwurf
"Ziel: Umwandlung der während der Analysephase gewonnenen Anforderungsspezifikation in
die Architektur des künftigen Software-Produkts."
Dient später als Vorlage für Implementierung...
Entwurf - Ziele, Struktur und Prozess
- Ziel ist Spezifikation des Wie's (Also How to Solve?)
- Das Design bringt die Anforderungsspezifikation in Vorlagen für Implementierung
- Entscheidungen über HW und SW Plattform
- Softwarearchitektonische Entwurfsphase (grundlegende Komponenten und Muster)
- Detailierter Entwurf der Module (verfeinern der Komponenten - nur Spezifikation)
Auf welche möglichen künftigen Änderungen soll im Entwurf vorgegriffen werden?
Änderungen im Algorithmus, Datenrepräsentation, Perepheriegeräte oder sozialem Umfeld
Was sind Patterns?
Sich wiederholende Muster, welche erkannt werden müssen, um Templates einsetzen zu können. Eine Pattern-Beschreibung enthält immer Kontext, Problem und Lösung.
Was ist eine Softwarearchitektur?
- beschreibt die Struktur des SW-Systems durch Systemkomponenten (z.B. Unterprogramme, abstrakte Datentypen, Klassen) und ihre Beziehungenuntereinander
- Besteht aus Komponenten, der Struktur des Systems und der Kommunikationzwischen den Komponenten
- Entwurf der Architektur setzt viel Intuition und Erfahrung voraus
Motivation:
- Beherrschung der Komplexität des SW-Systems
- Arbeitsteilung im Rahmen eines Teams
- Wiederverwendbarkeit
- einfache Wartbarkeit
Welche Patterns werden in der Softwarearchitektur benutzt (Beispiele)?
- Schichtenarchitektur (wie Schichtenmodell von TCP/IP)
- Pipes und Filters Architektur (Scanners, Parser, Semantikanalyse, Optimierung)
- Broker Architektur (Kommunikationsbasiert für verteilte Systeme)
- Model-View-Controller Architektur (interaktive Applikation mit Modell, View und Events
- Presentation-Abstraction-Control (Präsentation,Abstraktion und Steuerung derAgenten)
Modularisierung
Was ist ein Modul (Programmbaustein)
- ist logische Einheit mit klar abgegrenztem Aufgabenbereich
- Kommunikation mit anderen Modulen nur über Ex-/Importschnittstelle
- Geheimnisprinzip - Innere Funkionen und ADT's für Umwelt verborgen
- austauschbar durch anderes Modul mit gleicher Exportschnittstelle
- kann getrennt von anderen Programmteilen entwickelt werden
- positiv für Wartbarkeit, Wiederverwendbarkeit ,Testbarkeit und Portabilität
Modularisierung - USES, IS_USED, IS_COMPONENT_OF
- Modul ist wohl definierte Komponente eines Softwaresystems
- Funktionale Module (Leistung) oder ADT-Module / Datenobjektmodule
- USES Relation für ausgehende Kanten
- IS_USED für eingehende Kanten
- Mit IS_COMPONENT_OF oder CONSISTS_OF wird Hierarchie gebaut
Wie kommunizieren Module (Klassifikation von Moduln)?
- Über Schnittstellen (Variablen, Funktionen etc), welche explizit als Schnittstelle gekennzeichnet werden (exportiert)
- Export (Dienst anbieten) und Import (Dienst anfordern bzw. einfügen)
- Vorteil ist die Abstraction der Module, da Details verschlossen bleiben
- Solange das Interface nicht geändert wird, verursachen Änderungen im Modul keinen Mehraufwandt
Schnittstelle - EXPORTED, IMPORTED, Entwurf
Eine Schnittstelle sollte nur das nötigste so kurz wie möglich anbieten
- sonst zu komplex und unverständlich
- sonst Fehleranfälligkeit in Implementierung
- zu viele Informationen könnten missbraucht werden
Notation des Modulentwurfs
- Keine Standartisierte Notation bis jetzt
- Jede Notation ist so Formal wie es die Syntax ist
- die Semantik der Exports wird aber nicht formal spezifiziert
- Textnotation beinhaltet Funktionsrümpfe und Beschreibung in natürlicher Spache
- Graphische Design-Notation zeigt ein Diagramm mit Relationen (USES) und CONSIST_OF-Beziehungen
Was ist ein generisches Modul oder Unterprogramm?
- Generische Module enthalten nur Strukturinformationen
- Anwendungsspezifische Datenfelder werden vom Anwender dazugefügt
Mit Hilfe der generischen Module können mächtige und wiederverwendbare Programmteile produziert werden.
Dabei werden Module, die eine ähnliche Leistung liefern und sich nur im Interface in den Typen und den exportierten
Funktionen unterscheiden, durch einen höheren Abstraktionsgrad mit Hilfe generischer Module realisiert.
Dazu werden die variierenden Bereiche alle in einem Modul gesammelt und abstrahiert. Durch die
dadurch entstehenden generischen Module können Inkonsistenzen in Modulen vermieden werden und sie sind leicht
änderbar. Ein generisches Modul wird in bezug auf einen Typ parametrisiert - man spricht auch voneiner Programmschablone.
Ein Client kann so ein generisches Modul nicht direkt nutzen, dazu muss es erst mit den aktuellen Parametern
instantiiert werden.
Schrittweises Vorgehen und Verfeinern - Vorteile, Nachteile
- Schrittweise Top-Down Verfeinerung beliebteste Methode
- In jedem Schritt wird Problem in Unterprobleme zerlegt
- Subsolutions werden einfach zusammengelinkt über Kontrollstrukturen
- Decomposition Tree zur Darstellung
Probleme:
- bei großen Programmen schlecht umsetzbar
- führt nicht immer zur besten Lösung
- Entwurf ist ein kreativer Prozess, der so nicht umgangen werden kann
- entdecken anderer Lösungen bleibt so oft auf der Strecke
Nachteile:
- Unterprobleme werden isoliert betrachtet, deshalb keine Generalisierung möglich
- kaum eine Wiederverwendbarkeit
- keine Vereinigung mehrerer Subproblems
- kein Information Hiding, da keine Kapselung
- falls sich was in Struktur ändern, muss alles überarbeitet werden
Bearbeitung von Anomalien - Ausnahmen
- Unerwartete und unvorhergesehene Umstände müssen abgeschirmt oder abgefangen werden (Exeptions)
- Ein Modul sollte bei einer Anomalie ein Exeption-Signal an den Client senden, der einen Exception Handler aufruft (z.B. für Overflow, Div by Zero etc.)
- Try {...} catch (EXEPTION) { //Exeption bearbeiten}
Verifikation und Tests
- Motivation
- Testfälle und Testmethoden
- black-box-Testen
- white-box-Testen
Verifikation, kleine Programme, große Systeme, Ansätze
- Kleine Programme durch mehrere Beispielanwendungsfälle
- Mit dem Verhalten des Programmes experimentieren = Testen
- Das Programm analysieren = Korrektheit herleiten
- Problem ist das die Verifikation auch zu verifizieren ist
Testen - Problem von Kontinuität
- Das System wird in repräsentativen Fällen getestet
- Es ist nicht mögliche alle Zustände zu testen
- Problem der Kontinuität ist, dass Software nicht weiß, wie Ordnung der Werte bei Vergleichen semantisch korrekt ist
Theoretische Probleme des Testens, vollständiges Testauswahlkriterium
- Konsistenz und Vollständigkeit der Test sind nicht machbar
Empirisches Testen
- Es wird mit verschiedenen Testreihen (Gruppen) verschiedene Use Cases getestet
- Da ein vollständiger Test nicht möglich, wird zum idealen Test Set approximiert
- Die Schwierigkeit besteht darin alle wichtigen Gruppen einer bestimmten Problemklasse zu finden
Unterschiede zwischen White-Box-Testen und Black-Box-Testen
- White-Box Tests benutzen interne Struktur der Software und ignorieren ggf. die Spezifikation
- Black-Bock-Tests basieren ausschließlich auf der Spezifikation, da kein Wissen über Code oder Entwurf vorhanden ist
Abdeckung von Anweisungen, Kanten, Bedingungen, Pfaden
- Abdeckung von Anweisungen (Ein Fehler kann nicht entdeckt werden, wenn der Teil des Programms den Fehler enthält, der nicht ausgeführt wird)
- Deshalb sollte jede elementare Anweisung überprüft werden
- Abdecken von Kanten (jede Kante des Kontroll-Fluss-Graphen muss einmal traversiert werden, was nicht immer geht.. z.B. Loop Condition besteht aus mehreren Konjunktionen)
- Abdecken von Bedingungen (Jede Kante des Kontroll-Fluss-Graphen wird traversiert und dabei jeder mögliche Wert für alle Bedingungen eingesetzt)
- Pfadabdeckung (alle Pfade von Anfangszustand zum Endzustand im Controll-Fluss-Graph werden traversiert. Meistens sind dort zu viele Pfade aufgrund vieler Loops im Programm. Jede Iteration ist ein extra Pfad!)
Syntaxgesteuertes Testen, Testen von Grenzwerten
- Syntaxgesteuertes Testen heißt, das für jede Produktion der BNF ein Testfall bearbeitet wird, d.h. alle Grammatikgesetze werden überprüft
Testen im Großen, Bottom-Up-Integration und Top-Down-Integration, Vorteile, Nachteile
Modultests zum verifizieren der korrekten Implementierung
Integration Tests verifizieren die Zusammenarbeit der beteiligten Module
- Big-bang - gar kein integriertes Testen
- Incremental - einfacher Fehler zu finden
System Tests prüfen das gesamte System mit allen Modulen
- bottom-up (USES Hierarchie)
- top-down (lower level Simulation)
Was ist Debugging?
- Aktivität des Suchen und Behebens von Fehlern, nachdem er entdeckt wurde
Entwurf der Benutzerschnittstelle
Das UI ist Maßstab nach dem Systeme von Nutzern bewertet werden.
Falls Software schwer benutzbar:
- Software wird verworfen
- Es können schnell Fehler gemacht werden
- Heute notwendige Komponenten
Verwendet werden Highresolution Graphic Displays, Maus und verschiedene Schnittstellen für verschiedene Nutzerklassen
- GUI's sollten Fähigkeiten der individuellen User unterstützen
- Konsistenz und Hilfesystem
Konsistenz der Benutzerschnittstelle
System Kommandos, Menüs und andere Oberflächen sollten
- Gleiche Format besitzen
- Parameter immer gleich übergeben
- Untersysteme sollten sich ähneln
- Nutzer sollte beim Erlernen eines Kommandos rückschlüsse auf Bedienung aller Anderen ziehen können
Eingebaute HELP-Unterstützung
- Vom Benutzerterminal erreichbar
- "How to get started?"
- Volle Beschreibung des Systems und wie es zu Nutzen ist
- Strukturierte Hilfe
Schablonen für Benutzerschnittstelle
Es werden Metapher verwendet, welche einfach assoziierbar sind
- Control Panel
- Desktop
- Trash
WIMP-Schnittstelle
WIMP = Windows, Icons, Menues, Pointing (Mausklick)
Vorteile
- Einfach zu lernen
- Viele Oberflächen zur Interaktion
- Überschaubar und unkompliziert
Nachteile
- Keine Standarts
- Schwer möglich sinnvolle Icons für abstrakte Komponenten zu finden
Systeme mit Menü
- Benutzer müssen nicht den genauen Befehlnamen wissen
- Weniger Tipparbeit
- System kann nicht in Fehlerzustand geführt werden
- Contextsensitive Hilfe
- Pull-Down und Pop-Up Menüs
Nachteile:
- Logische Verknüpfungen unmöglich ausdrückbar
- Für Experten Menü langsamer als Commandozeile
- Menühierarchie schnell komplex wenn viele Auswahlmöglichkeiten
Graphische Schnittstelle
- Grafiken werden zu Darstellung von Informationen verwendet
- Bilder sagen mehr als Worte
- Trends sind sichtbar
Textuelle Schnittstelle
- Kommandozeileninterpreter billig und einfach
- Kombinierende Kommandos erweitern Funktionalität und Aufrufkomplexität
- Externe Prozeduren und Programme können eingebunden werden
- Erfahrene Benutzer sehr schnell
Nachteile:
- Lernen aufwendig
- Fehler in Kommandos möglich
- Interaktion durch Tastatur (langsam)
- aber nicht für unerfahrene Nutzer sinnvoll
Entwurf von Fehlermeldungen
- Ersteindruck an Nutzer
- Schwer für unerfahrene Anwender
- Eigenschaften: Konsistent, Konstruktiv, Eindeutig und Präzise
- Nachricht sollte Beschreibung zur Fehlerbehebung enthalten
- On-Line Hilfe sollte auftufbar sein
Anwendung von Farbmonitoren
Ist zwar neue Dimension, nützt aber blinden oder Farbblinden nichts und es gibt auch keine Standarts.
Tips:
- Nicht zu viele Farben nutzen (4-5)
- Konsistenz bei Farbwiederverwendung
- Farbanpassung sollte durch Nutzer einstellbar sein
|
|
|
|
|
| Kapitel 1 | Einleitung |
|
Einführung, Geschichte...
|
| Kapitel 2 | Eigenschaften |
|
Filtern und Trennen, Modularisierung...
|
| Kapitel 3 | Strukturierte Analyse |
|
Strukturierte und OO-Analyse, Petri-Netze
|
| Kapitel 4 | Spezifikation |
|
Risikoanalyse, Modellierungshilfen, Spezifikationen
|
| Kapitel 5 | Entwurfsprozess |
|
Entwurf, DFD, Tests, UI...
|
| Kapitel 6 | Prozessmodelle |
|
Softwarekrise, Lebenszyklusmodelle...
|
| Kapitel 7 | CASE und PM |
|
CASE, Projektmanagement...
|
| Kapitel 8 | Software-Metriken |
|
Softwarequalität, Entwurfsmetriken...
|
| Kapitel 9 | Programmierungskonzepte |
|
Legacy Systeme, Reengineering...
|
|
|
|
|
|
|
Quellen:
|
Petr Kroha
Softwaretechnologie
|
Prof. Kroha
Vorlesungsskript
|
L. Rosenhainer
Vorlesungsskript
|
Word Wide Web
Verschiedenste Seiten
|
|
|
|
|
|
|