Applied Software Engineering Bachelor-Praktikum - Cheatsheet
Wasserfallmodell
Definition:
Lineares Vorgehensmodell im Softwareentwicklungsprozess. Jede Phase muss vollständig abgeschlossen sein, bevor die nächste beginnt.
Details:
- Phasen: Anforderungsanalyse, Entwurf, Implementierung, Test, Integration, Wartung
- Vorteile: Einfache Handhabung und Planung
- Nachteile: Wenig Flexibilität, spätes Testen
- Formel: Kein formaler mathematischer Aspekt
Scrum und Kanban
Definition:
Scrum und Kanban sind agile Methoden im Projektmanagement, die zur Optimierung von Arbeitsabläufen und zur Steigerung der Effizienz in Softwareentwicklungsprojekten verwendet werden.
Details:
- Scrum:
- Zeitgebundene Sprints (meist 2-4 Wochen)
- Daily Stand-ups
- Rollen: Product Owner, Scrum Master, Entwicklungsteam
- Artefakte: Product Backlog, Sprint Backlog, Increment
- Kanban:
- Kontinuierlicher Fluss, keine festen Iterationen
- Visualisierung der Arbeit mit einem Kanban-Board
- WIP-Limits (Work In Progress)
- Fokus auf kontinuierliche Verbesserung
Versionskontrollsysteme (z.B. Git)
Definition:
Werkzeuge zur Verwaltung und Nachverfolgung von Änderungen an Quellcode und Dokumenten.
Details:
- Git ist ein verteiltes Versionskontrollsystem (VCS).
- Erstellt Snapshots des gesamten Repositorys.
- Branching und Merging: parallele Entwicklungszweige.
- Commit: speichert Änderungen.
- Remote Repositories: z.B. auf GitHub, GitLab.
Continuous Integration/Continuous Deployment (CI/CD)
Definition:
CI/CD: kontinuierliche Integration (CI) und kontinuierliche Bereitstellung (CD), automatisierte Prozesse zur Verbesserung der Softwarequalität und -lieferung.
Details:
- CI: Häufige Integration von Codeänderungen in ein gemeinsames Repository, automatische Builds und Tests.
- CD: Automatisierte Bereitstellung der getesteten Software in verschiedene Umgebungen bis zur Produktion.
- Ziel: Fehler frühzeitig erkennen, schnelle Auslieferung, kontinuierliches Feedback.
- Tools: Jenkins, GitLab CI, Travis CI, CircleCI.
Unit-Tests und Integrationstests
Definition:
Unit-Tests prüfen einzelne Softwarekomponenten isoliert; Integrationstests prüfen das Zusammenwirken mehrerer Komponenten.
Details:
- Unit-Tests: Einzelne Methoden/Funktionen separat testen.
- Integrationstests: Zusammenarbeit mehrerer Komponenten prüfen.
- Ziel: Fehler frühzeitig erkennen und beheben.
- Automatisierung: Wichtig für kontinuierliche Integration.
- Frameworks: JUnit für Java, NUnit für .NET etc.
- Best Practices: Wiederholbarkeit, Unabhängigkeit der Tests, klare Assertionen.
Test Driven Development (TDD)
Definition:
Testgetriebene Entwicklung (TDD) ist ein Ansatz in der Softwareentwicklung, bei dem zunächst Testfälle geschrieben werden, bevor der eigentliche Code erstellt wird.
Details:
- Schreibe Tests basierend auf den Anforderungen, bevor Du den Code schreibst
- Schnelles Feedback durch kontinuierliches Testen
- Struktur: Schreibe zuerst einen fehlenden Test, implementiere dann den minimalen Code, um den Test zu bestehen, schließlich verbessere den Code (Refactoring)
- Ziel: Qualitätssicherung und Fehlerreduktion
- Tests werden vollständig automatisiert
- Helps with design decisions as the need for code simplicity and modularization becomes evident
Projektplanung und Meilensteine setzen
Definition:
Ein Projekt erfolgreich zu managen und zu steuern.
Details:
- Ziele und Umfang des Projekts definieren
- Ressourcen und Zeitplan erstellen
- Wichtige Meilensteine festlegen, z.B. Projektstart, Meilenstein 1 (M1): Requirements abgeschlossen, Meilenstein 2 (M2): Implementierung abgeschlossen, Meilenstein 3 (M3): Testen abgeschlossen
- Rollen und Verantwortlichkeiten verteilen
- Regelmäßige Fortschrittsüberprüfung
Architektur- und Designmuster
Definition:
Architektur- und Designmuster bieten wiederverwendbare Lösungen für häufig auftretende Probleme in der Softwareentwicklung.
Details:
- Architekturmuster: Makroebene, Struktur der gesamten Anwendung (z.B. Schichtenarchitektur, Microservices).
- Designmuster: Mikroebene, spezifische Problemlösungen (z.B. Singleton, Factory, Observer).
- Erleichtern Kommunikation im Team durch gemeinsame Terminologie.
- Fördern Wiederverwendbarkeit und Wartbarkeit.
- \textbf{Beispiel Singleton}: Stellt sicher, dass eine Klasse nur eine Instanz hat.
- Code:
public class Singleton { private static Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; }}