Software Engineering Flashcards
Software-Engineering
Technicken zur Entwicklung von Software
Softwareprodukte
Software, die für Bedürfnisse einer bestimmten Nutzergruppe erstellt wird
- genersiche Softwareprodukte
- Individuelle Softwareprodukte
Genersiche Softwareprodukte
für Breite Nutzergruppe
allgemeinere Funktionen & Eigenschaften
z.B Microsoft
+ Günstiger als Individual
- ggf. Prozesse an Software anpassen
Individual Softwareprodukte
für einzelnen Kunden
spezielle Funktionen & Eigenschaften
+ genau auf Kunden zugeschnitten
- teurer als generische Softwareprodukte
Komponenten eines Softwareproduktes
Produktdesign
Funktionalität und Features
Inhalt
Komponenten eines Softwareproduktes - Produktdesign
visuelles Erscheinungsbild
interaktive Benutzeroberfläche
Komponenten eines Softwareproduktes - Funktionalität & Features
Benutzerinteraktion mit Software
Komponenten eines Softwareproduktes - Inhalt
Daten
Informationen
Projekt-bezogenes Software-Engineering
Individualsoftware
Kunde definiert Leistungsumfang der Software
Entwicklerteam intern oder extern
Software wird lange verwendet -> Änderungen teuer
Produkt-bezogenes Software-Engineering
Software für großen Personenkreis
Entwickler entscheidet über Eigenschafte, Versionen, Platformen etc
für einzelnen Kunden günstiger als Individualsoftware
Prozesse müssen ggf. an Produkt angepasst werden
Produktvision
Ausgangspunkt für Produktentwicklung
Was für ein Produkt?
Was unterscheidet Produkt von Konkurrenzprodukten?
Wer sind Zielpersonen/Kunden?
Warum sollten Kunden das Produkt kaufen?
Produktmanager
Gesamtverantwortung für Softwareprodukt
Planung
Entwiclung
Marketing
Produktmanager - Schnitstellen
Entwicklerteam
Kunde des Produktes
weitere Organisation
Produktmanager - Aufgaben
Kundenkontakt
Entwicklung der Produkt Roadmap
Entwickung von User-Storys & Szenarios
Verwaltung des Produkt-Backlogs
Kunden- & Abnahmetests
Produkt-Roadmap
zeitlicher Plan inkl:
- Vermarktung
- Releases
- Produktlebensende
Softwareentwurf
technischer Plan für Entwicklung einer Software
dients als Bauplan für Programmierer
hilft Anforderungen effizient & strukturert umzusetzten
Softwareentwurf - Aspekte
Anforderungsanalyse
Architektur
Komponenten & Module
Schnittstellen
Datenmodelle
Algorithmen & Logik
Entwicklungsumgebung
Softwareentwurf - Aspekte - Architektur
grundlegende Struktur der Software
Hauptkomponenten und Interaktion untereinander
Softwareentwurf - Aspekte - Komponenten & Module
detaillierte Beschreibung der einzelnen Softwareteile
Module, Klassen und Beziehungen untereinander
Softwareentwurf - Aspekte - Schnittstellen
Definition Schnittstellen zwischen Komponenten & Modulen
Softwareentwurf - Aspekte - Datenmodelle
Beschreibung Datenstrukturen & Datenbanken
Softwareentwurf - Aspekte - Algorithmen & Logik
Logik & Algorithmen, die die Funktionalität der Software bestimmen
Softwareentwurf - Aspekte - Entwicklungsumgebung
Tools & Umgebung, die für Entwicklung verwendet werden
Programmiersprachen und Bibliotheken
Klasse
definiert Eigenschaften (Attribute)
und das Verhalten (Methoden), die die Objekte haben sollen
Instanzen
konkretes Objekt das auf Klasse basiert
Vererbung
objektorientierte Programmierung
ermöglicht es, neue Klassen auf Basis bestehender Klassen zu erstellen
Code wird wiederverwendbar
Basisklassen
Subklasse
enthält allgemeine Eigenschaften & Methoden
abgeleitete Klasse
Subklasse
erbt Eigenschaften und Methoden und kann diese erweitern/spezifizieren
Wiederverwendbarkeit
Durch Vererbung möglich
gemeinsame Funktionen können in Basisklasse definiert werden und von mehreren abgeleiteten Klassen genutzt werden
Polymorphismus
durch Vererbung möglich
Methoden wird in Basisklasse definiert und kann in abgeleiteter Klasse überschrieben werden
erlaubt:
unterschiedliche Implementierung einer Methode, die je nach Kontext verwendet werden kann
Entwurfsmuster
Design Patterns
Lösungsschablonen für Wiederkehrende Probleme
Entwurfsqualität verbessern
effizientere Entwicklung
Wichtigste Entwurfsmuster
Erzeugungsmuster
Strukturmuster
Verhaltensmuster
Erzeugungsmuster / Creational Patterns
Erzeugung von Objekten
Entkoppelt Erstellungsprozess von Nutzung der Objekte
Strukturmuster / Strucutral Patterns
Zusammensetzung von Klassen und Objekten, um größere Strukturen zu bilden
Adapter
Decorator
Composite
Strukturmuster / Strucutral Patterns - Adapter
ermöglicht die Zusammenarbeit von KLassen mit inkompatiblen Schnittstellen
Strukturmuster / Strucutral Patterns - Decorator
fügt einem Objekt dynamsich zusätzliche Attribute/Methiden hinzu, ohne Klassen zu ändern
Strukturmuster / Strucutral Patterns - Composite
ermöglicht es, Objekte zu Baumstrukturen zu kombinieren, um Hierarchien darzustellen
Verhaltensmuster / Behavioral Patterns
Interaktion und Verantwortung zwischen Objekten
Observer
Verhaltensmuster / Behavioral Patterns - Observer
definiert Abhängigkeit zwischen Objekten, sodass bei Änderung eines Objekts alle abhängigen Objekte benachrichtigt & aktualisiert werden
UML
Unified Modeling Language
standardisierte, grafische Modellierungssprache
UML - Diagrammtypen
Strukturdiagramme
Verhaltensdiagramme
Interaktionsdiagramme
Klassendiagramm
visualisiert Klassen/Objekte innerhalb eines System und Beziehungen zwischen diesen
Schritte Erzeugung Klassendiagramm
Identifizieren von Klassen
Beziehungen unterscheiden
Erstellen der Struktur
Zustandsdiagramm
visualisiert Folge von Zuständenm die Objekt in Lebenszyklus einnehmen kann
beschreibt verhalten eines Systems, Komponente oder Klasse
Sequenzdiagramm
dynamische Zusammenarbeit zwischen mehreren Objekten
in zeitlicher Reihenfolge
Nachrichten werden zwischen Objekten gesendet
BPMN
Business Process Model Notation
Darstellung vin Geschätfprozessen
komplexe Abläufe verständlich und übersichtlich darstellen
Grundelemente BPMN
Ereigniss (Event)
Aktivitäten (Activities)
Gateway (Entscheidungspunkte)
Verbindungen (Flows)
Prototyp
frühe Version des Produktes
Erster Schritt bei Entwicklung eines Softwareproduktes
Projektmanagement Vorgehensmodelle
Wasserfallmodell
V-Modell
Spiralmodell
Iteratives & Inkrementelles Modell
RUP
Scrum
Kanban
XP
Vorgehensmodelle - sequentieller Ansatz
Aktivitäten nacheinander ausführen
einfache Implementierung
einfach zu managen
Vorgehensmodelle - evolutionärer Ansatz
flexibler Entwicklungsprozess
besonders wenn Änderungen im laufenden Entwicklungsprozess zu erwarten sind
Vorgehensmodelle - formeller Ansatz
Kundenbeteiligung niedrig
Vorgehensmodelle - informeller Ansatz
Kundenbindung intensiv in versch. Phasen des Entwicklungsprozesses
klassisches Software Projekmanagement
kontrollierter, rigoroser Softwareentwicklungsprozess
plangetriebene Entwicklung
Wasserfallmodell
Phasen: Analyse, Entwurf, Codierung, Test, Inastallation, Wartung
Stufen nacheinander ablaufen
- für einfache kleine/mittelgrosse Projekte
- Projekte mit strenger kontrolle, Ziel genau bekannt
Wasserfallmodell - con
Keine Möglichkeit Anforderungsänderungen auszunehmen
Keine Möglichkeit Software vor Abschluss der letzten Phase zu sehen/testen -> Hohes Projektrisiko
Fehler erst am Ende sichtbar -> ggf. großer Behebungsaufwand & steigende Kosten
V-Modell
Validierungs- & Verifizierungsmodell
Phasen nacheinander durchlaufen
für jeden Phase testaktivität
Anforderungen zu Beginn erfassen
- Projekte bei denen Störung & Ausfallzeiten inakzeptable sind
V-Modell pro/con
Software effizient kontrollieren -> Projektrisiken auf Minimum reduzieren
eines der kosten- & zeitaufwändigste Modelle
inkrementelles Modell
Entwicklungsprozess mehrere Überschaubere Iterationen
in jeder Iteation neue Inkremente erstellen & ausliefern
Entwicklungsprozess sequentiell oder parallel
iteratives Modell
Phasen werden mehrmals durchlaufen
in jeder Iteration Software ändern, weiterentwickeln & erweitern
Nur wichtigste Anforderungen am anfang aufnehmen
- große Projekte
- geschäftskritische Unternehmensanwendungen
iteratives Modell - pro
Auf Anforderungsänderungen flexible reagieren
Kundenfeedback flexible miteinbeziehen
Spiralmodell
Fokus: gründliche Risikobewertung auch mit extern
typische Iteration ca. 6 Monate
4 Aktivitäten:
Sorgfältige Inkrementplanung
Risikoanalyse
Entwicklung & Test
Planung der nächsten Iteration
-große/komplexe Projekte
- Projekte mit unklaren Geschäftsanforderungen / zu anspruchsvollen/innovationen Anforderungen
- bei Forschungs- & Entwickungstätigkeit
Rational Unified Process (RUP)
Kombination aus linearen & iteratvien Frameworks
4 Phasen:
Konzeption
Entwurf
Konstruktion
Übergabe
Jede Phase außer Konzeption in mehreren Iterationen
Alle Grundlegenden Aktivitäten parallel über alle Phasen
-große/risikoreiche Projekte
- Use-Case-getriebene Entwicklung
RUP - pro/con
hilfreich beim Aufbau stabiler und gleichzeitig flexibler Lösungen
nicht so schnell Anpassungsfähig wie rein agile Vorgehensmodelle
Grad der Kundenbindung kann variieren
Inkrement
Teil eines Software-Produkts
Liefert Kunden Mehrwert
extreme programming (XP)
extreme Umstezung der agilen Softwareentwicklung
5 Werte:
- Kommunikation
- Einfachheit
- Feedback
- Mut
- Respekt
extreme programming (XP) - Kommunikation
ständige Kommunikation unter allen beteiligten
extreme programming (XP) - Einfachheit
einfache Lösungen oft effektiver
extreme programming (XP) - Feedback
ermöglicht kontinuierliche Verbesserung
extreme programming (XP) - Mut
Fehler werden als normaler Teil der Arbeit akzeptiert
extreme programming (XP) - Respekt
respektvolle Zusammenarbeit im Team
extreme programming (XP) - wichtigste Praktiken
User Stories
Testgetriebene Entwicklung
Kunde vor Ort
kontinuierliche Integration
dauerhaft haltbare Arbeitsgeschwindigkeit
Kollektives Eigentum
Paarprogramming
inkrementelle Planung
Refactoring
Scrum vs XP
Parallelen:
- inkrementelle Planung mit kurzem Horizont
- häufige Auslieferung funktionstüchtiger Software
- Kunde im Mittelpunkt
- keine überflüssige Dokumentation
Unterschied:
- Kommunikation mit Auftraggeber, bei Scrum: Product-Owner & Scrum-Master
Scrum - Meetings
Sprint planning
Daily Scrum
Sprint review
Sprint-retrospektive
Scrum - Artefakte
Product - Backlog
Sprint - Backlog
Produkt - inkrement
Scrum - Rollen
Scrum - Master
Product - Owner
Entwickler / Scrum - Teilnehmer
PBI
Product - Backlog - Items
Liste von Maßnahmen die ergriffen müssen, um Entwicklung des Produktes abzuschließen
Status Einträge im Product-Backlog - ready for consideration
absrakte Ideen & Funktionsbeschreibungen, die berücksichtigt werden sollen
vorläufig, ändern sich ggf. oder werden nicht in Endprodukt aufgenommen
Status Einträge im Product-Backlog - ready for refinment
wichtiger Eintrag der umgesetzt werden soll
klare Definition der Anforderung
daran Arebiten, Eintrag zu verstehen & zu verfeinern
Status Einträge im Product-Backlog - ready for implementation
genügend Detail, um Aufwand zu schätzen & umzusetzten
Abhängigkeiten von anderen EInträgen identifiziert
Scrum pro
Kundenfokus
Flexibilität
Verantwortungsübernahme
Transparenz
verbesserte Kommunikation
einfache Priorisierung
Scrum pro - Kundenfokus
enge Zusammenarbeit mit Kunden
Anforderungen und Wünsche berücksichtigen
Scrum pro - Felxibilität
schnell auf Änderungen reagieren
Projektplan entsprechen anpassen
Scrum pro - Verantwortungsübernahme
Teammitglieder übernehemen Verantwortung für Aufgaben
Erhöht Motivation und Engagement
Scrum pro - Transparenz
Projektfortschritt für alle jederzeit sichtbar
schnell auf Probleme zu reagieren
Scrum pro - verbesserte Kommunikation
regelmäßiges Meeting fördern Austausch und Zusammenarbeit
Scrum pro - einfache Priorisierung
wichtigste Aufgaben zuerst erledigen
Scrum con
hoher Kommunikationsaufwand
komplexe Einführung
Abhängigkeit vom Scrum-Master
mangelnde Langzeitplanung
Überlastung durch Selbstorganisation
schwierigkeiten bei großen Projekten
Scrum con - hoher Kommunikationsaufwand
regelmäßige meetings zeitaufwendig
Scrum con - komplexe Einführung
für Teams ohne Erfahrung, Einführung schwierig und zeitintensiv
Scrum con - Abhängigkeit von Scrum-Master
Erfolg hängt stark von Erfahrung des Scrum-Masters ab
Scrum con - mangelnde Langzeitplanung
fokus auf kurze Sprints, kann zu fehlendem Gesamtüberblick führen
Scrum con - Überlastung durch Selbstorganisation
ggf. Überforderung bei Teammitgliedern
Scrum con - Schwierigkeiten bei großen Projekten
Koordination mehrere Teams kann bei großen Projekten herausfordernd sein
externe Interaktion
Scrum Master: teambezogene ext. Interaktion
Product Owner: produktbezogene ext. Interaktion
Verantwortlichkeiten Projektmanagement
Mitarbeiter
Verwaltung
Berichterstattung