Konstruktives Software Engineering - Cheatsheet
Wasserfallmodell und agile Methoden
Definition:
Wasserfallmodell: Sequentielles Vorgehensmodell mit klar definierten Phasen: Analyse, Design, Implementierung, Test. Agile Methoden: Iterative und inkrementelle Ansätze, die auf Flexibilität und schnelle Anpassung setzen, z.B. Scrum und Kanban.
Details:
- Wasserfallmodell:
- Linear, strikt sequentiell
- Geringe Flexibilität
- Geeignet für Projekte mit klaren Anforderungen
- Agile Methoden:
- Iterativ und inkrementell
- Hohe Flexibilität
- Zentrale Elemente: User Stories, Sprints, Daily Stand-up Meetings
- Beispiele: Scrum, Kanban
- Vergleich:
- Wasserfall: Stabilität, Dokumentation
- Agil: Anpassungsfähigkeit, Kundeneinbindung
Unified Modeling Language (UML)
Definition:
UML ist eine standardisierte Modellierungssprache im Software Engineering zur Spezifikation, Konstruktion und Dokumentation von Software-Systemen.
Details:
- Diagrammtypen umfassen: Anwendungsfalldiagramme, Klassendiagramme, Sequenzdiagramme, Aktivitätsdiagramme, Zustandsdiagramme
- Nutzt grafische Notation zur Darstellung von objektorientierten Konzepten
- Erlaubt abstrakte und detaillierte Modellierung
- Unterstützt verschiedene SDLC-Phasen (Analyse, Design, Implementierung, Testing)
- Integrationswerkzeuge (z.B. Rational Rose, MagicDraw)
- Konzepte: Akteure, Use Cases, Klassen, Objekte, Beziehungen, Zustände, Aktivitäten
- Industriestandard durch die Object Management Group (OMG)
Design Patterns
Definition:
Wiederverwendbare Lösungen für häufig auftretende Probleme in der Softwareentwicklung.
Details:
- Ermöglichen eine gemeinsame Sprache zur Kommunikation zwischen Entwicklern.
- Sind in drei Hauptkategorien unterteilt: Erzeugungsmuster, Strukturmuster, Verhaltensmuster.
- Beispiele: Singleton, Factory, Observer, Decorator, Strategy.
Test-driven Development (TDD)
Definition:
schrittweise Entwicklung, bei der zuerst Tests geschrieben werden, bevor der eigentliche Code implementiert wird
Details:
- Iterativer Zyklus: Test schreiben, Code implementieren, Test ausführen
- Stellt sicher, dass der Code die Spezifikationen erfüllt
- Verlangt kleine, isolierte Testfälle (Unit Tests)
- Ziel: Robustheit und Wartbarkeit des Codes
- Beispiel: Schreibe einen Fehlschlagtest \texttt{assert(x + 1 == x)} für die Funktion \texttt{increment(x)}
- TDD-Zyklus: Red (Test schlägt fehl), Green (Code schreiben bis Test erfolgreich), Refactor (Code optimieren)
Microservices und Service-Oriented Architecture (SOA)
Definition:
Architekturstile zur Modularisierung und Organisation von Softwareanwendungen.
Details:
- Microservices: Kleine, unabhängige Dienste, die spezifische Geschäftsprozesse abdecken.
- SOA: Große, miteinander verbundene Dienste zur Umsetzung von Geschäftsprozessen.
- Kommunikation oft über APIs, Protokolle wie HTTP/REST, gRPC, AMQP.
- Microservices: Fokus auf Continuous Deployment, skalierbar und technologisch divers.
- SOA: Fokus auf Wiederverwendbarkeit, Integration und breite Unternehmenslandschaft.
- Beide ermöglichen Independence der Entwicklungsteams und einfachere Wartung.
Risikomanagement in der Softwareentwicklung
Definition:
Systematischer Prozess zur Identifizierung, Bewertung und Priorisierung potenzieller Risiken in Softwareprojekten, um negative Auswirkungen zu minimieren.
Details:
- Ziele: Risikoerkennung, -analyse, -bewertung, -bewältigung
- Risikokategorien: technologische, organisatorische, personelle, externe
- Methoden: SWOT-Analyse, FMEA, Monte-Carlo-Simulation
- Phasen: Risikoidentifikation, Risikobewertung, Risikominderung, Risikokontrolle
- Tools: JIRA, Microsoft Project
- Kennzahlen: Eintrittswahrscheinlichkeit (p), Schadensausmaß (s), Risikowert (r = p * s)
Refactoring-Techniken
Definition:
Verbessern der internen Struktur eines Software-Systems ohne dessen externes Verhalten zu ändern.
Details:
- Code-Qualität erhöhen
- Wartbarkeit verbessern
- Techniken:
- Extrahiere Methode (\textit{Extract Method})
- Methoden zusammenführen (\textit{Inline Method})
- Klassenhierarchie umstrukturieren (\textit{Refactor Class Hierarchy})
- Werkzeuge: IntelliJ IDEA, Eclipse, Refactoring-Browser
Schichtenarchitektur
Definition:
Architekturmuster zur Strukturierung von Softwaresystemen in Schichten, die jeweils spezifische Aufgaben und Verantwortlichkeiten übernehmen.
Details:
- Schichten: Präsentation, Anwendungslogik, Datenzugriff
- Kommunikation: Meist Top-Down, jede Schicht nutzt nur die darunterliegende
- Vorteile: Modularität, Wiederverwendbarkeit, leichtere Wartung
- Nachteile: Schichtenabhängigkeit, mögliche Performanceprobleme