# 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_