Kapitel 2 - Eigenschaften und Prinzipien
- Eigenschaften von Software und Entwurfsprinzipien
- Korrektheit, Zuverlässigkeit, Wiederverwendbarkeit...
|
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 1
|
Einleitung
|
|
Einführung, Geschichte...
|
|
Kapitel 2
|
Eigenschaften
|
|
Filtern und Trennen, Modularisierung...
|
|
Kapitel 3
|
Strukturierte Analyse
|
|
Strukturierte und OO-Analyse, Petri-Netze
|
|
Kapitel 4
|
Spezifikation
|
|
Risikoanalyse, Modellierungshilfen, Spezifikationen
|
|
Kapitel 5
|
Entwurfsprozess
|
|
Entwurf, DFD, Tests, UI...
|
|
Kapitel 6
|
Prozessmodelle
|
|
Softwarekrise, Lebenszyklusmodelle...
|
|
Kapitel 7
|
CASE und PM
|
|
CASE, Projektmanagement...
|
|
Kapitel 8
|
Software-Metriken
|
|
Softwarequalität, Entwurfsmetriken...
|
|
Kapitel 9
|
Programmierungskonzepte
|
|
Legacy Systeme, Reengineering...
|
|
|
|
|
|
|
Quellen:
|
Petr Kroha
Softwaretechnologie
|
Prof. Kroha
Vorlesungsskript
|
L. Rosenhainer
Vorlesungsskript
|
Word Wide Web
Verschiedenste Seiten
|
|
|
|
|