# Introduction ## What is Software Engineering > **Definition according to Ian Sommerville**
> Software engineering is an _engineering discipline_ that is concerned with all aspects of > _software production_ from the early stages of system specification through to maintaining > the system after it has gone into use. | ...Ingenieurdisziplin... | ...alle Aspekte der Softwareproduktion... | |------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------| | Ingenieure lassen Dinge funktionieren! | nicht nur die Softwareentwicklung | | Sie wenden Theorien, Methoden und Werkzeuge dort an, wo diese angemessen sind | beinhaltet auch Aktivitäten wie _Projektmanagement_, Entwicklung von Werkzeugen, Methoden und Theorien zur Unterstützung | | Lösungen **müssen** innerhalb organisatorischer und finanzieller Einschränkungen funktionieren | | ## 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 ``` ### Requirement Analysis - Understand what your client wants and/or needs ### Design - Design a solution that meets [functional/non-functional](IntroductionOOAD.md#requirements-in-software-engineering) requirements ### Implementation - Actually build the system meeting required quality goals ### Testing - Ensure that the whole system meets all requirements ### Maintaining/Operations - The system serves its purpose (earns money) ## 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_