Software Engineering 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 unklarAnforderungsanalyse 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: RegistrierenZiel: Fahrzeug bestellenVorbedingung: Online-Portal aufgerufenNachbedingung: Daten erhoben, Leistung steht zur VerfügungAkteure: 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, DatenBoundary: Schnittstelle zu SystemakteurenControl: 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 ENT - Entwicklungsumgebung 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. Lösung: Singleton Problem: Es soll nur ein Objekt der Klasse instanziiert werden. Lösung: Composite Problem: In einem Objekt (Ordner) können andere Objekte (Dateien) oder gleiche Objekte (Ordner) bestehen. Lösung: Model-View-Controller Problem: Zuständigkeiten sollen getrennt werden. Lösung: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 :) Seite 1 Seite 2 Seite 3 Seite 4