Software Engineering Flashcards
Herkunft des Software Engineering
Softwarekrise Ende der 1960er-Jahre; Softwarekosten übersteigen Hardwarekosten; Scheitern von Projekten an Software: NATO-Konferenz 1968 in Garmisch
Merkmale guter Software
- Wartbarkeit
- Effizienz
- Benutzerfreundlichkeit
- Zuverlässigkeit
Definition Ian Sommerville
Technische Disziplin, die sich mit allen Aspekten der Softwareherstellung beschäftigt (von Systemspezifikation bis zur Wartung nach Inbetriebnahme)
Aktuelle Herausforderungen
Heterogene Umgebungen(z.B. Webentwicklung; kurze Projektzielzeiten, Verlässlichkeit –> Therac-25)
Kritische Systeme Definition
Menschen oder Wirtschaft:
- sicherheitskritisch: Atomkraftwerk, einige Fahrassistenzsysteme
- aufgabenkritisch: Navigationssysteme
- Geschäftskritisch: ERP-System
Entwicklung kritischer Systeme
- ausgereifte Technologien
- hohe Testkosten (exponentieller Verlauf)
- Gesamtsystem im Blick (Therac-25)
Software Engineering Code of Ethics and Professional Practice
ACM and the IEEE-CS
Sinnvoll, teilweise idealistisch
Vorgehensmodelle
Software Process Models
- Standards für IT-Projekte, d.h. Projektphasen, -organisation, Dokumente, Kommunikationsbeziehungen und Methoden
- teilweise Tailoring möglich
- auch spezialisierte Vorgehensmodelle wie Raymonds Bazaar für Open Source Projekte
Zweck von Vorgehensmodellen
- Erfahrungsbündelung
- Grundstruktur für Projektplanung
- Assessment
Wasserfallmodell
- Ablauf: Anforderungen –> Design –> Implementierung –> Test –> Inbetriebnahme
- Vorteile: leicht verständlich, Qualitäts- und Zeitkontrolle durch Meilensteine
- Nachteil: keine Rückkopplung -> keine Änderung möglich, kein Prototyp -> kein frühzeitiger Test, kein Kundenfeedback -> kéine Erkennung von Missverständnissen
V-Modell des Bundes
- Vorgehensmodell für öffentliche IT-Systeme
- Umfangreiche Weiterentwicklung (agil, iterativ)
- sehr umfangreich
Inkrementell-iterative Methoden
- Initial nur Kernfunktionalität
- Ergänzung in mehreren Iterationen
- Zwischenprodukte als Prototypen
- Vorteil: frühe Fehlererkennung
- Nachteil: Wegwerfaufwand z.B. Web-Frontend
Spiralmodell nach Barry Boehm
- 4 Quadranten:
1. Zieldefinition
2. Risikoabschätzung
3. Implementierung und Test
4. Planung des nächsten Zyklus
Rational Unified Process (RUP)
- Vorgehensmodell für objektorientierte Softwareentwicklung mittels UML
- frei verfügbares Vorgehensmodell mit kostenpflichtigen Werkzeugen von Rational
- Vorteile: frühe Fehlererkennung durch Iteration, aktuelle Methoden, für objektorientierte Software mit Komponentenarchitektur, Parallelisierung möglich, Verfügbarkeit unterstützender(kostenpflichtiger Tools)
- Nachteile: Komplex, nur für OOP, nur Tools von Rational
Agile Vorgehensmodelle
- seit Jahrtausendwende, Agiles Manifest mit 4 Values und 12 principles
- inkrementell-iterativ mit dynamischer Festlegung mithilfe von Kundenfeedback und Projektfortschritt
- Grundsätze: Softwareentwicklung vor Bürokratie (Strukturierung, Formalisierung, Dokumentation), Vertrauen vor detaillierter vertraglicher Absicherung (Einbindung der Anwender), Mensch vor Prozessen und Werkzeugen, Kundenzufriedenheit vor überholten Zielen (Flexibilität)
- Ausprägungen:
Crystal Clear/Crystal Family: Verschiedene Varianten je nach nach Risiko, Häufige Releases und Integration, Ähnlichkeit zu XP
Software Kanban: DevOps, Transparenz, Kapazitäten in Echtzeit, Jira, Visualisierung, weniger Struktur als Scrum
Feature-driven development: (FDD), eher klassisch, leichter einzuführen
Test-driven development: (TDD), gegen mangelhafte Testabdeckung, Tests vorher
Rapid-application development: (RAD) Spiralmodell Barry Boehm, schnell, Interaktion
Lean software development: Toyota, Eliminate waste, decide/deliver as late/fast as possible, amplify learning, empower the team, build integrity in, optimize the whole
Extreme Programming (XP)
- bekannteste agile Methode
- Entwickler und Anwender in einem Raum –> Zyklusgeschwindigkeit
- 40-Stunden-Woche für maximale Produktivität
- Refactoring des Codes
- Entwicklungsstandards
- 2er Teams
- einfachste Lösung vor raffiniertester
Fazit: v.a. für kleinere Projekte in internen IT-Abteilungen
Scrum
- Idee: Projektmanagement statt konkreter Praktiken
- Verantwortung beim Team, das sich selbst Richtlinien gibt
- Pre-Game: Teamzusammenstellung, Standards und Werkzeuge, Product Backlog durch Product Owner
- Game: Produkterstellung in Sprints, jeweils Sprint Planning Meeting für Sprint Backlog (-> Product Backlog), Daily Scrum(erreicht, will erreichen, blockiert), Sprint Review mit Product Owner und Stakeholder
- Post-Game: Dokumentation, Systemtest, User Acceptance Test
SCRUM-Versionen
Problem: Skalierbarkeit über 1 Team hinaus(Chaos), Product Manager, lange Planungshorizonte, Prinzipien für Management
- Large Scale scrum (LeSS): skalierbar für große Produktgruppen
- Nexus Scrum: 3-9 Scrum Teams für 1 Produkt, Abhängigkeitsvermeidung untereinander
- Scrum at Scale: beliebig viele Teams, Daily Scrum auch untereinander, zusätzliche Rollen, Ergebnistypen und Termine
- Disciplined Agile Delivery (DaD): Initiierungs- und Transitionsphase umgeben Game; Elemente aus XP, RUP, Kanban, Lean Software
- Scaled Agile Framework (SAFe): Essential, Large, Portfolio
Scrum - Rollen:
- Scrum-Master: Einhaltung der Scrum-Regeln, weder Teammitglied noch -leiter, Ansprechpartner für Teammitglieder
- Product Owner: Kundenkommunikation, Product Backlog, Projektziele durch User Stories
- Projektteam: Aufwandschätzung Backlog
Continuous Integration
- mehrfach täglich neue Versionen
- automatisierte Builds
- automatisierte Tests
Vorteil: sofortige Fehlererkennung
Nachteil: letze stabile Version schwierig zu finden
DevOps
Gemeinsame Ziele, Abläufe und Werkzeuge für Entwicklungsprojekte und Systembetrieb
Toolchain: Create, Verify, Package, Release, Configure, Monitor, Plan
Lasten- und Pflichtenheft
- Lastenheft: Funktionale/Nicht-funktionale Anforderungen aus Sicht der Auftraggebers, Grundlage für Angebote
- Pflichtenheft: detaillierteres Realisierungsvorhaben aus Sicht des Auftragnehmers, Kriterien für Abnahme
Softwaredesign
Gestaltung der Benutzeroberfläche, aber auch Architektur- und Strukturentscheidungen
Verteilte Systeme
- mehrere Rechner mit gleichzeitigen Prozessen
- Vorteile: Skalierbarkeit, Fehlertoleranz
- Nachteile: Komplexität, Zugriffschutz auf Datenverkehr