8.5Qualität
"Es kann passieren, was will: Es gibt immer einen, der es kommen sah."
(Fernandel)
Reduzieren Sie das Thema zunächst einfach auf diese beiden Aussagen:
- Qualität ist die Erfüllung aller Anforderungen.
- Wenn eine Anforderung nicht erfüllt ist, so ist dies ein Fehler.
ISO 8402: "Qualität ist die Gesamtheit von Merkmalen einer Betrachtungseinheit bezüglich ihrer Eignung, festgelegte und vorausgesetzte Erfordernisse zu erfüllen"
EN 29004 / ISO 9004 "Qualitätsmanagement und Elemente eines Qualitätssicherungssystems-Leitfaden" Absatz 14.1 definiert Fehler als die Situation, "dass Materialien, Bauteile oder Endprodukte die festgelegten Forderungen nicht erfüllen können." [B5].
Qualität heißt Messbarkeit
Testen ist die Methode, mit der Qualität nachgewiesen wird
Testszenarien (programmierte Test Cases) im Simulationsmodell automatisiert (mit Protokoll)
"SPICE" steht für "Software Process Improvement and Capability Determination" (Verbesserung des Softwareprozesses und Bestimmung der Leistungsfähigkeit) und stellt eine internationale Initiative zur Entwicklung eines Standards zur Beurteilung der Softwareprozesse dar. Im Wesentlichen handelt es sich um einen Satz von Dokumenten, die als Vorlage verwendet werden können und 1995 erstmalig vorgestellt wurden. Darin wird nicht nur die Softwareentwicklung betrachtet, sondern beispielsweise auch die Evaluierung von Softwareprodukten, so dass dieser Dokumentensatz für alle interessant ist, die in irgendeiner Form mit Software konfrontiert werden.
Oder wie es in [L17] ausgedrückt wird: "This framework can be used by organizations involved in planning, managing, monitoring, controlling and improving the acquisition, supply, development, operation, evolution and support of software" (Dieser Rahmen kann von Unternehmen genutzt werden, die mit Planung, Organisation, Überwachung, Kontrolle und Verbesserung von Anschaffung, Lieferung, Entwicklung, Betrieb, Fortschritt und Unterstützung von Software beschäftigt sind).
Begriffsdefinitionen: Gefahr = Bedingung, die einen Unfall verursachen kann, wenn zusätzlich weitere Ereignisse eintreten
Versagen = Unvermögen einer Systemkomponente, seine vorgesehene Funktion zu erfüllen
Risiko = Kombination der Wahrscheinlichkeit eines Versagens mit dessen Konsequenzen
Unfall = Ereignis, das Schaden anrichtet
Zuverlässigkeit = Maß für die Wahrscheinlichkeit, dass die geforderten Funktionen über eine bestimmte Zeit hinweg erfüllt werden
Sicherheit = Wahrscheinlichkeit, mit der Gefahren auftauchen
9Übergang 9.1Übergang der Software an den Kunden
"Sagt der Walfisch zum Thunfisch: 'Das kannst du doch nicht tun Fisch.'
Sagt der Thunfisch zum Walfisch: 'Da hab ich keine Wahl Fisch.'"
(Unbekannt)
Von einem "Launch" ("Start") spricht man eher bei einem kommerziellen Produkt (so richtig mit Handbuch im Vierfarbkarton), das in Stückzahlen hergestellt und über Distributionskanäle verkauft wird. In dem Moment, wo die Auslieferung des Produkts beginnt, spricht man auch von "Shipping" (Lieferung). Es gab mal einen sehr interessanten Vortrag auf einem der ersten Microsoft TechTalks von dem Produktmanager von Excel 3; er nannte den Vortrag "Shipping Software", weil er dies als Hauptziel einer jeden Softwareentwicklung betrachtete und damit den Entwicklern klar machen wollte, dass eben nicht die Entwicklung selbst das Wesentliche ist, sondern das Produkt, das am Ende steht! Eine weitere Bezeichnung für die Auslieferung der fertigen Software ist "Roll Out". Diese ist der Luftfahrtindustrie entnommen; dort wird das erstmalige Herausrollen des Flugzeugs aus dem Hanger nach der Fertigstellung so bezeichnet. Ich persönlich finde diesen Begriff allerdings für neue Netzwerkverkabelungen viel passender als für Software, denn Netze werden ja auch ausgerollt.
Abnahme nach Leistungsbeschreibung (Akzeptanzkriterien der Anforderungen)
Abnahmeprotokoll mit Restpunkteliste für die Nachbesserungen
auf vereinbarte Konventionalstrafen achten
Inbetriebnahme
- direkte Umstellung
- Parallellauf
- Versuchslauf
- Pilotinstallation
Installation nur mit Administratoren des Kunden zusammen!!!
10Wartung 10.1Wartung
"Und immer wenn du denkst, es geht nicht mehr, kommt von irgendwo ein Lichtlein her."
(altdeutsche Weisheit)
Haftung, Garantie, Gewährleistung, Sachmängel
Software IST fehlerhaft!
- Serviceplan definieren
Auch Software altert!
- Update-Stufen entwerfen
- Versionsmanagement
Helfen Sie!
- Coaching
- Training
- Support
Nachvertrag
11Verweise 11.1HTTP-Links
"Der moderne Mensch hat ein neues Laster erfunden: die Schnelligkeit."
(Aldous Huxley)
[L1] http://members.aol.com/acockburn/ Firma Alistair Cockburn, Humans and Technology
[L2] http://c2.com/cgi/wiki?ExtremeProgrammingRoadmap Extreme Programming Roadmap
[L3] http://www.omg.org OMG (Object Management Group)
[L4] http://www.oose.de/gmbh/ Firma oose
[L5] http://www.cmcrossroads.com/bradapp/docs/patterns-intro.html Patterns and Software: Essential Concepts and Terminology
[L6] http://hillside.net/patterns/ Patterns Home Page
[L7] http://www.rational-software.de/ Firma Rational Software
[L8] http://www.well.com/user/smalin/miller.html The Magical Number Seven
[L9] http://www.roesch.com/ Firma Rösch Consulting
[L10] http://www.scheissprojekt.de Scheissprojekt
[L11] http://www.uml.org UML (Unified Modeling Language)
[L12] http://www.usecases.org Use Cases
[L13] http://www.microsoft.com/windows2000/server/evaluation/news/fromms/kanovalentine.asp What the Boss Should Know
[L14] http://www.ANSI.org ANSI
[L15] http://www.microsoft.com/germany Firma Microsoft
[L16] http://www.corba.org CORBA
[L17] http://www.sqi.gu.edu.au/spice/ SPICE
[L18] http://www.mindjet.de MindManager
[L19] http://www.therationaledge.com/ The Rational Edge
[L20] http://www.omg.org/mda/ MDA (Model Driven Architecture)
11.2Bücher
"Ein guter Spruch ist die Wahrheit eines ganzen Buches in einem einzigen Satz."
(Theodor Fontane)
|
Titel
|
Autoren
|
ISBN
|
[B1]
|
Code Complete
|
Steve C. McConnell
|
1-556-15484-4
|
[B2]
|
Das UML-Benutzerhandbuch
|
Grady Booch - Jim Rumbaugh - Ivar Jacobson
|
3-827-31486-0
|
[B3]
|
Deep Time
|
Gregory Benford
|
0-380-97537-8
|
[B4]
|
Digitales Verhängnis - Gefahren der Abhängigkeit von Computern und Programmen
|
Lauren Ruth Wiener
|
3-89319-672-2
|
[B5]
|
Qualitätssicherung und angewandte Statistik, Verfahren 3: Qualitätssicherungssysteme
|
DIN-Taschenbuch 226, Beuth 1992
|
3-410-12761-5
|
[B6]
|
Iacocca. Eine amerikanische Karriere
|
Lee Iacocca & William Novak
|
3-430-14937-1
|
[B7]
|
Lehrbuch der Objektmodellierung, Analyse und Entwurf
|
Heide Balzert
|
3-827-40285-9
|
[B8]
|
Per Anhalter durch die Galaxis
|
Douglas Adams
|
3-453-14697-2
|
[B9]
|
The Hitchhiker´s Guide to the Galaxy
|
Douglas Adams
|
0-517-14925-7
|
[B10]
|
The Mythical Man Month
|
Frederick P. Brooks, Jr.
|
0-201-835959
|
[B11]
|
The One Minute Manager
|
Kenneth Banchard, Ph.D. & Spencer Johnson, M.D.
|
0-688-01429-1
|
[B12]
|
The Practice of Programming
|
Brian W. Kernighan & Rob Pike
|
0-201-61586-X
|
[B13]
|
UML konzentriert
|
Martin Fowler und Kendall Scott
|
3-8273-1617-0
|
[B14]
|
Writing Effective Use Cases
|
Alistair Cockburn
|
0-201-70225-8
|
[B15]
|
Writing Solid Code
|
Steve Maguire
|
1-556-15551-4
|
[B16]
|
Software Engineering Economics
|
Barry W. Boehm
|
0-138-22122-7
|
[B17]
|
Analysemuster - Wiederverwendbare Objektmodelle
|
Martin Fowler
|
3-8273-1434-8
|
[B18]
|
Best of Booch
|
Grady Booch
|
0-13-739616-3
|
[B19]
|
Cyber Rules
|
Thomas M. Siebel, Pat House
|
0-385-49412-2
3478245206
|
[B20]
|
Entwurfsmuster
|
Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
|
3-89319-950-0
3827318629
|
[B21]
|
Der Krieg des Codes. Wie Microsoft ein neues Betriebssystem entwickelt. (Englischer Titel: Showstopper)
|
G. Pascal Zachary
|
345511038X
|
[B22]
|
Whale Done! The Power of Positive Relationships
|
Ken Blanchard, Thad Lacinak, Chuck Thompkins, Jim Ballard
|
0-7432-3538-X
|
[B23]
|
Who Moved My Cheese?
|
Spencer Johnson, M.D.
|
0-399-14446-3
|
[B24]
|
Erfolgreich mit Objektorientierung
Vorgehensmodelle und Managementpraktiken für die objektorientierte Softwareentwicklung
|
Oestereich (Hrsg.), Hruschka/Josuttis/Kocher, Krasemann/Reinhold
|
3-486-25277-1
|
12Anlagen 12.1Hütchenspiel
Diese Quelle habe ich während eines C-Kurses mit den Teilnehmern gemeinsam gebaut. Wir haben dabei viel Wert auf eine systematische Vorgehensweise gelegt. Wer mich kennt, der weiß, dass ich kein Command-Line-Junkie bin; ich wollte hier aber zeigen, dass selbst nur mit dem vi (ein sehr spartanischer UNIX-Editor) systematisch und in kurzer Zeit entwickelt werden kann. Übersetzt haben wir diese Quelle mit dem GNU C-Compiler der Linux-Distribution RedHat 7.0.
Gemäß meiner Darstellung in dieser Abhandlung haben wir das Problem über den Namen, den Zielsatz, einem kleinen Fachkonzept, einer Sammlung der fachlichen und technischen Anforderungen, einem Zweck- und Tragweiten-Diagramm, einer Sammlung von Anwendungsfällen, einem Aktivitätendiagramm mit konzeptioneller, spezifizierender und implementierender Sicht, einer Datensammlung und schließlich einer Schnittstellenbeschreibung herunter gebrochen - wohlbemerkt, alles im vi!
Das eigentliche Programmieren bestand nachher nur noch aus einem Herunterschreiben der Schnittstellen als Funktionen, dem Ausfüllen der Funktionen mit den Informationen aus der implementierenden Sicht des Aktivitätendiagramms, dem Deklarieren der gesammelten Daten sowie dem weiteren Ausfüllen der Funktionen.
Die Teilnehmer des Kurses waren überrascht, dass der Compiler nach nur zwei Syntaxfehlern durchlief und das Programm dann auf Anhieb funktionierte ;-) Es ist zwar ein super kleines Programm, aber keiner hatte erwartet, dass die gesamte Entwicklung dieses Spielchens live im Kurs nur drei Stunden dauern würde (und die Dokumentation ist integriert!).
Die Quelle folgt auf der nächsten Seite.
/*
SOFTWARE SYSTEM NAME:
SoftHat
MAIN GOAL:
SoftHat is a game where someone trys to lose money to the machine.
USER SPECIFICATION:
A fix account of 100 bucks is assumed. A user places the money onto the desk and guesses under
which of 3 hats the ball resides. Some strange guy is mixing the hats very quickly and the player
has to decide under which hat the ball might be. If he's right he get's the money he placed onto
the desk doubled; if he's wrong he loses his money. Then he might play again to get rich or poor.
BUSINESS REQUIREMENTS:
starting money account of 100 bucks
some money
3 hats
1 ball
mixing algorithm
1 player (the 2nd one is the machine)
player guesses
account modification (more if won, less if lost)
decision for continuation
TECHNICAL REQUIREMENTS:
implementation on some linux systems
C-language
runnable on standard Intel machines
PURPOSE AND SCOPE DIAGRAM:
pays money +-------------------------+
O ----------------------------> | |
/|\ guesses ball position | System Under Design |
| ----------------------------> | |
/ \ mixes hats | |
<---------------------------- | |
gives results | |
<---------------------------- | |
+-------------------------+
BUSINESS USE CASES:
: User is named "player"
UC1 Player pays money
UC2 Player guesses ball position
UC3 Player decides for next turn
SYSTEM USE CASES:
UC4 System sets starting account
UC5 System mixes the hats
UC6 System proofs result
UC7 Player gets payed back doubled
UC8 Player looses his money
DERIVED USE CASES:
UC9 SYSTEM: Welcome-message
UC10 SYSTEM: Display starting account
UC11 SYSTEM: increments the account by the doubled money
UC12 SYSTEM: decrements the account by the money
USE CASE DESCRIPTIONS:
UC5 System mixes the hats
This use case should have an algorithm for generating a ball position
(i.e. a hat number) randomly. We may use the system time in milliseconds
as a base to generate a really new number every time.
USE CASE ORDER:
UC9 UC4 UC10 UC1 UC5 UC2 UC6 UC7(UC11)/UC8(UC12) UC3
ACTIVITY DIAGRAM:
conceptual specifications implementation
^
| +---------------------------------+
| | UC9: Welcome-message | "Hy, I'm SoftHat." printf (...);
| +---------------------------------+
| |
| |
| V
Banner() +---------------------------------+
| | UC4: set starting account | set variable "Account" int iAccount = 100
| +---------------------------------+
| |
| |
| V
| +---------------------------------+
| | UC10: display starting account | "You have n bucks." printf (". %d .\n", iAccount);
| +---------------------------------+
V |
+-------------------->| do {
^ | V
| | +---------------------------------+
Pay() | UC1: pay money | set variable "Money" int iMoney;
| | +---------------------------------+ scanf ("%d", &iMoney);
V | |
| |
^ V
| +---------------------------------+
Mix() | UC5: mixing | set variable "Position" srand (time (NULL));
| +---------------------------------+ by randomizing algorithm int iPosition = (rand()%3)+1
V |
|
^ V
| +---------------------------------+
Guess() | UC2: guess | set variable "Choice" int iChoice;
| +---------------------------------+ scanf ("%d", &iChoice);
V |
|
^ V
| +---------------------------------+
| < UC6: proof result (equal?) > "Position" equal to "Choice"? if (iPosition == iChoice)
| +---------------------------------+
| / \
| y / \ n
| / \
| / \
Proof() V V
| +-----------------+ +-----------------+
| | UC7: pay back | | UC8: loose | modify variable "Account"
| +-----------------+ +-----------------+
| | |
| | |
| V V
| +-----------------+ +-----------------+
| | UC11: increment | | UC12: decrement | increment variable "Account" iAccount += iMoney;
| | account | | account | or decrement variable "Account" iAccount -= iMoney;
| +-----------------+ +-----------------+
V \ /
\ /
^ V V
| +---------------------------------+
Decide() < UC3: decision > char cAnswer;
| +---------------------------------+ scanf ("%c", &cAnswer);
V / |
^ replay/ |exit
| / |
+------------ V } while (cAnswer == 'y');
DATA:
int iAccount; used by: Banner(), Proof()
int iMoney; used by: Pay(), Proof()
INTERFACES:
void Banner(int *piAccount);
void Pay(int *piMoney);
int Mix(void); returns iPosition
int Guess(void); returns iChoice
void Proof(int iPosition, int iChoice, int *piAccount, int iMoney);
int Decide(void); returns 1 for continue and 0 for exit
GLOSSAR:
Player: is the user using the program, i.e. the player playing the game
*/
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
#define ACCOUNT 100
void Banner(int *piAccount);
void Pay(int *piMoney);
int Mix(void); /* returns iPosition */
int Guess(void); /* returns iChoice */
void Proof(int iPosition, int iChoice, int *piAccount, int iMoney);
int Decide(void); /* returns 1 for continue and 0 for exit */
int main () {
int iAccount;
int iMoney;
Banner (&iAccount);
do {
Pay (&iMoney);
Proof (Mix (), Guess (), &iAccount, iMoney);
} while (Decide () == 1);
return 0;
}
void Banner(int *piAccount) {
printf ("Hy, I'm SoftHat.\n");
printf ("You have %d bucks.\n", *piAccount = ACCOUNT);
}
void Pay(int *piMoney) {
printf ("How much money do you want to lose ;-) ");
scanf ("%d", piMoney);
printf ("\n");
}
int Mix(void) {
srand ((unsigned)time (NULL));
return (rand() % 3) + 1;
}
int Guess(void) {
int iChoice;
do {
printf ("Where is the ball? (1,2,3) ");
scanf ("%d", &iChoice);
printf ("\n");
} while (iChoice < 1 || iChoice > 3);
return iChoice;
}
void Proof(int iPosition, int iChoice, int *piAccount, int iMoney) {
if (iPosition == iChoice) {
/* matches means: player found our ball */
*piAccount += iMoney;
printf ("$$$ Congratulations $$$\n");
} else {
/* no match means: player missed it */
*piAccount -= iMoney;
printf ("--- Sorry, you missed it ---\n");
}
printf ("Your current account is: %d bucks\n", *piAccount);
}
int Decide(void) { /* returns 1 for continue and 0 for exit */
char cAnswer;
do {
printf ("Do you wanna play again? (y/n) ");
scanf ("%c", &cAnswer);
printf ("\n");
} while (cAnswer != 'y' && cAnswer != 'n');
return cAnswer == 'y' ? 1 : 0;
}
13Index
A
Amigos 13
Änderungen 8
Ansatz 11
ANSI 11
Anwendungsfall 13
Ausarbeitung 13
B
Bausteine 11
Beispiel 4
Boehm 12
Booch 13
C
Casey 12
Construction 13
D
Download 7
E
Echtsystem 13
Elaboration 13
Engineering 11
Entwurf 13
erprobt 11
Etablierung 13
evolutionär 11
F
Fehler 11
Fleischgroßhandel 11
Funktionalität 10
H
Hütchenspiel 4
I
Idealprodukt 12
Inception 13
inkrementell 13
ISS 10
iterativ 13
J
Jacobson 13
K
Komplexität 11
Konstruktion 13
Konzept 13
L
Lebenszyklus 13
Leistungsumfang 13
Life Cycle 13
Logik 11
M
Managementsicht 13
Meilenstein 13
Modell 12
Prototypen 12
Spiral 12
V 12
Wasserfall 12
modular 11
N
Nasa 10
NATO 10
O
Objektorientierung 13
Oesterreich 13
OOSE 13
Open Source 7
OpenOffice.org 7
P
Phasen 13
Pilotsystem 13
Plausibilitätsprüfung 11
Produktversion 13
Professional 11
Projekt 11
Prototyp 13
Prozess
Analyse 13
Anforderung 13
Design 13
Implementierung 13
Test 13
R
Rational 13
reale Welt 10
robuster 11
Rumbaugh 13
RUP 13
S
Schlachthof 11
Schnittstelle 11
Software-Technik 11
Softwarekrise 10
Standard 11
Standish Group 10
Statistik 10
T
Technik 11
Transition 13
U
Übergabe 13
Übergang 13
Unterschätzung 11
USDP 13
V
Versionsstufe 13
Dostları ilə paylaş: |