MS SQL SERVER

Werbung
Softwareerstellung
Softwareerstellung
F. Steyer
1 Architektur
1.1 Architektur eines Anwendungssystems
1.2 Erweiterungen der Architektur
2 Vorgehensweise
2.1 Wasserfallmodell
2.2 V-Modell
2.3 Spiralmodell
2.4 Sägezahnmodell
2.5 Anwendungen mit Access
3 Pflichtenheft
3.1 Allgemeines
3.2 Fachliches Feinkonzept
3.3 DV-Grobkonzept
3.4 Beispielhafter Aufbau
4 Phasen
4.1 Phasenmodell
4.2 Vorschlag
4.3 Definition/Grobplanung
4.4 Entwurf/Feinplanung
4.5 Implementierung
4.6 Test/Abnahme
4.7 Einführung
4.8 Wartung/Pflege
5 Testen
5.1 Definitionen
5.2 Testspektrum
5.3 Teststrategien
5.4 Testaxiome
5.5 Drei Schritte bei der Implementierung
5.6 Versionskontrolle
5.7 Systemtestfälle
5.8 Prüfliste
5.9 Werkzeuge
6 Beurteilung
6.1 Prinzipien der Software-Entwicklung
6.2 Qualitätsmerkmale von Software
TFH Berlin/Steyer
Softwareerstellung
1 Architektur
1.1 Architektur eines Anwendungssystems
Benutzeroberfläche
Menüsystem
Anwenderlogik
Datenverwaltung
TFH Berlin/Steyer
1-1
Softwareerstellung
1.2 Erweiterungen der Architektur
Benutzeroberfläche
Menüsystem
Technik/
Aussenwelt
Weiterverarbeitung/
Unternehmensmodell
Anwenderlogik
Datenverwaltung
Es gibt vier Schnittstellen, die als Bibliotheken realisierbar sind:
- message lib (Funktionen zum Lesen von der A/D-Karte)
- database lib (Zugriffsfunktionen zur Datenbank)
- screen_and_key lib (Darstellungs- und Eingabefunktionen)
- export-/import lib (Übergabefunktionen vom/zum Unternehmensmodell)
Im prozeduralen Steuerteil befindet sich eine Ereignisschleife.
Im System selbst können mehrere Prozesse mit Prozesskommunikation laufen.
TFH Berlin/Steyer
1-2
Softwareerstellung
2 Vorgehensweise
2.1 Wasserfallmodell
Vorschlag
Definition
Entwurf
Implementierung
Test+Abnahme
Einführung
Wartung+Pflege
Stichwort:
Sequentielle Ausführung
Ausgabe des Vorgängers = Eingabe des Nachfolgers
2.2 V-Modell
Vorschlag
Akzeptanz
Definition
Abnahmetest
Entwurf
Systemtest
Implementierung
Einzeltest
Stichwort: Wichtigkeit des Testens
TFH Berlin/Steyer
2-1
Softwareerstellung
2.2 Spiralmodell
Test/Abnahme/Doku
Vorschlag/Plan
Implementierung
Definition/Entwurf
Stichwort: Stufenweise Erstellung
2.4 Sägezahnmodell
Ergebnis
Tätigkeit
Prototyp
Definition
Einführung
Prototyp
Prototyp
Prototyp
Entwurf
Implementierung
Test+Abnahme
Produkt
Stichwort: Kundenfeedback
TFH Berlin/Steyer
2-2
Softwareerstellung
2.3 Spiralmodell
Vorschlag/Plan
Test+Abnahme
Definition
Implementierung
Entwurf
Stichwort: Stufenweise Erstellung
2.4 Sägezahnmodell
Ergebnis
Tätigkeit
Prototyp
Definition
Einführung
Prototyp
Prototyp
Prototyp
Entwurf
Implementierung
Test+Abnahme
Produkt
Stichwort: Kundenfeedback
TFH Berlin/Steyer
2-2
Softwareerstellung
2.5 Anwendungen mit Access
Was ist eine Microsoft ACCESS Anwendung ?
- Eine Anwendung besteht aus Objekten (Tabellen, Abfragen,
Formularen, Berichten, Makros und Modulen).
- Objekte haben Eigenschaften, die man aufeinander einstellen
kann.
- Die Objekte einer Anwendung hängen zusammen.
- Der Anschluss externer Bibliotheken ist möglich.
Erstellen der Datenbasis:
- Erstellen Sie die Tabellen und fügen Sie einige
Beispieldatensätze zu jeder Tabelle hinzu.
- Erstellen Sie eine Auswahlabfrage für Ihre Anwendung.
Erstellen der informationellen Oberfläche:
- Erstellen Sie Formulare auf der Basis der Auswahlabfragen.
- Verbinden Sie die Elemente.
Erstellen von Operationen (angebunden an der Oberfläche):
- Fügen Sie alles hinzu, um die Formulare funktionsfähig zu
machen.
- Erstellen Sie ein zentrales Formular für jeden
Funktionsbereich um hier die Hauptaufgaben durchführen.
Unteraufgaben werden vom zentralen Formular aus durchgeführt.
- Verbinden Sie alle Elemente.
- Testen Sie die Formulare.
Weitere Möglichkeiten:
- Makro "Autoexec" zum Festlegen, wie die Anwendung gestartet wird
- Makro "Tastenbelegung" zum Zuweisen von Befehlen zu Tastaturfolgen
- Menü-Editor zum Erstellen benutzerdefinierter Menüleisten für Formulare
- Trennen Sie evtl. die Tabellen der Anwendung von den anderen Anwendungsobjekten
und plazieren Sie sie in eine eigene Datenbank, wenn z.B. die Anwendung an anderer
Stelle auch installiert werden soll, wenn mehrere Benutzer parallel an denselben Daten
arbeiten sollen, wenn die Daten auf einen Server plaziert werden sollen, wenn neue
Anwendungsreleases installiert werden oder einfach, wenn das gesamte
Anwendungssystem zu gross für eine Diskette wird.
- Richten Sie Zugriffsrechte ein.
TFH Berlin/Steyer
2-3
Softwareerstellung
3 Pflichtenheft
3.1 Allgemeines
Zweck: - Klare Aufgabenvorgabe, schriftlich
- Einwandfreie Dokumentation, als Unterlage
Aufbau: - Keine langatmigen Beschreibungen
- Klare Gliederung
- Bedingungen und Anforderungen, Abnahmetestfälle
- Einfacher Übergang von den Aufgaben zu den Verfahren und zu den Programmen
- Austauschbare Blätter
Eine Aufteilung in einen betriebswirtschaftlichen und einen DV-technischen Teil kann zweckmäsig sein,
wenn Planung und Programmierung getrennt vorgenommen werden.
Entstehung:
- Die Programmierung darf erst beginnen, wenn ein bestimmter Reifegrad der
Aufgabenstellung erreicht ist.
- Änderungen sind für eine gewisse Zeit zu stoppen.
- Änderungen müssen in Form von Austauschblättern des Pflichtenheftes kommen.
Wesentliche Angaben
(muss)
Ergänzungen
(soll)
Hinweise
(kann)
1. Zweck und Funktion
des neuen Verfahrens
2. Beschreibung der
Eingabedaten
Datenstrukturen
3. Forderungen an das
Verfahren/Programm
- Genauigkeit
- Wertebereiche
- Sicherheit
- Pflichtforderungen
- Sonderfälle
Lösungsweg
Einsatztermin
Einsatzumgebung
ähnliche Verfahren
Kompatibilität
Mengengerüst
Ausbaustufen
Datenflusspläne
4. Beschreibung der
Ausgabedaten
Datenstrukturen
TFH Berlin/Steyer
interne Datenstrukturen
3-1
Softwareerstellung
3.2 Fachliches Feinkonzept
1 Gesamtproblematik
2 Beschreibung der Prozesse, der Prozessabläufe, der Prozessstruktur
3 Beschreibung der Daten, fachliches Speicherkonzept
- Beschreibung der Datenströme (Name, Menge, Anfallzeit)
- Datenlexikon (Name, Bedeutung, Herkunft+Verbleib, Format,
Wertebereich, Risikoklasse für den Datenschutz)
- Kriterien zur Wahl der Speichermedien (Volumen, Häufigkeit
der Benutzung, Lebensdauer, Archivierung)
4 Schlüsselsysteme (Identifikations-, Informations-, Klassifikations-, Parallelschlüssel)
5 Anforderungen an die Belege (Erfassungsbelege)
6 Anforderungen an die Datenerfassung
7 Beschreibung der Auswertungen (Ausgaben)
- Inhalt
- Form (Listen-, Maskenlayout)
- Träger (Papier, Bildschirm, Mikrofilm)
- Häufigkeit
8 Organisatorische und technische Anforderungen
(Dialogverfahren, Wiederanlauf, Benutzerberechtigung etc.)
9 Datensicherheits- und Datenschutzanforderungen
- Kontrolle der Daten auf Plausibilität und Vollständigkeit
- Zugriffsberechtigungskontrolle
TFH Berlin/Steyer
3-2
Softwareerstellung
3.3 DV-Grobkonzept
1 Entwurf der DV-Lösung
- Betriebsart (lokal, DFÜ, Stapel, Dialog etc.)
- Betriebssystem (Responsezeit, Ein- oder Mehrplatzsystem etc.)
- Verfahrensstruktur (hierarchischer Aufbau bis auf Modulebene)
- Speicherkonzept (Speichermedien, Speicherform, Datenstrukturierung)
- Beschreibung der Komponenten (Module)
- Beschreibung der Funktionen
- Daten- und Ablaufsicherheit (Schutzmechanismus, Wiederanlauf)
- vorhandene Software (Schnittstellen, Anpassungsmodul)
- Hardwarekonfiguration (Anzahl Band-/Plattengeräte, Typ/Grösse der CPU)
2 Ausbaustufen
3 Anforderungen an das Realisierungspersonal
(Programmiererfahrung, BS-Kenntnisse, DB-Erfahrung)
4 Softwaretechnik
(Entscheidungstabellen, normierte Programmierung,
Generatortechnik, strukturierte Programmierung etc.)
5 Sonstige Anforderungen und Bedingungen
- Simulationsprogramme, z.B. Eingabedaten
- Restriktionen
TFH Berlin/Steyer
3-3
Softwareerstellung
3.4 Beispielhafter Aufbau
(1)
Zielbestimmung
(2)
Grenzkriterien (muss)
(3)
Wunschkriterien (soll)
(4)
Abgrenzungskriterien (soll nicht)
(5)
Produkteinsatz
(5.1) Anwendungsbereiche
(5.2) Zielgruppen
(6)
Produktkonfiguration
(6.1) Minimalkonfiguration
(6.2) Empfohlene Konfiguration
(7)
Produktumgebung
(7.1) Vorlagen
(7.2) EBNF-Darstellung der Syntax der Vorlagedatei
(7.3) Anschauliche Beschreibung des Aufbaus der Vorlage
(7.4) Beispiel für eine Vorlagedatei
(8)
Produktfunktionen
(8.1) Prüfungsvorlagen
(8.1.1) Prüfungsvorlage aus Textvorlage erzeugen
(8.1.2) Editor aufrufen
(8.1.3) Drucken
(8.1.4) Bearbeiten
(8.2) Prüfungen
(8.2.1) Prüfungen anlegen und bearbeiten
(8.2.2) Ergebnisse erfassen
(8.2.3) Ergebnisse bearbeiten
(8.2.4) Löschen
(8.3) Auswertung
(8.3.1) Eine Prüfung
(8.3.2) Alle Prüfungen
(8.3.3) Auswahl
(8.4) Personendaten
(8.4.1) Prüflinge
(8.4.2) Prüfer
(9)
Qualitätsanforderungen
(9.1) Benutzerführung
(9.2) Antwortzeitverhalten
(9.2.1) Interaktive Prozesse
(9.2.2) Statistische Auswertungen
(9.3) Robustheit
(9.4) Portabilität und Wartung
(10)
Benutzerschnittstelle
(10.1) Benutzermodell
(10.1.1) Prüfer
(10.1.2) Verwaltung
(10.1.3) Prüflinge
TFH Berlin/Steyer
3-4
Softwareerstellung
(11)
Kommunikationsaufbau
(11.1) Kommunikationsstrategie
(11.2) Kommunikationsbeispiele
(11.2.1) Programmaufruf
(11.2.2) Menüstruktur
(11.2.3) Dialoge des Systemmenüs
(11.2.3.1) Konfigurieren
(11.2.4) Dialoge des Menüs Vorlagen
(11.2.4.1) Vorlage erzeugen
(11.2.4.2) Vorlage bearbeiten
(11.2.4.3) Vorlage drucken
(11.2.5) Dialoge des Menüs Prüfungen
(11.2.5.1) Prüfungen anlegen
(11.2.5.2) Ergebnisse erfassen
(11.2.5.3) Ergebnisse bearbeiten
(11.2.5.4) Prüfungen löschen
(11.2.6) Dialoge des Menüs Auswertungen
(11.2.6.1) Einzelne Prüfung auswerten
(11.2.6.2) Alle Prüfungen bearbeiten
(11.2.6.3) Eine Auswahl von Prüfungen bearbeiten
(11.2.7) Dialoge des optionalen Menüs Personendaten
(11.2.7.1) Prüflinge bearbeiten
(11.2.7.2) Prüferdaten
(11.2.8) Reports
(11.2.8.1) Statistische Auswertung einer Einzelprüfung
(11.2.8.2) Statistische Auswertung mehrerer Prüfungen (ausgewählt und pauschal)
(11.2.8.3) Prüfungsbogen
(12)
Globale Testfälle
(12.1) Test-Vorlagedatei
(13)
Entwicklungskonfiguration
TFH Berlin/Steyer
3-5
Softwareerstellung
4 Phasen
4.1 Phasenmodell
Die Erstellung grosser Software bedarf eines planerischen und organisatorischen Rahmens. Diesen
Rahmen bildet, vergleichbar mit anderen Ingenieurgrossprojekten, das Phasenmodell.
Vorschlag
Definition
Entwurf
Implementierung
Test+Abnahme
Einführung
Wartung+Pflege
Die strenge squentielle Anordnung aller Phasen ist kaum zu erreichen. Typischerweise verlaufen Phasen
auch zeitlich überlappend oder zyklisch, wenn Fehler, Unstimmigkeiten oder neue Kundenwünsche
auftreten.
Vorschlag
Definition
ProjektLeitung/
Entwurf
Kontrolle
Implementierung
Test+Abnahme
Einführung
Wartubg+Pflege
TFH Berlin/Steyer
4-1
Softwareerstellung
4.2 Vorschlag
Es werden zunächst Aufgabenstellung und Ziele angegeben.
Dazu wird die prinzipielle Machbarkeit eines Produktes innerhalb eines vorgegebenen Zeit- und/oder
Kostenrahmens geprüft.
Neben der Prüfung der Machbarkeit wird das Produkt grob skizziert. Zum Abschluss der Vorschlagsphase
steht eine begründete Aufgabe des Projektes und eine grobe Termin- und Kostenplanung.
Das Ergebnis der Vorschlagsphase wird in einem Dokument (Projektvorschlag) schriftlich fixiert. Es wird
entschieden, ob das Projekt durchgeführt wird.
4.3 Definition/Grobplanung
In dieser Phase wird beschrieben, was das System aus Kundensicht idealerweise leisten soll. Die
Systemanforderungen/-eigenschaften/-bedingungen werden hier genau, in einer dem Kunden
verständlichen Form, präzisiert. Leistungsmerkmale des geplanten Systems, wie z.B. Kapazitäten, zeitliches
Verhalten oder aber die Art des Herstellungsprozesses (z.B. zu verwendende Methoden,
Programmiersprachen, Hardware) können hier in verifizierbarer Form festgelegt werden.
Es wird festgelegt, welche Eigenschaften das erstellte System zur Abnahme haben muss, um erfolgreich die
Systemabnahme passieren zu können.
Es werden eine Ist-Aufnahme und eine Ist-Analyse durchgeführt um Schwachstellen im derzeitigen Zustand
aufzudecken.
Unterstützende Methoden wie Structured Analysis (SA), Structured Analysis and Design Technique (SADT),
Petri-Netze, Objektorientierte Systementwicklung usw. werden hier eingesetzt und führen zu den
gewünschten Darstellungen und Ergebnissen.
Letztlich wird ein fachliches Grobkonzept erstellt. Es besteht aus einer Beschreibung des fachlichen
Problems und einer Beschreibung der fachlichen Lösung sowie einer Wirtschaftlichkeitsberechnung. Hierbei
soll auch der Einsatz evtl. schon vorhandener (Teil-)Lösungen berücksichtigt werden.
4.4 Entwurf/Feinplanung
In der Entwurfsphase entsteht die Spezifizierung des Systems aus Entwicklersicht. Auch hier steht die Frage
"Was leistet das System ?" im Vordergrund.
Das Ergebnis der Entwurfsphase ist ein Dokument, das den Systementwurf in folgenden Details beschreibt:
- Systemteile (Komponenten), in die das Gesamtsystem zerfällt (Modulstruktur, Modulhierarchie),
- Spezifikation aller Systemteilanforderungen (Schnittstellenspezifikationen),
- Nachweis, dass die in der Anforderungsdefinition formulierten Anforderungen im Entwurf berücksichtigt
sind.
Ergebnis der Planungsphasen ist das Pflichtenheft. Oft hat das Pflichtenheft Vertragscharakter und dient bei
Streitigkeiten zwischen Entwickler und Kunde als rechtliche Grundlage.
TFH Berlin/Steyer
4-2
Softwareerstellung
4.5 Implementierung
Die Implementierungsphase führt zur Codierung aller Systemteile in einer konkreten Programmiersprache.
Methoden und Werkzeuge der Strukturierten Programmierung im Grossen und Kleinen sind hier von
Bedeutung.
Wichtig ist die Zuordnung von Personen zu den Tätigkeiten der Systemerstellung, deren Schnittstellen und
Verantwortlichkeiten.
Ziel dieser Phase ist das programmierte und entsprechend dokumentierte System. Gefordert ist eine
systematische und nachvollziehbare Realisierung des spezifizierten Entwurfs, der frei von genialen Tricks
und persönlichem Stil (egoless) ist, schlichte und durchsichtige Lösungen bevorzugt und lediglich den
Standard des Projektteams erkennen lässt.
4.6 Test/Abnahme
In der Testphase soll bewiesen werden, dass die in der Definitionsphase definierten Anforderungen erfüllt
wurden. Getestet wird üblicherweise zuerst komponentenweise (in Modulen), danach integrierend im
Zusammenhang.
Abschluss der Testphase bildet der Abnahmetest, der aus Kundensicht konstruierte Testfälle unter
möglichst realen Bedingungen beim Kunden durchführt. Hier muss das Produkt den Nachweis erbringen,
dass es die geforderten Eigenschaften besitzt.
Alle Testergebnisse werden in einem Testprotokoll festgehalten.
4.7 Einführung
Der Arbeitsablauf in den Anwenderabteilungen wird an das neue Verfahren angepasst. Hierfür müssen die
betroffenen Mitarbeiter geschult und eingewiesen werden. Der Probebetrieb über einen längeren Zeitraum
(parallel mit dem alten abzul”senden Verfahren mit Vergleich) schliesst das Projekt ab.
4.8 Wartung/Pflege
Diese Phase ist die längste Phase im Software-Lebenszyklus. Sie beginnt nach der erfolgreichen Abnahme
(Abnahmetest) des Produktes.
Im Gegensatz zu anderen Phasen ist sie nur „usserst schwer planerisch zu beherrschen, da sie abhängig
vom Auftreten unvorhersehbarer Ereignisse (Fehler, neue Anforderungen, ver„nderte Bedingungen usw.) ist.
Die Wartungsphase stellt einen bedeutenden Kostenfaktor dar. Untersuchungen zeigen, dass die
Wartungskosten in ungüstigen Fällen (schlechte Wartbarkeit) oder in güstigen Fälen (lange Lebensdauer)
das Zehnfache der eigentlichen Entwicklungskosten ausmachen k”nnen.
TFH Berlin/Steyer
4-3
Softwareerstellung
4.9 Projektmanagement
Softwareprojekte zeichnen sich besonders dadurch aus, dass Kosten- und Terminplanungen extrem
überschritten werden. Gründe hierfür liegen darin, dass
- Software ein immaterielles und damit ein abstraktes Produkt ist,
- Anforderungsdefinitionen zu unpräzise sind und zu offen für Kundenwünsche, die sich während der
Entwicklung ändern,
- die Arbeitsleistung von Programmierern extrem unterschiedlich sein kann (Untersuchen zeigen Faktoren
bis zu 1:25),
- Projektmanager im Softwarebereich meist geringere Erfahrungen haben als Manager aus vergleichbaren
Ingenieurprojekten,
- Organisations- und Planungsmethoden nur allmählich Eingang in Softwareprojekte finden.
Die Notwendigkeit eines qualifizierten Projektmanagements liegt deshalb auf der Hand. Nicht jeder gute
Programmierer oder Informatiker ist automatisch ein guter Projektmanager, muss es auch nicht sein. Hierzu
bedarf es besonderer/anderer Fähigkeiten.
Ein ebenso wichtiger Aspekt ist die Tatsache, dass ein Projektteam aus Menschen besteht. Diese
Menschen sollen plan- und termingerecht eine kreative geistige Tätigkeit vollbringen, die sich nur
beschränkt erzwingen lässt. Durch eine bewusste Projektleitung kann aber Einfluss genommen werden auf
die Gesamtheit der Arbeitsbedingungen. Dazu gehören Faktoren, die zur
Zufriedenheit der Mitarbeiter und der Identifikation mit dem erstellten Produkt (Wir-Gefühl) beitragen, wie
z.B.
- Sozialleistungen des Unternehmens
- räumliche Arbeitsbedingungen
- Arbeitsorganisation, Führungsstil
- Aufstiegsmöglichkeiten, Verantwortung
- Offenheit bei Information und Führung
Im DV-Bereich erfolgen Arbeitsplatzwechsel oft und kurzfristig und können Projekte sehr hart treffen. Gut
qualifizierte Mitarbeiter und langfristig erarbeitetes Wissen stellen ein immenses Kapital (und Garantie) für
den wirtschaftlichen Erfolg des Unternehmens dar, mehr als mancher softwaretechnische Faktor.
4.10 Qualitätssicherung
Die Qualitätssicherung (engl. quality assurance QA) ist meist organisatorisch unabhägig direkt der
Projektleitung zugeordnet. Sie soll
- sicherstellen, dass die Arbeitsweise und die verwendeten Methoden in allen Phasen den definierten
Qualitätsansprüchen entsprechen,
- feststellen, ob die planerischen Ziele sich mit den real erreichten Zielen decken (Dokumentation des
Projektfortschritts),
- alle Phasenergebnisse mit Tests und Vergleich der Anforderungsdefinition überprüfen.
Hierzu werden Checklisten und Testdaten verwendet, die aus einer unabhängigen Sicht möglichst objektiv
die Qualität und die Quantität der geleisteten Arbeit festhalten. Jeder gefundene Fehler ergibt für die Zukunft
einen neuen Testfall.
TFH Berlin/Steyer
4-4
Softwareerstellung
4.11 Spirale
Benutzer
Problem
Vorschlag
Wartung+Pflege
Definition
Test+Abnahme
Entwurf
Implementierung
TFH Berlin/Steyer
4-5
Softwareerstellung
5 Testen
5.1 Definitionen
Testen (engl. testing) ist die Ausführung eines Programms mit der Absicht, Fehler zu finden.
Wenn es das Ziel ist, die Abwesenheit von Fehlern zu zeigen, wird man nicht viele finden. Wenn es das Ziel
ist, die Anwesenheit von Fehlern zu zeigen, wird man einen grossen Prozentsatz finden. Die Anwesenheit
von Fehlern kann man beweisen (dadurch, dass man einen findet), die Abwesenheit von Fehlern kann man
überhaupt nicht beweisen.
Andere verwandte Begriffe:
Ein Beweis (proof) ist der Versuch, Fehler in einem Programm zu finden ohne Berücksichtigung der
Programmumgebung.
Fehlerkorrektur (debugging) ist die Analyse eines Fehlers mit seiner Korrektur.
Modultest (module testing) ist der Test eines einzelnen Programmmoduls in einer isolierten Umgebung.
Integrationstest (integration testing) ist der Test von Schnittstellen zwischen Systemteilen (Modulen,
Komponenten, Subsystemen).
Systemtest (system testing) ist der Test eines Gesamtsystems mit allen Systemteilen.
Akzeptanztest (acceptance testing) ist der Test eines Systems oder Programms gegen die
Benutzeranforderungen.
5.2 Testspektrum
Das Finden von Testf„llen ist eine der schwierigsten Aufgaben beim Testen. Es gibt dazu zwei
grunds„tzliche Vorgehensweisen, die sich an den Extremen des folgenden Spektrums befinden.
Test der Spezifikationen
(Kümmere dich nicht um
den Programmcode.)
Test des Programmcodes
(Kümmere dich nicht um
die Spezifikationen.)
Die Person am linken Ende des Testspektrums entwirft die Testfälle entsprechend den vorher festgesetzten
Spezifikationen. Sie betrachtet das Programm als black box. Solange der Code sich richtig verhält, ist sie
zufrieden. Ihr letztes Ziel ist der Test jeder möglichen Kombination von Eingabewerten.
Die Person am rechten Ende des Testspektrums entwirft die Testfälle entsprechend der Programmlogik. Ein
Grundsatz dafür ist, so viele Testfälle zu entwerfen, dass jeder Befehl mindestens einmal ausgeführt wird.
Etwas aufwendiger ist das Ziel, jeden Programmzweig mindestens einmal zu durchlaufen (z.B. bei IF). Das
letzte Ziel ist der Test jedes möglichen Pfades durch das ganze Programm.
Kein Extrem ist eine gute Strategie, aber die erste ist etwas besser. Für beide gilt im Extremfall, dass sie zu
aufwendig sind. Daraus folgt: Testen ist weitgehend ein wirtschaftliches Problem. Die Kunst, Testfälle zu
finden, ist die Kunst, Testfälle mit der gr”ssten Wirksamkeit zu finden, d.h. Fälle, die eine möglichst grosse
Menge von Fehlermöglichkeiten abdecken.
TFH Berlin/Steyer
5-1
Softwareerstellung
5.3 Teststrategien
Die Bottom-Up-Teststrategie beginnt bei den Endmodulen, d.h. den Modulen, die keine anderen Module
aufrufen. Wenn diese einmal getestet sind, sollten sie so zuverlässig wie eine Programmiersprachfunktion
oder eine Zuweisung sein. Die nächste zu testende Modulmenge besteht aus den Modulen, die die erste
Gruppe direkt aufrufen. Sie werden mit diesen zusammen getestet. Dies wiederholt sich bis die Spitze
erreicht ist. Die Bottom-Up-Teststrategie verlangt einen Testtreiber, d.h. ein übergeordnetes Programm, das
die (noch nicht vorhandene) Oberfläche simuliert, das die Testfälle bereitstellt und den Test steuert (s.u.).
Die Top-Down-Teststrategie beginnt beim obersten Modul. Danach werden die vom obersten Modul direkt
aufgerufenen Module mit diesem zusammen getestet. Das wiederholt sich, bis alle Module integriert und
getestet sind. Die Top-Down-Strategie verlangt für die noch nicht implementierten Module auf tieferen
Stufen Platz-haltermodule (stub routines). Ein weiteres Problem sind die Ein-/Aus-gabemodule, die am
Anfang nicht vorliegen. Sie haben deshalb hohe Priorität, um Testfälle ein- und Testergebnisse ausgeben zu
können.
Die Big-Bang-Teststrategie ist die Üblichste und besteht darin, zuerst jeden Modul für sich zu testen und
dann alle auf einmal zu integrieren. Die Nachteile sind, dass beides, Testtreiber und Platzhaltermodule, für
alle Einzelmodule geschrieben werden müssen, dass ausserdem die Integration erst spät stattfindet und
dass Fehler bei der Integration schwer zu lokalisieren sind.
Die Sandwich-Teststrategie ist ein Kompromiss zwischen Bottom-Up- und Top-Down-Methode und
versucht, die Vorteile von beiden zu vereinen: frühe Integration, frühe echte Oberfläche, frühe Ein/Ausgabemodule. Das Programm wird von oben und unten gleichzeitig vorangetrieben und trifft irgendwo in
der Mitte zusammen. Dieser Treffpunkt sollte vorher festgelegt werden.
Eine allgemeingültige Bewertung lässt sich nicht geben. Für kleinere Systeme wird eher die Bottom-UpStrategie, für grössere eher die Sandwich-Strategie von Vorteil sein.
Die Ziele nochmals:
- frühe Integration
- frühes Gesamtsystem
- Test vielfältiger Bedingungen
Aus diesen Gründen haben die Top-Down-Methode und die Big-Bang-Methode mehr Nachteile als die
anderen, die Top-Down-Methode etwas weniger und die Big-Bang-Methode etwas mehr.
TFH Berlin/Steyer
5-2
Softwareerstellung
5.4 Testaxiome
Ein guter Testfall ist ein Testfall, der mit hoher Wahrscheinlichkeit einen Fehler entdeckt, und nicht einer, der
zeigt, dass das Programm fehlerfrei läuft.
Eines der schwierigsten Probleme beim Testen ist es, zu wissen, wann man aufhören kann.
Es ist unmöglich, sein eigenes Programm richtig zu testen.
Ein notwendiger Teil jedes Testfalls ist eine Beschreibung der erwarteten Ergebnisse.
Nichtreproduzierbare und spontane Tests sind sinnlos.
Es muss Testfälle sowohl für falsche als auch für richtige Eingaben geben.
Testergebnisse sollen genau analysiert werden.
Wenn in einem Modul die Anzahl der entdeckten Fehler steigt, steigt auch die Anzahl der noch nicht
entdeckten Fehler.
Testen sollte vom kreativsten Programmierer gemacht werden.
Testen soll, wie jede andere Tätigkeit auch, mit dem Setzen von Zielen beginnen.
Qualität ist die Übereinstimmung von Dokument und Programm.
TFH Berlin/Steyer
5-3
Softwareerstellung
5.5 Drei Schritte bei der Implementierung
(1) Codierung
Module mit Funktionsköpfen: Wenn die Architektur des Systems mit Modulhierarchie, Modulen und
einzelnen Funktionen feststeht, können die Module in Dateien überführt und die darin enthaltenen
Funktionen zunächst nur durch die Funktionsköpfe repräsentiert werden. Das zwingt zur genauen Formulierung der Datentypen. Die Rümpfe werden vorläufig noch durch leere Klammern dargestellt. Die Rubriken
IN, OUT, EFFECT und EXCEPTION aus der Spezifikation werden als Kommentare zu jeder Funktion
übernommen. Jeder Modul soll fehlerfrei compilierbar sein.
Pseudocode: Wenn die Grobstruktur des Algorithmus einer Funktion feststeht, soll sie mit Kommandos der
Programmiersprache formuliert werden. Die Ausdrücke bleiben noch sprachliche Umschreibung. Dieser Teil
kommt als Kommentar nach dem Funktionenkopf. Der Modul bleibt immer noch compilierbar.
Programmcode: Durch Verfeinerung des Pseudocode (Vertiefung der Verschachtelung und Formalisieren
der Ausdrücke) entsteht der endgültige Programmcode.
(2) Testfallgenerierung
Jede Eingabevariante, jede Option, jeder Grenzwert von Eingabewertebereichen ergibt einen Testfall.
Jede falsche Eingabeklasse ergibt einen Testfall.
Jede Programmverzweigung (IF, CASE) ergibt so viele Testfälle wie Ausgänge möglich sind.
Jede Programmschleife ergibt (mindestens) einen Testfall für null Durchläufe, für einen Durchlauf und für die
maximal mögliche Anzahl von Durchläufen.
Es muss soviele Testfälle geben, dass jeder Zweig eines Moduls mindestens einmal durchlaufen wird.
Jeder gefunde und korrigierte Fehler ergibt einen Testfall.
(3) Testausführung
Testumgebung für das Testen eines Programmbausteins 'b2'.
TESTTREIBER:
Fall 1:
Liefere Testfalldaten
Rufe Testmodul
TESTMODUL:
drucke Parameter von oben
evtl. rufe Platzhalter
PLATZHALTER:
drucke Parameter von
oben
führe Platzhalter aus
drucke Ergebnis
gib Ergebnis zurück
führe Testmodul aus
drucke Ergebnis
gib Ergebnis zurück
Vergleiche Ergebnis
jetzt und früher
TFH Berlin/Steyer
5-4
Softwareerstellung
5.6 Versionskontrolle
Arbeiten mehrere Programmierer an einem System, muss organisa-torisch sichergestellt sein, dass sie
einerseits so selbständig wie möglich ohne Behinderung durch andere arbeiten können, dass sie
andererseits jedoch so oft wie möglich ihr Teilsystem zum Gesamtsystem hinzufügen können. Dazu ist
folgendes Verfahren nützlich:
GESAMTBEREICH
fertiges System (t-3)
wird nur selten geändert
fertiges System (t-2)
kann noch geändert werden
PRIVATBEREICH
privates Programm (t-1)
steht zur Übergabe bereit
privates Programm (t)
ist in der Entwicklung
Jeder Programmierer entwickelt zum Zeitpunkt t ein Programm, hat aber schon andere Programme
entwickelt und getestet (zum Zeitpunkt t-1). Hat er eine zusammenhängende Menge von Programmen
fertig-gestellt, transferiert er diese zum Gesamtbereich und verbindet sie testweise mit einer Gesamtversion,
die zur Zeit t-2 entstanden war. Verhält sich diese immer noch korrekt, kann sie zu einem neuen gültigen
Systemzustand eingefroren werden, der den alten aus der Zeit t-3 ablöst.
TFH Berlin/Steyer
5-5
Softwareerstellung
5.7 Systemtestfälle
- Stresstest: Ein verbreiteter Fehler grosser Systeme ist, dass sie unter leichten Bedingungen korrekt
funktionieren, aber unter der Last zur Echtzeit schnell zum Stillstand kommen.
- Massentest: Während der Stresstest Belastung in einer kurzen Zeitspanne testet, setzt der Massentest das
System grossen Datenmengen über einen langen Zeitraum aus.
- Konfigurationstest: Das System sollte mit jeder Hardware, mit jedem Systemprogramm, zu denen es
passen soll, getestet werden. Ist die Software konfigurierbar, muss jede Konfiguration getestet werden.
- Kompatibilitätstest: Gibt es von einem länger lebenden System mehrere Versionen, müssen die
Benutzerschnittstellen früherer Versionen auch mit neuen Systemversionen laufen.
- Sicherheitstest: Speichert das System Daten verschiedener Benutzer, müssen diese gegen beabsichtigte
und unbeabsichtigte Beschädigung abgesichert sein.
- Speichertest: Viele Systeme unterliegen Beschränkungen bezüglich Haupt- und Sekundärspeicherbedarf,
die durch Testfälle vor allem über die Versionen hinweg abgesichert werden müssen.
- Leistungstest: Antwortzeiten, CPU-Zeiten oder Durchsatzraten unter verschiedenen Bedingungen sind
wichtige Kennziffern, die ständig kontrolliert werden müssen.
- Installationsstest: Die Installation eines Systems soll so einfach wie möglich gestaltet sein. Eine der
frustrierendsten Situationen eines Anwenders ist es, wenn er das System nicht einmal installieren kann.
- Verfügbarkeitstest: Bestimmte Anforderungen an ein System, wie z. B.
Mindestzeit, bis ein Fehler auftritt, ist x Tage oder
Mindestzeit, bis ein aufgetretener Fehler behoben ist, ist y
Tage,
sind sehr schwer zu testen, können aber durchaus im Kaufvertrag stehen. Eine Möglichkeit besteht darin,
künstlich Fehler einzuführen und die Entdeckung und Behebung zu beobachten.
- Wiederanlauftest: In vielen Systemprogrammen ist es eine vitale Aufgabe, nach Verlust von Daten oder
Ausfall von Verbindungen die Trümmer abzuräumen und in einen definierten Zustand zurückzukehren.
- Dialogtest: Es sollten auch interaktive Dialogsitzungen nach ihren Eingaben aufgezeichnet und später
nochmals mit diesen Strömen wiederholt werden. Die Ausgaben sind jeweils zu vergleichen.
- Dokumentationstest: Ein sehr wichtiger Teil des Sytemtests ist die Genauigkeit der
Benutzerdokumentation. Z.B. sollten alle Beispiele in den Handbüchern auf Korrektheit geprüft werden.
-
Ergonomietest: Die Arbeit mit dem System sollte im Normal-, aber auch im Fehlerbetrieb, an den
Menschen als Bediener angepasst sein, z.B. mit verständlichen Fehlermeldungen.
TFH Berlin/Steyer
5-6
Softwareerstellung
5.8 Prüfliste
-
Datenbezug:
nichtinitialisierte Variable ?
Vektorindex innerhalb der Grenzen ?
Index kein Integer ?
externe und interne Datenstruktur unpassend ?
Strukturdefinitionen passen •ber mehrere Funktionen ?
Stringgrenzen überschritten ?
1-Über-oder-Unterlauf bei Indexoperationen ?
-
Datendeklaration:
nichtdeklarierte Variable ?
Vorbesetzungen verstanden ?
Felder und Strings richtig initialisiert ?
richtige Längen, Typen und Speicherklassen ?
Initialisierung passt zur Speicherklasse ?
Variablen mit gleichen Namen ?
-
Berechnung:
Rechnen mit nichtarithmetischen Variablen ?
Konversionsfehler ?
Rechnen mit Variablen verschiedener L„nge ?
Ziellänge kleiner als zugewiesener Wert ?
Zwischenwertüber- oder -unterlauf ?
Division durch Null ?
Variablenwert ausserhalb des sinnvollen Bereichs ?
Operatorpräzedenz richtig verstanden ?
Integerdivision korrekt ?
-
Vergleiche:
Vergleiche zwischen inkonsistenten Variablen ?
Vergleichsoperator richtig herum ?
Boolesche Kombination korrekt ?
Operatorpräzedenz richtig verstanden ?
Ausführungsreihenfolge des Compilers verstanden ?
Zuweisungen und Vergleiche richtig verstanden ?
-
Kontrollfluss:
Terminiert jede Schleife ?
Werden alle Mehrwegausgänge korrekt benutzt oder überrannt ?
Terminiert das Programm ?
Schleifenumgehungen wegen falscher Eingangsbedingungen ?
Sind Schleifendurchfälle korrekt ?
Fehler wegen Überschreiten um 1 ?
Schleifenklammerung korrekt ?
Schöpfen die Bedingungen alle Möglichkeiten aus ?
-
Schnittstellen:
Gleiche Anzahl der formalen und aktuellen Parameter ?
Gleiche Attribute der formalen und aktuellen Parameter ?
Reihenfolge der formalen und aktuellen Parameter gleich ?
Anzahl, Attribute und Reihenfolge der Parameter bei Systemfunktionen korrekt ?
Werden lokale Variablen zurückgegeben ?
Werden Eingabevariablen zurückgegeben ?
Werden globale Variablendefinitionen einheitlich in den Modulen benutzt ?
Werden Konstante korrekt als Argumente benutzt ?
TFH Berlin/Steyer
5-7
Softwareerstellung
-
Ein-/Ausgabe:
Dateiattribute korrekt ?
OPEN-Anweisung korrekt ?
Dateibeschreibung passt zu internen Datentypen ?
Puffer ausreichend gross ?
Wird die Datei vor der Benutzung geöffnet ?
Werden I/O-Fehler abgefangen ?
-
Andere Prüfungen:
Unbenutzte Variablen ?
Warnungen oder sonstige Informationen ?
Eingabeprüfung ausreichend ?
Fehlende oder unbenutzte Funktionen ?
5.9 Werkzeuge
-
Debugger, z.B. sdb, adb:
um ein Objektprogramm zu analysieren und lesbar auszugeben
um ein Programm kontrolliert schrittweise ablaufen zu lassen
um nach einem Absturz den aktuellen Verschachtelungskeller
festzustellen
um ein Objektprogramm zu editieren (patchen)
-
Programmformatierer, z.B. cb:
um die Blockstruktur zu erkennen und die Lesbarkeit zu erh”hen
-
Genauere Programmprüfer, z.B. lint:
um Quellprogramme nach versteckteren Fehlern zu durchsuchen
um nicht portierbare Programmabschnitte zu finden
um besser zu optimieren
-
Laufzeitanalysierer, z.B. prof, size:
um die Aufrufanzahl von Prozeduren zu ermitteln
um den CPU-Verbrauch von Prozeduren zu ermitteln
um den Speicherverbrauch eines Programms zu ermitteln
-
Versionspfleger make:
um stets den aktuellen Systemstand herzustellen
-
Traces (auch selbst erstellbar):
um den dynamischen Ablauf zu verfolgen
-
Interaktive Testströme (z.B. mit tee selbst erstellbar):
um interaktive Benutzersitzungen reproduzierbar zu wiederholen
TFH Berlin/Steyer
5-8
Softwareerstellung
6 Beurteilung
6.1 Prinzipien der Software-Entwicklung
1.
Prinzip der Abstraktion
Eine Abstraktion ist eine Verallgemeinerung eines Sachververhaltes von einem bestimmten Standpunkt aus. Es wird dabei
von besonderen oder einzelnen Eigenschaften abgesehen. Das
Gegenteil der Abstraktion ist die Konkretisierung.
Beispiel: Parametrisierung einer Funktion
2.
Prinzip der Modularisierung
Das Prinzip der Modularisierung führt zur Bildung
abgeschlossener, unabhängiger, funktionaler Einheiten,
den Modulen. Diese Unabhängigkeit ermöglicht die getrennte
Entwicklung, Überprüfung und Wartung von Programmteilen und
damit die arbeitsteilige Erstellung von Software schlechthin.
Beispiel: elektronische Schaltkarte
3.
Prinzip der Strukturierung
Eine Struktur ist eine reduzierte, von unwichtigen Details
losgelöste, charakteristische Darstellung des Ganzen. Für
jedes System oder Teilsystem kann eine geeignete Struktur
erkannt bzw. modellhaft definiert werden. Vordefinierte
Strukturen erleichtern das Auffinden und Nachvollziehen
strukturierter Beschreibungen.
Beispiel: Landkarte
4.
Prinzip der Hierarchisierung
Dieses Prinzip bedeutet eine schrittweise Zerlegung eines
Problems in Teilprobleme (wie bei der schrittweisen Verfeinerung), so dass eine Baumhierarchie entsteht. Breite und
Tiefe des Baumes leiten sich ab aus der Problemart und
Problemgrösse. Entsprechend den Ausdrucksmöglichkeiten der
verwendeten Sprachen und Methoden können dies Abstraktionselemente beliebiger Art sein.
Beispiel: Firmenorganisation
TFH Berlin/Steyer
6-1
Softwareerstellung
5.
Prinzip der Lokalität
Dieses Prinzip fordert, dass alle relevanten Informationen zur
Lösung eines Teilproblems (z.B. Modul, Prozedur, Funktion)
lokal verfügbar sein sollen. Je nach Grösse des Problems kann
dies in komprimierter Form erfolgen. Als ideal gilt dabei eine
überschaubare Einheit wie z.B. eine Seite.
Beispiel: Abteilungen in einer Firma
6.
Prinzip der integrierten Dokumentation
Aus diesem Prinzip leitet sich die Dokumentation als
integraler Bestandteil der Software ab. Nachdokumentationen
geleisteter Entwicklungen widersprechen diesem Prinzip. Die
Beachtung des Prinzips führt zu Dokumentationen, die immer
aktuell sind.
Beispiel: Moduldokumentation
7.
Prinzip der Mehrfachverwendung
Problemlösungen müssen nicht immer neu erfunden werden.
Umfassend dokumentierte und archivierte Software, die
ausserdem hinreichend allgemein und flexibel entwickelt wurde
(z.B. Dienstmodule für mathematische Verfahren, Dateienbearbeitung usw.), bietet sich zur Mehrfachverwendung an. Gerade
bei der professioneller Erstellung grosser Software soll
dieses Prinzip angestrebt werden.
Beispiel: NAND-, NOR-Schaltungen
8.
Prinzip der Standardisierung
Eine Standardisierung der Softwareentwicklung führt zu einer
Vereinheitlichung aller Texte und Dokumente. Nicht mehr das
Schönheitsempfinden des Einzelnen ist dabei gefragt, sondern
das vereinheitlichte Erscheinungsbild, der Firmenstandard.
Eine Standardisierung erhöht die Verständlichkeit von
Dokumenten und unterstützt die Austauschbarkeit von Produkten
und Entwicklern.
Beispiel: metrisches Masssystem
TFH Berlin/Steyer
6-2
Softwareerstellung
6.2 Qualitätsmerkmale von Software
Hauptkriterien:
Brauchbarkeit: der tatsächliche Nutzen des Produktes
(ohne Nachbesserungen)
Wartbarkeit: wie einfach das Produkt vom Benutzer modifizierbar
ist (Fehlerbehebung, Anpassung an neue
Anforderungen)
Unterkriterien:
Änderbarkeit: notwendige Änderungen können mit minimalen Kosten
durchgeführt werden (Kommt häufiger vor, als man
denkt.)
Allgemeingültigkeit: Abdeckungsbreite für eine Menge von Problemen
und Funktionen
Assimilationsfähigkeit: Grad der Änderbarkeit von Ein-/Ausgabedialogen
Autarkie:
Unabhängigkeit von anderen Software-Produkten bzw.
ihren Funktionen
Brauchbarkeit: Grad der Zuverlässigkeit, Effizienz, Benutzerfreundlichkeit u.a.
Benutzerfreundlichkeit: geringe Beeinträchtigung von Zeit,
Energie, Motivation des Benutzers
Aspekte:
- Aufgabenangemessenheit (Gestaltung der Masken,
Dialogverzweigungsmöglichkeiten, Blätterfunktionen,
An- und Abmeldeverfahren)
- Selbsterklärungsfähigkeit (Menüsteuerung,
verständliche Systemmeldungen, Help-Funktionen,
Feldbezeichnungen)
- Steuerbarkeit (Aufrufformen, z.B. Expertenmodus,
keine Zwangsfolgen, Dialogkellerung)
- Verlässlichkeit (Wiederanlauf, feste PF-TastenBelegung, kurze Antwortzeiten)
- Fehlertoleranz und -transparenz (Eingabeprüfungen, Defaultwerte, Warnng vor Löschen)
TFH Berlin/Steyer
6-3
Softwareerstellung
Effizienz:
Sparsamkeit im Verbrauch von Laufzeit und
Speicherplatz
Eine Gefahr ist es jedoch, diese Grössen mit
übermässigen Entwicklungskosten auf raffinierte
Weise zu optimieren, da später deshalb oft hohe
Pflege- und Wartungskosten die Folge sind.
Dazu kommt, dass durch sinkende Hardwarekosten
die Bedeutung des Merkmals Effizienz laufend
zurückgeht.
Erweiterbarkeit: Ausdehnbarkeit auf zusätzliche Anforderungen
Funktionsumfang: Ausmass, in dem die für den geplanten Verwendungszweck notwendigen Funktionen tatsächlich
realisiert sind
Die zweiten Systemversionen unterliegen oft der
Gefahr, funktionell überladen zu werden, weil der
Entwickler all das nachholen will, was bei der
Erstentwicklung noch nicht realisiert war.
Genauigkeit: Präzisionsgrad der Ausgaben und Berechnungen
Geräte-Unabhängigkeit: von Hardware-Eigenschaften
Kompaktheit: Grad, in dem ein Podukt nur notwendige, d.h. keine
überflüssigen Teile enthält
Konsistenz: Grad, in dem ein Produkt nach einheitlichen
Entwurfs- und Implementierungstechniken sowie in
einheitlicher Notation entwickelt wurde.
Lesbarkeit:
Grad der Programmlesbarkeit
Portabilität: Einfachheit, um ein Produkt von einer Hardware/Softwareumgebung in eine andere zu überführen.
Die Zielsetzung "hohe Portabilität" ist den Zielen
"hohe Effizienz", "geringe Enrwicklungskosten" und
"kurze Entwicklungszeit" entgegengerichtet.
Robustheit: Grad, in dem ein System auf fehlerhafte und
unerwartete Eingaben bzw. Einflüsse verständlich
reagiert und seine vorgesehenen Funktionen weiter
erfüllt.
Selbsterklärung: Grad, in dem ein Produkt Informationen zur
eigenen Erklärung bereithält.
Strukturierung: Grad, in dem ein Produkt ein erkennbares
Organisationsmuster seiner Teile besitzt.
TFH Berlin/Steyer
6-4
Softwareerstellung
Testbarkeit: Einfachheit, ein Produkt zu testen, um sicherzustellen, dass die geforderten Eigenschaften
erfüllt sind.
technische Mittel: Trace- und Dump-Erzeugung,
Testversion, die dies kann, einfache Durchführung,
so dass Ferndiagnose (per Telefon) möglich ist
Verständlichkeit: Leichtigkeit, mit der ein Systembenutzer Zweck
und Aufbau eines Systems versteht
Vollständigkeit: Grad, in dem das Produkt alle geforderten
Funktionen erfüllt.
Wartbarkeit: Grad der Wahrscheinlichkeit, in dem ein im Einsatz
befindliches Produkt nach Auftreten eines Fehlers
innerhalb einer gegebenen Zeit wieder in funktionsfähigen Zustand gebracht werden kann.
Zählbarkeit: Grad, in dem das Produkt die Messung von Gebrauchshäufigkeiten von Teilen/Funktionen und die Identifizierung von Fehlern unterstützt.
Zugänglichkeit: Grad, in dem ein Produkt die selektive Nutzung
von Systemteilen für andere Zwecke erlaubt
Zuverlässigkeit: Grad der Wahrscheinlichkeit, mit der ein im
Einsatz befindliches Produkt während einer
bestimmten Zeit unter den vorgesehenen Bedingungen
und mit gültigen Eingabedaten die Funktionen
erfüllt und die Leistungen erbringt, die in der
Anforderung spezifiziert sind.
Die grösste Gefahr sind Fehler oder Datenschäden,
die erst später entdeckt werden und nicht mehr
reparabel sind.
ZU: ZUVERLÄSSIGKEIT
Anekdote von Dijkstra 1972:
"Wenn die Wahrscheinlichkeit, dass die einzelne Komponente eines Programms korrekt ist, p ist, dann ist
die Korrektheitswahrscheinlichkeit des gesamten Programmes, das aus N solchen Komponenten besteht,
sowas wie P = pN. Wenn nun N sehr gross ist, so muss p schon sehr, sehr nah bei 1 liegen, wenn wir
möchten, dass P überhaupt wesentlich von Null differiert."
Beispiel: Für N=10 ist die Wahrscheinlichkeit pN der Korrektheit des Gesamtsystems für p=0.99 immer noch
P=0.9. Für p=0.90 jedoch nur mehrP=0.35. Hat man gar N=100 Teile des Gesamtsystems, deren
Korrektheitswahrscheinlichkeit p=0.99 ist, so ist P=0.37, für p=0.90 ist P sogar nur noch 0.000027.
also: testen, testen, testen
ZU: ZUVERLÄSSIGKEIT UND EFFIZIENZ
Zuverlässigkeit ist wichtiger als Effizienz.
Denn, wenn es nicht immer stimmen muss, kann man es auch ganz schnell machen.
TFH Berlin/Steyer
6-5
Softwareerstellung
SOFTWAREKOSTEN
59% aller Softwareprojekte überschreiten das Budget.
Kostenverteilung
Programmentwurf 35 %
Entwicklungskosten
100 %
Programmierung 20 %
Test/Einführung 45 %
Wartung/Pflege/ 35 %
Erweiterung
Entwicklungskosten
200 - 400 %
- Je länger die Lebensdauer, desto höher die Wartungskosten.
- Je mehr Benutzer, desto höher die Wartungskosten.
TFH Berlin/Steyer
6-6
Softwareerstellung
ZEIT
- Möglichst einfache Produkte auf Kosten des prinzipiell möglichen oder auch wünschenwerten
Funktionsumfangs entwickeln.
- Möglichst frühzeitigen Entwicklungsstart in Verbindung mit einer stärkeren Betonung der
Qualitätsmerkmale Änderbarkeit und Portabilität.
- Evtl. Effizienzverluste zugunsten schnellerer Entwicklung in Kauf nehmen.
- Erst zuletzt zum Mittel "Kapazitätserhöhung" greifen.
Brooksches Gesetz: "Adding manpower to a late project makes it later."
..
Weinbergs Daumenregel: "Drei Programmierer, organisiert zu einem Team, können nur die doppelte Arbeit
eines einzelnen Programmierers schaffen."
TFH Berlin/Steyer
6-7
Herunterladen