Systematische Softwareentwicklung



Yüklə 441,68 Kb.
səhifə22/22
tarix20.08.2018
ölçüsü441,68 Kb.
#73132
1   ...   14   15   16   17   18   19   20   21   22

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






Yüklə 441,68 Kb.

Dostları ilə paylaş:
1   ...   14   15   16   17   18   19   20   21   22




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin