Kapitel 1 - Einführung Softwaretechnik
multi-person construction of multi-version software
Parnas (1987)
Software Engineering - charakteristische Eigenschaften und Ziele
Es geht darum Fehler zu beheben, die Funktionalität zu erweitern, Altes
Entfernen oder an neue Umgebungen anzupassen. Gemeinsame Prinzipien sind
-
Separation der Belange / Anforderungen
-
Modulatität (Dekomposition komplexer Probleme, d.h. Top Down
oder Zusammensetzen eines komplexen Systems aus bestehenden Fabrikteilen, d.h.
Buttom-up)
-
Abstraktion (wichtige Dinge herausheben und Details ignorieren
und gegebenfalls verschiedene Abstraktionen der gleichen Realität darstellen)
-
Voraussicht auf Änderungen (d.h. bei Entwicklung bedenken, daß
sich Anforderungen im Laufe der Zeit ändern werden. Somit Version Managment
notwendig)
-
Generalisierung (d.h. Probleme versuchen zu generalisieren, um
diese auf einer höheren Ebene anzugehen)
-
Inkrementelles Vorgehen (Incrementality / schrittweises
Vorgehen ermöglicht einen evulotionären Entwicklungsprozess bei dem ein frühes
Feedback die initialen Anforderungen erreicht)
Teildisziplinen der Softwaretechnik
SW-Entwicklung, SW-Management, SW-Qualitätssicherung und Wartung und Pflege
Programmieren im Kleinen und im Großen, Unterschiede
- Anforderungen sind im Kleinem bekannt
- Programme können von Einzelnen geschrieben und entworfen werden
- Bei großen Anwendungen ist Anforderung nicht mehr trivial und überschaubar
- Präzise Spezifikation wird notwendig und ein Modell der Andwendung wird
ausgearbeitet
- Es wird nun im Team gearbeitet
Engineering - systematischer Ansatz zum Problemlösen
- Sytematisches Herangehen
- Genaues Definieren des Problemes
- Von bestehenden Lösungen lernen
- Wiederholende Muster muss man erkennen können
- Definieren von formalen Modellen, da diese Automatisierung
fördern
- Entwicklung erfolgt mit Standard-Werkzeugen
- Techniken entwickeln mit denen Klassen von Problemen gelöst werden können
Warum ist Software Engineering so kompliziert?
- Nur unklare oder uneindeutige Spezifikationen möglich
- Semantik ist sehr komplex und es gibt keine mathematische Unterstützung
Geschichte des Software Engineering
- Früher Probleme zwischen nur einem User und Computer und keinen anderen
Personen
- Somit waren Probleme einfach und überschaubar
- Benutzer spezifizierten das Problem
- Programmierer interpretierten die Spezifikation und programmierten danach
Probleme der Entwicklung von großen Softwaresystemen und Ursachen
- Nur unklare oder uneindeutige Spezifikationen möglich
- Semantik ist sehr komplex und es gibt keine mathematische Unterstützung
- 67 % allein an Wartungskosten
Lebenszyklus eines Softwaresystems
- Entwicklung und Evolution eines Software Systems wird systematisch nach einer
bestimmten Methode umgesetzt
- Entwicklung und Evolution eines Software Systems besteht aus wohldefinierten
Phasen
- Jede Phase hat wohldefinierte Anfangs- und Endpunkte, welche klar den
Übergang zur nächsten Phase definieren
Wasserfallmodell des Lebenszyklus eines Softwaresystems
- Analyse
- Design
- Implementation und Modultest
- Inegration und Systemtests
- Inbetriebnahme und Wartung
Phasen des Wasserfallmodells
- Anforderungsanalyse und Spezifikation (Was ist das Problem?)
- Design und Spezifikation (Wie kann man es lösen?)
- Coding und Modultests (Funktionsrumpfe werden programmiert)
- Integration und Systemtest (Alle module werden zusammengesetzt)
- Übergabe (GoLive) und Wartung (Änderungen nach der Kundenübergabe)
Programmiersprachen und SE (Einfluss)
- Zentrale Werkzeuge bei Entwicklung
- Sollten Modularität, Software Architektur, seprarate und unabhängige
Kompilierung von Modulen, GUI Design und von Implementierung unabhängige
Spezifikation ermöglichen
Grund für Datenbanken
Datenunabhängigkeit, d.h. Verwendung von Daten, ohne die zugrundeliegende
Datenrepräsentation kennen zu müssen
Trennung von Spezifikation und Implementierung
Datenbanken und SE (Einfluss)
- Große strukturierte Objekte speicherbar (Quellen)
- Große unstrukturierte Objekte speicherbar (Object Programs)
- Configuration und version managment einfach möglich
- Datenbankschema's sind gleichzeitig Dokumentation
Management und Software Engineering - Ziele und Struktur
Technisches Managment
- Kostenschätzung
- Projektplanung
- Ressourcenplanung
- Arbeitseilung
- projekt Überwachung
Personalmanagment
- Motivation
- Anstellung
- Auswahl der richtigen Subjekte
Kapitel 2 - Eigenschaften und Prinzipien
Was ist Software ?
"Sammelbezeichnung für Programme, die für den Betrieb von Rechensystemen zur
Verfügung stehen, einschließlich der zugehörigen Dokumentation"
(Brockhaus-Enzyklopädie)
Besondere Eigenschaften der Software als Produkt
- Leute denken Software wäre leicht anpassbar, was falsch ist
- Bei Entwicklung liegt Fokus auf SE, bei Produktion in anderen Branchen
- Ein Produkt ist nicht nur das was der Kunde erhält, sondern auch die
Anforderungen, Design, Sourcen und Testdaten
Eigenschaften von Software
- Korrektheit
- Wiederverwendbarkeit
- Zuverlässigkeit
- Wachstum/Evolution
- Robustheit
- Portabilität
- Effizienz / Leistung
- Verständlichkeit
- Benutzerfreundlichkeit
- Interoperabilität
- Verifizierbarkeit
- Produktivität
- Wartbarkeit
- Pünktlichkeit/Aktualität
- Korrigierbarkeit
- Sichtbarkeit
- Korrektheit von Software
- Ein Programm hält sich an die Spezifikation und deren Funktionen
- Daher muss Spezifikation vorhanden und korrekt sein
- Korrektheit ist also eine mathematische Eigenschaft, welche die Beziehung
zwischen Spezifikation und software kennzeichnet
Zuverlässigkeit von Software
Das Programm macht das, was es soll und was erwartet wird.
Zuverlässigkeit
ist relatives Qualitätsmerkmal, denn inkorrekte Software kann trotzdem zuverlässig
sein, geringes inkorrektes Verhalten kann toleriert werden.
Robustheit von Software
Ein Programm ist robust, wenn es sich selbst unter Bedingungen "vernünftig"
verhält, mit denen nicht in der Anforderungsspezifikation gerechnet wurde. (z.B.
inkorrekte Eingabedaten, Fehlfunktion der Hardware).
- Robust gegen erwartete Ereignisse, wie Fehleingaben gehört zur Korrektheit
- Rubustheit hier heißt robust sein gegen unerwartete Ergeignisse, außerhalb
der Spezifikation
Leistung von Software
- Ökonomisches Verhalten heißt das ein System effizient arbeitet
- es ist effizient, wenn es die Ressourcen des Computers wirtschaftlich
ausnutzt
- In Bezug auf Geschwindigkeit und Speicherbedarf
- Über Monitoring messen um Bottlenecks zu entdecken
- Modell analysieren ist zwar billig aber unsauber
- Modelle simulieren ist teuer aber sauber
- Leistungstests müssen nach der Herausgabe der Erstversion
abgeschlossenwerden, nicht vorher, da sich sonst einiges ändern kann
Benutzerfreundlichkeit von Software
- Ein Programm ist benutzerfreundlich, wenn seine Nutzer es einfach zu
bedienend empfinden (subjektiv)
- Dabei muss auf unerfahrene (Menüs) und erfahrene Benutzer
(commandline)geachtet werden
- Eingebettete Systeme haben kein UI
- Wichtig ist eine Standartisierung des User Interfaces, um Wiedererkennung zu
fördern
Verifizierbarkeit von Software
- Ein Softwaresystem ist verifizierbar, wenn seine Eigenschaften einfach
geprüft und verifiziert werden können
- Formale Analyse, Tests, Tracing und Debugging...
Wartbarkeit von Software
- Wartung nicht als Verschleißbeseitigung zu sehen, vielmehr als Änderungen
- Änderungen an Software ist extrem teuer und macht 60 % aller Kosten aus
- Software Evulotion ist die Folge
- Vorausdenken ist erforderlich! (Anticipation of changes)
Kategorien:
- korrigierende Wartung
- Anpassende Wartung
- vervollkommende Wartung
Korrigierbarkeit von Software
- Fehler müssen leicht behebbar sein ohne großen Aufwand betreiben zu müssen
- Stellt auch ein Hauptdesignziehl dar
- Anzahl an Einzelteilen verringern und möglichsts Standartteile verwenden, da
diese weniger Fehler enthalten
Erweiterbarkeit von Software (Wachstum, Evolution)
- Software Evolution, um neue Funktionen hinzuzufügen und alte zu ändern
- Erweiterbarkeit wird begünstigt durch Modularisierung
Wiederverwendbarkeit von Software
- Gibt an, wie einfach es ist, Teile des SW-Systems (evtl. mit geringen
Änderungen) in anderen SW-Systemen wiederverwenden zu können
- Bibliotheken schaffen, welche man wiederverwenden kann
- Software Re-Use ist trotzdem selten
- Wiederverwendbare Komponenten sind auch viel teurer als die die es nicht sind
Portabilität von Software
- Software kann in verschiedenen Umgebungen laufen (Hardware, Software, OS)
- Es sollte daher eine minimale Konfiguration erfordern
- Strafe für Portabilität ist schlechteres Laufzeitverhalten, da nicht mehr so
optimiert
Verständlichkeit von Software
Ein Programm ist verständlich, wenn sein Verhalten vorhersehbar ist
Intern:
- Wie verständlich ist das SW-System?
- Einfluss auf Erweiterbarkeit und Verifizierbarkeit
Extern:
- SW-System ist verständlich, wenn es vorhersagbares Verhalten aufweist
- Verständlichkeit ist Teil der Benutzerfreundlichkeit
Interoperabilität von Software
Ist die Möglichkeit eines Systems mit andern Systemen zu koexistieren und zu
kooperieren. Offene Systeme haben standartisierte Schnittstellen, die Kommunikation
von Systemem verschiedener Hersteller ermöglichen.
Produktivität der Software-Entwicklung
- Zeigt an, wieviel Qualität in welcher Zeitspanne hergestellt werden kann
- Effizienz heißt, das ein gutes hochqualitatives Produkt in kurzer Zeit
hergestellt werden kann
- Produktion wiederverwendbarer Systeme senkt die Effizienz, da dies
aufwendiger ist
- Produktivität ist schwer zu messen
Möglichkeit der rechtzeitigen Lieferung des Produktes(Pünktlichkeit/Aktualität)
Notwendig sind dafür Vorsichtige Kostenberechnung, Aufwandsabschätzung und
Planung, Einsetzung Milestones und Projektmanagment mit computergestützten
Projektmanagmenttools.
- Probleme sind das Einschätzen von Zeitaufwand, Produktivität und setzen
sinnvoller Milestones
- Anforderung vom Kunden wächst schneller, als diese Umsetzbar ist
- Lösung der Probleme durch inkrementelle Entwicklungsmethoden
-
SW-Krise: SW-Produkte verspätet und fehlerhaft ausgeliefert
Sichtbarkeit
- Jeder Schritt wird klar dokumentiert
- In Anforderung und Spezifikation
- Einzelne Schritte und der Status des Projektes sind jederzeit verfügbar
-
Externe Qualität (Präsentation des Status)
-
Interne Qualität (ermöglicht den Programmieren eine genauere
Abschätzung und Aufteilung ihrer Handlungen)
- = Pflege der Anforderungs-, Entwurfsspezifikation
Prinzipien des Entwurfs
- Prinzip des Filtern und Trennen
- Prinzip der Modularisierung
- Prinzip der Abstraktion
- Prinzip des Vorgriffs auf Änderungen
- Prinzip der Allgemeinheit
- Prinzip der Inkrementalität
Prinzip des Filtern und Trennen - Zerlegen von Komplexität
- Filtern und Trennen der relevantesten Kernpunkte
- Weglassen nicht benötigter Informationen
- Nur so kann auch Problem dekompositioniert werden (z.B. in Module)
- es ist oft leichter die Teilprobleme zu erfassen, als das Ganze
Zerlegung auf Basis von:
- Zeit: Zeitplan von Aktivitäten
- Qualitätsmerkmalen: z.B. erst Korrektheit, dann Effizienz
- Sichten: z.B. einerseits Datenfluss, andererseits Kontrollfluss
- Größe: Modularisierung
- Verantwortlichkeiten: Arbeitsverteilung auf verschiedene
- Personen mit verschiedenen Fähigkeiten
Prinzip der Modularisierung
- Dekomposition des Problems in einzelne Module
- komplexe Systeme können in kleine Stücke oder Bausteine = Module aufgeteilt
werden -> System ist modular
- Parallel bearbeitbar und testbar
- Kommunikation über eindeutige Schnittstelle
- Vertikale Modularität (jedes Modul in verschiedenen
Abstraktionslevelsbeschrieben)
- Horizontale Modularität (Systembeschreibung auf selben Abstraktionsniveau)
- Trennung von Funktionsspezifikation (ER-Diagramme für Daten, DF-Diagramme für
Funktionen, Petri-Netze für Steuerung)
- Modularisierung
Zerlegbarkeit eines Systems:
- Unterteilen des ursprünglichen Problems in Teilprobleme, daraufhin
- rekursives Unterteilen der Teilprobleme (Top-Down) -> divide et impera
Zusammensetzbarkeit eines Systems:
- Zusammensetzen des Systems aus elementaren, vorgefertigten Komponenten
(Bottom-Up)
Prinzip der Abstraktion
- wichtige Dinge herausheben und Details ignorieren
- Einteilung in relevante, logische Teile
- möglicherweise viele verschiedene Abstraktionen ein- und derselben Realität:
verschiedene Sichtweisen und Absichten
- Modelle: Abstraktionen der Realität
Prinzip des Vorgriff von Änderungen
Ist ein Prinzip, das Software stark von anderen Typen von Industrieprodukten
unterscheidet.
- neue Anforderungen werden gefunden
- alte Anforderungen werden aktualisiert
Deshalb Vorsorge für Veränderungen treffen (z.B. durch entspr. Entwurf)
- Werkzeuge zur Verwaltung der verschiedenen Versionen und Revisionen der
Software und ihrer Dokumentation nötig
- Problem des Konfigurationsmanagements
- Anforderungen die der Kunde irgendwann mit hoher Wahrscheinlichkeit mal haben
möchte oder Anforderungen, welche aus anderen Gründen, wie Änderungen im Umfeld
etc. entstehen
- das System muss so programmiert werden, dass Änderungen leicht durchzuführen
sind und nicht etwa das halbe System neu entworfen werden muss
Prinzip der Allgemeinheit / Allgemeingültigkeit
Wenn ein bestimmtes Problem gelöst werden soll, sollte man versuchen, ein
allgemeineres Problem als dieses zu identifizieren und das allgemeinere Problem zu
lösen (denn das wahrscheinlich eher wiederverwendbar).
- Ähnlichkeiten entdecken und Generalisieren, d.h. Standards nutzen können
- Erhöht Wiederverwendtbarkeit und senkt kosten
- Ohne Generality würden ähnliche Module immer wieder neu entwickelt werden
müssen
Prinzip der Inkrementalität
- Schrittweises Vorgehen, um Überblick zu behalten und Fehler zu verringern
- Ist ein evolutionärer Prozess
- "Alles auf einmal"-Methode bei großen Projekten nicht durchführbar deshalb
schrittweises Vorgehen
- frühzeitiges Feedback vom Kunden: wichtig, da anfängliche Anforderungen
evtl.nicht stabil sind oder nicht völlig verstanden wurden
Warum wird Software so oft geändert?
- Anforderungen des Kunden wachsen
- Es werden Fehler gemacht
- Bei Spezifikation wurden Teile vergessen
Kapitel 3 - Analyse und Spezifikation
SE als Ingenieurarbeit (ingenieurgemäßes Herangehen)
- Definiere klar das Problem, das es zu lösen gilt.
- Entwickle Standardwerkzeuge, -technologien und -methodologien, um das
Problem lösen zu können
Funktionsmodellierung: Datenflussdiagramme, Data Dictionary,Prozessspezifikationen
Datenmodellierung: ER-Modell
Ereignismodellierung: Endliche Automaten, Petri-Netze
Ziele, Struktur und Prozess der Analyse
- Ziel ist es herauszufinden, was das eigentliche Problem ist
- möglich ist eine strukturierte (top-down Analyse eines
Prozesses) oder OO-Analyse (buttom-up Analyse eines Objektes)
- Anforderungsanalyse (Machbar?, Kosten, Aufwand etc.)
Folgende Punkte gehören zur Analyse:
- Spezifikation der Hauptziele
- Informationsquellen beschaffen
- Anforderungsanalyse
- Abgrenzung des Problembereiches
- Festlegung der Beteiligten
- Inhaltsbeschreibung
- Use Cases erstellen
- Prioritäten festlegen
- alternative Lösungen suchen
- Empfehlungen vergeben
Erfassung der Anforderungen
- Anforderungen werden in natürlicher Sprache festgehalten
- User Manuals gehen aus Spezifikation hervor
- System Testpläne sollten von Spezifikation abgeleitet werden
- Blue Box Tests (Test auf Spezifikationen, da noch kein Code)
Kategorien von Anfroderungen
-
funktionale: Was soll das neue System leisten?
-
qualitative: Qualitätsfaktoren, die durch zu erfüllen sind
-
operationelle: zu erwartende Bedingungen beim praktischen
Einsatz
Phasen der Analyse
1. Ist-Analyse:
- Finden der Anforderungen
- Kenntnisse des existierenden Systems sammeln
- Kundenwünsche präzisieren
2. Soll-Konzept:
- Analysieren der Anforderungen
- Kenntnisse analysieren
2 Verfahren:
Strukturierte und Objektorientierte Analyse
Strukturierte Analyse
- Strukturierung durch wiederholtes Zerlegen in Bestandteile geringerer
Komplexität, bis elementare Bestandteile gefunden wurden, welche eindeutig und
vollständig beschrieben werden können (Top-Down Analyse)
- Startet mit Verhaltensanalyse der Prozesse
- Dabei werden Funktionen in Gruppen aufgeteilt
- Resultat ist Hierarchie von Funktionen
- Datenflussdiagramme, Data Dictionary, Prozessbeschreibung
modifizierte strukturierte Analyse:
-
Funktionsmodellierung: statische Eigenschaften des
Systemverhaltens (Datenflussdiagrammen, Data Dictionary,
Prozessspezifikationen)
-
Datenmodellierung: Eigenschaften der Daten und ihre
semantischen Beziehungen
-
Ereignismodellierung: dynamische Eigenschaften des
Systemverhaltens
Datenflussdiagramm - Konstruktion, Vorteile, Nachteile
- Zeigt wie Daten sich im System bewegen und wo sie Änderungen hervorrufen
- Top-Down Modell (iterative Dekomposition)
- ist Modell der Systemfunktionalität als gerichteter Graph
- Steuerung des Ablaufs nicht ersichtlich
Konsistenz eines Datenflussdiagramms
-
Prozessbeschreibung (jede Funktion ist beschrieben)
-
Data Dictonary (alle Datentypen und Datenflüsse sind
definiert)
-
Balanciertes DFD (I/O Datenflüsse des Vaterprozesses sind dem
Kind-DFD bekannt)
Was steht alles in einem Datenkatalog?
- Zentraler Ort, wo alle Informationen über Datentypen und ihre
Transformationengespeichert sind
- Case Tools prüfen ob diese identisch sind
- Alle Eigenschaften der Daten sind im DD aufgelistet
- Data Elements sind gruppiert in Data Flow Records (Name, Record,
Source,Destination, Description)
- Enthält Infos über Prozesse, externe Entities und alle Records
Termine = Datum + Anfang + Ende + Status + Zweck
Anfang = Zeit
Zeit = Stunde + Minute
Datum = Tag + Monat + Jahr
Adresse = PLZ + Ort + Strasse
Gruppendaten = Gruppenname
Optionen = {Farbe + Terminart}
Minute = Ziffer + Ziffer
Mitarbeiter_ID = Ziffer + Ziffer
Nutzername = {Zeichen}
Passwort = {Zeichen}
Nachricht = {Zeichen}
PLZ = {Ziffer}
Prozessspezifikation
Wie beschreibt man Prozesse in der strukturierten Analyse? Für alle
elementaren Prozesse werden Prozessspezifikationen angefertigt.
elementarer Prozess:
Prozess auf der untersten Ebene der Prozesshierarchie, welcher nicht mehr weiter
verfeinert wird (Blatt des Hierarchiebaums)
vier Möglichkeiten der Beschreibung
- strukturierte Sprache (Pseudo-Code)
- Entscheidungstabellen
- endliche Automaten
- logische Spezifikation
Was ist eine Entscheidungstabelle?
- Falls Condition wahr dann mache dies (quadratische Möglichkeit der Belegung)
- kompakte und übersichtliche Darstellung von vorzunehmenden Aktionen oder
Handlungen, die von der Erfüllung oder Nichterfüllung mehrerer Bedingungen
abhängen
vier Komponenten
-
Bedingungen: logische Ausdrücke
-
Aktionen: semantische Einheiten, werden später durch
entsprechende Programmabschnitte implementiert
-
Regeln: Eine Regel bezeichnet eine Kombination von Bedingungen
-
Aktionsanzeiger: Ein Aktionsanzeiger repräsentiert eine
Zuordnung zwischen einer Regel und einer Auswahl von Aktionen, die bei
Gültigkeit der Regel durchgeführt werden
Was modelliert man mit einem endlichen Automaten, wie und warum?
-
Kontrollaspekte, bei denen ein System verschiedene Zustände
aufweist
- für Modellierung eines Kontrollflusses geeignete hypothetische Maschine, die
Reaktionen (Aktionen) eines Prozesses auf eintretende Ereignisse beschreibt
Darstellungsmöglichkeiten
- Zustandsdiagramm
- Zustandstabelle
- Zustandsmatrix
Endliche Automaten - Grenzen des Einsatzes, Vorteile, Nachteile
- Wird schnell zu komplex wenn zu viele Zustände
- Bei 20 Zuständen schon 1 Million verschiedene Belegungen möglich
- Manchmal hängt eine Aktion von mehreren Zuständen ab und nicht nur von einem
- Synchronisation nur schwer möglich (z.B. Erzeuger-Verbraucher Problem)
Petri Netze
Ist ein für Modellierung eines Systems
konkurrierender/kooperierender
Prozesse geeignetes Werkzeug.
Problem der Synchronisation und Petri-Netze
Marken repräsentieren den Kontrollfluss, sind jedoch anonym und deshalb ist
der Inhalt der Marke unbekannt.
Bsp.:
Eine Marke in einem Puffer beschreibt das Vorhandensein einer Nachricht, aber
nicht, ob diese wohl formuliert ist oder nicht. So kann eine Auswahl auf Basis des
Inhalts der Marke nicht durch das Petri-Netz beschrieben werden, wenn mehrere
Transitionen geschalten werden können.
Desweiteren ist keine Beschreibung von Prioritäten oder auch Zeitbeschränkungen
möglich.
Bsp.: Wenn länger als eine Sekunde gewartet wird, soll eine Meldung generiert
werden
Konstruktion eines Modells mit einem Petri-Netz
- Input Place -> Übergang (Transition) -> Output Place
- Marken werden zur Synchronisation verwendet
Darstellungselemente:
-
Stelle: Zustand eines Prozesses; repräsentiert eine Bedingung
-
Transition: gesteuerter Zustandsübergang; modelliert ein
Ereignis, welches durch das Schalten ("Feuern") der Transition ausgelöst wird
-
Pfeil: zwischen Stelle und Transition und umgekehrt
-
Marke: ihre Anwesenheit in allen vor einer Transition
liegenden Stellen ist die notwendige Bedingung, dass die Transition schalten
(feuern) kann
Mutual Exclusion ist mit Petri Netzen einfach umsetzbar, dafür sind aber
Deadlocks möglich...
Warum und wie werden Petri-Netzen erweitert?
- Marken werden durch Werte repräsentiert
- Transitionen sind Prädikate zugeordnet, die sich auf die Werte der Marken der
Eingabestellen beziehen und den Übergang mitbestimmen (Transitionen können nur
noch beim Vorliegen bestimmter Marken schalten)
- Transitionen sind Funktionen zugeordnet, die aus den Werten der Marken der
Eingabestellen die Werte der Marken der Ausgabestellen berechnen
- Spezifikation von Prioritäten, wenn mehrere Transitionen geschalten werden
können
OO Analyse
"Im Mittelpunkt stehen Objekte, welche Abbilder von Real-Welt- Objekten des zu
analysierenden Problembereichs darstellen. Jedes Objekt besitzt eine eindeutige
Identität (Objektidentität), bestimmte Eigenschaften (Attribute) sowie ein
bestimmtes Verhalten (Methoden). Die Objekte kommunizieren miteinander durch das
Senden von Botschaften. Wie ein Objekt auf erhaltene Botschaften reagiert, wird
jeweils durch die in ihm vorhandenen Methoden definiert. Weitere wichtige
Konzepte der OOA sind u.a.: Klasse, Datenkapselung, Vererbung und Polymorphismus
(überladen)."
Objektorientierte Analyse
- Startet mit der Analyse der Objektstruktur
- Funktionalitäten wird in Klassen gruppiert und gekapselt
-
Buttom-Up Analyse
- Objekt-Orientiertes Design benutzt ein konkretes HW und SW System,
Architektur,Sprache und OO Lib
Konzepte der objektorientierten Programmierung
- Kapselung, Klassen, Nachrichten, Methoden, Vererbung, Überschreiben,Überladen
von Funktionen
- Assoziation modelliert Beziehungen zwischen Objekten einer oder mehrerer
Klassen
- Aggregation ist Sonderform der Assoziation, bei der die Objekte der
beteiligten Klassen keine gleichwertige Beziehung führen, sondern eine
Ganzes-Teile- Hierarchie darstellen (beschreibt, wie sich etwas Ganzes aus seinen
Teilen zusammensetzt = part_of)
- Klassen können abgeleitet werden und daraus Objekte erstellt werden
- Statisches Binden (Code verbunden über Zeiger, Adressen von Methoden zur
compilierzeit festgelegt) oder dynamisches Binden (Adressen der Methoden erst zur
Laufzeit ermittelt - virtual Ausdruck notwendig, um Compiler zu zeigen, welches
Objekt gemeint ist wenn mehrere polymorphe vorhanden, da erst zur Laufzeit über
Zeiger verbunden wird)
Schritte der objektorientierten Analyse
- Initial problem statement (Ziele, Interface, Technische Aspekte, Features)
- Objektidentifikation, Klassenidentifikation mit Attributen,
Beziehungsmodellierung
- Klassenhierarchie (Aggregationen und Assoziationen) definieren und
Beschränkungen (constraints) festlegen
- Methoden und Dienste definieren, Funktionalität und OO-Schema definieren
Grammatische Inspektion
- Die Dokumente der Spezifikation werden grammatikalisch geparst
- Substantive werden Objekte, also Klassen (Objekte mit gemeinsamen
Eigenschaften)
- Verben stellen später Methoden der Klassen dar oder auch Beziehnungen
- Und Adjektive sind Attribute von Objekten
Modellierung von Beziehungen
- Stellen semantische Relationen zwischen Objekten dar
-
Aggregation (Is Teil von) um Hierachien zu erzeugen
-
Spezialisierung/Generalisierung (Is-A Beziehung,d.h.
Vererbung)
- Message-Flow-Structur (Sender und Empfänger für Nachrichten)
Modellierung von Restriktionen (Constraints)
Einschränkungen die zu den Klassen definiert werden (Max-Werte oder
Min-Werte...)
Kapitel 4 - Prozess der Analyse
Wozu gibt es die Risikoanalyse und wie wird sie durchgeführt?
- Gibt es Konkurrenz?
- Welche Technologien verwenden? (web, DMBS, Languages)
- Welche Markteinflüsse beeinflussen das Projekt?
- Anzahl zu erwartender Benutzer
- Zukunftstrends einbeziehen
- Wurde das Problem vom Kunden verstanden?
- Problemdimensionierung (Transactions per time, angenommen Laufzeit für
verschiedene Funktionen)
- Welche Altsysteme müssen angebunden werden?
Wie identifiziert man Systemgrenzen und Akteure?
Es gibt interne Systemgrenzen und Externe (nicht unsere Aufgabe, aber evt.
Schnittstellen dazu). Akteure ist all das, was mit dem System interagieren muss.
- Wer benutzt das System (Mensch oder System)?
- Wer wartet es?
- Wer fährt es herunter?
- Wer bekommt Infos aus dem System?
- Wer füttert es mit Daten?
- Was passiert automatisch im System?
Wie identifiziert man Anwendungsfälle? (Use Cases)
Ein Use Case beschreibt was ein Akteur machen möchte. Was passiert, was wird
ausgetauscht und welche Ereignisse gibt es dabei?
Modellierungshilfen
Scenarien, UML und Klassendiagramme...
Was ist ein Szenario?
- Ist ein Spezieller Pfad durch die Use-Cases aus sicht des Users
- Primäre (Basic Path) und sekundäre Pfade (anderer nebenläufige Pfade)
- Kombiniert man alle Pfade erhält man einen Kompletten Use Case
Was ist der Umfang eines Projektes und warum ist er so wichtig?
Szenarien sollten vollständig sein, um Fehler schnell erkennen zu können.
Modellierung in UML- grundlegende Fragen
Basiert auf OO
- data-centered Methoden wie ERD, Data-Flow-Diagramme, Statusdiagramme
- strukturelle Methoden
- scenario basierte Methoden (Verhaltensanalyse)
- UML (Objektmodelle aus den Use Cases)
- UMD - Use Case Diagramm zeigt Akteure, Use Cases und die Beziehungen
- Strukurdiagramme für Klassen und Pakete (Gruppen von Klassen)
- Verhaltensdiagramme für dynamisches Verhalten und Systemaktivitäten
- Implementationsdiagramm mit Komponentendiagramm (relationen zwischen
Programmeinheiten) und Deploymentdiagramm (Kommunikation zwischen Komponenten)
Fragen
- Wer sind die User des Systems? = Akteure
- Welche sind die Hauptobjekte?
- Welche Objekte werden für welchen Use Case gebraucht?
Was beschreibt man alles in einem Klassendiagramm?
- liefern die Statische Sicht der Software - Problem, da OO-Komplexität von
Zusammenspiel der Methoden abhängt
- Domain Class Modellierung
- Business Modell (definiere die wichtigsten Einheiten des Systems und ihre
Relationen)
- Statische Semantik (Klassenhierarchie beschreibt technische Struktur der
Problemdomäne) kann auf Business Modell basieren
- Ein Klassendiagramm enthält alle Klassen und Beziehungen (Generalisierung,
Assoziierung, Aggregation, Komposition) und stellt somit auch die Hierarchie dar
Wie modelliert man ein GUI (Graphical User Interface)?
- Erst wird Handbuch geschrieben, dann der Code
- Dabei werden parallel GUI's entworfen, die bei Use-Cases verwendet werden
können
- Window Navigation Diagramme zeigen Relationen zwischen Fenstern
Wozu gibt es die Robustness-Analyse?
Hier werden drei Arten von Objekte eingeführt...
-
Boundary Objects (Akteure welche mit System kommunizieren)
-
Entity Objects (Objekte des Domänenmodells-Hauptentities)
-
Control Objects (Verbinden Boundary und Entity Objekte)
- Das Robustness-Diagramm ist die Schnittstelle zwischen dynamischem und
Statischem Teil eines Projektes
- Dabei gehört zum dynamischen Teil die Use Cases und Sequenzdiagramme und zum
statischen das Domain Modell und das Klassendiagramm
- Durch das Robustness-Diagramm wird es einfacher den Überblick zu halten
Warum und wie konstruiert man Sequenzdiagramme?
Beschreiben, wie die Objekte zusammenarbeiten und in welchem zeitlichen Ablauf
die Methoden aufgerufen werden. Sequenzdiagramme sind mit den Klassendiagrammen
konistent. Sie beziehen sich auf einen konkreten Ablauf (Szenario) eines Use
Case!
Eine Alternative zu Sequenzdiagrammen sind Kollaborationsdiagramme. Sie
verdeutlichen besser die Struktur des Diagrammes, dafür ist die zeitliche Abfolge
der Methodenaufrufe schlechter erkennbar als in Sequenzdiagrammen.
Was modellieren die Kollaborations- und Zustandsdiagramme?
- Kollaborationsdiagramme zeigen wie einzelnen Teile zusammenarbeiten
(Struktur)
- Zustandsdiagramme (Finite State Maschine) beschreiben den
Lebenszyklus eines Objektes
- Zustandsdiagramme sind dann sinnvoll, wenn sich Verhalten eines Objektes
signifikant ändert
- Dabei gibt es Startzustand, Transition (Übergang) und Zielzustand im
Zustandsdiagramm
Aktivitätsdiagramme sind relativ neu in UML und dienen zur Beschreibung von
Abläufen und zwar nicht nur am Bsp. eines Use Cases. Es werden vielmehr die
Verhalten von Objekten in mehreren Use Cases aufgezeigt. Dabei ist Synchronistation
und Nebenläufigkeit der Aktivitäten modellierbar.
Spezifikatioen
Softwaretechnik, Software Engineering:
"Bezeichnet das geplante, systematische Vorgehen bei der Softwareentwicklung
unter Anwendung von Methoden, Verfahren und Softwarewerkzeugen mit dem Ziel,
qualitativ hochwertige Softwareprodukte wirtschaftlich herzustellen und zu
nutzen."
Welche Rolle spielen Spezifikationen in der Software-Entwicklung?
- Ist eine Referenz bei der Implementation
- Ein Produkt ist nur gelungen, wenn es sich an der Spezifikation hält
- Oft Art Vertrag zwischen Kunden und Entwickler
Welche Eigenschaften sollte eine Spezifikation haben?
- Enthält eine Beschreibung von dem, was die Implementation enthalten muss
- Spezifikation, Anforderungsspezifikation, Design Spezifikation und
Modulspezifikation
- Spezifikation ist Referenzpunkt wärend der Produktwartung
Qualitätsmerkmale einer Spezifikation
- Konsistenz (keine Widersprüche)
- Komplettheit (alle benötigten Anforderungen)
- Klar und deutlich (alle benutzten Wörter erklären und definieren)
- eindeutig und verständlich
Wie unterscheidet sich eine operationelle von einer deskriptiven Spezifikation?
- Operationelle Spezifikationen beschreiben die erwünschten Verhaltensweisen
- Deskriptive Spezifikationen beschreiben die erwünschten Eigenschaften
(beschreibt also das Was aber nicht das Wie)
Data Flow Diagramme beschreiben Operationen aber nicht die benutzten
Datenstrukturen oder Relationen. Ein Prototyp ist ein operationales Modell
Wie formal werden Spezifikationen formuliert?
Informal (normale Sprache), semiformal (präzise Syntax aber unpräzise
Semantik) oder Formal (präzise Syntax und Semantik).
Was ist die Verifikation einer Spezifikation?
- Funktionalität, Komplettheit und Konsistenz einer Spezifikation sind zu
prüfen
- Überwachung des dynamischen Verhaltens des spezifizierten Systems
- Analyse der Eigenschaften des Systems
ER-Modell
Entities (Objekttypen), Beziehungen und Attribute (Objekteigenschaften)
Logische Spezifikation
- = FOT (first-order-theory bzw. prädikatenlogische Theorie erster Stufe)
- Beschreiben in Form von Formeln und Logischen Ausdrücken (Logik 1. Ordnung)
- Variablen, Konstanten, Funktionsprädikate,Quantifizierungen u.s.w.
- Immer Boolsches Ergebnis
- Pre- und Postconditions
- Vorteil ist, wenn Logische Spezifikation korrekt sind auch alle Ableitungen
davon korrekt
Quelle: Uni Münster
Logisches Prototyping - Methoden, Probleme
- Interpreter für Operationale Spezifikation
- Damit aber nur das Verhalten prüfbar und nicht die Eigenschaften
- Besser logische Sprache wie Prolog umd FOT zu approximieren
Algebraische Spezifikation - wie beschreibt man die Syntax?
Elemente (Char, Nat, Bool) und Operationen (Funktionen der Algebra wie new,
append, add, lenght, isEmpty...)
Eine algebraische Spezifikation ist die operationale Modellierung auf der
Grundlage einer Algebra.
Bsp: Algebraische Spezifikation eines Stacks
Quelle: Uni Zürich
Algebraische Spezifikation - wie beschreibt man die Semantik?
Axiome der Algebra, welche immer Wahr sein müssen.
Algebraische Spezifikation - Probleme
Unvollständig, Überspezifizierung, Widersprüchlich, Redundanz
Kapitel 5 - Entwurfsprozess
Entwurf
Ziel des Entwurfs
"Umwandlung der während der Analysephase gewonnenen
Anforderungsspezifikation in die Architektur des künftigen
Software-Produkts."
Dient später als Vorlage für Implementierung...
Entwurf - Ziele, Struktur und Prozess
- Ziel ist Spezifikation des Wie's (Also How to Solve?)
- Das Design bringt die Anforderungsspezifikation in Vorlagen für
Implementierung
- Entscheidungen über HW und SW Plattform
- Softwarearchitektonische Entwurfsphase (grundlegende Komponenten und Muster)
- Detailierter Entwurf der Module (verfeinern der Komponenten - nur
Spezifikation)
Auf welche möglichen künftigen Änderungen soll im Entwurf vorgegriffen werden?
Änderungen im Algorithmus, Datenrepräsentation, Perepheriegeräte oder sozialem
Umfeld
Was sind Patterns?
Sich wiederholende Muster, welche erkannt werden müssen, um Templates
einsetzen zu können. Eine Pattern-Beschreibung enthält immer Kontext, Problem und
Lösung.
Was ist eine Softwarearchitektur?
- beschreibt die Struktur des SW-Systems durch Systemkomponenten (z.B.
Unterprogramme, abstrakte Datentypen, Klassen) und ihre Beziehungenuntereinander
- Besteht aus Komponenten, der Struktur des Systems und der
Kommunikationzwischen den Komponenten
- Entwurf der Architektur setzt viel Intuition und Erfahrung voraus
Motivation:
- Beherrschung der Komplexität des SW-Systems
- Arbeitsteilung im Rahmen eines Teams
- Wiederverwendbarkeit
- einfache Wartbarkeit
Welche Patterns werden in der Softwarearchitektur benutzt (Beispiele)?
- Schichtenarchitektur (wie Schichtenmodell von TCP/IP)
- Pipes und Filters Architektur (Scanners, Parser, Semantikanalyse,
Optimierung)
- Broker Architektur (Kommunikationsbasiert für verteilte Systeme)
- Model-View-Controller Architektur (interaktive Applikation mit Modell, View
und Events
- Presentation-Abstraction-Control (Präsentation,Abstraktion und Steuerung
derAgenten)
Modularisierung
Was ist ein Modul (Programmbaustein)
- ist logische Einheit mit klar abgegrenztem Aufgabenbereich
- Kommunikation mit anderen Modulen nur über Ex-/Importschnittstelle
- Geheimnisprinzip - Innere Funkionen und ADT's für Umwelt verborgen
- austauschbar durch anderes Modul mit gleicher Exportschnittstelle
- kann getrennt von anderen Programmteilen entwickelt werden
- positiv für Wartbarkeit, Wiederverwendbarkeit ,Testbarkeit und Portabilität
Modularisierung - USES, IS_USED, IS_COMPONENT_OF
- Modul ist wohl definierte Komponente eines Softwaresystems
- Funktionale Module (Leistung) oder ADT-Module / Datenobjektmodule
- USES Relation für ausgehende Kanten
- IS_USED für eingehende Kanten
- Mit IS_COMPONENT_OF oder CONSISTS_OF wird Hierarchie gebaut
Wie kommunizieren Module (Klassifikation von Moduln)?
- Über Schnittstellen (Variablen, Funktionen etc), welche explizit als
Schnittstelle gekennzeichnet werden (exportiert)
- Export (Dienst anbieten) und Import (Dienst anfordern bzw. einfügen)
- Vorteil ist die Abstraction der Module, da Details verschlossen bleiben
- Solange das Interface nicht geändert wird, verursachen Änderungen im Modul
keinen Mehraufwandt
Schnittstelle - EXPORTED, IMPORTED, Entwurf
Eine Schnittstelle sollte nur das nötigste so kurz wie möglich anbieten
- sonst zu komplex und unverständlich
- sonst Fehleranfälligkeit in Implementierung
- zu viele Informationen könnten missbraucht werden
Notation des Modulentwurfs
- Keine Standartisierte Notation bis jetzt
- Jede Notation ist so Formal wie es die Syntax ist
- die Semantik der Exports wird aber nicht formal spezifiziert
- Textnotation beinhaltet Funktionsrümpfe und Beschreibung in natürlicher
Spache
- Graphische Design-Notation zeigt ein Diagramm mit Relationen (USES) und
CONSIST_OF-Beziehungen
Was ist ein generisches Modul oder Unterprogramm?
- Generische Module enthalten nur Strukturinformationen
- Anwendungsspezifische Datenfelder werden vom Anwender dazugefügt
Mit Hilfe der generischen Module können mächtige und wiederverwendbare
Programmteile produziert werden. Dabei werden Module, die eine ähnliche Leistung
liefern und sich nur im Interface in den Typen und den exportierten Funktionen
unterscheiden, durch einen höheren Abstraktionsgrad mit Hilfe generischer Module
realisiert.
Dazu werden die variierenden Bereiche alle in einem Modul gesammelt und
abstrahiert. Durch die dadurch entstehenden generischen Module können
Inkonsistenzen in Modulen vermieden werden und sie sind leicht änderbar. Ein
generisches Modul wird in bezug auf einen Typ parametrisiert - man spricht auch
voneiner Programmschablone.
Ein Client kann so ein generisches Modul nicht direkt nutzen, dazu muss es erst mit
den aktuellen Parametern instantiiert werden.
Schrittweises Vorgehen und Verfeinern - Vorteile, Nachteile
- Schrittweise Top-Down Verfeinerung beliebteste Methode
- In jedem Schritt wird Problem in Unterprobleme zerlegt
- Subsolutions werden einfach zusammengelinkt über Kontrollstrukturen
- Decomposition Tree zur Darstellung
Probleme:
- bei großen Programmen schlecht umsetzbar
- führt nicht immer zur besten Lösung
- Entwurf ist ein kreativer Prozess, der so nicht umgangen werden kann
- entdecken anderer Lösungen bleibt so oft auf der Strecke
Nachteile:
- Unterprobleme werden isoliert betrachtet, deshalb keine Generalisierung
möglich
- kaum eine Wiederverwendbarkeit
- keine Vereinigung mehrerer Subproblems
- kein Information Hiding, da keine Kapselung
- falls sich was in Struktur ändern, muss alles überarbeitet werden
Bearbeitung von Anomalien - Ausnahmen
- Unerwartete und unvorhergesehene Umstände müssen abgeschirmt oder abgefangen
werden (Exeptions)
- Ein Modul sollte bei einer Anomalie ein Exeption-Signal an den Client senden,
der einen Exception Handler aufruft (z.B. für Overflow, Div by Zero etc.)
- Try {...} catch (EXEPTION) { //Exeption bearbeiten}
Verifikation und Tests
- Motivation
- Testfälle und Testmethoden
- black-box-Testen
- white-box-Testen
Verifikation, kleine Programme, große Systeme, Ansätze
- Kleine Programme durch mehrere Beispielanwendungsfälle
- Mit dem Verhalten des Programmes experimentieren = Testen
- Das Programm analysieren = Korrektheit herleiten
- Problem ist das die Verifikation auch zu verifizieren ist
Testen - Problem von Kontinuität
- Das System wird in repräsentativen Fällen getestet
- Es ist nicht mögliche alle Zustände zu testen
- Problem der Kontinuität ist, dass Software nicht weiß, wie Ordnung der Werte
bei Vergleichen semantisch korrekt ist
Theoretische Probleme des Testens, vollständiges Testauswahlkriterium
- Konsistenz und Vollständigkeit der Test sind nicht machbar
Empirisches Testen
- Es wird mit verschiedenen Testreihen (Gruppen) verschiedene Use Cases
getestet
- Da ein vollständiger Test nicht möglich, wird zum idealen Test Set
approximiert
- Die Schwierigkeit besteht darin alle wichtigen Gruppen einer bestimmten
Problemklasse zu finden
Unterschiede zwischen White-Box-Testen und Black-Box-Testen
- White-Box Tests benutzen interne Struktur der Software und ignorieren ggf.
die Spezifikation
- Black-Bock-Tests basieren ausschließlich auf der Spezifikation, da kein
Wissen über Code oder Entwurf vorhanden ist
Abdeckung von Anweisungen, Kanten, Bedingungen, Pfaden
- Abdeckung von Anweisungen (Ein Fehler kann nicht entdeckt werden, wenn der
Teil des Programms den Fehler enthält, der nicht ausgeführt wird)
- Deshalb sollte jede elementare Anweisung überprüft werden
- Abdecken von Kanten (jede Kante des Kontroll-Fluss-Graphen muss einmal
traversiert werden, was nicht immer geht.. z.B. Loop Condition besteht aus
mehreren Konjunktionen)
- Abdecken von Bedingungen (Jede Kante des Kontroll-Fluss-Graphen wird
traversiert und dabei jeder mögliche Wert für alle Bedingungen eingesetzt)
- Pfadabdeckung (alle Pfade von Anfangszustand zum Endzustand im
Controll-Fluss-Graph werden traversiert. Meistens sind dort zu viele Pfade
aufgrund vieler Loops im Programm. Jede Iteration ist ein extra Pfad!)
Syntaxgesteuertes Testen, Testen von Grenzwerten
- Syntaxgesteuertes Testen heißt, das für jede Produktion der BNF ein Testfall
bearbeitet wird, d.h. alle Grammatikgesetze werden überprüft
Testen im Großen, Bottom-Up-Integration und Top-Down-Integration, Vorteile,
Nachteile
Modultests zum verifizieren der korrekten Implementierung
Integration Tests verifizieren die Zusammenarbeit der beteiligten
Module
-
Big-bang - gar kein integriertes Testen
-
Incremental - einfacher Fehler zu finden
System Tests prüfen das gesamte System mit allen Modulen
- bottom-up (USES Hierarchie)
- top-down (lower level Simulation)
Was ist Debugging?
- Aktivität des Suchen und Behebens von Fehlern, nachdem er entdeckt wurde
Entwurf der Benutzerschnittstelle
Das UI ist Maßstab nach dem Systeme von Nutzern bewertet werden.
Falls Software schwer benutzbar:
- Software wird verworfen
- Es können schnell Fehler gemacht werden
- Heute notwendige Komponenten
Verwendet werden Highresolution Graphic Displays, Maus und verschiedene
Schnittstellen für verschiedene Nutzerklassen
- GUI's sollten Fähigkeiten der individuellen User unterstützen
- Konsistenz und Hilfesystem
Konsistenz der Benutzerschnittstelle
System Kommandos, Menüs und andere Oberflächen sollten
- Gleiche Format besitzen
- Parameter immer gleich übergeben
- Untersysteme sollten sich ähneln
- Nutzer sollte beim Erlernen eines Kommandos rückschlüsse auf Bedienung aller
Anderen ziehen können
Eingebaute HELP-Unterstützung
- Vom Benutzerterminal erreichbar
- "How to get started?"
- Volle Beschreibung des Systems und wie es zu Nutzen ist
- Strukturierte Hilfe
Schablonen für Benutzerschnittstelle
Es werden Metapher verwendet, welche einfach assoziierbar sind
- Control Panel
- Desktop
- Trash
WIMP-Schnittstelle
WIMP = Windows, Icons, Menues, Pointing (Mausklick)
Vorteile
- Einfach zu lernen
- Viele Oberflächen zur Interaktion
- Überschaubar und unkompliziert
Nachteile
- Keine Standarts
- Schwer möglich sinnvolle Icons für abstrakte Komponenten zu finden
Systeme mit Menü
- Benutzer müssen nicht den genauen Befehlnamen wissen
- Weniger Tipparbeit
- System kann nicht in Fehlerzustand geführt werden
- Contextsensitive Hilfe
- Pull-Down und Pop-Up Menüs
Nachteile:
- Logische Verknüpfungen unmöglich ausdrückbar
- Für Experten Menü langsamer als Commandozeile
- Menühierarchie schnell komplex wenn viele Auswahlmöglichkeiten
Graphische Schnittstelle
- Grafiken werden zu Darstellung von Informationen verwendet
- Bilder sagen mehr als Worte
- Trends sind sichtbar
Textuelle Schnittstelle
- Kommandozeileninterpreter billig und einfach
- Kombinierende Kommandos erweitern Funktionalität und Aufrufkomplexität
- Externe Prozeduren und Programme können eingebunden werden
- Erfahrene Benutzer sehr schnell
Nachteile:
- Lernen aufwendig
- Fehler in Kommandos möglich
- Interaktion durch Tastatur (langsam)
- aber nicht für unerfahrene Nutzer sinnvoll
Entwurf von Fehlermeldungen
- Ersteindruck an Nutzer
- Schwer für unerfahrene Anwender
- Eigenschaften: Konsistent, Konstruktiv, Eindeutig und Präzise
- Nachricht sollte Beschreibung zur Fehlerbehebung enthalten
- On-Line Hilfe sollte auftufbar sein
Anwendung von Farbmonitoren
Ist zwar neue Dimension, nützt aber blinden oder Farbblinden nichts und es
gibt auch keine Standarts.
Tips:
- Nicht zu viele Farben nutzen (4-5)
- Konsistenz bei Farbwiederverwendung
- Farbanpassung sollte durch Nutzer einstellbar sein
Kapitel 6 - Prozessmodelle
Probleme der industriellen Softwareproduktion
- Softwareentwicklung ist ein Prozess von Planung und Management
- Implementierung wird begonnen, nachdem das Problem verstanden wurde
- Problem ist Softwareentwicklung vergeht nicht linear (Feedback Loops
notwendig)
Lebenszyklus eines Softwareprodukts
... - Aufgabenstellung - Entwicklung - Nutzung - Aufgabenstellung - ...
Deailiert z.B. durch Phasen des Wasserfallmodells
- Analyse
- Entwurf
- Implementierung
- Integration
- Installation
- Wartung
Software Produktionsprozess - Prozessmodelle
Code-and-Fix-Modell, Wasserfallmodell
Code-and-Fix-Modell und Softwarekrise
- Früher ein Person pro Softwareprojekt
- Problem was gut verständlich und einfach
- Softwareentwicklung bestand nur im Coding
- 2 Phasen: Programmierung und Fehler entfernen
-
Probleme des Code and Fix Modells:
- Nach mehreren Änderungen am Code wird Struktur unübersichtlich und schlecht
- Es wird immer schwerer neue Änderungen einzubauen
Software Krise
- 1960 startet Entwicklung großer Software Systeme
- Grundproblem überall: overbuget und Zeitverzug
- Zu lösende Probleme wurden nicht gut erkannt und verstanden
- Mitarbeiter verbrachten mehr Zeit mit gegenseitiger Kommunikation als mit
Codieren
- Änderungen von ursprünglichen Systemanforderungen
- Entwickler verliesen Projekte
- Original System Anforderungen wurden nachträglich geändert
Software Engineering wurde geboren, um nach einem Ausweg aus diesen
Problemen zu suchen
Softwarekrise:
"In verschiedenen Erscheinungsformen uns ständig begleitende Erscheinung, die
ausdrückt, dass der zu leistende Aufwand für Softwareherstellung und -betrieb die
dafür zur Verfügung stehenden Kräfte übersteigt oder in Kürze übersteigen wird."
Wasserfallmodell
- Machbarkeitsstudie
- Anforderungsspezifikation und -analyse
- Entwurf
- Coding und Modultests
- Implementation und System Tests
- Übergabe und Wartung
Nachteil ist der streng sequentielle Ablauf der Phasen.
Machbarkeitstudie
Kosten abschätzen und alternative Lösungen suchen.
Ziel:
- Problemdefinition
- Alternative Lösungsvorschläge
- Benötigte Ressourcen und Kosten
Spezifikation und Analyse der Anforderungen
Notwendige Qualitätsmerkmale spezifizieren:
- Funktionalität
- Performance
- Benutzbarkeit
- Portabilität...
Beschreibt das "Was" umzusetzen ist, nicht das "Wie"!
Ziel: Anforderungsspezifikation (Pflichtenheft)
Entwurf
Hier erfolgt die Dekomposition des Systems in Module. Die
Entwurfsspezifikation beinhaltet
- Beschreibung der Softwarearchitktur (Module, Beziehungen)
- Abstraktionslevel (Uses, Is-Component Of...)
- Detailierte Modulschnittstellen
Codieren und Testen
- Programmierung der Module
- Module Testen und Debuggen
- System Tests nach Implementation
-
Alpha-Tests (reelle Umstände aber vorgegebene Benutzer)
-
Beta-Tests (reelle Umstände und ausgewählte Kunden als Nutzer)
Lieferung und Wartung
Wartung macht über 60% der Produktkosten aus:
- Korrigierende Wartung (errors)
- Perfektionierende Wartung (Performance)
- Adaptive Wartung (Erweiterungen oder Änderungen) -> Evolution
Vor- und Nachteile des Wasserfallmodels
- Kein Feedback zu Vorgängerphasen
- Starrheit der Phasen
- Frühe Fehler haben schwere Folgen
- Anforderungsspezifikation meistens unvollständig
- Nur limitierte Informationen verfügbar
- Kostenabschätzung und Planung kann nur nach einer gewissen Analysestattfinden
- Benutzer wissen oft nicht die genauen Anforderungen einer Applikation
- Wasserfallmodell bezieht nicht Anticipation Of Changes ein
- Dokumentbehafteter Prozess, da jede Phase tipparbeit voraussetzt
Evolutionäres Modell
- "Machs doppelt" Prinzip
- Erstversion eines Produktes ist ein Wegwerfprototyp
- Wird als Versuch betrachtet, um Machbarkeit und Anforderungen zu analysieren
und zu verifizieren
- Problem ist das Zeitloch zwischen Anforderungsdefintion und finaler Delivery
des Produktes bleibt
- Lösung des Problems: Inkrementelles Vorgehen
Inkrementelles Modell für die Implementierung
- Wasserfallmodell wird bis zum Entwurf angewendet
- Dann wird schrittweise vorgangen
- Schnittstellen, welche späteres Hinzufügen von Subsystemen erlauben
- Code-And-Tests + Integrate+Tests
- Jeder inkrementelle Schritt wird separat entworfen, codiert, getestet und
integriert
- Die Schritte werden einer nach dem anderen entworfen
- Erst nach Feedback mit Kunden implementiert
Prototyping
- Evolutionäres Prinzip um den Lebenszyklus zu strukturieren
- Display bzw. GUI enthalten
- Dummy Funktionen
- Gutes Werkzeug, um Anforderungen des Kunden zu verfeinern
Transformationsmodell
Softwareentwicklung hier eine Folge von Schritten, welche Spezfifikation in
Implementation überführt. Die Transformationenen erfolgen Manuell oder
Semi-automatisch.
Zwei Hauptschritte:
- Anforderungsanalyse (und Verifikation dieser)
- Optimierung (und Tuning an dieser)
Spiralmodell
-
Ist ein Metamodell welches auf alle Modelle angewandt werden
kann
- Identifizieren und Entfernen von Risiken schon beim Entwurf
- Es ist zyklisch und nicht linear wie das Wasserfallmodell
- Es findet also in jedem Druchlauf erneut eine Risikoanalyse statt
- Bei jedem Durchlauf entsteht neuer Prototyp
- Stage 1: Ziele, Anforderungen und Alternativen identifizieren
- Stage 2: Alterativen untersuchen, Prototyping und Simulationen
- Stage 3: Entwicklung und Verifikation
- Stage 4: Ergebnisse untersuchen und nächste Iteration planen
Bewertung von Prozessmodellen
- Wasserfallmodell: Dokumentationsbasiert
- Evolutionäres Modell: Inkrementell
- Transformationsmodell: Spezifikationsbasierend
- Spiralmodell: Risikobasierend
- Prototyping: Endnutzerbezogen
Prototyping:
- Unterstützt GUI Design
- Vermindert Risiken wie Aufhalt an unnötigen Aspekten
- Hift sich auf relevanten Probleme zu konzentrieren
- 40 % weniger Entwicklungszeit und Quellinstruktionen
Softwaremethodologien - Vorteile, Nachteile
- Methode = ein Weg etwas zu tun
- Methologie = ein System von Methoden, unterstützt von einem Werkzeug
- Standarts: Methologien werden zu firmenweiten wiederverwendbaren Packeten
zusammengefaßt
Vorteile:
- Führt den Programmierer durch alle Phasen
- Lernt Unerfahrene an (Wie Problem systematisch Lösen?)
- Standartisierte Problemlösungsstrategien
Nachteile:
- Fehlende formelle Untersuchungen
- Verbrauchen viel Personal - aufwendig
- Es braucht manchmal mehr zeit die Methologie zu verstehen, als das Problem
Comparison of Life Cycle Models
Comparison of Life Cycle Models
|
Build-and-Fix
|
Fine for small programs that do not require much maintenance
|
Totally unsatisfactorily for nontrivial programs
|
Waterfall
|
Disciplined approach
Document driven
|
Delivered product may not meet client's needs
|
Rapid Prototyping
|
Ensures that delivered product meets client's needs
|
A need to build twice. Cannot always be used
|
Incremental
|
Maximizes early return on investment.
Promotes maintainability
|
Requires open architecture.
May degenerate into buildand-fix.
|
Synchronize and stabilize
|
Future user's needs are met.
Ensures components can be successfully integrated
|
Has not been widely used other than in Microsoft.
|
Spiral
|
Incorporates features of all the above models
|
Can be used only for largescale products.
Developers have to be competent at riskanalysis
|
Quelle: University Of California
|
Strukturierte Analyse und Entwurf
-
Funktionsmodellierung: Datenflussdiagramme, Data
Dictionary,Prozessspezifikationen
-
Datenmodellierung: ER-Modell
-
Ereignismodellierung: Endliche Automaten, Petri-Netze
Qualitätskriterien für Entwicklung
Integration, Einsetzbarkeit, Adäquatheit, Erlernbarkeit Wiederverwendbarkeit ,
Werkzeugunterstützung und Wirtschaftlichkeit
Jacksons strukturierte Programmierung
- Jackson Program Design Methodology oder Jackson Structured Programming (JSP)
- Methode für Entwurf und Modellierung "im Kleinen"
- Entwurf beginnt mit Untersuchung von dem was bekannt ist
- In mehreren Iterationen wird ein Modell basierend auf Data-Structured
Methoden erstellt
- aus der Beschreibung der Ein-/Ausgabe-Datenstrukturen und ihren Beziehungen
zueinander wird direkt die Feinstruktur des Kontrollflusses abgeleitet
Kapitel 7 - Configuration Management und CASE
Konfigurationsmanagement
- Meiste viele Ausführungen eines Produktes erstellt
- Produkte unterliegen vielen Änderungen bei Wartung
- Softwarehaus muss jede Änderung nachvollziehen können
- Nur so Gewissheit, wie Fehler zu korrigieren sind und Entscheidungen zu
treffen sind
- Release = Gruppe von Komponenten die zusammen erstellt werden
- Wie soll dies kontrolliert werden? -> Configurationmanagement
Configurationmanagement
- Version = Instanz eines Objektes
- Configuration item = spezielle version einer Komponentengruppe
- Baseline = eingefrorene Release, welche spezifischen Status repräsentiert
- Variante = configuration item, was sich leicht unterscheidet
- Change request = online Form, welche alle Änderungsnotizen festhält
- CM kontrolliert Änderungen und die Evulotion eines Produktes
- Probleme sind das Teilen von Komponenten und das Handhaben von
Produktfamilien
Teilung von Komponenten
Problem des Mehrfachzugriffes auf ein gemeinsamen Pool von Komponenten
- Mehrfachzugriffe müssen abgeglichen und synchronisiert werden
- Andere müssen über Änderungen informiert werden
- Es darf nicht zu Datenverlusten oder Inkonsistenten im Code kommen
Verwaltung von Produktfamilien
- CM verwaltet nicht nur Source Codes, sondern auch Doks, Testdaten und Manuals
- Problem ist, daß eine Komponente in mehreren Versionen exisitieren kann
Lösungsmöglichkeiten
- Jedes Familienmitglied besteht aus verschiedenen Versionen der Komponenten
- Jede Familienmitglied beinhaltet eine eigene Kopie aller notwendigen
Komponenten
Versionierung
- Zentrale shared database welche mit Projekt assoziiert wird
- Jeder Programmierer hat seinen privaten Entwicklerplatz, wo seine
Zwischenversionen abgelegt werden, an denen er gerade arbeitet
- Das Ausgeben von Modulen nur über CheckIn / CheckOut Funktionalität
CASE-Werkzeuge - Vorteile, Nachteile
- Computer Aided Software Engineering
- Unabhängig von Hardware, OS und Sprache
- Unterstützt Analyse und das Definieren von Datenflüssen
- Hift beim Entwurf bei Erstellung detaillierter Spezifikationen
- Hilft beim Programmieren und vereinfacht und unterstützt die Dokumentation in
jeder Phase
- Hilft beim Projektmanagement und kontrolliert das Projekt
- Datenanalyse ist in CASE Tools integriert
CASE Tools garantieren, daß nichts vergessen wird:
- Jedes Datum mit Attributen
- Jeder Prozess
- Jede Beziehung zwischen Daten
Nachteile:
- CASE Tools sidn Komplex - viel Einarbeitungszeit notwendig
- CASE Tools sind Hilfsmittel, keine Lösungsgeneratoren
Reverse-Engineering
- Einige CASE-Tools unterstützen dies
- Es wird versucht, von Umsetzung zurück zu Spezifikation zu kommen
- Alles genau umgekehrt...
Auswahl eines CASE-Werkzeugs
- Komplette Integration von Analyse, Entwurf, Coding und Tests?
- Welche Standarts und Methologien werden unterstützt?
- Teamwork möglich?
- Client / Server Konzept?
- Wie benutzerfreundlich? (einfach zu nutzen mit GUI, Icons, Hilfesystem)
- Arbeit sollte mit CASE nicht länger dauern als ohne
Architektur eines CASE-Werkzeugs
- Für jede Phase gibt es andere Editoren, welche für jede Phase Dokumente
erzeugen
- Datenbank als DS sinnvoll da gegen inkonsistenten und Mehrbenutzerbetrieb
unterstützt
- Relationales DBMS nicht effizient, da zu viele relationen zwischen Objekten
und Objekte zu komplex (zu viele Joins notwendig, wenn ein Objekt geholt werden
soll)
- Zentrales Data Dictonary welches Definitonen aller Daten und Attribute
enthält
- OODB hat viele Vorteile (hebt Nachteile von relationalen DBMS
auf)(Gespeicherte Objekte werden nicht durch Normalisierung gesplittet)
Technisches Management:
Projektabschätzung, Projektplanung, Planung des Personalbedarfs, Aufteilung
und Zuweisung von Aufgaben, Projektsteuerung und -überwachung
Personalmanagement:
Personal einstellen, Mitarbeiter motivieren, die richtigen Leute den
richtigen Aufgaben zuweisen
Projektmanagement - Ziele und Probleme
- Planen, Abschätzen, Einteilen, Überwachen, Berichten -> Kontrolle
- Nutzen ovn PM Software
- Prozess des Koordinierens aller Schritte während des gesamten Software
Lebenszyklus
Projektmanager können sein
- Senior Systemanalyst
- Large IS => einzelner Manager
- Small IS => Programmierer selbst
Allgemeine Aufgaben des Managements
- Planen aller Aktivitäten (Aufgaben identifizieren und Zeit/Kostenabschätzung)
- Aufgaben verteilen (Team zusammenstellen)
- Organisatorisches (Projektarbeit strukturieren und einteilen)
- Überwachen der Prozesse (Führen, Beraten, Koordinieren)
- Kontrollieren der Arbeiten (Ergebnisse überprüfen ...)
Planung eines Projekts
- Planung am Anfang einer jeden Phase
- Eine Aktivität benötigt verschiedene Ressourcen (Personal, Zeit, Geld)
- Ereignisse festlegen (milestones etc.)
- Planung am Ende einer Phase, um Kosteneinschätzung zu verifizieren
Methoden der Projektabschätzung
- Schwierigste überhaupt am Projektmanagement
- Projektgröße und benötigte Ressourcen verlaufen nocht propoprtional!
- Kommunikation, Änderungen, Schnittstellen etc...
- Graph mit (1/2) n (n - 1) Kanten (also quadratischer Aufwand)
3 Methoden
- Quantitative unterstützt
- Erfahrungsbasierte Methode
- Constraintmethode
Methode der quantitativen Abschätzung
- Tabellen und Formeln zur Abschätzung benutzt
- Tabellen: Nummern und Typen der Dateien, Funktionen etc. als Anhaltspunkt
welcher mit Produktivität dividiert wird
- D.h. es werden Zahlengewichte für einzelne Probleme gegeben
- Work * Experience / Productity = person/days
Methode der Abschätzung auf Basis der Erfahrung
- Basiert auf Erfahrung vorangehender Projekte
- Funktioniert nicht bei Großprojekten da zu komplex
Methode der Beschränkungen
- Projekt Anforderungen dienen als Basis
Zeitplan eines Projekts (Scheduling)
- Reihenfolge der Aufgaben festlegen
- Welche Aufgaben hängen von welchen Ergebnissen ab?
- Abhängigkeiten werden festgestellt, indem Aktivitäten in logische Sequenz
gelegt werden
- Grantt Diagramme und PERT/CPM
Gantt-Diagramme
- Können schnell zu groß werden
- Dekomposition: pro Team ein Plan, Pro Aufgabe ein Plan
Nachteile:
- Keine Abhängigkeiten dargestellt
- Keine Personalhinweise oder Personentage angegeben
PERT/CPM-Diagramme
Die "Kritischer Weg" - Methode mit einem gerichtetenr Graph mit:
- Aktivitäten / Aufgaben als Kanten
- Ereignissen als Knoten und für Synchronistation (z.B. Abhängigkeiten)
Dummy-Knoten
- Im Knoten wird Earliest Completion Time und Latest Completion Time
eingetragen
- So entstehen Buffer, welche zur Reallokation bei Verschiebungen benutzt
werden
Nachteile:
- Wird schon für kleine Projekte sehr kompliziert
- Kein Personenscheduling
Kritischer Weg
Kritischer Pfad ist ein Weg welcher aus Knoten besteht bei denen kein Buffer
vorhanden (ECT == LCT)
Kosten-Nutzen-Analyse
- Es werden die Kosten mit dem Nutzen verglichen
- Ökonomischen Nutzen ermitteln und mit alternativen Lösungen vergleichen
Stragtegien:
- Payback Analyse
- Return and Investment Analyse
- Present Value Analyse
Pay-back-Analyse
- Wieviel Zeit ist notwendig, das investierte Geld wieder reinzuholen?
- Nachteil: Lässt kosten nach Payback Periode außer acht
Return-and-Investment-Analyse
- ROI = ( Totaler Nutzen - Totale Kosten) / Totale Kosten
- Prozentuale Angabe welche angibt, wie Profitabel das Geschäft wäre
- Projekte müssen ein Minimum unterschreiten
- Nachteile: Durchschnittswerte als Grundlage
Present-value-Analyse
- Money today = money yesterday + Interest
- PV (present value)
Kapitel 8 - Software-Metriken
Software-Metriken
- Messen von verschiedenen Aspekten, um diese verständlicher darzustellen
- Metriken für Produktivität
- Versucht Voraussagen zu erleichten
- Wie war die Produktivität bei vorangegangenen Projekten?
- Wie kann vergangene Produktivität auf aktuelle Projekte extrapoliert werden?
- Helfen den technischen Prozess der für Produktion verwendetet wird und das
Produkt selbst, zu verstehen
- Messungen finden statt um das Produkt zu verbessern
- Notwendig für Planung, Kosten -> Abschätzungen möglich
Gründe fürs Messen
- Qualität eines Produktes bestimmen
- Produktivität der Angestellten überprüfen
- Den Nutzen neuer SE-Tools und Vorgehensweisen untersuchen
- Baseline für Abschätzungen schaffen
Direktes und indirektes Messen
Direktes Messen
- Lines Of Code (LOC or KLOC)
- Ausführungsgeschwindigkeit
- Speicherverbrauch
- Gemeldete Defekte / Zeitperiode
Indirektes Messen
- Funktionalität
- Qualität
- Komplexität
- Wartung
Kategorien von Software-Metriken
- Produktivitäts-Metriken (Fokus auf SE Prozess)
- Qualitäts-Metriken (Wie nah ist Produkt an Kundenanforderungen)
- Technische Metriken (Fokus auf Produkt selbst, z.B. Modularität)
- Größen-Orientierte Metriken( Direkte Messwerte)
- Funktionsorientierte Metriken (Indirektes Metriken)
- Meschenorientierte Metriken (Informationen über die Arbeitnehmer die es
produzieren)
Größe-orientierte Metriken
- Direkte Messungen welche mit Entwicklung korrespondieren
- Produktivität = KLOC / person-month
- Qualität = Fehler / KLOC
- Kosten = $ / KLOCK
- Dokumentation = Seitenanzahl / KCLOC
- Vorteil: einfach zu messen
Probleme:
- Nicht als bester Weg zum Messen aktzeptiert
- Sprachabhängig
- Planer muss LOC abschätzen, lange vor Analyse abgeschlossen ist
Funktionsorientierte Metriken
- Indirekte Messungen der Software und des Prozesses mit Fokus auf
Programmfunktionalität
- Empirische Beziehungen basieren auf zählbaren Messungen
Beispiel: (pro Messung ein Count und 3 Wichtungen, wie
simple, average und complex)
- Number Of Inputs
- Number Of Outputs
- Number Of Files
- Number Of External Interfaces
- Ergebnis: Total Count
Function-Points-Methode
- FP = Gesamtanzahl * [ 0.65 + 0.01 Sum(1..14)(Fi)]
- Fi sind Faktoren zwischen 0 und 5, welche die Semantik und Komplexität des
Problems beschreiben
- 0.65 und 0.01 sind empirische Konstanten
- 1 bis 14 sind 14 verschiedene Aspekte wie z.B
- F1 : Benötigt das System Backup und Revovery
- F2 : Ist die Performance kritisch?
- F3 : Soll der Code wiederverwendbar sein?
- Produktivität = FP / Person-Month (Analog zu Size-Orienten direktem Messen)
Feature-Points-Methode
- Erweiterung der Function-Point-Methode in zusätzlicher algorithmischer
Betrachtung
- Count-Total beinhaltet außerdem eine Abschätzung der Algorithmenkomplexität
- Sprachunabhängig und basiert auf Daten früh aus der Evolution
Nachteil:
- Subjektive Abschätzungen
- keine dirkte physikalische Bedeutung
- Daten schwer sammelbar sind
Metriken und Sprachen
Abschätzungen wieviel LOF für einen Funktionspunkt durchschnittlich benötigt
werden
BSP:
- Assembler (300)
- FORTRAN (100)
- Pascal (90)
- Code Generatoren (15)
Argumente für Software-Metriken
Ohne würde es keinen Anhaltspunkt geben, auf denen Verbesserungen entstehen
können. Es sind Antworten auf folgende Fragen möglich:
- Welche Nutzeranforderungen ändern sich am häufigsten?
- Welche Module im System sind am Fehleranfälligsten?
- Wieviel Testzeit muss für jedes Modul eingeplant werden?
- Wieviele Fehler kann ich beim Testen durchschnittlich erwarten?
- Schwierigste Part ist das Datensammeln
Wie kann die Qualität von Software definiert werden?
- Konformität zu vorher spezifizierter Funktionalität und
Performanceanforderungen
- Qualität wird also über die Anforderungen gemessen
- Standards geben heute vor, welche Aspekte immer erfüllt sein müssen
- Implizite Qualitätsanforderungen auch wichtig (wie z.B. gute Wartbarkeit)
Faktoren der Software-Qualität
- KLOC (direktes Messen)
- Nutzbarkeit, Wartbarkeit... (Indirekte Messwerte)
Messen der Qualität
- Jede Softwarequalitätsmessung kann nur unvollständig sein
- Die Wortanzahl einer verbalen Beschreibung der Funktionaliät kann als
Indikator für Komplexität benutzt werden(Umso mehr Wörter, desto schwerer zu
Komplexer)
- Wie viele Sprünge im Code? -> Wie ist der Testaufwand?
- Modulaufrufe anderer Module -> Wartbarkeit
- Zugriff auf globale Daten oder lokale Variablen geben Auskunft über
Verständlichkeit des Codes
- Anzahl an nicht standartisierten Features -> Portabilität
Testplan
- Für Qualitätskontrolle wird Testplan benötigt
- Kontrakt zwischen Kunden und Entwickler und Entwickler und
Qualitätssicherungsteam
Audit
Das Qualitätssicherspersonal prüft ob die Tests sinnvoll durchgeführt wurden.
Systematische, unabhängige Untersuchung, um festzustellen, ob die
qualtitätsbezogenen Tätigkeiten und die damit zusammenhängenden Ergebnisse den
geplanten Anordnungen entsprechen und ob diese Anordnungen wirkungsvoll
verwirklicht und geeignet sind, die Ziele zu erreichen. [ISO 8402]
Software-Reviews
- Reviews werden an verschiedenen Punkten in Entwicklungsprozess gemacht
- Sollen Fehler aufdecken, um diese so früh wie möglich eliminieren zu können
- 50-60 % aller fehler entstehen schon im Entwurf (Reviews reparieren bis zu 75
% dieser Fehler)
Kosten von Fehlern in der Software
- Steigen exponentiell mit Fortschreiten der Entwicklung
- Kosten während Entwuf = 1, während Tests 15 und nach Release 60-100
Fehlervermehrung im Lauf der Softwareentwicklung
- Fehler aus jeder Phase werden an die nächste weitergegeben
- In dieser entstehen nun wieder neue Fehler
- Ohne Reviews kaum Fehler in Spezifikation und Entwurf entdeckt
- Mit Reviews werden ¾ der Fehler erkannt und behoben, da schon im Entwurf
"getestet" wird
Qualitätszertifikat
- ISO 9001 ist nicht industriebezogen
- ISO 9003 von 9001 für Software abgeleitet
- 20 Hauptmerkmale werden behandelt, wie Document control, Design control,
Process control, Training, Contract review, Quality system
- Zertifikat welches Kunden versichert, daß Firma nach Standarts arbeitet
Software-Metriken und Software-Qualität
- Immer unvollständig
- Teilweise individuelle Einschätzung
- Zum Teil nur indizierte, abgeleitete Angaben über Qualität
BSP:
- Anzahl von Branches -> Testbarkeit
- Zugriff auf globale Variablen -> geringe Wartbarkeit des Systems
- Anzalh lokaler Variablen -> aufwendiges Debuggen
- Nicht-standart-Features -> Portabilität
McCabe's zyklomatische Komplexität
- Hypothese: Komplexität hängt von Komplexität des Kontrollflußgraphen ab
(Program Graph)
- Experimente zeigen Beziehungen zwischen McCabe's Metrik und Anzahl an Fehlern
im Source Code (und der Zeit diese zu korrigieren)
- V(G) ist Indikator für maximale Modulgröße und sollte bestimmten Wert nicht
überschreiten, sonst schwer zu testen
- Problem: Metrik sehr spät im Software Projekt gemessen
- Deshalb müssen Metriken gefunden werden, die schon im Entwurf messen können
Metriken für den Entwurf
- Grundidee ist, daß externe Komplexität eines Moduls in Verbindung mit Anzahl
an Flüssen (in/export) zwischen Modul und Umwelt steht
- Interne Kompexität = LOC
Lokale Flüsse
- Direkt => Modul A gibt parameter zu B
- Indirekt => Modul A gibt Wert zu B zurück
Globale Flüsse
- Modul A schreibt DS und Modul B liest vom DS
- Fan-In / Fan-Out (alles was reingeht und rauskommt egal ob lokal oder global)
- Complexity = length * (fi * fo)2
Anwendung von Metriken
- Filter, welcher die komplexesten Module identifiziert
- Zum Untersuchen von Entwicklermethoden
- Untersuchen der steigenden Komplexität während der Wartung
- Die Teile / Module finden die die meisten Fehler / Arbeit machen ->
Redesign + Reimplementation
Kapitel 9 - Reengineering und Programmierungskonzepte
Legacy-Systeme - Charakteristik und Probleme
- Wurden mit Anahme einer kurzen Lebenszeit entwickelt, sind aber immernoch im
Einsatz
- Altsysteme sind Komplex und Austausch wäre sehr teuer
- Altsysteme verursachen hohe Wartungskosten
- Komplexe software, viel Support, wenig Dokumentation
- Bei Austausch gefahr, daß Geschäftswissen verloren geht
- Falsche Entscheidungen können schwere Folgen haben
Probleme mit der veralteten Softwarearchitektur
- Systeme bestehen aus vielen verschiedenen Einzelsystemem, welche Daten
gemeinsam nutzen
- Systeme benutzen Teilweise Files und keine DBMS
- Daten sind of Redundant
Reengineering - wann und warum?
- Software Evolution zwischen zwei Extremfällen der Systemersetzung und
weiterlaufender Wartung
- Reengineering meist billiger als Neuentwicklung eines Systems
- Ausgangspunkt für RE ist exisitierenedes System
- Geringeres Risiko (inkrementell) und Kosten
Methoden des Reengineerings
Source Code Translation
- Programmübersetzung in andere Programmiersprache
- Zielsprache in neue Version updaten (z.B. wenn alte Compiler nicht mehr
kompatibel)
Programm Neustrukturierung
- Programme mit "Spagetti"-Struktur schwer zu untersuchen
- Viele Automatische Neustrukturierungstools vorhanden
System Neustrukturierung
- Programm Neustrukturierung verbessert nicht die Systemarchitektur, da nur
isolierte Betrachtung
- System muss selbst Restrukturiert werden
Inkremental Evolution bei Systemersetzung weniger Riskobehaftet als Bing Bang
Wartung von Software - Ursachen, Methoden
- Um Guten Zustand eines Systemes aufrechterhalten
- Einbringen von Änderungen nachdem das System verkauft wurde
Die Drei Arten der Wartung
- Korrigierende (Fehler beheben)
- Adaptive (neues Umfeld in HW/SW)
- Perfektive (neue Anforderungen)
- Vorausschauende Wartung (vorher einfach und gut strukturieren, dass Wartung
billig wird)
- Kosten für Änderungen wärend Wartung extrem hoch
- Data Reengineering (Datenübernahme, Datenabgleich, Datenredefinition)
- Datenzentralisierung (RDBMS...)
Programmierungskonzepte
Generische Progammierung, Templates, Patterns und Frameworks...
Generische Progammierung und Templates
- Generische Units sind parametrisierte Templates
- Sie müssen initialisiert werden, um dem Compiler den verwendeten Datentypen
mitzuteilen
- DT kann auch abstrakt sein
- BSP: Sortierungsalgorithmus, Datentyp ist formeller Parameter
STL Library - die Idee
- Gemeinsame Komponenten zusammenfassen in Bibliothek
- STL mehrdimensionaler Raum (Alg, Containers / DS , DT) aus dem benötigte
Prozedure mit benötigtem Datentyp und Datenstrukturen (Array, Listen...) gewählt
werden kann
- STL verringert notwendige LOC, da ohne Templates i * j * k verschiedene
Codeversionen
- Mit Template-Funktionen nur noch j * k zu programmierende Codesstücke
- Mit Template-Klassen für Container sogar nur j + k
Patterns
- Viel Allgemeiner als Template
- Kein Softwarestück, sindern ein Konzept von bewährten Lösungen
Jedes Pattern besteht aus
Arten von Patterns
- Konzeptuelle
- Architektonische
- Entwurfsmuster
- Programmierungsmuster
- Dokumentationsmuster
Frameworks
- Idee ist Erweiterung der virtuellen Maschine
- Framework ist wiederverwendbare mini-Architektur welche generische Struktur
und Verhalten von Softwarefamilien abstrahiert
- Kontext spezifiziert Struktur
- In Klassen geteilt
- Wie Klassen und Objekte zusammenarbeiten
- Framework (Executable) ist eine Implementation von Design-Pattern
- Framework und Wiederverwendbarkeit
- Dynamisches Binden, z.B. dynamische Konfiguration von Features während
Laufzeit
Wiederverwendbar steigt, aber auch Nachteile:
- Schwer zu durchschauen und zu verstehen
- Erhöhte Komplexität
- Alle Features von Vater-Klassen werden geerbt, auch wenn nicht benötigt ->
somit steigende Größe
- Performancenachlass durch dynamisches Binden
Metaprogrammierung (generative Programmierung)
- Applikationen bei denen Kontext zur Kompilierungszeit bekannt, somit
statisches Binden anstatt von dynamischen möglich
- Meta-Programming benutzt Templatespezialisierungen (if-tool) und
Templaterekursion (loop-tool) zum schreiben von C++ programmen, welche zur
Komilierungszeit vom C++ Compiler interpretiert werden
- Compile Time Computation und Code Generation
Adaptive Programmierung
- OO Technologie kapselt Daten und Funktionen in Klassen
- Implementation ist geschützt gegen Änderungen an DS, da nur über
Schnittstellen Zugriff
- Mancha Applikationen leiden unter periodischen Änderungen in
Klassenstrukturen und Klassenhierachien
- Apdaptive Programmierung ermöglicht den Applikationen eine Schnittstelle zur
Klassenhierarchie
Aspektorientierte Programmierung
Funktionalität ist bei OO in Klassen gekapselt
Problem:
- Es gibt Dienste die nicht nur in einer Klasse gekapselt werden können (z.B.
Tracing)
- So ein Service ist auf viele Objekte verteilt
- Wie kann man einen solchen Dienst trotzdem zentralisiert Implementieren?
- Aspekte sind Funktionalitäten, Modelle solcher Dienste
- Asprekte werden in eigenen separaten Units gekapselt
- Während des Preprocessings werden die Aspekte durch einen WEAVER im Programm
verteilt
Quellen
Petr Kroha
Softwaretechnologie
Prof. Kroha
Vorlesungsskript
L. Rosenhainer
Vorlesungsskript