Software Engineering – Überblick
Transcrição
Software Engineering – Überblick
Case Consult The Evolution En@ bling Experts CC-REPRINT Software-Engineering Überblick Harry M. Sneed CC GmbH, Wiesbaden Published in: PIK 12 (1989) Praxis der Informationsverarbeitung und Kommunikation, Carl Hanser Verlag, München, 1989 © 2002 CC GmbH® CC branded Case Consult The Evolution En@ bling Experts Copyright No part of this document may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying and recording, for any purpose without the written permission of CC GmbH. Information in this document is subject to change without notice and does not represent a commitment on the part of CC GmbH. This document and the referenced software described in this document is furnished under a license agreement or nondisclosure agreement. The document and the referenced software may be used or copied only in accordance with the terms of the agreement. It is against the law to copy the document or the software on any medium except as specifically allowed in the license or nondisclosure agreement. ® Copyright © 2002 CC GmbH. All rights reserved © 2002 CC GmbH® CC branded Case Consult The Evolution En@ bling Experts Harry M. Sneed CC GmbH, Wiesbaden Software-Engineering Überblick Sneed, Harry M., (MPA) Master of Public Administration, Univ. Maryland; Programmer/Analyst, U.S. Navy Sept.; Programmierer/Trainer, Hochschul-lnformationssysteme; Projektleiter/Testmanager, Siemens AG; SoftwareEngineering Trainer & Berater, SES; Produktleiter SOFTORG-CASE System, Budapest; Autor zahlreicher Bücher und Fachartikel zum Thema "SoftwareEngineering", Mitglied ACM, IEEE, Gl Der Begriff "Software-Engineering" wurde genau vor 20 Jahren auf einer NATOWissenschaftstagung in Garmisch von dem Münchener Mathematikprofessor Fritz Bauer geprägt. Als Antwort auf die damalige Software-Krise forderte Prof. Bauer "The establishment and use of sound engineering principles in order to obtain economically software that is reliable and works efficiently on real machines" [1] Seitdem hat sich diese junge Disziplin stets weiter entwickelt. Natürlich auch mit den üblichen Kinderkrankheiten. Die ersten Jahre bis etwa 1975 waren die Gründerjahre. Man suchte einen Platz für Software Engineering unter den herrschenden Computerwissenschaften. Da die Pioniere des Faches aus den damaligen Programmierkreisen kamen - die Gründer wie Bauer, Dijkstra, Dahl, Hoare, Wirth waren fast ausschließlich Mathematiker- lag in diesen ersten Jahren der Schwerpunkt auf einer Disziplin der Programmierung. Unter dem Oberbegriff "Strukturierte Programmierung" wurden einige neue Techniken der Programmierung eingeführt mit dem Ziel, Programme lesbarer, wartbarer, testbarer und zuverlässiger zu gestalten. Dazu gehörten Techniken zur Vereinfachung der Ablaufsteuerung, zur Gliederung der Programme, zur Strukturierung der Daten und zur allgemeinen Beherrschung der Programmkomplexität. Als Nebeneffekt wurde auch die Programmierproduktivität erhöht, wie in zahlreiReprint aus PIK 12 (1989) Praxis der Informationsverarbeitung und Kommunikation, Carl Hanser Verlag, München, 1989 © 2002 CC GmbH® Seite 1 CC branded Case Consult The Evolution En@ bling Experts chen Projektberichten aus der damaligen Zeit bestätigt wurde. Aus dieser Zeit stammen die Nassi-Schneidermann-Programme, die HIPO-Methode, die MichaelJackson-Programming-Technik, die Sprache PASCAL und zahlreiche Programmentwurfssprachen [2]. Die nächste Phase der Software-Engineering reichte in etwa von 1975 bis 1983. In diesen Jahren verlagerte sich der Schwerpunkt von der Programmierung selbst auf die Aktivitäten unmittelbar davor und danach, d.h. auf den Entwurf und den Test. Bezüglich des Entwurfs sind zahlreiche Methoden in allen Erdteilen wie Pilze aus dem Boden geschossen. Einige Methoden betonten den Entwurf der Datenstrukturen, andere betonten den Datenfluß, andere betonten die funktionale Gliederung und andere den Verfahrensablauf. Gemeinsam an allen Entwurfsmethoden war das Ziel, ein besser strukturiertes und modulares Software-System mit einem höheren Grad an Wartbarkeit, Testbarkeit und Wiederverwendbarkeit zu erreichen. Aus dieser Zeit stammen Structured Design, Jackson System Design, abstrakte Datentypen und zahlreiche andere nützliche und nicht nützliche Entwurfsansätze [3]. Parallel zu dieser Entwicklung auf der Konstruktionsseite entfaltete sich unter dem Begriff Verifikation und Validation Techniken" eine Schule für den Test und die Qualitätssicherung von Software. Von ablaufbezogener Testdeckung über funktionales Testen bis hin zur projektbegleitenden Qualitätssicherung mittels Review und Inspektionen reichte das Spektrum an Test- und Prüfmaßnahmen, die in dieser Zeit entstanden sind. Im Gegensatz zu den Entwurfsmethoden, die bald in die Praxis überführt wurden, blieben diese Techniken jedoch weitgehendst vor den Toren der Praxis stehen. Dies liegt einerseits an ihrer anspruchsvollen theoretischen Basis und zum anderen an den Kosten ihrer Einführung. Diese Kosten und Nutzen der Software-Qualitätssicherung sind immer noch umstritten [4]. Seit etwa 1983 ist Software-Engineering in eine dritte Phase übergegangen. Diese Phase ist gekennzeichnet, zum einen durch eine Ausdehnung der Software-Engineering-Disziplin aus Aktivitäten außerhalb der eigentlichen Software-Entwicklungsaktivitäten wie Projektplanung, Anforderungsspezifikation, Konfigurationsmanagement und Datenanalyse, zum zweiten durch den Versuch, die diversen Software-Engineering-Subdisziplinen zu normieren und integrieren und, zum dritten durch die Automation der Software-Entwicklung, die mit dem Begriff CASE Computer Aided Software Engineering - bezeichnet wird [5]. Heute präsentiert sich Software-Engineering als eine tiefgestaffelte und fast endlos breite Hierachie von Verfahrensmodellen, Methoden, Techniken und Werkzeugen für alle Tätigkeiten, die mit der Planung, Durchführung und Kontrolle von Projekten zur Software-Entwicklung und Wartung zusammenhängen. Diese Tätigkeiten reichen von der Anforderungsanalyse neuer Software bis zur Sanierung von alter Software und schließen folgendes ein: (s. Bild 1) ! Projektmanagement ! Anforderungsspezifikation Reprint aus PIK 12 (1989) Praxis der Informationsverarbeitung und Kommunikation, Carl Hanser Verlag, München, 1989 © 2002 CC GmbH® Seite 2 CC branded Case Consult The Evolution En@ bling Experts ! System- und Programmentwurf ! Programmierung ! Programmtest ! Integrationstest ! Systemabnahme ! Systemverwaltung ! Systemwartung ! Systemerneuerung Für jede dieser Tätigkeiten gibt es eigene Methoden mit eigenen Techniken und eigenen Werkzeugen (Bild 2). Da diese auch stark im Fluß begriffen sind, ist es fast unmöglich, sie alle zusammenzufassen. Software-Engineering ist eben noch sehr jung und entsprechend schnell ist ihr Wachstum. Sie wächst sogar schneller als unser Vermögen, sie zu begreifen. Daher muß jeder Versuch, Software-Engineering zu beschreiben, zeitlich und räumlich abgegrenzt werden. In diesem Aufsatz werden fünf Schwerpunktthemen, die für den heutigen Stand der Software-Engineering kennzeichnend sind, herausgegriffen und kurz erläutert. Diese fünf Themen sind: ! Software-Projektmanagement ! Software Requirements Engineering Reprint aus PIK 12 (1989) Praxis der Informationsverarbeitung und Kommunikation, Carl Hanser Verlag, München, 1989 © 2002 CC GmbH® Seite 3 CC branded Case Consult The Evolution En@ bling Experts ! Software-Entwurf ! Software-Qualitätssicherung ! Software-Wartung und -Wiederverwendung Zum Abschluß wird auf den Versuch der IEEE eingegangen, Software-Engineering zu normieren, denn sollte Software-Engineering jemals eine echte Ingenieurdisziplin werden, dann nur auf dem Wege der internationalen Normierung. Erst wenn solche international verbindliche Normen gelten, werden wir von einer wahren Ingenieurdisziplin reden können. Bis dahin wird sie bleiben was sie ist: ein nebelhaftes, konturloses Luftschloß am Horizont, dessen Gestalt sich je nach Blickwinkel ändert. Software-Projektmanagement Software Engineering ist von Anfang an eng mit Software-Projektmanagement verbunden gewesen. Michael Jackson hat einmal behauptet, Software-Engineering sei ausschließlich ein Instrument des Managements um eine dynamisch chaotische Technologie in ein statisches Zwangsmuster zwecks der Kontrolle hineinzupressen [6]. Damit wollte Jackson die diversen Lebenszykluskonzepte bzw. Phasenkonzepte in Zweifel stellen. Er meint mit Recht, wir dürfen Dinge nicht institutionalisieren, die noch nicht ausgereift sind. Wenn wir aber seine Gedanken weiterverfolgen, dann dürften wir Reprint aus PIK 12 (1989) Praxis der Informationsverarbeitung und Kommunikation, Carl Hanser Verlag, München, 1989 © 2002 CC GmbH® Seite 4 CC branded Case Consult The Evolution En@ bling Experts überhaupt keine Software herstellen, weil wir noch zu wenig davon verstehen. Die Tatsache, daß Software zu einem unentbehrlichen Bestandteil unseres postindustriellen Zeitalters geworden ist, zwingt uns, deren Herstellungs- und Wartungsprozeß unter Kontrolle zu bringen. Denn nur mittels Phasen, Prüfungen und Richtlinien können wir überhaupt hoffen, diesen wahrlich stochastischen Prozeß unter dem Gesichtspunkt der Wirtschaftlichkeit und Zuverlässigkeit in den Griff zu bekommen. Demzufolge ist ein Phasenkonzept irgendwelcher Art die Voraussetzung schlechthin für Software-Engineering. In den 70er Jahren hat sich das konventionelle Wasserfallmodell (Bild 3) verbreitet. Danach hat jede Phase das Teilprodukt der vorhergehenden Phase erweitert und überarbeitet, um daraus ein neues detailliertes Teilprodukt zu erzeugen, z.B. Programme aus dem Entwurf erzeugen. Pro forma arbeiten die meisten Anwenderbetriebe immer noch nach diesem veraltetem Konzept, obwohl seine Schwächen hinlänglich bekannt sind. Sogar Barry Boehm, der Vater dieses Modells, hat sich davon distanziert [7]. Heute hat man die Wahl zwischen verschiedenen Vorgehensmodellen. Neben dem konventionellen Wasserfallmodell bieten sich u.a. das zyklische Modell, das Operationsmodell, das Transformationsmodell und das Prototyping Modell an. Das zyklische Modell (Bild 4) sieht vor, daß ein größeres Software-System stückweise in vielen kleinen Inkrementen realisiert wird, d. h. der Lebenszyklus wird mehrfach durchlaufen bis das gewünschte System endlich fertig und einsatzreif ist. Die Inkremente können gar einzelne Programme oder Transaktionen sein. Auf diese Weise reduziert man das Risiko einer Fehlentwicklung. Boehm propagiert, daß kein SoftwareProjekt länger als zwei Jahre oder mehr als 20 Mannjahre beanspruchen darf. Sonst ist das Inkrement zu groß. Dies hat zur Folge, daß große Projekte in vielen kleineren Projekten zu zerschlagen sind, die nebeneinander und/oder hintereinander ablaufen [8], Reprint aus PIK 12 (1989) Praxis der Informationsverarbeitung und Kommunikation, Carl Hanser Verlag, München, 1989 © 2002 CC GmbH® Seite 5 CC branded Case Consult The Evolution En@ bling Experts Reprint aus PIK 12 (1989) Praxis der Informationsverarbeitung und Kommunikation, Carl Hanser Verlag, München, 1989 © 2002 CC GmbH® Seite 6 CC branded Case Consult The Evolution En@ bling Experts Das Operationsmodell (Bild 5) sieht eine lange Spezifikationsphase vor, in der bis zu 75% der manuellen Arbeit hineinfließt, um eine operationale Spezifikation zu erstellen. Danach erfolgen zwei oder mehr automatisierte Transformationen, z.B. vom Fachkonzept ins technische Konzept und vom technischen Konzept in die Programme, wobei auf jeder semantischen Ebene einiges manuell hinzugefügt wird. Danach beträgt das Verhältnis der Spezifizierer zu den Entwicklern etwa 3:2. Die Hauptaufgabe der Entwickler bleibt der Test der generierten Programme gegen die ursprüngliche Spezifikation [9]. Das Transformationsmodell (Bild 6) geht einen Schritt weiter. Hiernach steckt 100% der manuellen Arbeit in der Spezifikation, die anschließend mit Hilfe eines Expertensystems vollautomatisch in Zielprogramme transformiert wird. Formale Beweisführung tritt an die Stelle des Testens, denn insofern als die Transformation korrekt erfolgt, sind die Programme theoretisch eine exakte Wiedergabe der Spezifikation. Für eine derartige Transformation ist eine Knowledge-Base der Zielumgebung mit Kenntnis der Umsetzungs- und Optimierungsregeln sowie der technischen Einschränkungen erforderlich [10]. Das Prototyping Modell (Bild 7) sieht schließlich die Konstruktion einer lauffähigen Version bzw. einer Simulation der Anwendung in einer provisorischen Form vor, damit der Benutzer einen Eindruck vom Endprodukt gewinnen kann. Mit diesem Modell werden die Bedürfnisse des Benutzers erforscht und festgehalten, um sie nachher mit einer richtigen ingenieursmäßig konstruierten Version zu erfüllen. So gesehen ist der Prototypbau Bestandteil der Requirements Engineering, ein kleines Vorprojekt. Hier verbirgt sich die Gefahr, daß aus einem Vorprojekt ein ganzes Projekt und aus dem Prototyp ein Produkt wird mit allen verheerenden Konsequenzen für die Wartung [ 11] . Reprint aus PIK 12 (1989) Praxis der Informationsverarbeitung und Kommunikation, Carl Hanser Verlag, München, 1989 © 2002 CC GmbH® Seite 7 CC branded Case Consult The Evolution En@ bling Experts Neben der Bereitstellung eines geeigneten Vorgehensmodells umfaßt Software Management die Tätigkeiten der Systemdefinition, der Kostenkalkulation, der Projektorganisation, der Projektplanung und der Systemverwaltung. Bei der Systemdefinition werden die Anforderung analysiert, verschiedene fachliche Lösungsalternativen ausgewertet, Ziele gesetzt und der Projektumfang quantitativ und qualitativ abgesteckt. Bei der Projektkalkulation werden der Aufwand, die Dauer und die Folgekosten der Projekte nach irgendeiner Schätzmethode geschätzt. Einige der bekanntesten Schätzmethoden sind die COCOMO-Methode von Boehm [12], die Function-PointMethode von Albrecht [13], die Komponentenanalyse-Methode von Sneed [14], und die Analogie-Methode von Putnam [15]. Diese Methoden dienen alle dazu, den Aufwand und die Laufzeit eines Projekts anhand der definierten Qualität und Quantität des Systems sowie der Produktivität der Mitarbeiter zu berechnen. Die Produktivität läßt dich in Anweisungen, Lines of Code, Function Points oder Komponente erfassen. Bei der Projektorganisation wird eine geeignete Organisationsform für die Durchführung des Projekts bestimmt. Software-Projekte können fast beliebig organisiert werden. So gibt es verteilte Projekte unter der Leitung der Entwickler, Chief-Programmer Teams, kollegiale Teams usw. Jede Organisationsform hat Vor- und Nachteile, abhängig von der jeweiligen Projektumgebung. Gewiß ist nur, daß die Organisation des Projektes untrennbar von der Architektur des Software-Systems selbst ist. Die Arbeitsteilung im Projekt zeigt sich unweigerlich in der Komponententeilung des Produktes. Bei der Projektplanung werden die Zwischenergebnisse, Teilprodukte, Aufgaben und Phasen eines Projektes endgültig festgelegt und der Projektablauf auf die Zeitachse projektiert. Dafür werden Planungstechniken wie z.B. PERT, CPM oder MPM verwendet. Sie dokumentieren die Abhängigkeiten zwischen den Aufgaben und zeigen alternative Möglichkeiten zur Abarbeitung der Aufgaben auf. Wichtig hier ist, daß der Arbeitsplan - Workbreakdown Plan - möglichst fein gegliedert wird, um alle Aufgaben zu erfassen. Reprint aus PIK 12 (1989) Praxis der Informationsverarbeitung und Kommunikation, Carl Hanser Verlag, München, 1989 © 2002 CC GmbH® Seite 8 CC branded Case Consult The Evolution En@ bling Experts Bei der Projektsteuerung kommt es darauf an, den Projektablauf zu verfolgen und notfalls zu korrigieren. Für die Projektverfolgung ist ein Berichtswesen nötig. Verfolgt werden die Termine, Kosten, Aufwand der Aufgaben sowie der Status und die Qualität der Ergebnisse. Durch einen Soll/lst-Vergleich werden die Abweichungen vom Soll protokolliert und festgehalten. Es ist hier, wo wichtige Daten für die Software-Forschung zu gewinnen sind. Bei der Systemverwaltung werden letztlich der Zustand der Software-Komponenten überwacht, verschiedene Versionen geführt und die Änderungen verfolgt. Hier setzt also das Configuration Management ein. Hier schließt sich auch der Kreis der Entwicklung mit der Definition neuer Anforderungen aufgrund der Erfahrung mit dem Produkt [16]. Software Requirements Engineering Die eigentliche Implementierung der Software bzw. die Programmierung selbst stand am Anfang im Mittelpunkt der Software Engineering. Sie ist auch heute wichtig und leider von vielen sogenannten Praktikern immer noch nicht bewältigt, aber inzwischen sind andere Themen der Software-Technologie in den Vordergrund gerückt. Ein solches Thema ist Requirements Engineering". Es hat sich nämlich gezeigt, daß alle Bemühungen in der Programmierung umsonst sind, wenn man die Anforderungen nicht richtig erfaßt oder verstanden hat. Es besteht sogar die Gefahr, daß eine völlig falsche Lösung optimal implementiert wird. Um dies zu verhindern, sind verschiedene Methoden der Requirements-Analyse und -Spezifikation ins Leben gerufen worden. Sie teilen sich in manuelle und maschinelle Methoden, aber das Ziel ist gemeinsam. Sie dienen dazu, ein Modell der Anwendung zu schaffen, damit dieses mit dem Benutzer vor der eigentlichen Realisierung abgestimmt werden kann. Dazu müssen sie eine Darstellungsform anbieten, mit deren Hilfe das Anwendungsmodell erfaßt, dokumentiert und validiert werden kann. Darüberhinaus wird es oft notwendig sein, vor allem bei interaktiven oder zeitkritischen Systemen, das Verhalten des geplanten Systems zu simulieren. Diese Simulierung unter der Bezeichnung "Prototyping" ist ein wichtiger Bestandteil der Requirements Engineering geworden. Im Mittelpunkt der "Requirements Engineering" steht die Darstellungstechnik. Danach unterscheiden sich die Spezifikationsansätze in graphische, tabulare und notationelle Beschreibungen. Zu den graphischen Darstellungstechniken gehören Petrinetze, Datenflußdiagramme, Datenbäume, Funktionsbäume und Entity/Relationship-Diagramme. Zu den tabularen Darstellungstechniken gehören EVA-Diagramme, Entscheidungstabellen, Präzedenztabellen, Relationentabellen und Zuordnungstabellen. Zu den notationellen Darstellungsformen gehören strukturierte Prosa, Pseudo Code, Datenbeschreibungssprachen, algebraische Formeln und sonstige formale Beschreibungssprachen wie z.B. die Vienna Definition Language. In der Praxis werden die genannten Darstellungsformen oft kombiniert. Die Vielfalt der Darstellungstechniken führt zu einer noch höheren Anzahl von Kombinationsmöglich- Reprint aus PIK 12 (1989) Praxis der Informationsverarbeitung und Kommunikation, Carl Hanser Verlag, München, 1989 © 2002 CC GmbH® Seite 9 CC branded Case Consult The Evolution En@ bling Experts keiten. Daraus erklärt sich die Explosion von Spezifikationsansätzen, die im Grunde genommen alle ähnlich sind. Zu den bekanntesten manuellen Spezifikationsansätzen zählen die HIPO-Methodik, die SADT-Methodik, die E/R-Methodik und die SAMM (structured analyse) Methodik, wovon es verschiedene Varianten gibt. Diese Methoden sehen alle das Zeichen von Diagrammen vor, die mit Texten und Tabellen ergänzt werden. Die daraus resultierenden Dokumente werden auf der einen Seite den Benutzern zwecks der Abstimmung und auf der anderen Seite den Entwicklern als Arbeitsvorgabe vorgelegt [17]. Außer diesen informalen Ansätzen gibt es zahlreiche formale Spezifikationssprachen für die Spezifikation von Software-Systemen wie VDL, SETL, Z und SLAN-4. Diese Sprachen erlauben es dem Analytiker, die Anforderungen in einer strengen mathematischen Notation zu beschreiben, die sich durch entsprechende Werkzeuge editieren und analysieren läßt [18]. Computergestützte Spezifikationsansätze bilden den Kern dessen, was heute als CASE auf dem Markt angeboten wird. Abgesehen von dem Etikett, ist aber wenig neu an diesen Ansätzen. Eine der populärsten computergestützten Spezifikationsansätze - das ISDOS-System mit PSL und PSA -wurde schon Anfang der 70er Jahre entwickelt [19]. In der zweiten Hälfte der 70er Jahre entstand das SREM-System mit seiner Requirements Spezifikationssprache (RSL). Dieses System ist nach wie vor das umfangreichste Requirements Engineering System der Welt, mit einer Mischung aus Graphik, Tabellen und Text. Es enthält übrigens auch schon vom Anfang an eine Prototyping Kapazität [20]. Inzwischen sind die computergestützten Requirements-Spezifikationssyteme so zahlreich, daß man sie überhaupt nicht mehr zählen kann. Allein in den USA werden mehr als 200 auf dem Markt angeboten. Nur mit der Zeit wird es möglich sein, den Streu vom Weizen zu trennen. Auf jedem Fall hat durch CASE das Thema "Requirements Engineering" einen mächtigen Auftrieb bekommen. Umstritten ist noch, ob die Spezifikation als getrenntes Teilprodukt neben den Programmen zu erstellen und zu pflegen ist oder ob daraus die Programme zu generieren sind. Für beide Alternativen gibt es Vor- und Nachteile. Software-Entwurf Ein Kernthema der Software Engineering, das von vielen irrtümlicherweise mit Software Engineering schlechthin verwechselt wird, ist der Entwurf von Software-Systemen. Die Tätigkeit des Entwerfens ist zwar von großer Bedeutung, nicht nur für die Programmierung, sondern auch für das Testen und die Wartung, aber sie bleibt schließlich nur eine von vielen Tätigkeiten, die ein Software Engineer ausübt. Im Laufe der 70er Jahre ist eine Vielzahl von Entwurfsansätzen aus der DV-Praxis hervorgegangen. Praktiker wie Mills, Wirth, Myers, Constantine, Yourdon, Jackson, Warnier, Orr und zahlreiche andere haben ihre Ideen zu diesem Thema dokumentiert. Es sind Ideen, mit denen jeder Software Engineer vertraut sein müßte. Im großen und Reprint aus PIK 12 (1989) Praxis der Informationsverarbeitung und Kommunikation, Carl Hanser Verlag, München, 1989 © 2002 CC GmbH® Seite 10 CC branded Case Consult The Evolution En@ bling Experts ganzen lassen sich die Entwurfsansätze der 70er Jahre nach ihrem Ausgangspunkt in drei Kategorien erteilen: ! funktionsorientierte Ansätze ! datenflußorientierte Ansätze ! datenstrukturorientierte Ansätze Die funktionsorientierten Ansätze gehen von der funktionalen Gliederung einer Anwendung aus. Die Hauptfunktionen werden schrittweise verfeinert bis man auf die Grundfunktionen stoßt. Jede Funktion ist eine "black box" mit Eingaben, Ausgaben und einer Verarbeitungsregel. Die Daten werden aus der Sicht der Verwendung definiert und erst zum Schluß in Datengruppen zusammengefaßt. Stellvertretend für diesen Ansatz sind die HIPO-Methode der IBM [21] sowie die Arbeiten von Wirth - Stepwise Refinement [22] - und Mills -Information System Design [23]. Dieser Ansatz gewann im Laufe der 70er Jahre den größten Verbreitungsgrad. Die datenflußorientierten Ansätze gehen von dem Datenfluß durch das System aus. Der Fluß der Daten von einer Transformation zur anderen wird skizziert und aus den Transformationen werden die Funktionen abgeleitet. Die Funktionsstruktur wird somit aus der Zusammenführung zusammenhängender Datenflüße abgeleitet. Die Grundfunktionen sind die verfeinerten Datentransformationen. Eine weitere Variante dieses Ansatzes ist die Transaktionsanlyse für Online-Anwendungen, bei der einzelne Datenflußpfade aufgrund einer Analyse der Transaktionsart angesteuert werden. Stellvertretend für diesen Ansatz sind die Arbeiten von Myers, Constantine und Yourdon unter dem gemeinsamen Begriff "Structured Design" [24]. Dieser Ansatz ist auch die Basis zahlreicher Entwurfswerkzeuge geworden, wahrscheinlich wegen der Eignung der Datenflußdiagramme für graphische Representationen. Die datenstrukturorientierten Ansätze gehen von der Struktur der Anwendungsdaten aus. Die Daten werden hierbei als die Basis der Software-Struktur angesehen. Zuerst wird ihre Struktur in Anhängigkeit von ihrer Verwendung bestimmt. Daraus ergeben sich die einzelnen Datengruppen, die sich in Eingabe- und Ausgabestrukturen teilen. Durch eine Gegenüberstellung bzw. einer Zusammenführung der miteinander verbündeten Eingabe- und Ausgabe-Strukturen werden die Funktionen und ihre Struktur abgeleitet. Die Funktionen werden als Operationen auf die einzelnen Daten bzw. Datengruppen betrachtet. Ausschlaggebend für die Strukturierung der Funktionen ist die Strukturierung der Daten, die sie verarbeiten. Stellvertretend für diesen Ansatz sind die Arbeiten von Jackson [25], Warnier [26] und Orr [27], die den Ansatz inzwischen vom Programmentwurf auch auf den Systementwurf übertragen haben. Der datenstrukturbezogene Ansatz mit seiner exakten Vorgehensweise bietet die beste Basis für die automatische Generierung der Software. Er ist jedoch der anspruchvollste und damit auch am schwierigsten zu lernen. In den 80er Jahren ist ein neuer Entwurfsansatz in Anlehnung an den datenstrukturbezogenen Ansatz unter dem Begriff objektorientierter Entwurf entstanden [28]. Dieser zukunfsträchtige Ansatz sieht als Ausgangspunkt die Identifikation der Datenobjekte vor. Diese können Masken, Listen, Tabellen, Dateien oder sonstige extreme Reprint aus PIK 12 (1989) Praxis der Informationsverarbeitung und Kommunikation, Carl Hanser Verlag, München, 1989 © 2002 CC GmbH® Seite 11 CC branded Case Consult The Evolution En@ bling Experts Schnittstellen sein. Sie entsprechen den Hauptwörtern in der Anwendungsbeschreibung. Sind sie einmal eindeutig identifiziert, werden die Operationen auf sie ermittelt. Diese entsprechen den Verben in der Anwendungsbeschreibung. Jedes Objekt und die dazugehörigen Operationen bilden eine Datenkapsel bzw. einen abstrakten Datentyp. Ein Software-System entsteht bottom-up aus der Zusammenführung seiner Datentypen, die über abstrakte Datenschnittstellen miteinander kommunizieren. Die abstrakten Datenschnittstellen entsprechen den Views bzw. Datensichten auf die diversen Datenobjekte. Stellvertretend für diesen Ansatz sind die Arbeiten von Parnas [29], Denert [30], Booch [31] und Cox [32]. Der objektorientierte Entwurfsansatz fördert die Modularität, die Testbarkeit und die Wiederverwendbarkeit und scheint deshalb am meisten im Einklang mit den Zielen der Software-Qualitätssicherung zu stehen [33], Die Wahl eines geeigneten Entwurfsansatzes ist heute immer noch eine Glaubenssache. Wegen der Vielfalt der Ziele ist es nicht möglich nachzuweisen, daß ein Ansatz eindeutig besser ist als die anderen. Wichtig ist, daß nach einer Methode entworfen wird, die mit den Zielen der Anwendung übereinstimmt. Die Entscheidung für eine Entwurfsmethode hängt aber nicht nur von der Anwendung, sondern auch von dem Erfahrungsprofil der Entwickler und der Verfügbarkeit von Werkzeugen ab. Sie ist eine der wichtigsten Entscheidungen, die ein Software Engineer zu treffen hat [34]. Software-Qualitätssicherung Ein zentrales Thema der Software Engineering, der viel Aufmerksamkeit gewidmet wird, ist die "Qualitätssicherung". Software Engineering soll schließlich zwei Zwecken dienen, zum einen der Steigerung der Produktivität und zum zweiten der Erhöhung der Qualität. Von diesen beiden Zielen hatte jedoch vom Anfang an die Qualitätssicherung" die höchste Priorität. Man könnte behaupten, Software Engineering sei ins Leben gerufen, um die Qualität der Software zu bessern. Es stellte sich jedoch bald heraus, das der Begriff "Qualität" im Bezug auf Software äußerst schwammig ist. Es ist zwar sehr viel zu diesem Thema geschrieben worden und an Definitionen mangelt es nicht. Die Schwierigkeit besteht darin, die Definitionen zu operationalisieren; der Teufel steckt im Detail. Die üblichen Qualitätsmerkmale sind: ! Zuverlässigkeit ! Benutzerfreundlichkeit ! Sicherheit ! Effizienz ! Wartbarkeit ! Übertragbarkeit ! Erweiterbarkeit ! Wiederverwendbarkeit [35] Reprint aus PIK 12 (1989) Praxis der Informationsverarbeitung und Kommunikation, Carl Hanser Verlag, München, 1989 © 2002 CC GmbH® Seite 12 CC branded Case Consult The Evolution En@ bling Experts Die ersten vier Merkmale ergaben sich aus der Sicht des Konsumenten, die letzten vier sind mehr aus der Sicht des Produzenten. Hier zeigt sich schon, daß Qualität wie Schönheit nicht ohne weiteres objektivisierbar ist, sie liegt zum Teil in den Augen des Betrachters. Qualität ist auch relativ. Sie hängt von der jeweiligen Situation und der Nutzung ab. D.h. sie muß bei jeder Anwendung neu definiert werden. Die Variante Natur der Software-Qualität macht es sehr schwer, sie so exakt zu definieren, daß man sie messen könnte. Denn, um sie messen zu können, müßte die Qualität erst quantifiziert werden. Hierfür bieten sich zahlreiche Software-Metriken an, z.B. Halsteads Software Science [36], McCabes Metrik für Ablaufkomplexität [37], Chapins Metrik für Datenkomplexität [38], Huangs Metrik für Datenflußkomplexität [39] und Henrys Metrik für Systemkomplexität [40]. Somit haben wir auf der einen Seite einige abstrakte Begriffe und auf der anderen Seite eine Vielzahl an quantitativen Meßansätzen. Dazwischen ist eine riesige Kluft. Es fehlt also die Verbindung zwischen diesen beiden Ebenen, d.h. niemand kann sagen, ob McCabes Metrik wirklich einen Zusammenhang mit Wartbarkeit oder Zuverlässigkeit hat. Solange diese Verbindungen fehlen, wird die Software-Qualitätssicherung keine fundierte theoretische Basis haben. Zur Zeit arbeiten einige nahmhafte Forschungsprojekte daraufhin, diese Verbindung herzustellen, darunter das Software-Engineering-Labor von Prof. Basili; in den USA [41] und das REQUEST-Projekt in Europa [42]. Da die Verbindungen sich nur empirisch beweisen lassen, ist die Arbeit äußerst mühselig. Es ist vor allem schwierig, geeignete Daten aus der DV-Praxis zu erhalten. Daher wird es wahrscheinlich noch Jahre dauern, bis ein fundiertes theoretisches Modell für Software-Qualitätssicherung existiert. Bis dahin wird man sich mit pragmatischen Ansätzen abfinden müssen. Die pragmatischen Ansätze zur Qualitätssicherung orientieren sich an den SoftwareEntwicklungsphasen. Nach der Phase der Anforderungsspezifikation erfolgt die Spezifikationsabnahme durch formale und sachliche Prüfungen. Die formalen Prüfungen, die auch computergestützt sein können, kontrollieren die Konsistenz, die Vollständigkeit und die Plausibilität bzw. Implementierungsgerechtigkeit des Fachkonzeptes. Hier lassen sich schon sowohl etliche formale Fehler erkennen als auch fachliche Schwachstellen aufdecken. Nach der Entwurfsphase folgt die Entwurfsbewertung bzw. der Design Review. Hier sind vielerlei Prüfungen möglich. Zum einen wird geprüft, ob das technische Konzept formal korrekt ist. Zum zweiten wird geprüft, ob der Entwurf den Entwurfsrichtlinien entspricht. Zum dritten wird geprüft, ob der Entwurf die Spezifikation abdeckt. Schließlich läßt sich prüfen, inwieweit der Systementwurf die Spezifikationsmerkmale erfüllt. Diese Prüfungen lassen sich zum größten Teil automatisch durchführen. Auf die Programmierung folgt die Programmprüfung, auch Code-Inspektion genannt. Hier geht es darum, zu prüfen, ob die Programme die Programmierrichtlinien einhalten, ob sie den Entwurf korrekt widerspiegeln und ob sie im Einklang mit spezifizierten Qualitätsmerkmalen sind. Im immer stärkeren Maße werden diese Prüfungen durch automatische Werkzeuge wie Code-Auditoren und statischen Analysatoren unterstützt. Reprint aus PIK 12 (1989) Praxis der Informationsverarbeitung und Kommunikation, Carl Hanser Verlag, München, 1989 © 2002 CC GmbH® Seite 13 CC branded Case Consult The Evolution En@ bling Experts Nach dem Test erfolgt eine Testrevision. Hier wird kontrolliert, ob die Software ausreichend getestet wurde. Dazu sind gewisse Testdeckungsgrade wie z.B. Ablaufdeckung, Datendeckung und Funktionsdeckung erforderlich. Diese Deckungsmaßstäbe hängen mit den jeweiligen Testansätzen zusammen: ! der ablaufbezogene Test, wonach die Testfälle aufgrund der Ablaufstruktur der Programme ermittelt werden ! der datenbezogene Test, wonach die Testfälle aufgrund der Datenstruktur ermittelt werden ! der funktionsbezogene Test, wonach die Testfälle aufgrund der Spezifikation ermittelt werden Die genannten Testansätze müssen systematisch angewandt und maschinell unterstützt werden. Dafür werden diverse Testwerkzeuge wie Testmonitoren, dynamische Analysatoren, Testdatengeneratoren und Testergebnisvalidatoren eingesetzt. Der Nutzen der Software-Qualitätssicherung zeigt sich meist erst in der Wartungsphase. Je länger diese Phase dauert, je größer der Nutzen. Da dieser Nutzen aber selten in die ursprüngliche Kosten/Nutzen-Analyse berücksichtigt ist, sehen die Verantwortlichen der Software-Entwicklung nur die erhöhten Kosten der Qualitätssicherung. Dies erklärt, warum die Qualitätssicherung in der Praxis fast immer zu kurz kommt. Software-Qualität in den Griff zu bekommen, ist eines der großen offenen Probleme der heutigen Software Engineering [43]. Software-Wartung und -Wiederverwendung Wartung und Wiederverwendung sind zwei verwandte Themen, die immer mehr an Bedeutung gewinnen. Je mehr Software produziert wird, desto mehr wächst das Problem der Pflege und je teurer Software wird im Verhältnis zur Hardware, desto mehr wächst der Druck, vorhandene Software wiederzuverwenden. Casper Jones hat geschätzt, daß es 1990 weltweit mehr als 25 Milliarden Programmanweisungen geben wird. In einem durchschnittlichen Programm sind jedoch nur ca. 15% der Anweisungen problemspezifisch, d.h. 85% wäre wiederverwendbar [44]. Es werden in fast jedem Betrieb Millionen an redundanter Software verschwendet, bloß weil es dem Software Management nicht gelingt, vorhandene Software wiederzuverwenden. Inzwischen hat Software Engineering auf diese Situation reagiert, nicht nur in der Theorie, sondern auch in der Praxis. Software-Wiederverwendung ist kein Schlagwort mehr. Sie wird auf der einen Seite durch neue Entwurfsansätze wie "Object Oriented Design" explizit bei der Entwicklung angestrebt [45]. Auf der anderen Seite wird sie nachträglich durch "Reverse Engineering" erarbeitet. Durch die Methodik der Software-Sanierung werden alte Software-Systeme wie alte Städte renoviert und wieder verwendbar gemacht. Außerdem wird durch den Einsatz von Expertensystemen alte Software automatisch wiederaufbereitet und in neue Systeme mit den gleichen Funktionen überführt. Diese und ähnliche Ansätze versprechen mögliche Lösungen zur Bewältigung der Vergangenheit und zur Rettung bisheriger Investitionen [46]. Reprint aus PIK 12 (1989) Praxis der Informationsverarbeitung und Kommunikation, Carl Hanser Verlag, München, 1989 © 2002 CC GmbH® Seite 14 CC branded Case Consult The Evolution En@ bling Experts Ebenso wichtig wie die Wiederverwendung der alten Software ist deren Pflege. Die überwiegende Mehrzahl der heutigen Programmierer - nach Lientz und Swanson schon mehr als 50% - sind nur noch mit der Instandhaltung vorhandener SoftwareSysteme beschäftigt. Dafür sind dringend erprobte Verfahren und Hilfsmittel erforderlich. Ein solches Verfahren ist das "Configuration Management" für die laufende Verwaltung der Software-Komponenten sowie für einen geregelten Fehlerkorrektor- und Änderungsdienst. Fehlermeldungen und Änderungsanträge durchlaufen ein exakt definiertes Vorgehensmodell, in dem die Änderungen, Erweiterungen und Korrekturen zur vorhandenen Software geplant, spezifiziert, durchgeführt, verifiziert und validiert werden. Außerdem werden verschiedene Software-Versionen registriert und geführt. Werkzeuge für die Software-Wartung reichen von Source-Comparatoren und statischen Analysatoren bis zu Data Dictionary und Configuration Management Systeme. Ihr Einsatz ist für die Verwaltung komplexer Software-Systeme heute unentbehrlich [47]. Wartung und Wiederverwendung werden in den 90er Jahren mit großer Wahrscheinlichkeit die wichtigsten Themen in Software Engineering werden (Bild 8). Software Engineering Standards Seit 1975 bemüht sich das IEEE (Institute of Electrical and Electronics Engineers) um Standards für Software Engineering. Das Ergebnis dieser Bemühungen ist eine Reihe Standards für fast alle Gebiete der Software Engineering. Diese Standards werden zur Zeit von dem American National Standard Institute als Probe-Standards angeboten. Nachdem genügend Erfahrung mit ihnen gesammelt worden ist, werden sie ausgeReprint aus PIK 12 (1989) Praxis der Informationsverarbeitung und Kommunikation, Carl Hanser Verlag, München, 1989 © 2002 CC GmbH® Seite 15 CC branded Case Consult The Evolution En@ bling Experts wertet und notfalls überarbeitet. Noch steht es allen Unternehmen offen, ob sie sich nach diesen Normen orientieren oder nicht. Im zunehmenden Maße werden jedoch die lEEE-Normen zum Bestandteil der Software-Entwicklungsaufträge, die die US-Regierung erteilt. Auf diese Weise wird Druck auf die Industrie ausgeübt, die Normen anzuwenden. Zwar sind die lEEE-Normen nicht überall der Weisheit letzter Schluß, aber sie bieten doch einen praktikablen Ausgangspunkt und sind die beste Orientierung, die Software Engineering zur Zeit hat. Wenn Software Engineering in den nächsten Jahren überhaupt feste Konturen gewinnt, dann wird es auf der Basis dieser Normen sein. Normierung fängt bei den Begriffen an. Dafür hat die IEEE ein "Glossery of Standard Software Engineering Terminology" ANSI/IEEE Std. 729-1983 herausgegeben. In dieser Standard befindet sich auch ein musterhaftes Lebenszykluskonzept mit den Phasen: ! Concept Exploration ! Requirements Specifikation ! Design ! Implementation ! Test ! Installation ! Operation and Maintenance Für die allgemeine Software-Qualitätssicherung gibt es zwei Normen, das ANSI/IEEE Std. 730-1984 - Software Quality Assurance Plans - mit Maßnahmen zur Sicherung der Qualität im gesamten Lebenszyklus, und ANSI/IEEE Std. 983-1986-Software Quality Assurance Planning - zur Planung der Qualitätssicherungsmaßnahmen. Für die Spezifikation der Anforderungen bzw. die Erstellung eines Fachkonzeptes gibt es das ANSI/IEEE Std. 830-1984-Software Requirements Specifications - mit einem umfangreichen Fallbeispiel. Für den Entwurf der Software-Systeme bzw. die Erstellung eines technischen Konzeptes gibt es das ANSI/IEEE Std. 1016-1987 - Software Design Description - mit genormten Diagrammtechniken zur Entwurfsdokumentation. Für die Programmierung gibt es das ANSI/IEEE Std. 999-1987 - ADA as a Program Design Language - mit der Empfehlung, ADA zumindest als Programmentwurfssprache zu benutzen, auch dann, wenn das Programm in einer anderen Zielsprache implementiert wird. Für den Programmtest gibt es den ANSI/IEEE Std. 1008-1987, Software Unit Testing, mit einem ausführlichen Modultestverfahren. Für den Systemtest gibt es den ANSI/IEEE Std. 829-1983, Software Test Documentation, mit einer Beschreibung von Testplänen, Testfallentwürfen, Testprozeduren und Testberichten. Reprint aus PIK 12 (1989) Praxis der Informationsverarbeitung und Kommunikation, Carl Hanser Verlag, München, 1989 © 2002 CC GmbH® Seite 16 CC branded Case Consult The Evolution En@ bling Experts Für die Systemabnahme gibt es den ANSI/IEEE Std. 1012-1986, Software Verification and Validation Plans, mit einer Liste der wichtigsten Abnahmekriterien. Für die Systemverwaltung gibt es schließlich den ANSI/ IEEE Std. 828-1983, Software Configuration Management Plans, mit Richtlinien für die Versionsführung, den Änderungsdienst und die Zustandsverfolgung [48]. Die obengenannten Standards bieten ein brauchbares Gliederungsschema zum Thema Software Engineering und haben in dem Meer von Literatur zu diesem Thema die Rolle von Leuchttürmen angenommen. Daher sei es ratsam für jeden, der sich Software-Ingenieur schimpft, sich danach zu richten. Nur so hat Software Engineering die Chance, jemals eine echte Ingenieurdisziplin zu werden. Literatur [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] Naur, P./Randell, B.: Software Engineering" Report on Conference of NATO Science Committee, NATO, 1969 Sneed, H.: Strukturierte Programmierung" GES Training Pakkage nr. 2, Allensbach, 1975 Freeman, P./Wassermann: Software Design Techniques" IEEE Computer Society Press, Los Angeles, 1980 Sneed, H.: Wirtschaftlichkeit der Qualitätssicherung" in Proc. of DEC College Conference on Software Quality Assurance, München 1988 Manley, J.: CASE-Foundation for Software Factories" in COMPCON Proceedings, IEEE, Sept. 1984 Jackson, M.: Life-Cycle Concept Considered Harmful" in ACM Software Engineering Notes, Vol. 7, No. 2, April 1982 Boehm, B.: Improving Software Productivity" Sept. 1987 Boehm, B.: A Spiral Model of Software Development and Enhancement" in IEEE Computer, May, 1988 Zave, P.: The Operational Versus the Conventional Approach to Software Development" in Comm. of ACM, Vol. 27, No. 2, Feb. 1984 Bauer, F.: From Specifications to Machine Code Program Construction Through Formal Reasoning" in Prof, of 6th International Conf. on Software Engineering, IEEE Computer Society Press, New York 1982 Alavi, M.: An Assessment of the Prototyping Approach to Information Systems Development" in Comm. of ACM. Vol. 27, No. 6, June 1984 Boehm, B.: Software Engineering Economics" in IEEE Trans on Software Engineering, Vol. SE-10, No. 1, Jan. 1984 Albrecht, A.: Software Function, Source Lines of Code and Development Effort Prediction" in IEEE Trans, on S. E., Vol. SE-9, No. 6, 1983 Sneed, H.: Requirements Analysis of Business Systems" in Proc. of ACM Computing Symposium, Teubner Verlag, Stuttgart, 1983 Putnam, L: A General Empirial Solution to the Macro Software Sizing and Estimating Problem" in IEEE Trans, on S. E., Vol. SE-4, No. 4, July 1978 Sneed, H.: Software-Management" Rudolf Müller Verlag, Köln, 1987 Reprint aus PIK 12 (1989) Praxis der Informationsverarbeitung und Kommunikation, Carl Hanser Verlag, München, 1989 © 2002 CC GmbH® Seite 17 CC branded Case Consult The Evolution En@ bling Experts [17] Balzert, H,: Die Entwicklung von Software-Systemen" B. l. Wissenschaftsverlag, Mannheim, 1982 [18] Rzepka, W./Ohno, Y.: Requirements Engineering Environments" in IEEE Computer, April 1985 [19] Teichroew, D./Hershey, E.: PSL/PSA-A Computer Aided Technique for Structured Documentation and Analysis of Information Processing Systems" in IEEE Trans, on S. E., Vol. SE-3, No. 1, 1977 [20] Alford, M.: SREM at the Age of Eight - The Distributed Computing Specification System" in IEEE Computer, April 1985 [21]Katzan, H.: Methodischer Systementwurf" Rudolf Müller Verlag, Köln, 1980 [22] Wirth, N.: Systematisches Programmieren" Teubner Verlag, Stuttgart, 1975 [23] M/7/s, H,/Linger, R.: Principles of Information Systems Analysis and Design" Academic Press, London, 1986 [24] Yourdon, E./Constantine, L.: Structured Design" Yourdon Press, New York, 1978 [25] Jackson, M.: Principles of Program Design" Academic Press, London, 1975 [26] Warnier, J.-D.: Logical Construction of Programs" Van Nostrand Reinhold. Pans, 1974 [27] Orr, K.: Structured Systems Development" Yourdon Press, New York, 1977 [28] Pressman, H,: Software Engineering - A Practitioner's Approach" McGraw-Hill, New York, 1987 [29] Parnas, D.: On Criteria to be Used in Decomposing Systems into Modules" in Comm. of ACM, Vol. 14, No. 1, April 1972 [30] Denen, E.: Software-Modularisierung" in Informatik-Spektrum 2, Feb. 1979 [31] Booch, G.: Software Engineering with ADA" Benjamin-Commings Pub., Washington, 1983 [32] Cox, B.: Object Oriented Programming" Addison-Wesley, Reading, 1986 [33] Schumann, J./Gerisch, M.: Software-Entwurf" Rudolf Müller Verlag, Köln, 1986 [34] Sneed, H.: Software-Entwicklungsmethodik" Rudolf Müller Verlag, Köln, 1986 [35] Asam, R./Drenkard, N./Maier, H.-H.: Qualitätsprüfung von Softwareprodukten" Siemens Fachverlag, München, 1986 [36] Halstead, M.: Elements of Software Science" Elsevier-North-Holland, New York, 1977 [37] McCabe, T.: A Complexity Measure" im IEEE Trans, on S. E., Vol. SE-2, No. 4, 1976 [38] Chapin, N.: A Measure of Software Complexity" in Proc. Of AFIPS NCC, New York, 1979 [39] Huang, J. C.: Detection of Data Flow Anomaly through Program Instrumentation" in IEEE Trans, on S. E., Vol. SE-5, No. 3, 1979 [40] Henry, S./Kafura, D.: The Evaluation of Software Systems Structure Using Quantitative Software Metrics" in Software Practice and Experience, Vol. 14, No. 6, June 1984 [41] Basili, V./Rombach, H.-D.: Implementing Quantitative SQA A Practical Model" in IEEE Software, Sept. 1987 [42] ESPRIT: REQUEST COQUAMO, Request Report 1, EG-Kommission, Brüssel, 1986 [43] Sneed, H.: Software-Qualitätssicherung" Rudolf Müller Verlag, Köln, 1988 [44] Jones, T. C.: Reusability in Programming - A Survey of the State of the Art" in IEEE Trans, on S. E., Vol. SE-10, No. 5, Sept. 1984 [45] Endres, A.: Software-Wiederverwendung" in Informatik Spektrum, Nr. 1 1 , 1988 Reprint aus PIK 12 (1989) Praxis der Informationsverarbeitung und Kommunikation, Carl Hanser Verlag, München, 1989 © 2002 CC GmbH® Seite 18 CC branded Case Consult The Evolution En@ bling Experts [46] [47] [48] Arnold, R.: Tutorial on Software Restructuring" IEEE Computer Society Press, Los Angeles, 1986 Sneed, H.: Software Renewal - A Case Study" in IEEE Software, Vol. 1, No. 3, July 1984 IEEE: Software Engineering Standards" IEEE Computer Society Press, New York, 1987 Reprint aus PIK 12 (1989) Praxis der Informationsverarbeitung und Kommunikation, Carl Hanser Verlag, München, 1989 © 2002 CC GmbH® Seite 19 CC branded