779 lines
		
	
	
		
			30 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			779 lines
		
	
	
		
			30 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | ||
| title: Softwaretechnik 1
 | ||
| date: Wintersemester 20/21
 | ||
| author: Robert Jeutter
 | ||
| ---
 | ||
| 
 | ||
| > Software: Menge von Programmen oder Daten zusammen mit begleitenden Dokumenten, die für Ihre Anwendung notwendig oder hilfreich sind [Hesse]
 | ||
| 
 | ||
| Gute Software ist schwer herzustellen
 | ||
| - Entspricht Kundenwünsche, Vollständigkeit
 | ||
| - Funktioniert Korrekt
 | ||
| - Kosten- und Termintreue bei der Erstellung
 | ||
| - weitere nicht-funktionale Qualitätsforderungen
 | ||
|   - Benutzerfreundlichkeit, Ergonomie
 | ||
|   - Sicherheit
 | ||
|   - Zuverlässigkeit, Fehlertoleranz
 | ||
|   - Performanz
 | ||
|   - Ressourcen-Effizienz, Skalierbarkeit, Übertragbarkeit
 | ||
|   - Wartbarkeit, Änder- und Erweiterbarkeit
 | ||
| 
 | ||
| Softwaretechnik
 | ||
| - Technische Disziplin der Software Herstellung
 | ||
| - Zielorientierte Bereitstellung uns systematische Verwendung von Prinzipien, Methoden und Werkzeugen für die arbeitsteilige, ingenieurmäßige Entwicklung und Anwendung von umfangreichen Softwaresystemen [Balzert]
 | ||
| 
 | ||
| Wie kann man Software besser entwickeln?
 | ||
| - Ingenieursmäßige Herangehensweise
 | ||
|   - Verwendung bekannter Prinzipien und Methoden
 | ||
|   - Systematische Vorgehensweise
 | ||
| - Verwendung von: 
 | ||
|   - Abstraktion, Modelle, Notation, Simulation
 | ||
|   - Wiederverwendung:Muster, Komponenten, Framework
 | ||
| - Organisation
 | ||
|   - Arbeitsteilung, Integration, Planung
 | ||
| - Verwendung von Werkzeugen
 | ||
|   - IDE (Integrated Development Environment)
 | ||
|   - Versionierung, Bugtracker, Modellierungswerkzeug
 | ||
| 
 | ||
| # Modellierungskonzepte
 | ||
| > Modell: ist eine Abstraktion eines Systems mit der Zielsetzung, das Nachdenken über ein System zu vereinfachen, indem irrelevante Details ausgelassen werden [Brügge]
 | ||
| $\rightarrow$ Beschreibung eines Ausschnitts der Realität
 | ||
| 
 | ||
| - erstellen einer Abstraktion
 | ||
| - abbilden signifikanter Eigenschaften
 | ||
| - Deskriptiv/präskriptiv (real oder geplant)
 | ||
| - Sichtweise auf ein System (Struktur, Verhalten, Zustand,...)
 | ||
| - heißt Weglassen
 | ||
| - setzt Verstehen voraus
 | ||
| - ist nicht automatisierbar
 | ||
| 
 | ||
| Verschiedene Modelle:
 | ||
| - Analysemodell
 | ||
| - Entwurfsmodell
 | ||
| - Implementierung (-smodell)
 | ||
| - Vorgehensmodell
 | ||
| - Produktmodell
 | ||
| - Dokumentation, Alternativen-Auswahl
 | ||
| 
 | ||
| Modelle für:
 | ||
| - Sichten
 | ||
| - Funktionen
 | ||
| - Daten
 | ||
| - Algorithmen
 | ||
| - Systemumgebung
 | ||
| - Dynamisches Verhalten
 | ||
| - Objektorientierte Modelle
 | ||
| 
 | ||
| ## Klassische Modelle
 | ||
| - Funktionen: 
 | ||
|   - Funktionsbaum
 | ||
|     - Hierarchische Dekomosition der Fkt
 | ||
|     - nummerieren der Ebenen/Funktionen möglich
 | ||
|     - Bsp: Abonnement Verwaltung
 | ||
|   - Blockschaltbild
 | ||
|     - eingebettetes System, HW/SW
 | ||
| - Daten
 | ||
|   - Data Dictionary
 | ||
|     - Verzeichnis von Daten mit Strukturinformationen
 | ||
|     - Backus-Naur-Form, kontextfreie Grammatik
 | ||
|   - Entity Relationship Diagram
 | ||
|     - Daten und ihre Beziehungen
 | ||
| - Systemumgebung
 | ||
|   - Datenflussdiagramm
 | ||
|     - Fluss und Transformation von Daten zwischen Funktionen, Speichern und Schnittstellen
 | ||
|     - kein Kontrollfluss
 | ||
| - Algorithmen
 | ||
|   - Entscheidungstabelle
 | ||
|     - Regelbasierte Beschreibung
 | ||
|     - Bedingung
 | ||
|     - Aktionen
 | ||
|     - Reduktionsregeln
 | ||
|   - Pseudocode
 | ||
|     - von Programmiersprache abstrahierende, detaillierte Beschreibung eines Algorithmus
 | ||
|   - Programmablaufplan
 | ||
|     - Grafische Beschreibung des Kontrollflusses
 | ||
|     - DIN 66001
 | ||
|     - Unstrukturiert
 | ||
|   - Struktogramm
 | ||
|     - Nassi-Shneidermann-Diagramm
 | ||
|     - keine Sprünge
 | ||
| - Dynamisches Verhalten (diskrete Zustände und atomare zustandübergänge)
 | ||
|   - Zustandsautomat
 | ||
|     - Verhalten mit Zuständen und -übergängen
 | ||
|     - Automatenmodelle und -theorie
 | ||
|     - Ggf zerlegung oder kommunizierende Automaten
 | ||
|   - Flow-Chart
 | ||
|   - Ereignisgesteuerte Prozesskette (EPK)
 | ||
|     - Geschäftsprozesse
 | ||
|     - BPM
 | ||
|   - Petri-Netz (ggf. mit Zeitmodell)
 | ||
|     - Grafische Beschreibung von Nebenläufigkeit und Synchronisation
 | ||
| - Objektorientierte Modelle
 | ||
|   - Klassendiagramme
 | ||
|   - UML
 | ||
| 
 | ||
| 
 | ||
| ## Objektorientierung
 | ||
| - bessere Strukturierung für komplexe Zusammenhänge
 | ||
| - Abstraktere Sichtweise
 | ||
| - Grundprinzip: Zerlegung; Teile und Herrsche
 | ||
| - ein System besteht aus vielen Objekten
 | ||
| - ein Objekt hat
 | ||
|   - definiertes Verhalten
 | ||
|     - Menge genau definierter Operationen
 | ||
|     - Operation wird beim Empfang einer Nachricht ausgeführt
 | ||
|   - inneren Zustand
 | ||
|     - Zustand des Objekts ist Privatsache
 | ||
|     - Resultat einer Operation hängt vom aktuellen Zustand ab
 | ||
|   - eindeutige Identität
 | ||
|     - Identität ist unabhängig von anderen Eigenschaften
 | ||
|     - Mehrere verschiedene Objekte mit identischem Verhalten und identischem inneren Zustand im gleichen System möglich
 | ||
| - Klasse
 | ||
|   - Gleichartige Objekte mit ggf. verschiedenen Zuständen
 | ||
|   - Verhaltensschema – Operationen
 | ||
|   - Innere Struktur – Attribute
 | ||
| 
 | ||
| Vorteile der Objektorientierung
 | ||
| - Zuständigkeitsbereiche
 | ||
|   - Daten, Operationen und Zustand: lokal und gekapselt
 | ||
| - Klare Schnittstellen
 | ||
|   - Definiertes Objektverhalten, Nachrichten
 | ||
| - Hierarchie
 | ||
|   - Vererbung und Polymorphie (Spezialisierung), Klassenschachtelung
 | ||
| - Baukastenprinzip
 | ||
|   - Benutzung vorgefertigter Klassenbibliotheken, Anpassung durch Spezialisierung (mittels Vererbung)
 | ||
| 
 | ||
| 
 | ||
| ## Unified Modeling Language
 | ||
| - Grafisches Beschreibungsmittel für Aspekte des Softwareentwurfs diskreter Systeme
 | ||
|   - Spezifikation, Entwurf, Visualisierung, Konstruktion, Dokumentation von Software
 | ||
|   - Für OO-Softwareentwicklung und -prozess geeignet
 | ||
|   - UML ist weder Methode noch Prozess
 | ||
| 
 | ||
| Warum UML?
 | ||
| - Objektorientierung ist zur Zeit das vorherrschende Modellierungs-Paradigma, Industrie-Standard
 | ||
| - Kombination von Struktur-, Verhaltens-, Interaktions-, und Verteilungsmodellen
 | ||
| - Für Analyse, Entwurf, Implementierung und Test einsetzbar
 | ||
| - Gute Werkzeugunterstützung für Editieren, Versionierung, Codegenerierung
 | ||
| - Erweiterbarkeit der UML mit Stereotypen und Tags
 | ||
| - Semi-formale Modelle, z.T. verschiedene Interpretationen
 | ||
| - Offenheit: Erweiterung mit stereotypes, tags, constraints
 | ||
| 
 | ||
| Nachteile UML
 | ||
| - UML ist in vielen Facetten nicht präzise festgelegt
 | ||
| - Werkzeuge für Transformation, Analyse etc. fehlen noch
 | ||
| - UML ist keine „kleine Sprache“: Lernaufwand notwendig
 | ||
| - Komponenten sind nicht adäquat darstellbar
 | ||
| - Sprachen wie die UML werden erlernt durch Übung!
 | ||
| - Aber: LV SWT ist kein kompletter UML-Kurs
 | ||
| 
 | ||
| ### Überblick über Modelle
 | ||
| - 14 Diagrammarten
 | ||
| - Struktur-Diagramme
 | ||
|   - Klassen-, Objekt-, Komponenten-, Kompositions-Struktur-,
 | ||
|   - Paket- und Verteilungsdiagramm
 | ||
|   - Profildiagramm – zur UML-Erweiterung
 | ||
| - Verhaltens-Diagramme
 | ||
|   - Use-Case-, Aktivitäts- und Zustandsdiagramms
 | ||
|   - Interaktionsdiagramme: Sequenz-, Kommunikations-, Timing- und Interaktionsübersichts-Diagramm
 | ||
| 
 | ||
| #### Use-Case-Diagramm
 | ||
| - Beschreiben Systemfunktion aus Benutzersicht (Was, nicht Wie)
 | ||
| - Erste Anforderungsspezifikation (requirements)
 | ||
| - Planbare Einheiten als Inkremente für die Entwicklung
 | ||
| - Keine Modellierung eines Ablaufs!
 | ||
| - Erstellen von Testfällen (test case generation)
 | ||
| - Grundelemente
 | ||
|   - Anwendungsfall: Use Case
 | ||
|   - Beteiligte: Aktor
 | ||
| - Verfeinerung mittels Use-Case-Realisierung notwendig
 | ||
|   - Textuelle Beschreibung
 | ||
|   - Verhaltensdiagramme
 | ||
| 
 | ||
| #### Klassendiagramm
 | ||
| - Modellierung der Struktur (Aufbau) eines Systems
 | ||
| - Modellierung von statischen Aspekten
 | ||
| - Modellierung der Struktur von Daten
 | ||
| - Klasse im Mittelpunkt
 | ||
|   - Aufbau: Attribute, Operationen
 | ||
|   - Beziehungen zueinander: Assoziationen, Vererbung
 | ||
| - Verbreitetstes und bekanntestes Diagramm der UML
 | ||
| 
 | ||
| #### Objektdiagramm
 | ||
| - Struktur des Systems zur Laufzeit zu einem Zeitpunkt
 | ||
| - Tatsächliche Zusammenhänge und Belegungen von Attributen von Objekten zu einem Zeitpunkt
 | ||
| - Eine detaillierte Sicht auf einen Aspekt
 | ||
|   - Keine vollständige Beschreibung (zu komplex)
 | ||
|   - Für kompliziertere Abhängigkeiten (z.B. Rekursion)
 | ||
| - Objektdiagramm für alle Arten von Exemplaren
 | ||
|   - z.B.: Klasse (Objekt), Komponente, Knoten, ...
 | ||
| - Keine Exemplare von Operationen -> Ablauf -> Verhaltensdiagramme / Interaktionsdiagramme
 | ||
| - Kein Verlauf der Wertebelegung über die Zeit
 | ||
| 
 | ||
| #### Paketdiagramm
 | ||
| - Gliederung (Strukturierung) des Systems in Teile (Pakete)
 | ||
| - Zuordnung von Elementen zu einem Paket
 | ||
| - Bildung von Hierarchien (Enthält-Beziehung)
 | ||
| - Abhängigkeiten zwischen den Paketen
 | ||
|   - "Include" von Quellcode-Dateien (<<import>>)
 | ||
| - Anwendung:
 | ||
|   - Zum Grobentwurf von Systemen
 | ||
|   - Definition von Schichten
 | ||
| 
 | ||
| #### Komponentendiagramm
 | ||
| - Strukturierung des Systems durch Komponenten
 | ||
| - Komponente: Modulare, austauschbare Einheit (Substitution)
 | ||
| - Modellierung der Abhängigkeiten zwischen Komponenten
 | ||
| - Modellierung der inneren Struktur von Komponenten
 | ||
| - Definition von Schnittstellen
 | ||
| 
 | ||
| #### Kompositionsstrukturdiagramm
 | ||
| - Teile-Ganzes-Strukturen -> Kompositionsstruktur
 | ||
| - Strukturell statische Kompositionsstrukturen:
 | ||
|   - Kurzschreibweise bei vielen Kompositionen
 | ||
|   - Modellierung des Aufbaus komplexer Systeme
 | ||
| - Strukturell dynamische Kompositionsstrukturen:
 | ||
|   - Notwendige Strukturen zur Realisierung eines Verhaltens
 | ||
|   - Definition von Rollen, zur Lösung wiederkehrender Probleme -> Modellierung von Mustern
 | ||
| - Starke Verwandtschaft mit dem Klassendiagramm
 | ||
| - Spezialisierte Kompositionsbeziehung -> erweiterte Semantik
 | ||
| 
 | ||
| #### Aktivitätsdiagramm
 | ||
| - Modellierung von
 | ||
|   - Kontrollflüssen
 | ||
|   - Datenflüssen
 | ||
|   - Parallelem Verhalten
 | ||
|   - Verzweigungen, bedingten und gewichteten Abläufen
 | ||
| - Geschäftsprozessmodellierung möglich
 | ||
| - Abstrakte und detaillierte Verhaltensbeschreibung möglich
 | ||
| - Grundlage zur Codegenerierung
 | ||
| - Zur Verfeinerung von
 | ||
|   - Use-Cases
 | ||
|   - Operationen / Interaktionen
 | ||
|   - anderen Aktionen und Aktivitäten
 | ||
| 
 | ||
| #### Interaktionsdiagramme
 | ||
| - Modellierung von
 | ||
|   - Kommunikation zwischen Kommunikationspartnern (Lebenslinie)
 | ||
|   - Operationen (Modellierung eines Programms)
 | ||
|   - Informationsaustausch / Nachrichten
 | ||
| - Gemeinsames Grundkonzept der Interaktionsdiagramme
 | ||
| - Sehr detaillierte Diagramme
 | ||
|   - Meist nicht zur vollständigen Beschreibung eines Systems
 | ||
|   - Betrachtung eines wichtigen Teilaspekts
 | ||
| - Grundlage zur Codegenerierung
 | ||
| 
 | ||
| #### Sequenzdiagramm
 | ||
| - Genaue zeitliche Abfolge von Nachrichten
 | ||
| - Umfangreichstes Interaktionsdiagramm
 | ||
| - Kontrollelemente möglich (Schleifen, Verzweigungen)
 | ||
| 
 | ||
| #### Kommunikationsdiagramm
 | ||
| - Kommunikationsbeziehungen der Kommunikationspartner stehen im Vordergrund
 | ||
| - Welche Komponenten arbeiten wie zusammen, um eine Funktion zu erfüllen
 | ||
| 
 | ||
| #### Timing-Diagramm
 | ||
| - Genaue zeitliche Darstellung von Zustandsübergängen
 | ||
| - Kommunikation abhängiger Zustandsautomaten
 | ||
| - Modellierung einzelner Interaktion
 | ||
| 
 | ||
| ##### Prinzipieller Aufbau
 | ||
| - Zeitlicher Verlauf senkrecht
 | ||
| - Kommunikationspartner waagerecht (unsortiert)
 | ||
| - Lebenslinie
 | ||
|   - Rechteck mit gestrichelter senkrechter Linie
 | ||
|   - Start, Ende und Dauer der Ausführung einer Operation
 | ||
|   - Rekursive Aufrufe möglich
 | ||
| - Ereignisspezifikation
 | ||
|   - Stelle des Sendens / Empfangens der Nachricht
 | ||
|   - Definition der Reihenfolge des Auftretens
 | ||
|   - Trace: Folge von Sende- und Empfangsereignissen
 | ||
| 
 | ||
| ##### Weitere Elemente des Sequenzdiagramms
 | ||
| - Nachrichten ohne Sender
 | ||
|   - z.B. am Beginn einer Interaktion
 | ||
| - Verlorene Nachrichten (ohne Empfänger)
 | ||
|   - Nachricht ohne dargestellten Empfänger
 | ||
|   - z. B. am Ende einer Interaktion
 | ||
| - Erzeugen von Lebenslinien
 | ||
|   - Gestrichelte Linie mit geöffnetem Pfeil
 | ||
|   - Keine Rückgabenachricht
 | ||
|   - Zeitliche Einrückung des Rechtecks
 | ||
| - Zerstören von Lebenslinien
 | ||
|   - Durchgezogene Linie mit Dreieckende
 | ||
|   - Kann Rückgabenachricht erzeugen
 | ||
| 
 | ||
| ##### Nachrichten in Interaktionsdiagrammen
 | ||
| - Ereignis des Sendens bzw. Empfangens von Nachrichten
 | ||
| - Typen:
 | ||
|   - Operationsaufruf (synchron / asynchron)
 | ||
|   - Antwort Nachricht
 | ||
|   - Signal (asynchron), Create-/ Delete Message
 | ||
| - Operationsaufruf: Parameterliste muss kompatibel sein
 | ||
| - Nachrichtentypen
 | ||
| 
 | ||
| #### Zustandsdiagramm
 | ||
| - Modellierung des (vollständigen?) Verhaltens
 | ||
|   - Zustände von Klassen / Objekten / Komponenten
 | ||
|   - Übergänge zwischen den Zuständen
 | ||
|   - Ereignisse, die Zustandswechsel auslösen
 | ||
| - Modellierung von endlichen Automaten (Zustandsmaschinen)
 | ||
|   - Deterministische
 | ||
|   - Nichtdeterministische
 | ||
| - Verfeinerung von Zuständen möglich
 | ||
| - Modellierung von verteilten Systemen / parallelem Verhalten
 | ||
| - Grundlage zur Codegenerierung
 | ||
| 
 | ||
| 
 | ||
| # Analyse
 | ||
| - Einordnung in den Projektablauf
 | ||
| - Was ist eine Anforderung?
 | ||
|   - Merkmal, Eigenschaft, Bedingung oder Einschränkung eines Systems
 | ||
|   - Notwendig für die Akzeptanz vom Kunden
 | ||
|   - Definition (IEEE 610.12-1990)
 | ||
|     - Dokumentierte Darstellung einer Fähigkeit oder Eigenschaft 
 | ||
|     - von Anwender benötigt zur Problemlösung bzw. um Ziel zu erreichen
 | ||
|     - Muss von System oder Komponente erfüllt werden, um Vertrag oder Standard zu erfüllen
 | ||
| 
 | ||
| - Funktionale Anforderungen - Was soll es tun?
 | ||
|   - „...Legt eine vom Softwaresystem oder einer seiner Komponenten bereitzustellende Funktion oder Service dar“ [Balzert]
 | ||
|   - Was leistet das System
 | ||
|   - Welche Funktionen bietet es
 | ||
|   - Wie interagiert es mit der Umgebung
 | ||
|   - Anforderungen an:
 | ||
|     - Verhalten
 | ||
|     - Struktur
 | ||
|     - (Alternativ: Statik, Dynamik, Logik)
 | ||
| - Nichtfunktionale Anforderungen – Wie?
 | ||
|   - „...legen qualitative oder quantitative Eigenschaften des Softwareprojektes oder einer Komponente fest“ [Balzert]
 | ||
|   - Auch Bezeichnet als:
 | ||
|     - Quality of Service
 | ||
|     - Qualitätsanforderungen
 | ||
|   - Arten - FURPS (ISO 9126):
 | ||
|     - Functionality (Funktionalität)
 | ||
|     - Usability (Benutzbarkeit)
 | ||
|     - Reliability (Zuverlässigkeit)
 | ||
|     - Performance (Effizienz) / Portability (Übertragbarkeit)
 | ||
|     - Supportability (Änderbarkeit/ Wartbarkeit)
 | ||
| 
 | ||
| - Funktionalität
 | ||
|   - Angemessen, Genauigkeit
 | ||
|   - Sicherheit: Vertraulichkeit, Informationssicherheit, Datenintegrität, Verfügbarkeit
 | ||
|   - (Nicht ausreichend spezifizierte funktionale Anforderung)
 | ||
| - Benutzbarkeit
 | ||
|   - Verständlichkeit, Erlernbarkeit, Bedienbarkeit, Attraktivität
 | ||
| - Zuverlässigkeit
 | ||
|   - Reife (Fehler-Anzahl), Fehlertoleranz, Wiederherstellbarkeit
 | ||
| - Effizient/ Leistungsanforderungen
 | ||
|   - Zeitverhalten, Verbrauchsverhalten, Wirtschaftlichkeit
 | ||
| - Portabilität
 | ||
|   - Anpassbarkeit, Installierbarkeit, Koexistenz, Austauschbarkeit
 | ||
| - Wartbarkeit
 | ||
|   - Analysierbarkeit, Änder- und Erweiterbarkeit, Stabilität (bei Änderungen), Testbarkeit
 | ||
| - Weitere:
 | ||
|   - Konformität zu Konventionen und Bestimmungen
 | ||
|   - Interoperabilität zu anderen Systemen
 | ||
|   - Implementierungsanforderungen
 | ||
|   - Schnittstellenanforderungen
 | ||
|   - Skalierbarkeit (Änderungen des Problemumfangs)
 | ||
|   - Betriebliche und rechtliche Rahmenbedingungen
 | ||
|   - Liefer- und Verpackungsanforderungen
 | ||
| 
 | ||
| ### Nichtfunktionale Anforderungen
 | ||
| Schwierigkeit nichtfunktionaler Anforderungen
 | ||
| - Hängen oft von Verhalten ab: daher komplex und nicht direkt sichtbar
 | ||
| - „Das Auto hat vier Räder“ (Struktur)
 | ||
| - „Wenn der Blinker betätigt wird, blinkt das Auto dreimal wenn die Zündung an ist; ansonsten wird das Standlicht einseitig eingeschaltet“ (Korrektes Verhalten)
 | ||
| - „Das Motorsteuergerät darf innerhalb von 5 Jahren und 150.000km Laufleistung höchstens mit 0.1% Wahrscheinlichkeit ausfallen“ (Zuverlässigkeit)
 | ||
| 
 | ||
| Umgang mit nichtfunktionalen Eigenschaften
 | ||
| - Nicht direkt „by construction“ zu realisieren
 | ||
| - Naive Herangehensweise: Ignorieren!
 | ||
|   - Entwerfen und Implementieren der Software ohne Berücksichtigung nichtfunktionaler Eigenschaften
 | ||
|   - Testen der nichtfunktionalen Eigenschaften
 | ||
|   - Wenn nicht erfüllt: Entwurf und Implementierung ändern!
 | ||
| - Funktioniert nur bei sehr einfachen Systemen, bzw. wenn nichtfunktionale Eigenschaften nicht wichtig sind!
 | ||
| 
 | ||
| Sinnvoller Umgang mit nichtfunktionalen Eigenschaften
 | ||
| - Untersuchung der Projektrisiken bereits in der Analysephase
 | ||
|     - größte Risiken zuerst betrachten!
 | ||
|   - Immer fragen: Geht das so überhaupt?
 | ||
|   - Festlegungen des Entwurfs möglichst früh gegen Anforderungen prüfen – aber wie?
 | ||
| - Modellbasierter Entwurf
 | ||
|   - Modellierung des Systems und seiner Umwelt
 | ||
|   - Bewertung des Modells (Simulation)
 | ||
|   - Lehrveranstaltungen Systementwurf, KIS, LTS
 | ||
| 
 | ||
| Randbedingungen
 | ||
| - „... Eine Randbedingung ist eine organisatorische oder technologische Vorgabe, die die Art und Weise einschränkt, wie das betrachtete System realisiert werden kann.“ 
 | ||
| - Werden nicht umgesetzt
 | ||
| - Schränken Lösungsraum ein
 | ||
| - Beispiele:
 | ||
|   - Kosten
 | ||
|   - Durchlaufzeit: Time to Market
 | ||
|   - Vorgaben durch Marketing und Vertrieb
 | ||
|   - Technische Randbedingungen (nichtfunktionale Anforderung)
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| Geforderte (Meta-)Eigenschaften
 | ||
| - Vollständig: alle Szenarien sind beschrieben
 | ||
| - Konsistent: keine Widersprüche
 | ||
| - Eindeutig: nur eine Interpretation möglich
 | ||
| - Korrekt: genaue und richtige Darstellung
 | ||
| - Realistisch: unter geg. Einschränkungen implementierbar
 | ||
| - Überprüfbar: durch Tests am Endprodukt nachweisbar
 | ||
| - Rückverfolgbar: Auswirkungen bis zur Implementierung nachvollziehbar (Testfälle, Auswirkung von Änderungen)
 | ||
| - Klassifizierbar (Risiko, Priorität, Dringlichkeit, Nutzen ...)
 | ||
| - Validierung mit dem Kunden
 | ||
| 
 | ||
| - Requirements Engineering
 | ||
|   - Ermittlung, Analyse und Verwaltung von Anforderungen
 | ||
|   - Ausgangspunkt: Projektidee
 | ||
| - Anforderungsermittlung
 | ||
|   - requirements elicitation, requirements definition
 | ||
|   - Bestimmen und dokumentieren der Anforderungen an das geplante System
 | ||
|   - Beteiligt: Entwickler, Kunde, Benutzer
 | ||
|   - Ergebnis: Anforderungsspezifikation - Glossar, Vertrag, Lastenheft
 | ||
| - Anforderungs-Analyse
 | ||
|   - requirements analysis, system modeling
 | ||
|   - Beschreibung im Detail und formal strukturiert
 | ||
|   - Beteiligt: Entwickler
 | ||
|   - Ergebnis: funktionale Spezifikation - Produktdefinition, Analysemodell, Pflichtenheft
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| | | Anforderungsermittlung | Systemmodellierung |
 | ||
| | -- | -- | -- |
 | ||
| | Ergebnis | Anforderungsspezifikation im Lastenheft, Glossar, Lastenheft | funktionale Spezifikation in Produktdefinition, Analysemodell, Pflichtenheft |
 | ||
| | Notation | Text | Text + (semi-) formales Modell |
 | ||
| | Kommunikation | mit dem Kunden | zwischen Entwicklern |
 | ||
| | Sichtweise | des Anwenders | äußere Systemaspekte |
 | ||
| Vor allem: Kommunikationsleistung!
 | ||
| 
 | ||
| Bedeutung:
 | ||
| - Falsche Anforderungen führen zu falschem System
 | ||
| - Frühe Fehler im Entwicklungsprozess sind teuer!
 | ||
| 
 | ||
| Fehlerentstehung und Fehlerquellen bei Anforderungserfassung
 | ||
| - 83% sprachliche Fehler (Un- bzw. Missverständlich)
 | ||
| - 75% Logische Fehler (Widersprüchlichkeit, Redundanz)
 | ||
| - 73% Inhaltliche Fehler (Falsche Sachverhalte, Unvollständig)
 | ||
| 
 | ||
| ## Ermiteln von Anforderungen
 | ||
| Woher kommen Anforderungen?
 | ||
| - Ausgangspunkt
 | ||
|   - Projektidee, schriftliche Skizze
 | ||
|   - Kurz und knapp
 | ||
|   - Stichpunkte der wichtigsten Funktionen
 | ||
|   - Lastenheft (falls schon existiert)
 | ||
| - Interessenhalter (stakeholder)
 | ||
|   - Identifizieren, Wichtigkeit bewerten (berücksichtigen?)
 | ||
|   - Ansprechpartner? Interessen und Erwartungen
 | ||
|   - Fachexperten, Verantwortliche, Betroffene
 | ||
| 
 | ||
| Beteiligte Rollen
 | ||
| - Endbenutzer
 | ||
|   - Aufnahme Ist-Zustand, Domänenwissen, Anforderungen
 | ||
| - Kunde
 | ||
|   - Definiert Ziel des Systems, Vertragsverhandlung
 | ||
| - Konfigurationsmanager
 | ||
|   - Revisionsgeschichte der Dokumente, Nachvollziehbarkeit
 | ||
| - Architekt
 | ||
|   - Integration von Anwendungsfall- und Objektmodellen
 | ||
| - Analytiker 
 | ||
|   - Modelliert das System und erstellt Anwendungsfälle
 | ||
| - Redakteur
 | ||
| - Prüfer
 | ||
| 
 | ||
| Wie ermittelt man Anforderungen?
 | ||
| - Problem: Entwickler müssen sich in Begriffs- und Denkwelt des Kunden einarbeiten, sonst Kommunikationsprobleme
 | ||
| - Systematische Vorgehensweise
 | ||
| - Kommunikation mit Kunden
 | ||
| - Geschäftsprozess (business process)
 | ||
|   - fachlicher Ablauf, der Wert oder Kosten verursacht
 | ||
| - Akteur (actor)
 | ||
|   - Benutzer, Schnittstelle nach außen
 | ||
| - Szenario (scenario)
 | ||
|   - Interaktion mit System als Ablauf
 | ||
| - Anwendungsfall (use case)
 | ||
|   - Automatisierter Arbeitsschritt, vom System ausgeführt
 | ||
| - Interviews mit Fachanwendern
 | ||
|   - Mitschrift, später strukturierter Text und Tabelle
 | ||
| - Strukturierte Spezifikation
 | ||
|   - Vorlagen / sprachliche Anforderungsschablonen
 | ||
|   - Formulare
 | ||
|   - Reduzierung sprachlicher Mehrdeutigkeiten
 | ||
| - Anwendungsfalldiagramm (Use-Case-Diagramm)
 | ||
|   - Arbeitsschritt eines Geschäftsprozesses, der durch das System ausgeführt wird
 | ||
|   - Anforderungen an das System modellieren – was soll das System leisten
 | ||
|   - Systemgrenzen / Systemkontext festlegen
 | ||
|   - Systembeteiligte modellieren
 | ||
|   - Planbare Einheiten als Schritte für die Entwicklung
 | ||
|   - Verwendung bereits ab Projektbeginn
 | ||
|   - Keine Modellierung eines Ablaufs!
 | ||
| - Umgang mit Szenarien und Anwendungsfällen
 | ||
|   - Zunächst nur zum Verständnis kurz aufstellen
 | ||
|   - Systemgrenze definieren
 | ||
|   - Beschreibungen verfeinern
 | ||
|   - Änderungen mit Kunden abstimmen
 | ||
|   - Prototypen nur zur visuellen Unterstützung
 | ||
|   - Benutzungsschnittstelle erst beginnen, wenn funktionale Anforderungen in etwa klar sind
 | ||
| 
 | ||
| Leitfaden für Anwendungsfälle
 | ||
| - Benennen mit Verbalphrasen, die Anwendersicht beschreiben (Simuliere)
 | ||
| - Akteure mit Substantiven benennen (Anwender)
 | ||
| - Systemgrenzen klären. Arbeitsschritte von Akteuren und System kennzeichnen
 | ||
| - Schritte im aktiven Stil beschreiben (Auto bremst)
 | ||
| - Ursächliche Beziehung zwischen Folgeschritten
 | ||
| - 1 Anwendungsfall = 1 vollständige Transaktion
 | ||
| - Normalfall darstellen; Ausnahmen gesondert beschreiben
 | ||
| - Nicht die Benutzungsschnittstelle beschreiben (statt dessen visuellen Prototypen verwenden)
 | ||
| - Übersichtlichkeit (max. 2-3 Seiten), sonst zerlegen
 | ||
| 
 | ||
| - Typische Probleme
 | ||
|   - Kommunikations- und Verständnisprobleme
 | ||
|   - Viele verschiedene Beteiligte
 | ||
|   - Kunden wissen nicht, was sie genau wollen und was geht
 | ||
|   - Verwendung von Fachsprachen
 | ||
|   - Widersprüchliche Anforderungen, verschiedene Interessen
 | ||
|   - Nicht-technische organisatorische, historische oder rechtliche Rahmenbedingungen
 | ||
|   - Zusätzliche Beteiligte können auftauchen
 | ||
|   - Anforderungen ändern sich während der Entwicklung
 | ||
| - Anforderungsänderungen
 | ||
|   - Sind die Regel
 | ||
| - Tätigkeiten der Anforderungsanalyse
 | ||
|   - Anforderungen strukturieren
 | ||
|   - Eigenschaften der Anforderungen bestimmen
 | ||
|   - Anforderungen priorisieren
 | ||
|   - Anforderungen in Textform, Grafiken, Modellen dokumentieren
 | ||
|   - Anforderungen modellieren
 | ||
|   - Anforderungen auf inhaltliche Qualität prüfen
 | ||
|   - Auf Übereinstimmung mit den Zielen prüfen
 | ||
|     - Ziel Abnahme der Anforderung
 | ||
|   - Hängt mit Analyse des Systems zusammen
 | ||
| - Anforderungen strukturieren
 | ||
|   - Unterteilung
 | ||
|     - Funktional, Nichtfunktional
 | ||
|     - Muss, Kann,... oder Haupt- und Nebenanforderung
 | ||
|   - Hierarchische Zerlegung
 | ||
|     - Unterteilen, Verfeinern
 | ||
|   - Ordnung festlegen, eindeutig Nummerieren
 | ||
|     - auf Einmaligkeit achten
 | ||
|   - Beziehungen festhalten
 | ||
|   - Verwendung von Werkzeugen
 | ||
|     - MS-Project, Doors, Git issues, Trac, Bugzilla, MKS,...
 | ||
|     - Modellierungswerkzeuge
 | ||
| - Eigenschaften bestimmen
 | ||
|   - Wahl der Eigenschaften firmen- bzw. projektspezifisch
 | ||
|   - Wichtige Eigenschaften
 | ||
|     - Identifikationsnummer
 | ||
|     - Kurzbezeichnung
 | ||
|     - Beschreibung (Text, ggf. Grafik, Modell)
 | ||
|     - Aufwand
 | ||
|     - Priorität der Anforderung
 | ||
|     - Bearbeitungsstatus / Restaufwand
 | ||
|     - Zugeordnet (wer ist verantwortlich / bearbeitet)
 | ||
|     - Querverbindungen zu anderen Anforderungen
 | ||
|     - Ggf. zusätzliche Dokumente oder Bemerkungen
 | ||
|     - Stabilität der Anforderung (Änderungswkt.)
 | ||
|     - Kritikalität der Anforderung: Schäden bei Fehlern?
 | ||
|     - Entwicklungsrisiko: Erfolgsaussichten der Umsetzung
 | ||
|     - Abnahmekriterien / Erfüllungsnachweis durch?
 | ||
|     - Anforderungstyp: Funktional, nicht funktional ,...
 | ||
|     - Anforderungssicht: Dynamik, Statik, Logik, Struktur, Funktion
 | ||
|     - Mögliche Konflikte
 | ||
|     - Autor
 | ||
|     - Quelle: Wer möchte die Anforderung umgesetzt haben?
 | ||
|     - Status der Beschreibung: Idee, grober Inhalt, detailliert
 | ||
|     - Anforderungsversion
 | ||
| - Anforderungen priorisieren
 | ||
|   - MuSCoW-Priorisierung
 | ||
|   - Muss-, Kann-, Optional, Nicht (Abgrenzungskriterien) (must, should, could, won‘t)
 | ||
|   - Ad-hoc: Stakeholder priorisiert Anforderungen
 | ||
|   - Priorisierungsmatrix / Kosten-Wert-Analyse
 | ||
|     - Eigenschaften bewerten (Punkte vergeben)
 | ||
|     - Werte gewichten
 | ||
|     - Priorität berechnen $Prioritäten = \frac{Nutzen - Nachteil}{Kosten + Risiko}$
 | ||
|   - Kano-Klassifikation
 | ||
|     - Basiseigenschaften: Werden vorausgesetzt (fehlen stört, wenig zusätzliche Zufriedenheit)
 | ||
|     - Leistungseigenschaften: Sonderwünsche
 | ||
|     - Begeisterungseigenschaften: Wird nicht erwartet
 | ||
|     - Abfragen per Fragenkatalog
 | ||
|   - Reihenfolge festlegen
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| ## Objektorientierte Analyse und Systemmodellierung
 | ||
| - Übersicht
 | ||
|   - Aufgabe: Systemmodell erstellen, funktionale Spezifikation
 | ||
|   - Beschreibung der Systembenutzung und des Verhaltens
 | ||
|   - Was, nicht wie – Implementierungsaspekte ausklammern
 | ||
|     - Nicht: Datenhaltung, Verteilung, Technologien, Architektur, ..
 | ||
|   - Zusammenhang mit Anforderungsspezifikation
 | ||
|   - OO: Modell des Anwendungsbereichs
 | ||
| - Analysemodell
 | ||
|   - Korrekt, vollständig, konsistent und nachprüfbar
 | ||
|   - Struktur und Verhalten
 | ||
|   - Verschiedene Sichten (OO, Strukturiert, ...)
 | ||
| - Eingangsdokumente
 | ||
|   - Lastenheft, Anforderungsspezifikation
 | ||
| - Typische Ergebnisse
 | ||
|   - Funktionales Modell
 | ||
|     - Geschäftsprozesse und Anwendungsfälle
 | ||
|   - Objektmodell
 | ||
|   - Dynamisches Modell – Systemverhalten
 | ||
|     - Zustands- und Sequenzdiagramme
 | ||
|   - Vor- und Nachbedingungen von Systemoperationen
 | ||
|   - Prototyp / Spezifikation Benutzungsschnittstelle
 | ||
|   - Pflichtenheft
 | ||
| - Objektorientierte Analyse nach [Brügge / Dutoit]
 | ||
|   - Verdeutlicht iterativen Ablauf
 | ||
|   - Unterteilung des Analysemodells in:
 | ||
|     - Funktionales Modell (Anwendungsfälle)
 | ||
|     - Objektmodell (Klassen und Objektdiagramme)
 | ||
|     - Dynamisches Modell (Zustands- und Sequenzdiagramme)
 | ||
|     - Unterscheidung der Objekttypen
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| - Heuristik Sprache $\rightarrow$ OO-Modell
 | ||
| - Objektarten im Systemmodell
 | ||
|   - Entitätsobjekte – vom System verwaltete Informationen
 | ||
|   - Grenzobjekte – Interaktion zwischen System und Akteuren
 | ||
|   - Steuerungsobjekte – Durchführung der Anwendungsfälle
 | ||
| - Identifizierung von Entitätsobjekten
 | ||
|   - Begriffe, die klargestellt werden müssen
 | ||
|   - Wiederkehrende Substantive in Anwendungsfällen
 | ||
|     - Heuristiken
 | ||
|   - Reale Objekte, die das System kennen muss
 | ||
|   - Reale Prozesse, die das System verfolgen muss
 | ||
|   - Anwendungsfälle
 | ||
|   - Datenquellen und -senken
 | ||
|   - Artefakte, mit denen der Nutzer interagiert
 | ||
| - Identifizierung von Grenzobjekten
 | ||
|   - Elemente der Benutzungsschnittstelle
 | ||
|   - Formulare für Eingaben
 | ||
|   - Nachrichten, Rückmeldungen
 | ||
|   - Endgeräte
 | ||
|   - In der Begriffswelt des Anwenders bleiben!
 | ||
|   - Schnittstellen grafisch skizzieren bzw. Prototyp!
 | ||
| - Identifizierung von Steuerungsobjekten
 | ||
|   - Koordination von Grenz- und Entitätsobjekten
 | ||
|   - Abarbeitung von Anwendungsfällen
 | ||
|     - Reihenfolge von Schritten
 | ||
|     - Informationen übernehmen und weiterleiten
 | ||
|     - Oft ein Steuerungsobjekt pro Anwendungsfall
 | ||
|   - Beispiel: Simulationsszenario
 | ||
|   - Verhaltensmodell sinnvoll! Im folgenden: dynamische Modelle
 | ||
| 
 | ||
| - Abläufe der Anwendungsfälle modellieren
 | ||
|   - Ziel - Objekte finden
 | ||
|   - Klassen identifizieren
 | ||
|   - Verhalten / Operationen finden
 | ||
| - Use Case durch Interaktion verfeinern
 | ||
|   - einfacher kurzer Ablauf: textuelle Beschreibung, Aktivitätsdiagramm
 | ||
|   - Ablauf mit Verzweigungen, Parallelitäten: Aktivitätsdiagramm (Kontrollflussmodellierung)
 | ||
|   - datengetriebener Ablauf: Aktivitätsdiagramm (Objektflussmodellierung)
 | ||
|   - Interaktion zwischen den Objekten wichtig: Kommunikationsdiagramm, Aktivitätsdiagramm (Aktivitätsbereiche), Sequenzdiagramm
 | ||
|   - zeitliche Abfolge steht im Mittelpunkt: Sequenzdiagramm
 | ||
|   - Zustandswechsel / zeitliche Abfolge von Zuständen: Zustandsdiagramm / Timing-Diagramm
 | ||
|   - komplexe Abläufe mit Verzweigungen und Parallelitäten: Interaktionsübersichtsdiagramm
 | ||
|   - komplexe Abläufe ohne Verzweigungen und Parallelitäten: weitere Verfeinerung durch Use-Case-Diagramm
 | ||
|   - komplexer strukturierter Ablauf: Kollaboration aus dem Kompositionsstrukturdiagramm
 | ||
| 
 | ||
| - Dynamische UML-Modelle
 | ||
|   - Abläufe
 | ||
|     - Aktivitätsdiagramm (activity diagram)
 | ||
|     - Kommunikationsdiagramm (communication diagram)
 | ||
|     - Sequenzdiagram (sequence diagram)
 | ||
|     - Zeitdiagramm (timing diagram)
 | ||
|   - Zustandsabhängiges Verhalten von Objekten
 | ||
|     - Zustandsautomat (state chart diagram)
 | ||
| 
 | ||
| - Aktivitätsdiagramm
 | ||
|   - Aktion – einzelner Schritt
 | ||
|   - Aktivität
 | ||
|     - Beschreibt einen Ablauf / repräsentiert ein Verhalten
 | ||
|       - Beinhaltet eine Folge Aktionen, Kontroll- oder Objektknoten
 | ||
|     - Schachtelung von Aktivitäten und Aktionen
 | ||
|       - Aktionen in Aktivitäten enthalten
 | ||
|       - Aktionen durch Aktivitäten verfeinerbar
 | ||
|     - Aktivitäten beschreiben / verfeinern
 | ||
|       - Aktionen, Use Cases, Interaktionen, Operationen ...
 | ||
|   - Ein- und Ausgabeparameter in Form von Objekten
 | ||
|     - Parameterknoten entsprechend Pins der aufrufenden Aktion
 | ||
|     - Alternativ: Parameterangabe mit Name und Typ
 | ||
|   - Angabe von Vor- und Nachbedingungen möglich
 | ||
|   - Optional: Parameter unter Aktivitätsnamen
 | ||
| 
 | ||
| - Verfeinerung der Aktionen durch Aktivitäten
 | ||
| - Aktion durch Interaktionen verfeinern
 | ||
|   - Detaillierte Diagramme
 | ||
|   - Meist entwurfsnah
 | ||
| - Verfeinerung der Aktionen durch StateChart
 | ||
| - Objekte zusammenstellen und klassifizieren
 | ||
|   - Toolunterstützung (Möglichkeiten stark toolabhängig)
 | ||
|   - Objekte Ergebnis der Verhaltensmodellierung
 | ||
|   - Ergebnis Verhaltensdiagramm: Operationen der Klassen
 | ||
|   - Klassen generalisieren / spezialisieren $\rightarrow$ Klassenhierarchie
 | ||
| - Übergang zum Entwurf
 | ||
|   - Klassenstruktur festlegen
 | ||
| - Spezifikation von Benutzungsschnittstellen
 | ||
|   - Skizzieren, Prototyp generieren, Spezialwerkzeuge
 | ||
|   - Klassen und Operationen in Funktionen
 | ||
|   - Gestaltung MMI, style guides, Standards
 | ||
| 
 | ||
| ## Dokumentation von Anforderungen
 | ||
| - Lastenheft
 | ||
|   - Gesamtheit der Forderungen eines Auftraggebers (AG) an die Lieferungen und Leistungen eines Auftragnehmers (AN), manchmal Vertragsbasis
 | ||
|   - Muss-Kriterien, Kann-Kriterien, Abgrenzungskriterien
 | ||
| - Pflichtenheft
 | ||
|   - Entwurf aus AN-Sicht, Umsetzung des Lastenhefts
 | ||
|   - Meist Vertragsbasis
 | ||
| - Inhalt Anforderungsspezifikation
 | ||
|   - Zielsetzung
 | ||
|   - Allgemeine Beschreibung
 | ||
|     - Umgebung, generelle Funktion, Restriktionen, Benutzer
 | ||
|   - Spezifische funktionale Anforderungen
 | ||
|     - möglichst quantitativ (z.B. Tabellenform)
 | ||
|     - eindeutig identifizierbar (Nummern)
 | ||
|   - Spezifische nicht-funktionale Anforderungen
 | ||
|     - z.B. Antwortzeit, Speicherbedarf, HW/SW-Plattform
 | ||
|     - Entwicklungs- und Produkt-Standards
 | ||
|   - Qualitäts-Zielbestimmung
 | ||
|   - Zu erwartende Evolution des Systems, Versionen
 | ||
|   - Abkürzungsverzeichnis, Glossar, Index, Referenzen
 | ||
| 
 | ||
| 
 | ||
| Pflichtenheft (Beispiel)
 | ||
| 1. Einleitung, Zielbestimmung
 | ||
| 2. Übersicht
 | ||
|     - Einsatzbereich, Zielgruppen
 | ||
|     - Produkt-Umgebung
 | ||
|     - Produkt-Funktionen
 | ||
|     - Restriktionen
 | ||
|     - Annahmen und Abhängigkeiten
 | ||
|     - Vorhandenes System (ggf.)
 | ||
| 3. Vorgeschlagenes System
 | ||
|     - Übersicht
 | ||
|     - Funktionale Anforderungen
 | ||
|     - Benutzungsschnittstelle
 | ||
|     - Nichtfunktionale Anforderungen
 | ||
|     - Systembeschreibung
 | ||
|       - Szenarien
 | ||
|       - Anwendungsfälle
 | ||
| 4. Glossar
 | ||
| 
 | ||
| 
 | ||
| # Grobentwurf
 | ||
| 
 | ||
| 
 | ||
| # Feinentwurf
 | ||
| # Implementierung
 | ||
| # Vorgehensweise
 | ||
| # Projektmanagement |