# Software Processes
In den 1950ern wurde Software an Seite der Hardware entwickelt
- Ziel dieser Prozesse war das komplette Produkt in einem einzigen Projekt zu entwerfen

## Classic Organizational Structure
- **Business or Client**
  - braucht neue Software/System
  - Definiert Kriterien, welche für die Vollständigkeit des Systems essenziell sind
  - Definiert _[requirements specification](IntroductionOOAD.md#requirements-in-software-engineering)_, welche das benötigte System beschreibt
- **Entwicklungsteam oder Software-Firma**
  - Bekommt _requirements specification_
  - Designt und entwickelt das System anhand der gegebenen Spezifikationen
  - Erstellt ein Handbuch
- **Operations Team**
  - Bekommt Handbuch
  - Nimmt Rechenschaft für das Laufen der Software auf sich
  - Gibt auftretende Fehler an das Entwicklungsteam weiter


## Handling of Change: Implications
Ursprüngliches Projekt ist fertig - Kunde ist aber nicht glücklich
- Ein neues Projekt startet den SDLC neu
  - ![image_42.png](image_42.png)

## Waterfall Model
- Sequenzielle Ausführung der Phasen des [SDLC](IntroductionOOAD.md#software-development-lifecycle-sdlc)
  - Jede Phase wird mit einer Dokumentation des Schritts beendet
  - Iterationen sind nur zwischen zwei aufeinanderfolgenden Phasen möglich
- ![image_40.png](image_40.png)
- [![image_41.png](image_41.png)](SoftwareProcesses.md#classic-organizational-structure)

## Neue Modelle
### V-Modell
![image_43.png](image_43.png)
### Spiral-Modell
![image_44.png](image_44.png)

## Agile
### The Agile Manifesto
#### 4 Werte
- **Individuen und Interaktionen** über _Prozesse und Werkzeuge_
- **Funktionierende Software** über _verständliche Dokumentation_
- **Arbeit mit Kunden** über _Vertragsverhandlungen_
- **Anpassung an Veränderung** über _folgen des Plans_

#### 12 Prinzipien
- Funktionierende Software ist die primäre Ressource um den Fortschritt zu messen
- Die höchste Priorität ist den Kunden durch frühe und durchgehende Lieferung von wertvoller Software glücklich zu machen
- Liefere funktionierende Software regelmäßig, ~mehrere Wochen bis mehrere Monate → kürzer = besser
- Durchgehende Aufmerksamkeit auf technische Exzellenz und gutes Design verbessert die Agilität

### Strongly Iterative Development
Verstärkt durchgehende Kreation von Nutzen für Kunden
- Scope: wichtigsten Features der Iteration
- ![image_45.png](image_45.png)

Durchgehende Anpassung der Anforderungen an aktuelle Nachfrage
- ![image_46.png](image_46.png)

### Small and Cross-functional Teams
- Selbst organisiert, divers, T-shaped skills
- klein
- ![image_48.png](image_48.png)
- Beispiel Scrum Team:
  - **3-9 Developers**
    - verantwortlich für alle Aspekte der Entwicklung
  - **1 Product Owner**
    - spielt Kunde für die Devs, kreiert und priorisiert Features
  - **1 Scrum Master**
    - Coach, Prozess-Authorität

Business/Client wird Teil des Teams
- Product Owner
- ![image_47.png](image_47.png)


## DevOps
Erweiterung der agilen [Software-Entwicklung](SoftwareProcesses.md#agile)
- nicht nur Dev (_Entwicklung_), sondern auch Ops(_Operations_)

- Gefördert durch dynamische Cloud-Infrastuktur
- Führt zu höherer Qualität
  - Devs machen stabileren Code
  - fördert Automatisierung in allen Aspekten

DevOps fördert schnellere Iterationen
- Features können individuell ausgeliefert werden
  - mehrere Releases am Tag sind normal
- schnellere Feedback-Cycles
  - Bessere Adaption zu neuen Anforderungen
- Nutzer-Verhalten kann aufgezeichnet und für spätere Arbeit genutzt werden

