Software Engeineering
- 1. Organisatorisches und Motivation
- 2. Softwareentwurfsprozesse und Clean Code Development
- Anforderungsanalyse
- Der Modellbegriff
- Bilder
- Anforderungen an Software
- Anforderungsspezifikation
- Nichtfunktionale Anforderungen
- Funktionale Anforderungen
- Unified Modeling Language (UML)
- Unified Modeling Language
- UML Anwendungsfalldiagramme
- Vorgehen zur Modellierung
- Ein Beispiel - Krankenhausempfang
- Zusammenfassung
- UML Aktivitätsdiagramme
- UML Klassendiagramme
- Objektorientierte Analyse
- Objektorientierung
- Klassendiagramme
- Ein Beispiel
- Anwendungsfall zu Fachmodell
- Sequenzdiagramme
- Systementwurf
- Systementwurf allgemein
- Wann ist ein Systementwurf gut?
- Paketdiagramme
- UML Komponentendiagramme
- UML Verteilungsdiagramme
- Implementierung
1. Organisatorisches und Motivation
Software Engineering ist die Entdeckung und Anwendung solider Ingenieur-Prinzipien mit dem Ziel, auf wirtschaftliche Art Software zu bekommen, die zuverlässig ist und auf realen Rechnern läuft, verhindert Schäden, senkt die Gesamtkosten und hält Fortschritte fest. Es sind Methoden, Sprachen und Werkzeuge durch Konzepte miteinander verbunden. Reine Programmierfehler, wie ein falsches Zeichen kann eine Katastrophe auslösen, wie zum Beispiel die Mariner-1-Rakete. Je früher ein Fehler in der Entwicklung entdeckt wird, desto günstiger ist dessen Beseitigung.
Software
Software beschreibt sämtliche nicht physische Bestandteile eines Computers, Computernetzwerks oder mobilen Geräts. Gemeint sind Programme und Anwendungen (Betriebssystem), die den Computer für den Nutzer funktionstüchtig machen.
- Software ist ein technisches Produkt, dass entwickelt wird und Eigenschaften hat
- Software kann als ideales technisches Produkt angesehen werden, da es unter anderem nicht verschleißt
- Eigenschaften:
- immateriell: entwickelbar, kopierbar, wieder verwendbar, nur durch Fehler abnutzbar
- keine natürliche Lokalität
- realisiert keine stetige Funktion: Zusammenhang bei Eingabe und Ausgabe ist nicht von Funktion beschreibbar
- Software-Systeme funktionieren autonom, ohne menschliche Hilfe
- „Werkstoffe“ der Software sind amorph und universell
Software Engineering
Ist die Herstellung und Anwendung einer Software, wobei mehrere Personen beteiligt sind oder Versionen entstehen.
- Werkzeuge zur automatischen oder vom Benutzer gesteuerten Transformation und Speicherung von Information.
- es werden Programmier- und Modellierungssprachen genutzt, um die Syntax festzulegen
- Methoden werden genutzt, um die Software herzustellen
- mit diesen drei Dinge entstehen Konzepte
Was macht man im Software Engineering?
- Analyse: bestehende Problem zu durchdringen und zu verstehen (statisch oder dynamisch)
- Spezifikation der Anforderungen: Anforderungen müssen geordnet, dokumentiert, geprüft, ergänzt und korrigiert werden
- Architekturentwurf, Spezifikation der Module (System- und Softwareentwurf)
- Codierung und Modultest: Übersetzt den Code, implementiert und testet
- Integration, Test, Abnahme
- Betrieb und Wartung
- Auslauf und Ersetzung
SE als defensive Disziplin: Sie verhindert Schäden und sollte generell beachtet werden.
SE als globale Optimierungsmaßnahme: Separate Einsparungen an einzelnen SE-Aktivitäten
SE als Technologie für die Köpfe: Wissenschaftliche Erkenntnis und neue Technologie lassen sich gut in die Anwendung transferieren, wenn sie sich in Produkten niederschlagen
2. Softwareentwurfsprozesse und Clean Code Development
Clean Code
- Gefahren für Code: Starrheit | Zerbrechlichkeit | Untrennbarkeit | Undurchsichtigkeit
- Gründe für schlechten Code: wir schreiben schlechten Code
Clean Code – Quellcode, Dokumente, Konzepte, Regeln und Verfahren, die intuitiv verständlich, stabil und effizient sind.
Maßnahmen:
- Aussagekräftige, konsistente Namen
- Funktionen so klein wie möglich, nur ein mal if else, eine Sache machen, eine Ebene und von oben nach unten lesbar
- Objekte sollen nur mit Objekten ihrer unmittelbaren Umgebung kommunizieren, um Abhängigkeiten zu verringern
- nur so wenig Kommentare wie nötig
- Klassen nur so klein und so wenig Aufgaben wie nötig
- Stufenweise Verfeinerung mit dem Gebrauch von Werkzeugen
Software Entwicklungsprozesse
Prinzipien des Software Engineering
Dadurch soll eine bessere Wartbarkeit und eine einfachere Angepasstheit erreicht werden
- Zufriedenheit des Kunden hat höchste Priorität
- Anforderungsänderungen können auch in fortgeschrittenen Entwicklungsstadien auftreten.
- Kommunikation von Angesicht zu Angesicht ist der effiziente Weg, um
1. Abstraktion
Identifizierung und Trennung wichtiger und (zunächst) weniger wichtige Aspekte.
- Notwendig, um Komplexität handhaben zu können
- Anstatt ein konkretes Problem direkt zu lösen besser ein allgemeineres Problem lösen und dies als Grundlage zu verwenden
- Viele Abstraktionen erfordern eine weitere Klassifizierung
- erhöht die Wiederverwendbarkeit, aber auch die Komplexität
- Arten:
- Hierarchie: Verwandten Elementen erlauben, Eigenschaften und Implementierung zu teilen
- Polymorphie: Verwandten Elementen erlauben, ähnliches Verhalten über ähnliche Schnittstellen zu zeigen
- Muster: Ausnutzen wiederkehrender Arten von Beziehungen zwischen Elementen
2. Modularisierung
beschreibt das Strukturieren eines Produkts oder Systems in Form von austauschbaren Funktionsbausteinen.
- Strategien: Bottum up und Top Down
- Arten:
- Teile und Herrsche: Die Wiederverwendung von implementierten und verwendeten Modulen erhöht Produktivität
- High module cohesion: Es sollte eine enge Verbindung der Elemente innerhalb eines Moduls geben
- Low inter-modular coupling: Zwischen separaten Modulen sollten so wenig Verbindungen wie möglich existieren
- Teile und Herrsche: Die Wiederverwendung von implementierten und verwendeten Modulen erhöht Produktivität
3. Kapselung
Verbergen und Schützen von (inneren) Details der Implementierung eines Moduls
Nachteil: Erschwert ggf. die Testbarkeit von Modulen und die Fehlersuche
4. Hierarchische Zerlegung
Zerlegung eines Problems in Teilprobleme, so dass sich eine Baumstruktur ergibt.
Funktioniert durch: Abstraktion, Modularisierung und Trennung von Zuständigkeiten.
5. Trennung von Zuständigkeiten
Aufteilung eines Problems in unabhängige Teilaufgaben zur Reduzierung der Gesamtkomplexität
Unter anderem wird dafür das Architekturmuster MVC genutzt
6. Einheitlichkeit
Vereinheitlichung von Strukturen, Schemata, Muster, Vorgehensweisen und Entwurfsentscheidungen
- Komplexität von Software beherrschbar machen und die Wartbarkeit erhöhen
Agile Softwareentwicklung
- Individuals and interactions over processes and tools
- Working software over comprehensive documentation
- Customer collaboration over contract negotiation
- Responding to change over following a plan
Scrum
Ein agiler Prozess für Softwareentwicklung und Projektmanagement
- Scrum-Projekte werden schrittweise entwickelt
- Jedes Inkrement ist ein Zeitrahmen von üblicherweise 30 Kalendertagen und wird
Sprint genannt - Während eines Sprints arbeitet das Team fokussiert und ohne äußere Störungen
- Innerhalb jedes Sprints entwickelt das Team ein Inkrement von potenziell an den
Kunden auslieferbarer Funktionalität - jeden Tag gibt es ein Daily Scrum Meeting und am Ende ein Sprint Review Meeting
- Rollen: Product Owner, Scrum Master, Team und Stakeholder
- Scrum erfordert hochmotivierte und allgemein erfahrene Softwareentwickler
3. Allgemeine Softwareentwicklungsprozesse
- Wasserfallmodel: einfach, strikt
- iteratives Modell: Rückwärts gehen, geht nichts gleichzeitig
- Sprialmodell: alle Parteien zusammen, nicht einheitlich
- evolutionäres Modell: Beteiligung aller, schwere Kostenschätzung
Anforderungsanalyse
Der Modellbegriff
- Software ist beschrieben durch Spezifikation, Diagramme und Quellcode, Kennzahlen und Prospekte
- Arbeitsabläufe werden durch Prozessmodelle beschrieben, da die Wahl des Modells einen großen Einfluss hat
Modelle sind Abbilder von etwas oder Vorbilder für etwas.
- Deskritpives Modell: Modell, das ein Objekt beschreibt (Foto)
- Präskriptives Modell: Modell, zu Vorlage eines Objekts (Bauplan)
- Prognostische Modelle: deskriptiv, beschreiben zukünftigen Zustand, sie
- Die Modelltheorie von Stachowiak: Ein Modell entspricht dem Original nicht völlig:
- Attribute des Originals fallen durch Abstraktion weg (präterierte Attribute
- Die Abbildung ins Modell ist mit einer Transformation verbunden.
- Das Modell hat Attribute, die nicht durch das Original bestimmt sind (abundante Attribute).
- Abbildungsmerkmal: Zum Modell gibt es das Original, ein Gegenstück, das wirklich vorhanden, geplant oder fiktiv ist
- Verkürzungsmerkmal: Ein Modell erfasst nicht alle Attribute des Originals, sondern nur einen Ausschnitt.
- pragmatische Merkmal: Modelle können unter bestimmten Bedingungen das Original ersetzen.
Modellarten
Petri-Netz UML-Klassendiagramm
Bilder
Modellbegriff
Scrum
Wasserfallmodell
Anforderungen an Software
Aus Sicht des Kunden:
Aus der Sicht der Entwickler:
Verschiedene Phasenmodelle in der Entwicklung von Software beinhalten Erhebung und Analyse von Anforderungen
-> Wasserfall, iteratives Modell, evolutionäres Modell, agile Entwicklung, Scrum, etc.
Sowohl für Scrum als auch für das Wasserfallmodell sind Lastenheft und Pflichtenheft besonders wichtig
Das Lastenheft sind die Anforderungen, die der Auftraggeber einem potenziellen Auftragnehmer zur Last legen möchte.
Das Pflichtenheft sind Anforderungen, zu deren Umsetzung sich Auftragnehmer gegenüber Auftraggeber verpflichtet.
- Systemanalyse: In der Praxis wird das Pflichtenheft als juristisches Dokument betrachtet, das bei Streitigkeiten genutzt wird
- Systementwurf: Beinhaltet die Dokumentation der (technischen) Software- und Systemarchitektur.
Anforderungsspezifikation
Anforderung – Eine Bedingung oder Fähigkeit, die Benutzer benötigt, um ein Problem zu lösen oder ein Ziel zu erreichen.
Anforderungsanalyse - Prozess der Untersuchung muss System-, Hardware- oder Softwareanforderungen gelangen.
Anforderungsspezifikation dokumentiert die Anforderungen an Software und ihre Schnittstellen präzise und vollständig
- Requirements Analysis liefert Lastenheft als Anforderungsspezifikation
- System Design liefert Pflichtenheft als verfeinerte Anforderungsspezifikation
- inhaltliche Eigenschaften: Zutreffend | Vollständig | Widerspruchsfrei | Neutral | Nachvollziehbar | Objektivierbar
- strukturelle Eigenschaften: Leicht verständlich | Präzise | Leicht erstellbar |Leicht verwaltbar
- Bestandteile einer Anforderung:
- Identifikator: Identifiziert die Anforderung eindeutig.
- Beschreibung: Beschreibt die Anforderung kurz und prägnant, maximal 2-3 Sätze.
- Problembeschreibung: Beschreibt das die Anforderung verursachende Problem.
- Quelle: Identifiziert die anfordernde Person oder Dokument, aus dem sich die Anforderung ergibt (Rechtsvorschrift).
- Abnahmekriterium: Beschreibt eine messbare Bedingung, mit der geprüft wird, ob die Anforderung erfüllt wurde.
- Mögliche Struktur eine Anforderungsspezifikation
- Einleitung 2. Zielsetzung 3.Ausgangssituation 4.Beschreibung des Systems 5.Qualitätsanforderungen 6.Weiteres
Anforderungen werden durch Befragungen, Überprüfungen und Hospitationen erkannt
- Identifizierung von Anwendungsfällen -> Fachliche Anforderungen
- Identifizierung von Qualitätseigenschaften -> Nicht-funktionale Anforderungen
Nichtfunktionale Anforderungen
Anforderungen, die Merkmale des Systems ohne Bezug zum Funktionsumfang beschreiben (Zuverlässigkeit, Leistung, ...)
Funktionale Eignung |
|
Funktionale Eignung |
Grad, in Produkt Funktionen bietet, die angegebenen und impliziten Bedürfnissen entsprechen |
Funktionale Vollständigkeit |
Grad, zu dem Satz von Funktionen alle angegebenen Aufgaben und Benutzerziele abdeckt. |
Funktionale Korrektheit |
Grad, zu dem Produkt die richtigen Ergebnisse mit dem erforderlichen Grad an Präzision liefert. |
Funktionale Angemessenheit |
Grad, zu dem die Funktionen die Erledigung bestimmter Aufgaben und Ziele erleichtern |
Leistungsfähigkeit |
|
Leistungseffizienz |
Leistung im Verhältnis zur Menge der Ressourcen unter bestimmten Bedingungen. |
Zeitverhalten |
Ausmaß, in dem die Verarbeitungszeiten eines Produkts entsprechen. |
Ressourcennutzung |
Grad, in dem Ressourcen, die ein Produkt verwendet werden, den Anforderungen entsprechen. |
Kapazität |
Grad, zu dem die Grenzen eines Produkt- oder Systemparameters die Anforderungen erfüllen. |
Kompatibilität |
|
Kompatibilität |
Grad, in dem ein Produkt Informationen mit anderen Produkten austauschen kann |
Koexistenz |
Grad, zu dem ein Produkt seine Funktionen ausführen kann ohne Auswirkungen auf ein anderes |
Interoperabilität |
Grad, in dem mehr Produkte Informationen austauschen und nutzen können |
Benutzerfreundlichkeit |
|
Benutzerfreundlichkeit |
Grad, in dem ein Produkt von Benutzern verwendet werden kann |
Angemessenheit |
Grad, in dem die Benutzer erkennen können, ob ein Produkt für ihre Bedürfnisse geeignet ist. |
Erlernbarkeit |
Grad, in dem ein Produkt mit Effektivität und Zufriedenheit in einer Nutzung. |
Bedienbarkeit |
Grad, zu dem ein Produkt Eigenschaften aufweist, die es einfach zu bedienen machen |
Schutz vor Benutzerfehlern |
Ausmaß, in dem ein System die Benutzer vor Fehlern schützt. |
Ästhetik der Oberfläche |
Grad, zu dem eine Benutzeroberfläche eine angenehme Interaktion für Benutzer ermöglicht. |
Zugänglichkeit |
Ausmaß, in dem Produkt von Menschen mit unterschiedlichsten Eigenschaften genutzt wird |
Verlässlichkeit |
|
Zuverlässigkeit |
Grad, in dem ein System bestimmte Funktionen Bedingungen über bestimmten Zeitraum erfüllt. |
Reifegrad |
Grad, in dem System die Anforderungen an Zuverlässigkeit im Normalbetrieb erfüllt. |
Verfügbarkeit |
Grad, in dem ein System betriebsbereit ist, wenn es für die Nutzung benötigt wird. |
Fehlertoleranz |
Grad, zu dem ein System wie vorgesehen funktioniert trotz Vorhandenseins Fehlern erhöht. |
Wiederherstellbarkeit |
Grad, in dem ein Produkt oder System im Falle einer Unterbrechung wiederherstellen kann. |
Sicherheit |
|
Sicherheit |
Grad, in dem ein Produkt so schützt, dass Personen keinen Datenzugriff erhalten. |
Vertraulichkeit |
Grad, zu dem ein Produkt sicherstellt, dass Daten nur denjenigen wahren zugänglich sind |
Integrität |
Grad, zu dem ein System den unbefugten Zugriff verhindert. |
Unverfälschbarkeit |
Grad, in dem Aktionen nachweislich stattgefunden haben |
Rechenschaftspflicht |
Grad, in dem Handlungen einer Einheit auf diese Einheit zurückgeführt werden können. |
Authentizität |
Grad, in dem die Identität eines Subjekts oder einer Ressource diejenige ist, die behauptet wird. |
Wartungsfähigkeit |
|
Wartungsfähigkeit |
Grad der Effektivität, mit der ein Produkt geändert werden kann, um es zu verbessern |
Modularität |
Grad, in dem ein System aus einzelnen Komponenten besteht |
Wiederverwendbarkeit |
Grad, zu dem ein Asset in mehr als einem System verwendet werden kann |
Analysierbarkeit |
Grad der Effektivität, mit dem es möglich ist, die Auswirkungen einer Änderung zu identifizieren |
Modifizierbarkeit |
Ausmaß, in dem ein Produkt effektiv modifiziert werden kann, ohne Fehler einzuführen |
Testbarkeit |
Grad der Effektivität, mit dem Testkriterien für ein System für ein System festgelegt |
Portabilität |
|
Portabilität |
Grad der Effektivität, mit der System einer Nutzungsumgebung in andere übertragen wird |
Anpassungsfähigkeit |
Grad, in dem ein Produkt effektiv an unterschiedliche Nutzungsumgebungen angepasst wird |
Installierbarkeit |
Grad der Effektivität, mit der Produkt in Umgebung erfolgreich installiert werden kann. |
Ersetzbarkeit |
Grad, in dem ein Produkt ein Software in der gleichen Umgebung ersetzen kann. |
Bewertung:
Wichtigkeit: erster Parameter, vom Auftraggeber
Risiko in der Umsetzung: zweiter Parameter, Auftragnehmer
Skala: hoch (H), mittel (M), gering (L)
Funktionale Anforderungen
User story (Anwendererzählung) – Eine in Alltagssprache formulierte Software-Anforderung.
Mustervorlage: “Als ... möchte ich <Ziel/Wunsch>, um ....”
- Modelliermethodiken:
- Anwendungsfalldiagramme: Einsatzbereich (engl. scope) des geplanten Software-Systems Überblick über die funktionalen Anforderungen des Systems Vorlage für die Spezifikation der einzelnen Anwendungsfälle (engl. use cases)
- Aktivitätsdiagramme: Detaillierte Spezifikation der Abläufe der einzelnen Anwendungsfälle
- Analyse-Klassendiagramme: Statisches Fach- bzw. Domänenmodell der Anwendung Höhere Abstraktionsebene als Klassendiagramme für Programmcode
Der Anwendungsfall Authentifizieren repräsentiert eine vom System zu realisierende Funktion Funktionale Anforderung
Die Dokumentation des Anwendungsfalls mit der dargestellten Tabellenschemas repräsentiert die Spezifikation der Anforderung
Aktivitätsdiagramm Sonderfälle
KISS-Prinzip (Keep it simple [and] stupid)
- KISS-Prinzip im Software Engineering:
Software sollte von einem durchschnittlichen Programmierer auch unter widrigen Bedingungen gewartet werden können.
- Zur Wartung dürften ausschließlich die vereinbarten Werkzeuge benutzt werden.
- Erfüllen Sie die Anforderungen, die derzeit an das System gestellt werden
- Implementierung der einfachsten Lösung, die die Anforderungen (fast) erfüllt
- Verletzungen des KISS-Prinzips im Software Engineering:
- Überarchitektur heute, um zukünftige Anforderungen zu unterstützen (die dann anders sein werden)
- Komplexe Infrastruktur: heute viel investieren, um morgen Arbeit zu sparen (oder auch nicht)
extends immer bei seperaten use case vorgängen
Unified Modeling Language (UML)
Unified Modeling Language
Bestandteile:
Modell: Festlegung gültiger Begriffe und der Beziehungen zwischen diesen Begriffen
Notation: Graphische Sicht auf Ausschnitte dieser Modelle
Austausch: Vorschalg von Formaten für die Werkezugunterstützung
Eigentlicher Nutzen: Gemeinsame Arbeit an nicht-trivialen Softwareprojekten: Übersicht und Kommunikation
UML Anwendungsfalldiagramme
Jeder Player nimmt an genau einem Spiel teil.
Jedes Spiel wird von mindestens zwei Playern gespieltDiagrammtyp der UML zur Beschreibung der Interaktion von Akteuren mit einem betrachteten Systemen.
- Ausgangspunkt einer Anforderungsdefinition
- Initiale, grobe Sicht auf Funktionalität eines Systems
- Keine Spezifikation innerer Strukturen
- Zusammenhänge zwischen einer Menge von Anwendungsfällen und den beteiligten Akteuren
- Kontext und Gliederung für Beschreibung des Umgangs mit einem Geschäftsvorfall
- z.B. schriftliche Schadensmeldung eines Hausratversicherten
Zweck von Anwendungsfalldiagrammen
1. Dienen der abstrakten Beschreibung der Leistung sowie der Umgebung eines Systems
2. Strukturieren Anforderungen an System mit Spezifikation Akteure, Anwendungsfälle und Beziehungen
Anwendungsfall (engl. use case) – Eine von einem betrachteten System bereitgestellte Funktion.
Beschreiben, was System leisten muss: Funktionalität des Systems und Interaktion eines Anwenders
Können um extension points erweitert werden und können mit eigenen Stereotypen zur Nutzung fachspezifischer Begriffe versehen werden
Vorlage für Dokumentation von Anwendungsfällen
- Anwendungsfall: Name
- Ziel: Zielsetzung des Anwendungsfalls
- Kategorie: primär, sekundär oder optional
- Vorbedingung: erwarteter Zustand, bevor Anwendungsfall beginnt
- Nachbedingung (Erfolg): erreichter Zustand bei erfolgreicher Ausführung des Anwendungsfalls
- Nachbedingung (Fehlschlag): erreichter Zustand bei fehlerhafter Ausführung des Anwendungsfalls
- Akteure: Personengruppen oder Systeme, die den Anwendungsfall auslösen oder daran beteiligt sind
- Auslösendes Ereignis: Wenn dieses Ereignis eintritt, dann wird der Geschäftsprozess initiiert
- Beschreibung: vom durch den Anwendungsfall beschriebenen Geschäftsprozess auszuführende Aktionen
Akteur – Gruppe von Personen oder Systemen, die mit einem zu betrachtenden System interagieren (Student)
Subjekt – Grenz eines zu betrachtenden Systems in Bezug auf das Sammeln und Analysieren von Anforderungen (Bank).
Assoziation – Interaktion zwischen einem Akteur und einem Anwendungsfall.
Multiplizität – Definition der Kardinalität (d.h. Anzahl von Elementen) durch ein inklusives Intervall nicht-negativer Ganzzahlwerte zur Spezifikation der erlaubten Anzahl von Instanzen.
Multiplizität | Kurzform | Kardinalität |
0..0 | 0 | Collection must be empty |
0..1 | No instances or one instance | |
1..1 | 1 | Exactly one instance |
0..* | * | Zero or more instances |
1..* | At least one instance | |
5..5 | 5 | Exactly 5 instances |
m..n | At least but no more than instances |
Beziehung, die jede Instanz des spezifischen Akteurs indirekt als Instanz des Akteurs definiert
→ Spezielle Akteure nehmen indirekt an gleichen Anwendungsfällen teil ("Ist ein"-Beziehung)
Beziehung zwischen zwei Anwendungsfällen, die das Verhalten des eingeschlossenen Anwendungsfalls in das Verhalten des übergeordneten Basis-Anwendungsfalls einfügt.
→ Ausführung eines Anwendungsfalls innerhalb eines anderen Anwendungsfalls
→ Strukturierung komplexer Anwendungsfälle
→ Wiederverwendung vorhandener Funktionen und Vermeidung von Redundanz
Bedingte Erweiterung eines Anwendungsfalls durch einen eigenständigen anderen.
→ erweiternde Anwendungsfall ist unabhängig vom weiteren Anwendungsfall und für sich gesehen sinnvoll
→ Erweiterungspunkt (extension point ) definiert die Erweiterung im Anwendungsfall
Beziehung zwischen Anwendungsfällen, die jede Instanz des spezifischen Anwendungsfalls indirekt auch als Instanz des generelleren Anwendungsfalls definiert.
→ Vererbung von Verhalten und Bedeutung eines generellen Anwendungsfalls an einen speziellen
→ Speziellerer Anwendungsfall kann: Geerbtes Verhalten partiell überschreiben ODER Neues Verhalten hinzufügen
Vorgehen zur Modellierung
1. Akteure ermitteln:
Personen ermitteln, die die Aufgaben durchführen. Welche Rollen spielen diese Personen?
Welche externen Systeme werden durch das Produkt genutzt bzw. was gehört nicht mehr zum System?
2. Anwendungsfälle ermitteln:
Mittels Akteuren: (Personen bzw. deren Rollen): Welche Arbeitsabläufe lösen sie aus? An welchen Arbeitsabläufen wirken sie mit?
Mittels Ereignissen: Externe und zeitliche Ereignisse auflisten. Für jedes Ereignis einen Anwendungsfall identifizieren.
Mittels Aufgabenbeschreibungen: Was sind die Gesamtziele des Systems / wichtigsten Aufgaben? Ziele jeder Aufgabe ermitteln.
3. Anwendungsfälle für Sonderfälle formulieren:
Erweiterungen und Alternativen der Standard-Anwendungsfälle formulieren. -> Mittels <extend> die Sonderfälle modellieren.
4. Aufteilen komplexer Anwendungsfälle
Komplexe Schritte als eigene Use Cases modellieren, z.B. per <include> .
Komplexe Use Cases in mehrere Use Cases zerlegen und Gemeinsamkeiten mit <include> modellieren.
5. Gemeinsamkeiten von Anwendungsfällen ermitteln
Auf redundanzfreie Beschreibung achten, insbesondere bei <include>
6. Verfeinerungen von Anwendungsfällen vornehmen (falls nötig):
UML Aktivitätsdiagramme: falls Anwendungsfall komplexes Verhalten modelliert
UML Interaktionsdiagramme (Sequenzdiagramme): falls Anwendungsfall komplexe Interaktionen mit Akteuren beinhaltet
Tipps: Verständlichkeit | Beschreibung extern wahrnehmbaren Verhaltens | Fachliche Beschreibung | Vollständige Beschreibung des Standardablaufs |Separate Beschreibung von Sonderfällen | eine Seite lang
Ein Beispiel - Krankenhausempfang
Die Rezeptionistin plant die Termine des Patienten und die Aufnahme in das Krankenhaus, sammelt Informationen vom Patienten bei der Ankunft des Patienten und/oder telefonisch.
Für den Patienten, der im Krankenhaus bleibt, sollte er oder sie ein Bett auf einer Station erhalten.
Empfangsmitarbeiter erhalten möglicherweise auch Zahlungen des Patienten, zeichnen sie in einer Datenbank auf und stellen Quittungen, Versicherungsansprüche und medizinische Berichte zur Verfügung
Zusammenfassung
UML Aktivitätsdiagramme
Dynamisches Verhalten
Aktivitätsdiagramme beschreiben Ausschnitt aus Ablaufmöglichkeiten eines Systems mit Hilfe von Aktivitäten
Einsatz: Detaillierte Sicht auf Anwendungsfälle | den Ablauf innerhalb von Klassen | Geschäftsprozessmodellierung mit der UML
Aktivität – Parametrisiertes Verhalten, dargestellt als koordinierter Fluss von Aktionen
Aktivitätsknoten:
Aktionen: abgerundete Rechtecke
Objekte: Rechtecke
Kontrollflusselemente: verschiedene Symbole für Entscheidungen, parallele Ausführung
Kontrollfluss: Verbinden von Knoten mit gerichteten Kanten
Aktion – Benanntes Element, das einen einzelnen atomaren Schritt innerhalb der Aktivität darstellt
Kann eingehende und ausgehende Aktivitätskanten enthalten, die Kontroll- und Datenfluss von und zu anderen Knoten definieren
Kann andere Aktivitäten aufrufen (call activity action)
Beginnt mit der Ausführung, wenn alle Eingabebedingungen erfüllt sind
Startknoten – Start des Kontrollflusses in einer Aktivität
Aktivitäts-Endknoten – Ende jeglicher Kontrollflüsse in einer Aktivität
Fluss-Endknoten – Ende eines einzelnen Kontrollflusses
Endzustände können mehrfach vorkommen, Startzustände ideal nur einmal
Steuerknoten, der eingehenden Kontrollfluss akzeptiert und Kontrollfluss aus mehreren ausgehenden Kontrollflüssen auswählt
Annotation von Bedingungen in Form von booleschen Ausdrücken an Transitionen
Unterstützt auch einen vordefinierten else -Kontrollfluss
Optionaler Merge-Knoten fügt mehrere eingehende alternative Flüsse zusammen
Parallele Ausführungspfade
Fork – Steuerknoten, der einen eingehenden Kontrollfluss in mehrere nebeneinander laufende Kontrollflüsse aufteilt
Die Ausführung des Diagramms durchläuft alle parallelen Pfade
Die Ausführungsreihenfolge nebenläufiger Pfade ist irrelevant: nacheinander, gleichzeitig, abwechselnd
Join – Steuerknoten, der mehrere eingehende nebenläufige Kontrollflüsse synchronisiert
UND-Synchronisation: Die Kontrollflüsse aller Transitionen müssen vorliegen, bevor die Transition starten kann
Probleme mit Fork und Join
- Es dürfen nur Zweige in einem Join zusammengeführt werden, die zuvor aus demselben Fork hervorgegangen sind.
- Zweige, die aus verschiedenen (unabhängigen) Forks stammen, können nicht zugleich aktiv sein.
Gruppierung von Aktionen anhand gemeinsamer Merkmale
Definieren organisatorische Verantwortlichkeiten
Können hierarchisch aufgebaut werden: Klassenzugehörigkeit, Organisationseinheiten, Akteuren
Objekte und Objektfluss
Objektflusskanten – Kanten, mit denen der Datenfluss zwischen Aktionsknoten angezeigt wird
Objektknoten – Knoten, mit dem Objekte definiert werden. Vorliegen eines Objektes zu Zeitpunkt innerhalb einer Aktivität
Pin – Objektknoten für Ein- und Ausgänge von Aktionen
Data Stores – Zentraler Speicherknoten für nicht-transiente Informationen
Sendesignalaktion – Senden eines Signals
Annahmeereignis – Aktion, die auf das Eintreten eines bestimmten Ereignisses (z. B. Signal) wartet
Sender- und Empfängerobjekte von Signalen müssen nicht spezifiziert werden
Wartezeitereignisse und Unterbrechungen
Wartezeitaktion – Warten auf das Eintreten eines Zeitereignisses
Unterbrechbare Aktivitätsregionen – Aktionen, deren Ausführung durch Ereignisse unterbrochen werden können
Modellierbeispiele
Wie erstelle ich Aktivitätsdiagramme?
1. Wer sind die wichtigen Akteure des zu beschreibenden Prozesses?
2. Welche relevanten Aktionen führen diese Akteure aus?
3. Welche temporalen bzw. kausalen Zusammenhänge bestehen zwischen den Aktionen (Sequenzen, Entscheidungen,...)?
4. Welche Objekte werden für die Ausführung der Aktionen benötigt bzw. durch eine Aktion erzeugt oder verändert?
5. Welche asynchronen Signale werden ausgetauscht und wie hängen die Ausführungspfade zwischen den Aktionen davon ab?
Modellierungsbeispiel
Es soll die Abwicklung einer Warenbestellung in einem Shopssystem modelliert werden. Die Bestellung ist der Eingabeparameter der Aktivität. Falls eine Bestellung angenommen wurde, müssen zunächst alle erforderlichen Informationen gesammelt und eingegeben werden. Danach wird der Versand der Ware veranlasst und eine Rechnung versendet. Nach Versand und Zahlungseingang wird der Vorgang abgeschlossen.
UML Klassendiagramme
Objektorientierte Analyse
Lastenheft (Anforderungen): Anwendungsfalldiagramme, Aktivitätendiagramme
Pflichtenheft (Analyse): Klassendiagramme, Sequenzdiagramme, Kollaborationsdiagramme
Entwurfsphase: Paketdiagramme, Klassendiagramme, Zustandsdiagramme, Sequenzdiagramme
Implementierungsphase: Komponentendiagramme, Verteidigungsdiagramme
Die Objektorientierte Analyse - Erstellen eines ersten Modells des Systems (Analysemodell)
Das Analysemodell dient dem Entwickler als Grundlage für den Entwurf
Formalisierung der Anforderungen: Entdecken, Nachverfolgen und Beseitigen von Fehlern und Problemen, Mehrdeutigkeiten, Widersprüchen und Lücken für die Anforderungsspezifikation,...
Bestandteile des Analysemodells (Fachmodell)
Statisches Fachmodell: Systemstruktur mittels Klassendiagramm
Dynamisches Fachmodell: Systemverhalten mittels Sequenzdiagramm oder Zustandsdiagramm
Vorgehen:
1. Identifizieren der Fachobjekte, Systemgrenzen und Steuerungsobjekte, z.B. als Typen von Klassen mittels Klassendiagrammen
2. Zuordnen der Objekte zu den Anwendungsfällen (z.B. mittels Sequenzdiagrammen)
3. Identifizieren von: Beziehungen (Abhängigkeiten, Assoziationen, Vererbung) | Attribute | Methoden
Objektorientierung
Darstellung von Objekten der realen Welt als Objekte in der Programmierung
Objekt hat ...
1. Eine Objektidentität, die es von anderen Objekten unterscheidet
2. Einen Kontext, d.h. ein Objekt kennt andere Objekte, zu denen es in Beziehung steht
3. Einen Objektzustand, bestimmt durch die Werte der Attribute eines Objekts und dessen Beziehungen zu anderen Objekten
4. Ein Objektverhalten, bestimmt durch eine Reihe von Methoden des Objektes
Der Zustand eines Objekts: Umfasst die Attribute und ihre aktuellen Werte und deckt die relativen Beziehungen ab
Das Verhalten eines Objekts: Wird durch Methoden definiert, Änderungen oder Abfragen nur durch Methoden möglich
Die Eigenschaft, die ein Objekt von allen anderen Objekten unterscheidet, wird als Identität bezeichnet.
drei Grundprinzipien der Objektorientierung: Datenkapselung | Vererbung | Polymorphie
Klassendiagramme
Klassendiagramme modellieren die statischen strukturellen Beziehungen zwischen den Komponenten eines Systems.
Klassendiagramme sind der Hauptbaustein der objektorientierten Modellierung. Scopes und Multiplizität
Gültigkeitsbereich (scope):
Pfadnamen können in Klassendiagrammen verwendet werden, um den Gültigkeitsbereich (scope) der Klasse zu identifizieren,
z.B. org::openoffice::SpellChecker
Multiplizität von Klassen:
In der oberen rechten Ecke einer Klasse kann die Multiplizität (d.h. Anzahl der Instanzen) einer Klasse sein:
Keine Zahl in der oberen rechten Ecke: mehr als eine Instanz einer Klasse möglich
Klassenattribute stellen die Eigenschaften (properties) einer Klasse dar.
Sichtbarkeit von Attributen + öffentlich: Unbeschränkter Zugriff # geschützt: Zugriff von Klasse sowie von Unterklassen − privat: Nur die Klasse selbst kann das Attribut sehen ~ paketsichtbar: Innerhalb des Pakets sichtbar |
Arten von Beziehungen Dependency: Abhängigkeit zwischen zwei Klassen Assoziation: lies “hat ein” Aggregation: Spezieller Typ der Assoziation, lies “besitzt ein” Komposition: Stärkste Beziehung zwischen Klassen, lies “besteht aus” Generalisierung: Vererbungsbeziehung, lies “ist ein” Realisierung: Implementierung einer Schnittstelle |
Nutzungsabhängigkeit – Angabe, dass ein Element ein anderes Element oder eine Menge von Elementen für seine Implementierung benötigt.
Assoziation – Angabe, dass Typinstanzen miteinander in Verbindung stehen oder logisch bzw. physisch miteinander zu einer Aggregation kombiniert werden können. z.B: Wrote:
Navigierbarkeit von Assoziationen
Stelligkeit von Assoziationen:
Binäre Assoziationen: verbindet genau zwei Typen bzw. Klassen.
n-äre Assoziationen mit mehr als zwei Assoziationsenden
Multiplizität (Kardinalität) - Definition Anzahl maximal Elemente durch inklusives Intervall nichtnegativer Ganzzahlen
Multiplizität | Option | Bedeutung |
0..0 | 0 | Keine Instanzen (leere Menge) |
0..1 | Keine oder eine Instanz | |
1..1 | 1 | Genau eine Instanz |
0..* | * | Null oder mehr Instanzen |
1..* | Mindestens eine Instanz | |
5..5 | 5 | Genau fünf Instanzen |
m..n |
Mindestens , aber nicht mehr als Instanzen |
Beispiel:Jeder Professor kann (als author) ein oder mehrere Bücher schreiben (kann sein lassen): 0..*
Jedes Buch (als textbook) ist von mindestens einem Professor geschrieben: 1..*
Multiplizität
Ordnung ( ordered oder unordered )
Einzigartigkeit der Elemente ( unique oder nonunique )
Standardgemäß sind Elemente eines Intervalls unordered und unique
Aggregation - Eine binäre Assoziation, die eine Teile-Ganzes Beziehung darstellt.
Asymmetrisch: nur ein Ende der Assoziation kann eine Aggregation sein
Transitiv: Aggregationsverknüpfungen sollten gerichteten, azyklischen Graph bilden, so dass keine Instanz Teil seiner selbst ist
Unabhängig: Wenn übergeordnete Instanzen gelöscht werden, können die untergeordneten Teile-Instanzen weiterbestehen
Die Komposition
Komposition - Eine binäre Assoziation, die eine Teile-GanzesBeziehung darstellt und es gilt:
1. Ein Teil kann zu einem Zeitpunkt höchstens in einem Ganzen (engl. whole, composite) enthalten sein.
2. Wenn ein Ganzes gelöscht wird, werden alle seine Teile mit diesem gelöscht.
Generalisierung - Eine binäre taxonomische Beziehung zwischen einem allgemeineren Typ
Realisierung
Realisierung odellelementen, von denen eine die Spezifikation und die andere deren Implementierung (Kunde) darstellt.
Spezielle Realisierung zwischen einem Klasse und einer Schnittstelle.
Operation (engl. operation) -- Verhaltensmerkmal einer Schnittstelle, eines Datentyps oder Klasse
Datentyp -- Typ, dessen Instanzen nur durch ihren Wert bestimmt sind
Aufzählung ( enumeration) -- Datentyp, dessen Werte benutzerdefinierte Literale sind
Ein Beispiel
Anwendungsfall zu Fachmodell
Entity: Objekte, die persistentes Wissen (d.h. Daten) repräsentieren; häufig aus dem Domänenmodell hergeleitet.
Boundary: Objekte, die eine Schnittstelle zu Systemakteuren bilden (z.B. einem Benutzer oder einem externen System).
Control: Objekte, die Prozesswissen repräsentieren (später ggf. als separate Klassen oder einfache Funktionen implementiert).
Kommunikationsregeln im ECB-Muster
1. Akteure können nur mit Grenzobjekten (boundary objects) sprechen.
2. Systemgrenzobjekte können nur mit Kontrollobjekten (control objects) und Akteuren sprechen.
3. Entitätsobjekte (entity objects) können nur mit Kontrollobjekten kommunizieren.
4. Kontrollobjekte können mit Grenzobjekten, Entitätsobjekten und Kontrollobjekten kommunizieren, nicht mit Akteuren
Entity Objects identifizieren:1. Ausdrücke, die geklärt werden müssen, damit der Anwendungsfall verständlicher wird
2. Wiederkehrende Substantive in Anwendungsfällen
3. Begriffe aus der Fachdomäne
4. Aktivitäten in der realen Welt, die befolgt werden müssen
5. Vorhandene Datenquellen oder Ergebnisse
Boundary Objects identifizieren
1. Jeder Akteur interagiert mit mindestens einem Boundary Object in jedem Anwendungsfall.
2. sammeln Benutzerinfos und übersetzen sie in Strukturen, die von Control / Entity Objects verarbeitet werden.
3. Grobe Abstraktion der Systemgrenze treffen, ohne Details der visuellen Darstellung
4. Begriffe verwenden, die der Anwender versteht
5. Geräte der Interaktion identifizieren, Benutzungsschnittstellen beschreiben
Control Objects identifizieren - Koordination von Entity und Boundary Objects
1. Empfange Informationen von den Boundary Objects.
2. Verteile diese in geeigneter Form an die Entity Objects.
Beispiel:
1. Der Außenbeamte aktiviert die ,,MeldeNotfall"-Funktion auf dem Terminal. Ereignis ablauf
2. FRIEND antwortet durch Bereitstellung eines Formulars. Das Formular enthält Menü über Art des Notfalls, Ortsbeschreibung und Felder für eine Beschreibung des Notfalls, für Betriebsmittelanforderungen und für den Eintrag von gefährlichen Gütern.
3. Außenbeamter füllt das Formular aus durch Kurzspezifizierung des Notfalltyps und der übrigen Beschreibungen. Außenbeamter kann auch mögliche Aktionen auf die Notfallsituation beschreiben und spezielle Betriebsmittel erbitten. Sobald das Formular ausgefüllt ist, übermittelt es der Außenbeamte durch Drücken der,,Sende Meldung"-Taste dem Dienstleiter.
4. Der Dienstleiter überprüft die Information, die vom Außenbeamten übermittelt wurde, und erzeugt einen Vorfall in der Datenbank, indem er den Eröffne Vorfall-Anwendungsfall aufruft. Alle Informationen, die im Formular des Außenbeamten enthalten sind, befinden sich automatisch im Vorfall. Der Dienstleiter wählt eine Antwort aus durch Zuweisen von Betriebsmitteln an das Ereignis (mit dem WeiseBetriebs mittelZu-Anwendungsfall) und bestätigt die NotfallMeldung durch Übersenden einer Nachricht an den Außenbeamten. Die Empfangsbestätigung zeigt dem Außenbeamten, dass die Notfall Meldung erhalten, ein Vorfall erzeugt und Betriebsmittel an den Vorfall zugeteilt wurden. In der Empfangsbestätigung sind die Betriebsmittel (z.B. Löschzug) und deren voraussichtliches Eintreffen angegeben.
5. Der Außenbeamte erhält die Bestätigung und die ausgewählte Antwort.
Entity Objects
Dienstleiter | Polizeibeamter, der den Vorfall leitet. Ein Dienstleiter eröffnet, dokumentiert und schließt Vorfälle ab als Antwort auf Notfall Meldungen und andere Kommunikation mit dem Außenbeamten. Dienstleiter werden durch Dienstnummern identifiziert. |
NotfallMeldung | Anfangsbericht über einen Vorfall von einem Außenbeamten an einen Dienstleiter. Eine NotfallMeldung erfordert das Erstellen eines Vor fall durch den Dienstleiter. Eine NotfallMeldung besteht aus einer Notfallebene, einem Typ (Brand, Verkehrsunfall, Sonstiges), einem Ort und einer Beschreibung. |
Außenbeamter | Polizist oder Feuerwehrmann im Einsatz. Ein Außenbeamter kann zu jeder Zeit nur einem Vorfall zugewiesen sein. Außenbeamte werden durch die Dienstnummer identifiziert. |
Vorfall | Ereignis, das die Aufmerksamkeit eines Außenbeamten erfordert. Ein Vorfall kann von einem Außenbeamten dem System mitgeteilt wer den. Ein Vorfall besteht aus einer Beschreibung, einer Antwort, einem Status (offen, beendet, ...), einer Örtlichkeit und einer Anzahl von zugewiesenen Außenbeamten. |
Boundary Objects
Empfangsbestätigung |
Bestätigung, um dem Außenbeamten den Empfang der Meldung beim Dienstleiter anzuzeigen. |
DienstleiterStation | Vom Dienstleiter benutzter Rechner. |
MeldeNotfall Taste | Vom Außenbeamten benutzte Taste, um den MeldeNotfall-Anwen dungsfall zu initiieren. |
NotfallMeldeformular | Formular, das für die Eingabe von MeldeNotfall benutzt wird. Dieses Formular wird dem Außenbeamten auf der Mobilen Station angeboten, wenn die Melde Notfall"-Funktion gewählt wurde. Das NotfallMeldeformular enthält Felder, um alle Attribute einer NotfallMeldung zu spezifizieren und einen Knopf (oder etwas Ähnliches), um das ausgefüllt Formular abzuschicken. |
MobileStation |
Vom Außenbeamten benutzter mobiler Rechner. |
Vorfall Formular | Formular, das für die Erstellung eines Vorfalls benutzt wird. Die ses Formular wird dem Dienstleiter auf der DienstleiterStation angeboten, wenn die NotfallMeldung empfangen wurde. Dienstleiter benutzt dieses Formular auch, um Betriebsmittel zuzuweisen und den Bericht des Außenbeamten zu bestätigen. |
Control Objects
MeldeNotfall Steuerung | Verwaltet die Benachrichtigungsfunktion MeldeNotfall auf der MobilenStation. Dieses Objekt wird kreiert, wenn der Außenbeamte den,,Melde Notfall"-Knopt auswahlt. Es erzeugt dann ein Notfall Meldeformular und bietet es dem Außenbeamten ar.. Nach dem Abschi cken des Formulars sammelt dieses Objekt die Informationen des Formulars, erzeugt eine NotfallMeldung und leitet sie zum Dienst leiter. Das Steuerungsobjekt wartet dann auf eine Empfangsbestäti gung von der DienstleiterStation. Sobald die Empfangsbestätigung eingetroffen ist, erzeugt das MeldeNotfall Steuerung-Objekt eine Empfangsbestatigung und zeigt sie dem Außenbeamten an. |
VerwalteNotfall Steuerung | Verwaltet die Benachrichtigungsfunktion MeldeNotfall auf DienstleiterStation. Dieses Objekt wird erzeugt, wenn eine Not fallMeldung empfangen wird. Es erzeugt dann ein Vorfall Formular und bietet es dem Dienstleiter an. Sobald Dienstleiter Vorfall erzeugt, Betriebsmittel bereitgestele und Empfangs bestätigung eingegeben hat, leitet VerwalteNotfallSteuerung die Empfangsbestätigung an MobileStation weiter |
Eine Checkliste:
Identifikation von entity, boundary und control objects
Abbildung von Anwendungsfällen auf Objekte
Identifikation von Assoziationen zwischen Objekten
Identifikation von Aggregationen
Identifikation von Attributen der Objekte
Modellerung von zustandsabhängigem Verhalten Objekte
Aktualisierung des gesamten Analysemodells
Sequenzdiagramme
UML Sequenzdiagramme
→ zur Beschreibung des Systemverhaltens in Anwendungsfällen
Lebenslinie – Lebenszyklus von (anonymen oder konkreten) Objekten und Akteuren
Nachricht – Darstellung einer einzelne Kommunikation zwischen zwei Lebenslinien
Ausführung – Darstellung Zeitraums, in der Verhalten oder Aktion ausgeführt, ein Signal gesendet oder gewartet wird
→ Synchroner Aufruf – Senden Nachricht und Unterbrechen der Ausführung während Wartezeit auf eine Antwort
→ Asynchroner Aufruf – Senden einer Nachricht und sofortige Fortsetzung der eigenen Ausführung
→ Rückgabe – Senden einer Antwortnachricht an das aufrufende Objekt
→ Selbstdelegation – Senden von Nachrichten eines Objekts an sich selbst
→ Callback – Ausführung, die synchron über eine Rückgabe für den originalen Aufrufer informiert
Benennung von Nachrichten: Nummer der Nachricht | Name der Methode | Argumente | Rückgabetyp 1: aMessage(num:int, value:double):String
1: (x<0): aMessage(num:int, value:double):String
Nachrichten können wiederholt gesendet werden: 1: *[while(result<25)]: result=operation()
Instanziierung – Nachricht zur Erstellung einer Lebenslinie eines ObjektsTerminierung – Nachricht zum Beenden einer Lebenslinie eines Objekts
Kombinierte Fragmente
alt : Alternativen: Auswahl des auszuführenden Verhaltens
opt : Optionen: Auswahl eines einzelnen Operanden loop . Wiederholungen (Schleifen): Iteration im Ausführungsverhalten
break : Abbrüche oder Ausnahmen
par : Parallele Ausführungen
strict : Strikte Sequenzen: Reihenfolge einhalten
seq : Schwache Sequenzen: ausführen, Reihenfolge egal
Beispiel
Fortsetzung objektorientierten Analyse
Vorgehen: Abbildung der Anwendungsfälle auf Sequenzdiagramme
- Erste Spalte ganz links: Akteure, die den Anwendungsfall veranlassen
- Zweite Spalte von links: Systemgrenze (boundary object), die mit Akteur interagiert
- Dritte Spalten von links: das relevante Kontrollobjekt (control object)
- Zugriff auf Fachentitäten (entity objects)
- Kann andere Kontrollobjekte und Fachentitäten erstellen (create -Nachricht)
- Kann mit anderen Kontrollobjekten interagieren
- Folgende Spalten: Fachentitäten (entity objects)
UML Kommunikationsdiagramme
Darstellung der Interaktionen zwischen Objekten mithilfe sequenzierter Nachrichten
Lebenslinie – Darstellung individueller Teilnehmer der Interaktion
sequence-term ::= [integer [name]] [recurrence]
→ sequence-term repräsentiert Reihenfolge der Nachricht in der Kommunikation
→ recurrence nennt Bedingung oder Schleife
Beispiel: Instanz der Klasse A sendet remove() -Nachricht an Instanz von B, wenn s1 gleich s2 ist.
Systementwurf
Systementwurf allgemein
Auswirkungen von Entscheidungen verstehen, z.B. Virtualisierung und Cloud-Infrasturkturen, Entwurfsmuster...
→ mit Module | Kohäsion (cohesion) | Kopplung (coupling
Entwurfsziele festlegen: Einschränkung möglicher Alternativen im Entwurf ermöglichen Entwurfsentscheidungen (Quality Tree)
→ durch Nichtfunktionale Anforderungen | Termine mit dem Auftraggeber | Studium der Anwendungsdomäne
Subsysteme definieren
Softwarearchitektur – Festlegung der Organisation eines Softwaresystems fest durch Komponenten und Verbindungen
→ Spezifikation der wesentlichen Strukturen eines Anwendungssystems, dh. der Komponenten und Schnittstellen (Bausteinsicht)
Fachliche Architektur – Architektur des Softwaresystems aus fachlicher Sicht, d.h. aus Sicht der Fachabteilung
Technische Architektur – Realisierung der logischen Komponenten auf der Grundlage der technischen Infrastruktur
Architekturmuster – Lösungsansatz, der für Element der Architektur durchgängig und ausnahmslos angewandt wird
Beispiele: Datenzentrierte Architektur | Schichtenarchitektur | Ereignisbasierte Architektur | Service-orientierte Architektur
Datenzentriete Architektur: Komponenten kommunizieren über eine Datenbank
→Etablierung eines einheitlichen Datenmodells ist organisatorisch und technisch höchst anspruchsvoll
Schichtenarchitektur: Komponenten mit Zusammenhang werden einer Schicht zugewiesen.
→ Komponenten einer Schicht dürfen nur die Komponenten dieser und der Schicht nutzen
→ Aufrufe passieren Schichten von oben nach unten.
→ Ergebnisse werden von unten nach oben durchgereicht.
Verteilung – Festlegung, auf welchen Rechnern die Komponenten einer verteilten Anwendung installiert werden
Datenhaltung | Geschäftslogik | Ergebnisdarstellung | verschiedene Architektueren
→ Ein-Ebenen-Architektur: Komponenten der Anwendung werden auf einem Rechner installiert. (Zentralrechner) (ERP-Systeme)
→ Zwei-Ebenen-Architektur: Komponenten der Anwendung werden auf zwei Rechnern installiert (Client und Server) (Datenbank)
→ Drei-Ebenen-Architektur: Komponenten auf drei Rechnern (Datenbankserver, Applikationsserver, Client) (ERP-Systeme)
→ Mehrebenen-Architektur: mehrere Rechnern (Datenbankserver, Applikationsserver, Websever, Client-Rechner) (Onlineshops)
Zwei-Ebenen-Architektur
Wann ist ein Systementwurf gut?
Korrektheit
Ein Systementwurf ist korrekt, wenn das Analysemodell dem Systementwurf zugeordnet werden kann.
Kann jedes Subsystem auf eine funktionale oder nicht-funktionale Anforderung zurückverfolgt werden?
Kann jedes Entwurfsziel auf eine nicht-funktionale Anforderung zurückverfolgt werden?
Gibt es für jeden Akteur eine Zugangskontrolle?
Vollständigkeit
Ein Systementwurf ist vollständig, wenn jede Anforderung für den Systementwurf berücksichtigt wird.
Wurde das Anwendungsfalldiagramm verwendet, um fehlende Funktionen im Systementwurf zu entdecken?
Wurden alle Anwendungsfälle jeweils einem Kontrollobjekt zugewiesen?
Wurden alle Aspekte des Systementwurfs (Plattform, Datenspeicherung, Zugangskontrolle, Komponenten) behandelt?
Sind alle Subsysteme definiert?
Konsistenz
Ein Systementwurf ist konsistent, wenn er keine Widersprüche in sich trägt.
Sind gegenüberstehende Entwurfsziele priorisiert?
Verletzt ein Entwurfsentscheidung eine nicht-funktionale Anforderung?
Implementierbarkeit
Ein Systementwurf ist realistisch, wenn das System implementiert werden kann
Sind Leistungs- und Zuverlässigkeitsanforderungen im Rahmen der zerlegung in Subsysteme überprüft?
Können Probleme bei nebenläufigen Zugriff auf Objekte oder Subsysteme ausgeschlossen werden ( Deadlocks)?
Lesbarkeit
Ein Systementwurf ist lesbar, wenn nicht am Systementwurf beteiligte Entwickler den Entwurf verstehen können:
Sind die Namen der Subsysteme (fachlich) nachvollziehbar?
Entwurfsentscheidungen als Sensitivity Points, Trade-offs oder Risiken einordnen.
Paketdiagramme
Dienen der Gliederung eines Gesamtmodells in kleinere, überschaubare und miteinander interagierende Einheiten.
Paket – Benennung einer Gruppe von Elementen, die semantisch verknüpft sind und sich zusammen ändern können.
→ Elemente eines package können innerhalb oder außerhalb des package (mittels Zeichen) dargestellt werden.
→ Elemente eines package können öffentlich oder privat sein.
Pakete sind Zusammenfassungen von Elementen beliebigen Typs
→ Einzelne Modellelemente (Klasse, Akteur, etc.)
→ Teilmodelle (Klassendiagramm, Aktivitätsdiagramm, etc.)
Elementimporte erlauben das direkte Referenzieren eines Elements über seinen Namen.
Paketimporte erlauben das direkte Referenzieren mehrerer Elemente über ihren Namen.
Öffentlich (engl. public): <<import>> (optional, da Standardwert)
Das importierte Element wird dem Namespace hinzugefügt und ist auch außerhalb des Namespace sichtbar.
Privat (engl. private): <<access>>
Das importierte Element wird ausschließlich dem Namespace hinzugefügt
Paketzusammenführung- Erweiterung eines Pakets durch den Inhalt eines anderen Pakets
Modell - Paket, das die Abstraktion eines gesamten Systems darstellt.
Das Paket soll so strukturiert sein, dass es ...
|
Dabei soll die Paket-Schnittstelle ...
|
1. Die zu Anwendungsfall Elemente sollten zum Subsystem gehören.
2. Elemente, die zwischen Subsystemen Daten darstellen, sollten in
einem separaten Subsystem untergebracht werden.
3. wenig Assoziationen zwischen Subsystemen → Lose Kopplung
4. Elemente eines Subsystems sollten in funktionalen Zusammenhang
stehen → Hohe Kohäsion
Kopplung - Anzahl der Abhängigkeiten zwischen Subsystemen
Kohäsion - Anzahl der Abhängigkeiten innerhalb eines Subsystems
UML Komponentendiagramme
Modellierung von Komponenten, deren bereitgestellte und benötigte Schnittstellen, Ports und Beziehungen zwischen ihnen
Logische Komponenten (z.B. Geschäftskomponenten)
Physische Komponenten (Programme, Maven-Packages)
Realisieren interne Bestandteile (z.B. Klassen) eine Komponente, können diese innerhalb Komponente in einem separaten Abschnitt ( <realization> compartment) notiert werden
Schnittstellen
Bereitgestellte Schnittstelle wird durch die Komponente ealisiert.
Benötigte Schnittstelle definiert durch Verwendungsabhängigkeit ( <use> dependency) .
Ports
Über Port kann Element mit Umgebung, mit anderen Objekten oder mit seinen internen Bestandteilen kommunizieren.
→ Standardsichtbarkeit: öffentlich (public)
→ Angabe von Multiplizitäten optional, z.B. [1..6]
→ Simple port: Port mit nur einer Schnittstelle
Verbindung zwischen min. zwei Komponenten, die Dienstbereitstellung und -nutzung zwischen Komponenten darstellt.
Verbindung eines externen Ports bzw. Schnittstelle einer Komponente mit ihren internen Bestandteilen
Komponenten sind Paketen ähnlich: Sie definieren Grenzen und gruppieren und gliedern Modellelemente
- Aber Komponenten definieren die Laufzeitsicht:
- Kapselung der enthaltenen Modellelemente
- Expliziter Export von Eigenschaften und Fähigkeiten der enthaltenen Komponenten
- Können Binärcode, Bibliotheken oder ausführbare Programme darstellen
- Können direkt auf Hardware oder Virtualisierungsinfrastruktur ausgeführt werden
Pakete: Logische Sicht auf Codestruktur zur Entwicklungszeit | Komponenten: Physische Sicht zur Laufzeit
UML Verteilungsdiagramme
Verteilungsdiagramme bieten Sichten auf ein Anwendungssystem zur LaufzeitZeigen, welche Kommunikationsbeziehungen zwischen Komponenten, Prozessen, Objekten
Knoten - Ziel der Verteilung für Laufzeitobjekte und sonstige Artefakte (evtl. hierarisch)
→ datenverarbeitenden Anlagen (Prozessoren, Computer) einer Systemarchitektur modellieren
Knoten: Geräte
Eine physische Rechenressource, auf der Artefakte zur Ausführung bereitgestellt werden können
Standard-Stereotypen: device, application server, client, mobile
Spezielle Knoten: Ausführungsumgebung
Software für Typen von Komponenten, die darauf als ausführbare Artefakte bereitgestellt werden
Standard-Stereotyp: executionEnviroment, OS, workflow, web browser
Zwischen Knoten eines Systems können Kommunikationsbeziehungen bestehen
Zwischen Geräten: physische Verbindungen, z.B. <ethernet>
Zwischen Ausführungsumgebungen: Kommunikationsprotokolle, z.B. <protocol> TCP/IP
Auf Knoten können Laufzeitobjekte und sonstige Artefakte bereitgestellt und ausgeführt werden.
Standard-Stereotyp: <artefact, file, ...>
→ Konkrete physische Darstellung eines oder mehrerer Modellelemente durch ein Artefakt
→ Artefakte können von anderen Artefakten abhängig sein
Bereitstellung (engl. deployment) - Zuordnung Artefakts zu einem Verteilungsziel
→ Darstellung als Abhängigkeit (dependency) mit Stereotyp <deploy>
→ Kann auch als in einem Knoten enthalten dargestellt werden Kann auch auf Instanzebene dargestellt werden
Relevante Fragestellungen:
→ Welche Kommunikationsbeziehungen bestehen zwischen diesen Komponenten, Prozessen und Objekten?
→ Arten der Modellierung: Können auf Typebene (Spezifikationsebene) und auf Instanzebene verwendet werden!
Implementierung
Muster in der Softwareentwicklung
Muster – Beschreibung eines wiederkehrenden Problems sowie einer bewährte und generische Lösung dafür
→ Müssen an das jeweilige Projekt angepasst werden
→ Dienen der Kommunikation von zwischen Entwicklern
Microservices – Architekturstil, bei Anwendung in Dienste aufgeteilt wird, die unabhängig entwickelt / installiert werden
→ Laufen als eigenständige Prozesse, die separat bereitgestellt und skaliert werden können
→ Unterliegen einer minimalen zentralisierten Verwaltung
Entwurfsmuster
Entwurfsmuster (design pattern) – Lösung für bestimmtes, in Zusammenhängen wiederkehrendes Entwurfsproblems
→ Faustregel: mindestens dreimal vor der Dokumentation sinnvoll eingesetzt und/oder beobachtet haben
Klassifizierung von Designmustern
Creational Patterns: Helfen, System unabhängig davon zu erstellen, wie Objekte erstellt, komponiert und dargestellt werden.
Structural Patterns: Umgang mit der Zusammensetzung von Klassen und Objekten in größere Strukturen
Behavioural Patterns: Umgang mit der Wechselwirkung zwischen Objekten und Klassen, komplexe Kontrollflüsse
Beispiel: Strategy-Muster
Problem: Verwandte Klassen unterscheiden sich dadurch, dass sie gleiche Aufgaben durch verschiedene Algorithmen lösen
Lösung:
- Eine Klasse definiert alle gemeinsame Operationen (Strategy Context)
- Signaturen der unterschiedlich zu implementierenden Operationen werden in einer weiteren Klasse (Strategy)
- Von Klasse/Schnittstelle wird für Implementierungsalternative eine konkrete Unterklasse abgeleitet (Concrete Strategy)
- Strategy Context benutzt konkrete Strategy-Objekte, um unterschiedlich Operationen per Delegation auszuführen
Vorteil des Strategy-Musters | Nachteile des Strategy-Musters |
|
|
Vorteile der Musternutzung allgemein | Nachteile der Musternutzung allgemein |
|
|
Einstieg ins Testen
Testen – Die - auch mehrfache - Ausführung eines Programms auf einem Rechner mit dem Ziel, Fehler zu finden
Systematisches Testen – Test, bei dem
(1) die Randbedingungen definiert erfasst sind,
(2) die Eingaben systematisch ausgewählt wurden, und
(3) die Ergebnisse dokumentiert und nach vor dem Test festgelegten Kriterien beurteilt werden
Verifizierung – Prüfen, ob die Ergebnisse einer Phase des Projekts mit denen der vorherigen Phase übereinstimmen
→ "Wurde das System richtig entwickelt?"
Validierung – Prüfen, ob das endgültige Ergebnis des Projekts wirklich dem Bedarf des Kunden entspricht
→ "Wurde das richtige System entwickelt?"
Qualitätsprioritäten: Richtigkeit, Sicherheit, Leistung, schnelle Entwicklung, geringer Aufwand, Wartungsfähigkeit ...
Testziele: Hoher Anteil getesteter Codezeilen, hoher Anteil getesteter Funktionen, hohe Fehlererkennungsrate, schnelle Tests ...
Arten von Tests
Funktionsprüfung: | Nicht funktionale Prüfung: |
Unit Testing Integration Testing System Testing - Gesamte Prüfung Acceptance Testing - Anforderungtesting Smoke Testing - Prüfung in Prod-Umgebung |
Performance Testing Security Testing Usability Testing Compatibility Testing |
Verwengung von Staging Areas
DEV: Entwicklungsumgebung eines Entwicklers
INT: Integrationsumgebung eines Teams mit Mocks externer Systeme
CON: Konsolidierungsumgebung für Testen mit externen Systemen durch ein Testteam
OPS bzw. PROD: Die Produktivumgebung beim Kunden
Funktionsprüfung
Unit Testing – Testen einzelner Softwaremodule oder Komponenten eines Softwaresystems
→ von den Programmierern des Moduls testgetrieben erstellt
→ Jede Modulfunktion wird durch Testfälle getestet
→ Unit-Tests laufen automatisiert in DEV Staging-Bereich
Drei Gesetze der testgetriebenen Entwicklung
1. keinen Produktionscode, außer um fehlschlagenden Test zu bestehen
2. nur so viel von einem Test, um einen Fehler zu demonstrieren.
3. nur gerade so viel Produktionscode, um den Test zu bestehen.
Integrationstest – Testen einzelnen Softwaremodule im Zusam-menspiel, um spezifische Aufgaben / Aktivitäten durchzuführen
→ Prüfung erfolgt als Kombination aus automatisierten und (falls nötig) manuellen Funktionstests.
→ Integrationstests laufen im INT-Staging-Bereich
Systemtest – Prüfung des System in seiner Gesamtheit auf Fehler
→ Verbund aller Hardware- und Softwarekomponenten des gesamten Systems
→ als Blackbox-Testmethode angesehen, in Software auf vom Benutzer Arbeitsbedingungen sowie auf Ausnahmebedingung
→ Systemtests laufen im CON-Staging-Bereich (sollte eine vollständige Kopie von OPS bzw. PROD sein.)
Akzeptanztest - Prüfung, ob das System alle Anforderungen des Endkunden erfüllt
→ Akzeptanztests werden im CON-Staging-Bereich vom Endkunden ausgeführt (ggf.auch vom Product Owner)
Smoke-Test – Prüfung der Funktionsfähigkeit der OPS/PROD-Umgebung nach Develop einer Software-Version vor Relase
→ Nach den Smoke-Tests startet üblicherweise eine 2-3 wöchige Testphase am LiveSystem
Nicht funktionale Prüfung (oo):
Spezifikationstest (auch: Black-Box-Test):
→ Überprüfen der Eingabe-/Ausgabebeziehungen einer Klasse oder Komponente.
→ Die interne Struktur wird vernachlässigt.
→ Erstellung geeigneter Äquivalenzklassen
Äquivalenzklasse – Bezüglich Ein- und Ausgabedaten ähnliche Objekte, wo erwartet wird, dass sie sich gleich verhalten
Beispiel: Anwendungsfall "Veranstaltung finden"
Anwendungsfall: Veranstaltung finden | Primärer Akteur: Käufer | Kontext: Ticket Informationsschalter | Bedingungen: keine
Testenszenario:
1. Benutzer wählt Genre und einen Datums- und Uhrzeitrahmen aus. Das System überprüft, dass der Zeitrahmen stimmt
2. Das System zeigt das Ergebnis der Abfrage.
3. Der Benutzer fordert eine detaillierte Ansicht einer ausgewählten Veranstaltung an.
4. Das System zeigt die Detailansicht für die ausgewählte Veranstaltung.
Erweiterungen: 2a. Die Abfrage enthält keine Ergebnisse. Zurück zu 1. oder abbrechen.
Konsequenzen: keine.
Anweisungen: Abfrage durch das Webportal des Systems, Kiosk-Schnittstelle, Kassa-Client (unterstützter sekundärer Akteur)
Nr. | Testfall | Erwartetes Ergebn. | Eingabedaten |
1 | Entering valid name | Search Result | name="cinema word" |
2 | Entering valid state | Search Result | state="NÖ" |
3 | Entering empty state | Exception Message | state=" |
4 | Entering invalid state | Empty Search Result | state="bavaria" |
5 | Entering valid city | Search Result | city="Hürm" |
6 | Entering city not in database | Empty Search Result | city="4444" |
Schwellenwert – Wert, der gerade noch innerhalb oder schon außerhalb eines gültigen Wertebereichs liegt.
→ Falsche Vergleichsoperatoren, z.B. < statt <=, Rundungsfehler,...
Strukturtest (White-Box-Test):
→ Prüfung der internen Programmstruktur
→ Struktur des zu untersuchenden Objekts muss bekannt sein
→ Experimentiere: 1. Bestimme alle Ausführungswege und 2. Entdecke mögliche Fehler in einem dieser Wege
→ Vorteil: Lage des Fehlers kann sehr genau eingegrenzt werden
→ Nachteil: Sehr kosten- und arbeitsintensiv
Grad der Codeabdeckung
C0-Überdeckung oder Knotenüberdeckung: Jede auftretende Anweisung im Code muss mindestens einmal in einem Testfall durchlaufen werden.
C1-Überdeckung oder Kantenüberdeckung: Jede Kante im Kontrollflussgraph muss mindestens einmal in einem Testfall durchlaufen werden.
Cinfinite-Überdeckung oder Pfadüberdeckung: Jede (praktisch) mögliche Reihenfolge aller Codeanweisungen müssen von den Testfällen abgedeckt werden.
Bedingungsüberschneidung: Jede Kombinationen der Teilausdrücke logischen Ausdrucks muss in Testfällen überprüft werden.
Kantenüberlappung vs. Zustandsüberlappung IF (A=true) and (B=false) THEN ...
Zwei Testfälle, um eine Kantenüberlappung zu erreichen: (A=true) and (B=false) == true | (A=true) and (B=true) == false
Vier Testfälle, um Bedingungsüberlappung erreichen: A = true, B = true A = true, B = false A = false, B = true A = false, B = false