Praktische Softwaretechnik - Cheatsheet
Prinzipien des Agile-Manifests
Definition:
Grundlegende Prinzipien für Agile Softwareentwicklung gemäß dem Agile Manifest.
Details:
- Kundenzufriedenheit: Durch frühe und kontinuierliche Lieferung wertvoller Software.
- Anforderungsänderungen: Begrüße sich ändernde Anforderungen, selbst spät in der Entwicklung.
- Häufige Lieferung: Liefere funktionierende Software regelmäßig, innerhalb weniger Wochen oder Monate.
- Zusammenarbeit: Tägliche Zusammenarbeit zwischen Entwicklern und Kunden.
- Motivierte Individuen: Biete Umgebung und Unterstützung, und vertraue ihnen.
- Face-to-Face-Kommunikation: Effektivste und effizienteste Methode für Informationsaustausch.
- Funktionierende Software: Primäres Fortschrittsmaß.
- Nachhaltige Entwicklung: Fördere gleichmäßiges Tempo für Entwickler sowie Benutzer.
- Technische Exzellenz und gutes Design: Fördert Agilität.
- Einfachheit: Kunst, genau die richtige Menge an Arbeit zu tun.
- Selbstorganisierte Teams: Beste Designs und Architekturen entstehen durch selbstorganisierte Teams.
- Reflexion und Anpassung: Teams reflektieren regelmäßig, wie sie effektiver werden können, und passen ihr Verhalten entsprechend an.
Scrum-Prozess und Rollen
Definition:
Scrum ist ein agiles Framework zur Softwareentwicklung mit iterativen Entwicklungszyklen (Sprints). Es betont Teamarbeit, kontinuierliche Verbesserung und Kundenzufriedenheit.
Details:
- Product Owner: Verantwortlich für Produktvision und Backlog-Management.
- Scrum Master: Sicherstellt das Verständnis und die Einhaltung von Scrum-Prinzipien, beseitigt Hindernisse.
- Entwicklungsteam: Interdisziplinäres Team, das Arbeit während des Sprints erledigt.
- Sprint: Feste Zeitspanne (1-4 Wochen) zur Implementierung von Inkrementen.
- Sprint Planning: Treffen zur Sprint-Zielsetzung und Aufgabenverteilung.
- Daily Scrum: Tägliches 15-minütiges Meeting zur Synchronisation.
- Sprint Review: Präsentation des Arbeitsergebnisses am Ende des Sprints.
- Sprint Retrospective: Reflexion und Verbesserung des Prozesses nach jedem Sprint.
- Produkt-Backlog: Priorisierte Liste von Aufgaben und Anforderungen.
- Sprint-Backlog: Ausgewählte Aufgaben für den aktuellen Sprint.
- Inkrement: Fertiges, nutzbares Produktteil.
Test-First-Ansatz
Definition:
Schreib zuerst Tests, dann den Code, der die Tests besteht.
Details:
- Zuerst Tests für eine zu implementierende Funktionalität schreiben.
- Tests laufen lassen und fehlschlagen sehen.
- Implementiere den minimalen Code, um den Test zu bestehen.
- Tests erneut ausführen und sicherstellen, dass sie bestehen.
- Code ggf. refaktorisieren, Tests müssen weiterhin bestehen.
- Wiederhole für jede neuen Funktionalität.
- Erhöht Zuverlässigkeit und Codeabdeckung.
- Fördert ein tieferes Verständnis der Anforderungen.
Adapter, Decorator und Composite Pattern
Definition:
Design-Patterns zur Strukturierung und Modularisierung von Software. Adapter: Anpassung einer Schnittstelle an eine andere. Decorator: Hinzufügen von Funktionalität zu Objekten dynamisch. Composite: Baumeartige Struktur, um Objekte zu behandeln.
Details:
- Adapter: Konvertiert die Schnittstelle einer Klasse in eine andere, die der Kunde erwartet. Nutzt Zusammensetzung bzw. Vererbung.
- Decorator: Fügt dynamisch Verantwortung hinzu, ohne die Klasse zu ändern. Nutzt Rekursion bzw. Aggregation.
- Composite: Komposition von Objekten zu Baumstrukturen zur Darstellung von Teil-Ganzes Hierarchien. Behandelt individuelle Objekte und Zusammensetzungen einheitlich.
Monolithische vs. Microservice-Architekturen
Definition:
Monolithische Architekturen sind Anwendungen, bei denen alle Komponenten in einer einzigen und zusammenhängenden Codebasis zusammengefasst sind. Microservice-Architekturen zerlegen Anwendungen in kleine, unabhängige Dienste, die separat entwickelt, bereitgestellt und skaliert werden können.
Details:
- Monolithisch: Eine einzige, große Codebasis
- Microservices: Unabhängige, kleine Dienste
- Skalierbarkeit: Monolithisch schwer skalierbar, Microservices leicht skalierbar
- Bereitstellung: Monolithisch werden als eine Einheit bereitgestellt, Microservices unabhängig voneinander
- Fehlerisolierung: Monolithisch anfällig, Microservices bieten bessere Fehlerisolierung
- Entwicklungsteam: Monolithisch zentralisiert, Microservices können von verschiedenen Teams entwickelt werden
Layered Architecture, MVC
Definition:
Layered Architecture: Strukturierung von Software in übereinander liegende Schichten. MVC: Muster, das Benutzeroberfläche, Daten und Logik trennt.
Details:
- Layered Architecture: Trennung von Verantwortlichkeiten zur Verbesserung von Wartbarkeit und Skalierbarkeit.
- Typische Schichten: Präsentation, Geschäftslogik, Datenzugriff.
- MVC (Model-View-Controller):
- Model: Verwaltung der Daten und Geschäftslogik.
- View: Darstellung der Daten und Benutzerinteraktion.
- Controller: Vermittlung zwischen Model und View.
Refactoring und Clean Code Prinzipien
Definition:
Refactoring: Verbesserung des bestehenden Codes ohne Funktionalität zu ändern. Clean Code Prinzipien: Richtlinien für lesbaren und wartbaren Code.
Details:
- Refactoring: Erhöht Codequalität, reduziert technische Schulden
- Clean Code: Klarheit, Einfachheit, Tests, sinnvolle Namen, KISS, DRY Prinzip
- Wichtige Regeln: Keine Duplikationen, kleine Methoden, Kommentare minimieren, klare Strukturen
Tools und Frameworks für automatisiertes Testen
Definition:
Sammlung von Software-Tools und Libraries zur Unterstützung von automatisierten Testprozessen.
Details:
- Selenium: Web-Testautomatisierung
- JUnit: Unit-Tests für Java
- TestNG: Erweiterte Funktionen für Java-Testautomatisierung
- Mockito: Erstellen von Mock-Objekten für Unit-Tests
- Jenkins: Kontinuierliche Integration und Testautomatisierung
- Cucumber: BDD-Framework für automatisierte Akzeptanztests
- Appium: Automatisiertes Testen mobiler Apps
- Karma: Test-Runner für JavaScript