Anforderungen an die Softwareentwicklung


More impressive than the amount of code, and what truly makes Linux the world's largest software project is the fact that last year around 4,000 developers and at least 440 different companies that contributed to the kernel.

🎯 Lernziele
Nach dieser Einheit sind Sie in der Lage dazu
- die Notwenigkeit einer strukturierten Softwareentwicklung erklären
- interne und externe Qualitätskriterien von Software zu benennen
- Funktionale and nicht-funktionale Anforderungen voneinander abgrenzen
Software als Werkzeug und Produkt
- Werkzeug für Forschung und Entwicklung, um Geräte anzusteuern und Daten auszuwerten (z.B. Jupyter Notebooks)
- Generische Produkte eigenständige Systeme, auf dem freien Markt an jeden Kunden verkauft werden (MS Word, etc.).
- Entwicklung getrieben von langfristiger Roadmap
- Große, bestehende Entwicklungsteams
- Kundenspezifische (oder maßgeschneiderte) Produkte Auftragsarbeit eines bestimmten Kunden in Auftrag gegeben werden.
- variable Kundenanforderungen
- Projektgeschäft mit wechselnder Teamzugehörigkeit
Software als Teil des Produkts
- Immer mehr Systeme werden heute auf der Grundlage eines generischen Basisprodukt gebaut, das dann incl. Beratung an die Anforderungen des Kunden angepasst wird (SAP).
- Software als Teil eines physischen Produkts (Embedded Systems)

Vielfältige Arten von Software
- Stand-alone Programme, welche auf einem einzelnen PC oder Smartphone laufen
- Cloud-Anwendungen, Programm bei denen ein Client (z.B. PC oder Smartphone) auf Daten oder Rechenleistung eines räumlich entfernten Servers zurückgreift
- Embedded control systems, Programme die Hardwaregeräte steuern und nur ggf. durch Software-Updates angepasst werden

Produkteigenschaften
- Bei jeder Software
- Wartbarkeit, so dass die Software an Veränderungen
- Zuverlässigkeit und Sicherheit
- Effizienz
- Nutzerakzeptanz
- Unterschiede
- Häufigkeit von Updates
- Entwicklungsgeschwindigkeit
- Zuverlässigkeit und Sicherheit
Geschichte der Softwareentwicklung
- Strukturierten Ansatz kam 1968 auf im Zuge der Software Krise auf (Naur and Randell, 1969).
- Erkenntnis: Individuelle Herangehensweise einzelner Entwickler funktioniert nicht für Großprojekte
- Verspätungen
- Explodierende Kosten
- Geringe Qualität

Trends in der Softwareentwicklung
- Steigende Systemgröße und Komplexität
- Einsteig ist einfach. Unternehmen und Personen wachsen in die Software-Entwicklung hinein, da sich Produkte und Dienstleistungen digitalisieren
- Agile Arbeitsweise
- Modularer Aufbau auf Open Source Komponenten (Schnittstellen)

Qualitätskriterien

- z.B. nach ISO 25010
- 🧠 interne Qualität: Sichtweise der Softwareentwickler:in (z.B. Wartbarkeit und leichte Portierbarkeit)
- 🧠 externe Qualität: Sichtweise einer Nuzter:in auf die bei der Ausführung beobachtbare Eigenschaften
Funktionale and nicht-funktionale Anforderungen
| Funktional | Nicht-Funktional | |
|---|---|---|
| Ziel | was das Produkt macht | wie das Produkt funktioniert |
| Ergebnis | Definieren Funktionen des Produkts | Definieren Eigenschaften |
| Fokus | Bedürfnisse der Nutzer:innen | Erwartungen der Nutzer:innen |
| Dokumentation | User Stories & Anwendungsfälle | Qualitätseigenschaften |
| Notwenigkeit | Notwendig | Erwünscht |
| Ursprung | Nutzer:innen | Entwickler- und Expert:innen |
| Test | Software(Unit)-Tests, UI-Testing | Leistung, Usability, Sicherheit |
| Beispiele | Funktionsumfang | Usability, Zuverlässigkeit, Leistung |
| Funktional | Nicht-Funktional | |
|---|---|---|
| Beispiel | Als Diagnostiker:in möchte ich die Herzrate und Leistung (Daten des Ergometers) als Zeitreihe visualisiert bekommen, um Veränderungen sofort mitzubekommen | Visualisierung soll flüssig ohne Zeitverzug angezeigt werden, gut erkennbar und optisch ansprechend sein |

Lebenszyklus von Software
- Um diesen Prozess zu steuern, haben sich verschiedene Prozessmodelle entwickelt

Lebenszyklus von Software
- Software-Spezifikation: Anforderungen und Einschränkungen werden definiert
- Software-Entwicklung: Software wird entworfen und programmiert
- Software-Validierung: Software wird anhand der Spezifikation überprüft
- Software-Evolution: Bestehende Software wird neuen Anforderungen angepasst und gewartet
Wichtigkeit der ersten Projektphasen

Agiles Arbeiten und Wasserfall-Modell

Wasserfallmodell
- Plangetriebenes Vorgehen
-
Alle Phasen werden durch- geplant, bevor die Arbeit beginnt
-
Vorteile
- Einfache Überwachung des Fortschritts
- Übliches Vorgehen in anderen Kontexten
- Nachteile
- Unflexibel gegenüber Anpassungen
Problem

Kein Operationsplan reicht mit einiger Sicherheit über das erste Zusammentreffen mit der feindlichen Hauptmacht hinaus.
Helmuth Karl Bernhard von Moltke (volkstümlich Der große Schweiger)
Agiles Arbeiten

Inkrementelle Entwicklung
- Endprodukt steht nicht von Beginn an fest
- Produkt wächst in organischen Prozess entsprechend neuer Anforderungen
- Nach jedem Zyklus wird eine neue nutzbare Version fertigstellt und deployt

Beispiel Windows

Right now we’re releasing Windows 10, and because Windows 10 is the last version of Windows, we’re all still working on Windows 10 Jerry Nixon - 2015

Vorteile Inkrementelle Entwicklung
- Bildet natürliches Vorgehen bei der Problemlösung ab
- Anpassungen, die während der Entwicklung notwendig werden sind leichter einzubringen
- Jedes Inkrement bringt neuen Nutzen für für die Anwender:in

Nachteile Inkrementelle Entwicklung
- Konflikte zwischen Unternehmenskultur und iterativem Vorgehen
- Systemstruktur geht mit zunehmenden Zyklen verloren. Zeit und Geld muss für Refactoring und Dokumentation eingeplant werden

Inkrementelles Projektmanagement mittels Kanban Board

Interaktion Kanban Board

- häufig eingesetztes Werkzeug aus dem Produktionsbereich
- Karten (Issues) werden zwischen verschiedenen Abschnitten bewegt
- z.B. waiting, in progress, completed
- z.B. to-do, doing, done
- Product Backlog, Scrum Backlog, in progress, completed
- Github Project Quelle
Scrum

Scrum
- agiles, inkrementelles Vorgehen
- Drei Scrum-Rollen
- Product Owner
- Entwicklungsteam
- Scrum Master
- Drei Scrum-Artefakte
- Product Backlog
- Sprint Backlog
- Product Increment

Scrum-Rollen
-
Product Owner verantwortet Produkterfolg für alle Stakeholder. Entscheidet darüber, wie das Produkt auszusehen hat. Formuliert und priorisiert Anforderungen aus der Anwendersicht.
-
Selbst organisiertes Entwicklungsteam aus 3 bis 9 Entwicker:innen
-
Scrum Master coacht das Entwicklungsteam. Gibt jedoch keine Arbeitsanweisungen und besitzen keinerlei disziplinarische Handhabe

Scrum-Artefakte
-
Product Backlog sammelt sämtliche Eigenschaften und Funktionen, die das Produkt haben soll (Anforderungen). Zunächst eher grob.
-
Sprint Backlog sind die anstehenden Aufgaben, die im nächsten Sprint (ca. 14 Tage) erledigt werden sollen.
-
Product Increment ist das Teilergebnis am Ende eines Sprints. Am Ende eines jeden Sprints muss das vorliegende Inkrement als "Done" bewertet sein (z.B. neue Version der Software)
