|
3. OEP
OEP (Object Engineering Process) ist ein von Bernd Oestereich
entwickeltes auf OOAD (objektorientierte Analyse und Design), UML
und UP (Unified Process) basierendes Vorgehensmodell zur
objektorientierten Softwareentwicklung. OEP ist ein
iterativ-inkrementeller, agiler, anwendungsfallgetriebener,
architekturzentrierter Entwicklungsprozess. OEP ist zugeschnitten
auf die Entwicklung betrieblicher Informationssysteme als
mehrschichtige objektorientierte Client-Server-Architektur und
weniger gut geeignet für die Entwicklung technischer Systeme. Weiteres siehe http://www.oose.de/oep. Es folgt eine vereinfachte Kurzübersicht zu den von Oestereich fürdie objektorientierte Analyse (OOA) vorgeschlagenen Schritten(anders als hier dargestellt teilweise iterativ; ausführlicheBeschreibung siehe Buch:Oestereich, Objektorientierte Softwareentwicklung, 3486255738): - Systemidee und Zielsetzung entwickeln:
Was soll erreicht werden, Ideen, Visionen,
Absichtsbekundungen und Wünsche. Freitext, ca. halbe Seite.
- Anforderungsbeitragende (Stakeholder) identifizieren:
Auftraggeber, Gesetzgeber, Projektbetroffene,
Systembetroffene, Anwender, Kunden, Support, Vertrieb und
Projektgegner. Tabellarische Unterscheidung in: Fachexperten,
Anforderungsverantwortliche und Systembetroffene/Akteure.
- Geschäftsprozesse identifizieren:
Systemidee mit UML-Anwendungsfalldiagramm (Use Case
Diagram, «workflow») visualisieren. Geschäftsprozesse mit
jeweils einem UML-Aktivitätsdiagramm (Ablaufdiagramm mit
zeitlich aufeinander folgenden Schritten) abstrakt beschreiben.
Fachliche und am Geschäft beteiligte Akteure abstrakt
beschreiben.
Ein Anwendungsfall (Use Case) beschreibt eine zeitlich
ununterbrochene Interaktion eines oder mehrerer Akteure mit
einem System.
Ein Geschäftsprozess kann aus mehreren Anwendungsfällen
bestehen und stellt eine Zusammenfassung von fachlich zusammenhängenden
Aktivitäten dar, die durchgeführt werden, um einen Geschäftsvorfall
ergebnisorientiert zu bearbeiten.
Ein Geschäftsvorfall (z.B. Antrag) entsteht durch ein
Ereignis (z.B. Antragseingang) und hat fachliche Ergebnisse
(z.B. Vertrag).
- Interessen der Anforderungsbeitragenden (Stakeholder)
identifizieren:
Beschreibung der Ziele und Interessen, Aufzählung
wichtiger geforderter Systemeigenschaften und Identifizierung
von Problemen und Schwachstellen, alles aus Sicht der
Anforderungsbeitragenden.
- Geschäftsanwendungsfälle (Business Use Case) identifizieren:
Identifizierung der Geschäftsanwendungsfälle («business»)
(eventuell in Form von Stories) und deren Auslöser und
Ergebnisse sowie Identifizierung auszuschließender Geschäftsanwendungsfälle
(«business» {excluded}).
Ein Geschäftsanwendungsfall (Geschäftsfall, Business Use
Case) beschreibt einen Anwendungsfall in abstrakter
fachlicher Form aus Sicht des Anwenders.
- Anwendungsfälle essentiell beschreiben:
Beschreibung der geschäftlichen Intentionen der Geschäftsanwendungsfälle
(«essential»). Definition der Auslöser, Vorbedingungen und
eingehenden Informationen sowie der Ergebnisse, Nachbedingungen
und ausgehenden Informationen. Entkopplung der Anwendungsfälle
zu einzelnen kohärenten fachlichen Sachverhalten (eventuell mit
«include» und «extend»).
- Systemanwendungsfälle identifizieren:
Konkretisierung der essentiellen
Anwendungsfallbeschreibungen unter Berücksichtigung konkreter
Umgebungsbedingungen, Anforderungen und technischer
Gegebenheiten. Eventuell Aufteilung eines essentiellen Geschäftsfalls
in mehrere Systemanwendungsfälle, wenn unterschiedliche
technische Systeme verwendet werden (z.B. Telefon, Fax, E-Mail,
Web).
- Materialsammlung und -studie:
Untersuchung von bestehenden Materialien, Gegenständen,
Beispielen, Muster, Formulare, Vordrucke, Korrespondenzen und
Beschreibungen.
- Anforderungen (Requirements) beschreiben:
Funktionale Anforderungen (Anwendungsfälle),
Benutzbarkeit (Usability), Effizienz (Performance), Zuverlässigkeit
(Reliability), Änderbarkeit / Erweiterbarkeit / Wartbarkeit /
Administrierbarkeit (Supportability), Gesetze, Standards und
Testanforderungen. Unterscheidung in Pflichtanforderungen,
optionale Anforderungen, Absichten, Vorschläge und Kommentare.
- Geschäftsklassen identifizieren:
Identifizierung der fachlichen Gegenstände/Konzepte und
Modellierung der strukturellen fachlichen Zusammenhänge in
einem einfachen Analyse-Klassenmodell, ohne zu viele Details,
aber mit Assoziationen, Assoziationsrollen und Multiplizitäten.
Das Analyse-Klassenmodell soll für den Auftraggeber oder die
Fachabteilung verständlich sein.
- Fachliches Glossar anlegen:
Definition und Begriffskonsolidierung aller fachlichen
Begriffe, aller Klassen des Analyse-Klassenmodells und aller
Assoziationsrollen.
- Anwendungsfall-Ablaufmodell entwickeln:
Modellierung aller Anwendungsfälle sowohl des
Standardablaufs als auch des vollständigen Ablaufs inklusive
aller fachlichen Ausnahmen und Varianten in UML-Aktivitätsdiagrammen.
Für alle elementaren Aktivitäten Modellierung sowohl aller
eingehenden als auch aller resultierenden Objekte und Daten in
zu UML-Objektflussdiagrammen erweiterten Aktivitätsdiagrammen.
- Systemschnittstelle beschreiben:
Schnittstellenbeschreibungen zu allen ein- und
ausgehenden Daten, Objekten und Ereignissen. Beschreibung der
Dialoge, Ausgabeerzeugnisse, Daten-Schnittstellen und
funktionalen Schnittstellen.
- Exploratives Schnittstellen-Prototyping:
Häufig lauffähige und benutzbare Sequenzen von
Dialogentwurfprototypen. Eventuell auch Auswertungen, Formulare,
Simulationen oder Berechnungen.
Das objektorientierte Design (OOD) könnte folgendermaßen
ablaufen:
- Anwendungsarchitektur definieren:
Systemdesign bezieht sich auf bestimmte
Anwendungsarchitektur, die zuerst definiert werden muss. Eine übliche
Anwendungsarchitektur wäre eine komponentenbasierte
Three-Tier-Architektur mit einer Präsentationsschicht auf den
Clients (Dialog-Steuerung), einer Geschäftslogikschicht auf
Servern (Dialog-Agent, Workflow-Steuerung,
Anwendungsfallsteuerung, fachliche Komponente, externe
Komponenten) und einer zentralen Datenhaltung (Datenbankserver).
- Fachliche Komponenten identifizieren:
Definition eines ersten fachlichen Komponentenmodells auf
Basis des Analyse-Klassenmodells, von Workflow-Komponenten («workflow»)
zu jedem Geschäftsprozess und von
Anwendungsfallsteuerungskomponenten («use-case-control») zu
jedem Anwendungsfall.
- Komponentenspezifische Klassenmodelle entwickeln:
Entwicklung von lösungsorientierten
komponentenspezifischen Design-Klassenmodellen für jede
Komponente. Auflösung komponentenübergreifender
Klassenbeziehungen und Ersetzung durch komponentengerechte
Schnittstellen (Factory-, Observer-, Object-Interface).
- Zustandsmodelle (weiter-)entwickeln:
Identifizierung der fachlichen Zustände, der Zustandsänderungen
verursachenden Operationen, der zustandsabhängigen Operationen
und der Nachfolgezustände im UML-Zustandsdiagramm.
Zustandsmodellierung z.B. mit Zustandsautomat, Zusicherungen,
Zustandsattributen oder Zustands-Entwurfsmuster.
- Komponentenabhängigkeiten identifizieren und ggf.
restrukturieren:
Überprüfung sowohl der strukturellen als auch der
dynamischen Zusammenhänge und Abhängigkeiten zwischen den
Komponenten mit dem Ziel der Minimierung der Kopplungen und Abhängigkeiten.
Per zu UML-Objektflussdiagrammen erweiterten Aktivitätsdiagrammen
(oder alternativ per UML-Sequenz- oder -Kollaborationsdiagramm)
werden separierbare Verantwortlichkeitsbereiche (swim lanes)
ermittelt.
- Komponentenschnittstellen entwerfen:
Aus Aktivitäten (z.B. der
Anwendungsfallsteuerungskomponente und der fachlichen
Komponenten) werden Schnittstellenbeschreibungen («interface»)
und Datentransferobjekte («structure») abgeleitet.
- Zusammenarbeitsmodelle entwickeln:
UML-Sequenz- oder -Kollaborationsdiagramme für alle
Anwendungsfälle sowohl für den Standardablauf als auch die
wichtigsten Ablaufvarianten entwerfen. In der Regel dienen diese
Diagramme nur zur Ermittlung von Erkenntnissen über die benötigten
Operationen und Datentransferobjekte und werden im weiteren
Verlauf nicht mehr benötigt.
- Ablauforientierte Komponententests entwickeln:
Entwurf von Tests für alle Anwendungsfälle und
Schnittstellen, möglichst automatisierbar (z.B. mit JUnit).
- Klassentests entwickeln:
Entwurf von Tests für alle Operationen unter Berücksichtigung
aller möglichen Zustände/Umgebungsbedingungen, möglichst
automatisierbar (z.B. mit JUnit).
- Attribute definieren:
Überprüfung aller Klassenattribute (z.B.
Klassenzuordnung, eventuell eigene Klasse, Enumeration,
Zusicherungen).
- Dialoge spezifizieren:
Zuordnung der Dialogkontexte und Dialogkomponenten zu
Aktivitäten der UML-Aktivitätsdiagramme und zu Subsystemen.
Spezifizierung der Dialogkomponenten und Definition von
clientseitig auszuführenden Vorabüberprüfungen.
- Überprüfung des Designs:
Prinzipien der Objektorientierung, Design Patterns,
Architektur, Namenskonventionen, Konsistenz, Effizienz,
Erweiterbarkeit, Flexibilität, Testbarkeit,
Benutzerfreundlichkeit, Zuverlässigkeit, Sicherheit,
Korrektheit, Vollständigkeit, Widerspruchsfreiheit, Überprüfbarkeit,
Nachvollziehbarkeit, Übersichtlichkeit, ...
|
|
|