Software Engineering
- Allgemeines
- Prinzipien des Software-Engineerings
- Prozessmodule
- Anforderungsanalyse
- Objektorientierte Analyse
- Unified Modeling Language (UML)
- Softwarequalität
- Softwareentwurf
- Handzettel Klausur
Allgemeines
Software Engineering ist die Entdeckung und Anwendung solider Ingenieur-Prinzipien mit dem Ziel, auf wirtschaftliche Art Software zu bekommen, die zuverlässig ist und auf realen Rechnern läuft.
Im Software Engineering sind Methoden, Sprachen und Werkzeuge durch Konzepte miteinander verbunden.
Aufgaben
- Analyse
- Spezifikation der Anforderungen
- Architektur-, System- und Softwareentwurf
- Codierung und Modultest
- Integration, Test, Abnahme
- Betrieb und Wartung
- Auslauf und Ersetzung
Ablauf
- Anforderungsanalyse und -modellierung
- Objektorientierte Analyse
- System- und Softwareentwurf
- Objektentwurf
- Codierung
- Testen
Prinzipien des Software-Engineerings
1. Abstraktion
→ Lösung allgemeiner Probleme zuerst, dann konkreter werden
→ Hierarchie, Polymorphie, Muster
2. Modularisierung
→ Teile und Herrsche
→ high module cohesion
→ Low inter-module coupling
3. Kapselung
→ Verbergen und schätzen von inneren Details der Implementierung
4. Hierarchische Zerlegung
→ Zerlegung des Problems in Teilprobleme
→ Abstraktion, Modularisierung
5. Trennung von Zuständigkeiten
→ Aufteilung eines Problems in unabhängige Teilaufgaben
→ MVC
6. Einheitlichkeit
→ besser verständlich
Durch die Anwendung der Prinzipien wird Software besser wartbar.
Prozessmodule
Agile Softwareentwicklung
Individuen und Interaktionen über Prozesse und Werkzeuge.
Funktionierende Software über Dokumentation.
Zusammenarbeit mit Kunden über Vertragsvereinbarungen.
Reagieren auf Veränderung über Folgen eines Plans.
SCRUM
+ Schnelle Lieferung
+ Neue, wechselnde Anforderungen
+ Neu priorisierte Funktionen
+ Kundenintegration
- Vertrauen
- Keine fixen Zeiten, Kosten
- Motivation
Sequentielles Wasserfallmodell
+ Ergebnisauswertung nach jeder Phase
+ Tätigkeiten des Software Engineerings
- Keine Beteiligung des Kunden
- Ausführbares Produkt erst am Ende
- Systemtests oft verkürzt
Heratives Modell
+ Rückschritte möglich
- Keine Parallelisieren der Teilaufgaben
Spiralmodell
+ Reduzierung Gesamtrisiko
+ Gemeinsame Planung
- Nicht einheitlich
- Anzahl unklar
Anforderungsanalyse
Mithilfe der Anforderungsanalyse werden die Bedarfe des Nutzers ermittelt. Fachliche Anforderungen stellen Vorgänge dar. Neben funktionalen Anforderungen gibt es Qualitätsanforderungen wie Einfachheit, Verlässlichkeit, Performance, Benutzbarkeit oder Effizienz.
UML Anwendungsfalldiagramm
Use-Case-Diagramme beschreiben Interaktionen von Akteuren mit Systemen über Anwendungsfälle.
Bei extend
können Extension Points und Bedingungen angegeben werden.
Dokumentation eines Anwendungsfalls
Beispiel:
Name: Registrieren
Ziel: Fahrzeug bestellen
Vorbedingung: Online-Portal aufgerufen
Nachbedingung: Daten erhoben, Leistung steht zur Verfügung
Akteure: Kunde
Es können auch noch Nachbedingungen im Sonderfall definiert werden.
UML Aktivitätsdiagramm
Aktivitätsdiagramme bieten eine detaillierte Sicht auf Anwendungsfälle.
Beispiele:
Objektorientierte Analyse
In der Objektorientierten Analyse wird das Analysemodell erstellt, welches als Grundlage für den Entwurf dient.
Entity-Boundary-Control-Muster
Mit dem Entity-Boundary-Control-Muster können aus Use-Case-Diagrammen Klassendiagramme erstellt werden.
Entity: persistentes Wissen, Daten
Boundary: Schnittstelle zu Systemakteuren
Control: Prozesswissen
1. Boundary-Objekte für Systemgrenzen
2. Control-Objekte für Anwendungsfälle
3. Entitäten für Datenobjekte
→ evtl. aus Problembeschreibung
Lösung:
UML-Klassendiagramme
Klassendiagramme modellieren statische, strukturelle Beziehungen zwischen den Komponenten eines Systems.
Sequenzdiagramme
Sequenzdiagramme stellen Nachrichten dar, die zwischen Akteuren und Objekten ausgetauscht werden.
Unified Modeling Language (UML)
Die Unified-Modelling-Language ist eine grafische Modellierungssprache zur Spezifikation, Konstruktion, Dokumentation und Visualisierung von Software-Teilen und anderen Sprachen.
Ebenen der UML
Softwarequalität
Qualitätsmerkmale von Software sind Funktionalität, Zuverlässigkeit, Benutzbarkeit, Effizienz, Änderbarkeit und Übertragbarkeit.
Clean Code
Clean Code bezeichnet Quellcode, Dokumente, Konzepte, Regeln und Verfahren, die intuitiv verständlich sind. So sind Programme effizienter wartbar und die Entwicklungszeiten werden kürzer.
Aussagekräftige Namen
- deutliche Absicht
- konsistent, Synonyme
- aussprechbar
Funktionen
- geringe Schachtelung
- Single Responsibility
- max. 2 Übergabeparameter
Kommentare
- möglichst wenige, klar verständliche Kommentare verwenden
Klassen
- Single Responsibility
Das Gesetz von Demeter
Eine Methode einer Klasse k kann nur zugreifen auf
- Methoden von k
- Methoden von Übergabeparametern
- Methoden von Instanzvariablen von k
- Methoden von selbst erzeugten Objekten
Bei Clean Code laufen alle Tests durch, es gibt keine Codedubletten und die Anzahl der Klassen und Methoden sind minimal.
Testen und Staging Areas
INT - Integrationsumgebung mit Mocks externer Systeme
CON - Konsolidierungsumgebung für das Testen mit best. Systemen
PROD - Produktivumgebung des Kunden
DEV | INT | CON | PROD |
Unit Tests (Komponente) | Integrationstest (Zusammenspiel) |
Systemtest Akzeptanztest |
Smoketest |
Softwareentwurf
Im Softwareentwurf werden Entwurfsziele festgelegt, Subsysteme definiert und Subsysteme implementiert.
Muster
Muster beschreiben ein wiederkehrendes Problem und eine generische Lösung dafür. Sie sind plattform- und Programmiersprachenunabhängig und bieten Skizzen für gutes Design.
Strategy
Problem: Verwandte Klassen lösen gleiche Aufgaben durch verschiedene Algorithmen.
Singleton
Problem: Es soll nur ein Objekt der Klasse instanziiert werden.
Composite
Problem: In einem Objekt (Ordner) können andere Objekte (Dateien) oder gleiche Objekte (Ordner) bestehen.
Model-View-Controller
Problem: Zuständigkeiten sollen getrennt werden.
Handzettel Klausur
Für die Klausur waren bei uns zwei A4 Blätter vorder- und rückseitig zugelassen. Die vier (bzw. eher 3,5) Seiten sind nachfolgend abgebildet.
Keine Garantie für Lesbarkeit oder Verständlichkeit was das Layout angeht. Am Anfang dachten wir es muss Platz gespart werden.
Habt Nachsicht mit uns, diese Lernzettel wurden bis spät in die Nacht angefertigt.
Gez. Martin am 12.10.2022 um 01:11 Uhr.
Um 8:30 Uhr beginnt die Klausur. Wird schon schief gehen :)
Ich bitte um dein Verständnis :)