Software Engineering SE
Software
Source Code
Software Engineering
systematische ingenierursmäßige Herstellung von Software nach dem "best-practice"
Qualitätsmaßstäbe wie in klassischen Ingenieurs-Disziplinen für große und komplexe Projekte
"no surprise software" - vorhersehbares Verhalten
Unterscheidung durch:
- Projektdauer
- Projektgröße
- Anwendungsdomäne
- Projektkomplexität
Größe von Software Projekten:
Klein 1-2 Personen, Anwendung und Datenbank am selben Rechner
Mittel 3-20 Personen, Anwendung und Datenbank auf unterschiedlichen Rechnern
Groß >20 Personen, international, verteilte Anwendung
Große Software Projekte sind schwierig:
Projekt-Arten
a) Wartungsprojekt
b) Migrationsprojekt
c) Projekt mit öffentlichen Ausschreibungen
d) Klassische Software-Entwicklungsprojekte
Produkt-Komplexität
Anzahl der Komponenten, Code-Zeilen
Größe, Domäne, Qualifikation des Teams, "cutting-edge-technologies" die nicht erprobt sind.
Anwendungs-Domäne / Problem-Domäne (ein Fachgebiet, ein Wissensgebiet) macht den größten Unterschied
Qualitätsmanagement
- Formale Methoden Verifikation, bessere Programmiersprachen
- Prozessverbesserung Produkte, Prozesse, Vorgehensmodell
- Personen Training, Motivation, Kultur für gute Arbeit
Capability Maturity Model Integrated CMMI
Norm für Bemessung der Software Engineering Qualität.
Reifegrade der Software Entwicklung - Welches Ausmaß an Management existiert?
-
Level: ad hoc processes - Initial
Sourcecode. Software nicht mehrfach anwendbar, nur für eine spezifische Aufgabe.
-
Level: basic project management - Managed
Wiederholbare anwendung mit Quality Assurance
-
Level: process definition - Defined
Das Level dass die meisten Unternehmen erreichen möchten
- Level: process measurement - Quantitatively managed
- Level: process control - Optimizing
Projekt-Typen
Komponenten eines Software Systems
UI - User Interface (Benutzer Schnittstelle)
APP - Application (Anwendung, Geschäftslogik)
OS - Operating System (Betriebssytem)
Produkt-Typen / Projekt-Typen
Bestimmt Schwerpunkt der Komponenten-Entwicklung
Design-Strategien - Software kaufen vs. selber entwickeln
Kaufen, wenn …
Anforderungen existieren
Anpassung leicht möglich ist (ausführliche Dokumentation + Support)
billiger als Eigenentwicklung.
Risiko minimieren
Kommerzielle Software vs. Eingebettete Systemen
Kaufen oder selbst Entwickeln?
Kaufen nicht billiger!
Risikofaktoren
- Unvollständige Anforderungen, Anwender nicht involviert
- Budget nicht ausreichend, Unrealistische Zeit- und Kostenpläne
- Keine Management Unterstützung, keine Planung
- Häufige Änderung der Anforderungen
- Qualitätsmängel bei extern vergebenen Komponenten / Aufgaben
- Projekt wird nicht mehr benötigt (wenn Produktion zu lange dauert)
Strukturierung des Entwicklungsprozesses
Beispiel: Online Shop / Katalog an dem man bestellen kann, Produkte in ein Warenkorb legt und verschickt
Produktbaumstruktur (PBS)
Anforderungen verfolgen
Überstimmen Anforderungen mit dem was Kunde will?
Früh Prototyp machen → validieren (vergleichen mit Anforderungen)
Eigenschaften von Anforderungen:
Gültigkeit, Konsistenz, Vollständigkeit, Realismus
Überprüfbarkeit, Verständlichkeit, Verfolgbarkeit, Anpassbarkeit
Priorisierung und Kontrolle
-
Value-driven requirements
Geschäftsfall-Analyse
-
Shared-vision-driven requirements
Stakeholder bewerten ständig Anforderungen
-
change-driven requirements
Skalierbarkeit
-
risk-driven requirements
Detailiertheit