# Introduction to SE

> Software Engineering is an engineering discipline that is concerned with all aspect of software production
> from the early stages of system specification through to maintaining the system after it has gone into use.


## Iron Triangle: Organizational and Financial Constraints
![image_38.png](image_38.png)
- visualisiert Einschränkungen im Projektmanagement
- verkündet:
    1. Qualität der Ergebnisse eines Projekts ist durch folgende Faktoren eingeschränkt:
        - Kosten (_verfügbar: Budget, Ingenieure, ..._)
        - Zeit (_verfügbar: Zeit, Fristen_)
        - Umfang (_Funktionen, bereitgestellte Funktionalität_)
    2. PM kann zwischen Einschränkungen handeln
    3. Änderungen in einer Einschränkung erfordern Änderungen in anderen zur Kompensation, oder die Qualität wird leiden
- Die Realität ist komplexer
    - Geld in ein vollständig ausgelastetes Projekt zu stecken, kann es verlangsamen

## Software Development Lifecycle (SDLC)
```mermaid
stateDiagram
    1: Requirement Analysis
    2: Design
    3: Implementation
    4: **Testing**
    5: **Maintaining/Operations**
    1-->2
    2-->3
    3-->4
    4-->5
    5-->1    
```

## Development Methodologies
- Prozess, in dem Software Development in kleinere, parallele oder sequenzielle Sub-Prozesse aufgeteilt wird
um das Design oder das Produktmanagement zu verbessern
- kann die Vor-Definierung von spezifischen Artefakten beinhalten
- kann in zwei Kategorien aufgeteilt werden
  - Traditionelle Methodiken
  - Agile Methodiken

## Software Quality {id="software-quality_1"}
### Requirements in Software Engineering {id="requirements-in-software-engineering_1"}
| **Functional Requirements (FR)**                                                   | **Non-Functional Requirements (NFR)**                                                                                             |
|------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------|
| Systemfunktionen, Anwendungsfälle, ...                                             | Eigenschaften des Systems als Ganzes, nicht im Zusammenhang mit der Funktionalität (_bspw. Sicherheit, Performance, Wartbarkeit_) |
| Können unterschiedlich detailliert erfasst sein (je nach Komplexität des Projekts) | Beeinflussen die gesamte Architektur eines Systems, nicht nur einzelne Komponenten                                                |
| FRs sind meist höchste Prio des Clients, aber auch am einfachsten zu verhandeln    | Wenn ein NFR scheitert, kann das ganze System nicht funktionieren                                                                 |


### Eight Quality Characteristics {id="eight-quality-characteristics_1"}
![image_39.png](image_39.png)

### Maintainability {id="maintainability_1"}
- Modularität
- Wiederverwendbarkeit
- Analysierbarkeit
- Modifizierbarkeit
- Testbarkeit

>_Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live_
>
> ~_John F. Woods_

## Software Quality
### Requirements in Software Engineering
| **Functional Requirements (FR)**                                                   | **Non-Functional Requirements (NFR)**                                                                                             |
|------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------|
| Systemfunktionen, Anwendungsfälle, ...                                             | Eigenschaften des Systems als Ganzes, nicht im Zusammenhang mit der Funktionalität (_bspw. Sicherheit, Performance, Wartbarkeit_) |
| Können unterschiedlich detailliert erfasst sein (je nach Komplexität des Projekts) | Beeinflussen die gesamte Architektur eines Systems, nicht nur einzelne Komponenten                                                |
| FRs sind meist höchste Prio des Clients, aber auch am einfachsten zu verhandeln    | Wenn ein NFR scheitert, kann das ganze System nicht funktionieren                                                                 |


### Eight Quality Characteristics
![image_39.png](image_39.png)

### Maintainability
- Modularität
- Wiederverwendbarkeit
- Analysierbarkeit
- Modifizierbarkeit
- Testbarkeit

>_Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live_
>
> ~_John F. Woods_
