zurück zur Startseite der Softwaretechnik-Trends , zu Band 18 Heft 4


Metriken für die Wiederverwendbarkeit bestehender Software-Systeme

Harry M. Sneed, Software-Engineering Service GmbH München,
Rosenheimer Landstr. 37, 85521 Ottobrunn, Tel.: 089-6093193
Email: 100276.57@Compuserve.com

Migrationsalternativen

Immer mehr DV-Anwenderbetriebe stehen vor der Frage, ob sie ein bestimmtes Anwendungssystem neuentwickeln sollen oder ob sie das alte System zumindest teilweise weiterverwenden sollten. Auf der einen Seite haben sie die Gelegenheit, alles das nachzuholen, was sie bei der letzten Entwicklung versäumt haben. Auf der anderen Seite besteht die Gefahr, daß das neue System zu teuer wird, zu spät oder überhaupt nicht fertig wird. Um die Kosten und Risiken einer Neuentwicklung zu beschränken, bietet sich die Wiederverwendung der bestehenden Software an.

Dabei geht es um zwei alternative Möglichkeiten der Wiederverwendung:


Konversion und Kapselung. [2]
Bei der Konversionsalternative werden die alten Programme saniert und in die neue Umgebung migriert, z.B. von Assembler in eine höhere Programmsprache oder von einer prozeduralen Sprache in eine objektorientierte Sprache.

Bei der Kapselungsalternative werden die alten Programme in einzelne Bausteine zerlegt und über eine Wrapper-Software neuen Systemen zugänglich gemacht. Sie bleiben aber weiter in ihrer Umgebung.

Für die Beanwortung der kritischen Frage nach dem richtigen Migrationsweg wird von der Wirtschaft dringend Entscheidungshilfe gebraucht. Die Entscheidung sollte auf der Basis einer Kosten/Nutzen-Analyse mit quantifizierbaren Meßwerten gefällt werden. Ansonsten bleibt nur die Intuition. Man wählt die Neuentwicklung, weil man die alte Umgebung nicht kennt und nicht bereit ist, sich mit dem alten Code auseinander zu setzen, oder man wählt die Wiederverwendung, weil man die neue Entwicklungstechnologie nicht beherrscht und nicht bereit ist, sich einzuarbeiten. Beide Entscheidungen sind irrational und zu vermeiden. Statt dessen sollte ein Abgleich quantitativer und qualitativer Kosten- und Nutzenfaktoren entscheidend sein. In diesem Beitrag stehen die Kosten der Wiederverwendung im Vordergrund.

Metriken zur Software-Wartung und Wiederverwendung

An Software-Metriken fehlt es nicht. Zuse [23], Fenton [8], Dumke [6] und andere weisen auf mehr als 150 einzelne Metriken hin.

Es gibt Maße für die Software-Größe, wie Lines of Code, Anweisungen, Function-Points, Data-Points, Feature-Points und Object-Points [19]. Es gibt Maße für die Software-Komplexität, z.B. Halstead's Sprachkomplexität [9], McCabes Graphkomplexität [16], Henry's Schnittstellenkomplexität [11] und Chapin's Datenkomplexität [3]. Schließlich gibt es Maße für die Software-Qualität, wie Fehlerraten, Mängelraten, Verständlichkeit, Testbarkeit, Portierbarkeit und Modularität [12]. Es sind auch Maße für die Software-Wartung [20] sowie für die Software-Wiederverwendbarkeit [17] vorgeschlagen worden.

Für die Schätzung der Wartbarkeit ist der Code Maintainability Index von Welker, Oman und Atkinson besonders empfehlenswert [22]. Für die Bewertung der Wiederverwendbarkeit haben Cimitile, De Lucia und Minro wichtige Beiträge geleistet [4].

Die empirische Untersuchung von Software-Reuse in der Wartung von Li hat gezeigt, wie man wiederverwendbare Funktionen erkennen kann [15].

Diese Metriken beziehen sich jedoch nur auf die Stufe der elementaren Bausteine, der Prozeduren. Hier leisten sie gute Hilfe bei der Detailauswahl wiederverwendabrer Code-Abschnitte, helfen aber wenig bei der Entscheidung, ob ein System überhaupt wiederverwendet werden sollte bzw. kann. Wirtschaftsmanager brauchen einfache, leicht zu ermittelnde Meßwerte, die sich in eine Entscheidungsregel leicht einfügen lassen. Nur so können Software-Metriken zur groben Entscheidungsfindung beitragen.

Außerdem muß zwischen der Art der Wiederverwendung unterschieden werden. Es werden andere Meßwerte benötigt, je nach dem ob konvertiert oder gekapselt wird, denn jede Migrationstechnik hat andere Voraussetzungen.

Metriken für die Konvertierung

Bei der Konvertierungstechnik kommt es darauf an, daß die alte Struktur der Programme möglichst nahe an die geplante neue Struktur herankommt. Wenn also Assembler-Programme in COBOL zu transferieren sind, sollten die Assembler-Befehle möglichst 1:1 in entsprechende COBOL Anweisungen umsetzbar sein.

Beispielhaft für 1:1-Transformationen sind MVC-, CLC- und BAL- Befehle, denn für jeden dieser Befehle gibt es eine äquivalente COBOL-Anweisung: MOVE, IF und PERFORM. Andererseits gibt es Assembler-Befehle wie Shift Logical und Test under Mask, die nur durch mehrere COBOL-Anweisungen bzw. durch eine COBOL Subroutine abbildbar sind. Diese sind 1:N-Transformationen.

Schließlich gibt es Assemblerkonstrukte, wie Adreßtabellen über die auf dynamische Speicherbereiche indirekt zugegriffen wird. Solche Assembler-Algorithmen bzw. Befehlsgruppen sind nur durch eine völlig andere Gruppe von COBOL-Anweisungen abbildbar. Es handelt sich hierbei um eine M:N-Transformation, die in der Regel nur manuell zu bewerkstelligen ist. Somit lassen sich also die Anweisungen einer Quellsprache in drei Kategorien teilen:

Die Klassifikationsregeln werden in Form eines Regelbaumes pro Quellsprache im Meßprogramm gespeichert. Auf der ersten Stufe des Baumes werden die 1:1-Umsetzungen erkannt. Sonst wird auf der nächsten Stufe entschieden, ob es sich um eine 1:N-Umsetzung handelt. Wenn auch dies ausscheidet, wird eine M:N-Umsetzung angenommen.

Das Verfahren entspricht dem üblichem Algorithmus für regelbasierte Entscheidungsprozesse [10]. Um als Kandidat für die Konvertierung in Frage zu kommen, müssen mindestens 60 % der Quellcode-Befehle 1:1 und mindestens 30 % 1:N in Anweisungen der Zielsprache umsetzbar sein. Demnach dürfen maximal 10 % der Anweisungen manuell umgeschrieben werden. Der Rest muß per Werkzeug automatisch konvertiert werden [13]. Dies gilt sowohl für Datendeklarationen als auch für prozedurale Anweisungen.

Wenn 1:1-Umsetzungen mit 1,0, 1:N-Umsetzungen mit 0,5 und M:N-Umsetzungen mit 0 gewichtet werden, entsteht eine Wiederverwendbarkeitsrate von 0,75. Dieses relationale Maß wird als Mindestgrenze für Konvertierungsvorhaben angesehen [1]. Darunter gerät der Aufwand einer Konvertierung in die Nähe des Aufwandes für eine Neuentwicklung.

Metriken für die Kapselung

Bei der Kapselungstechnik werden andere Meßwerte benötigt als bei der Konvertierung einzelner Anweisungen. Hier geht es um den Anteil der Anweisungen, die von der neuen, externen Applikation genutzt werden, d.h. sie liegen auf Pfaden, die von außen steuerbar sind. Deren Erkennung ist das Ziel eines Verfahrens von Lanubile und Visaggio für ablaufbasiertes Programm-Slicing [14].

Gekapselt werden Programme als Ganzes, Module und Abschnitte bzw. einzelne Prozeduren [21]. Innerhalb des gekapselten Codes können bestimmte Ablaufzweige im gekapseltem Zustand ausgeklammert werden, d.h. sie werden durch parametrisierte Bedingungen im Sinne von Dijkstra's ,,guarded command`` Konzept geschützt. Dies ist der Fall, wenn bestimmte Altfunktionen im neuen Geschäftsprozeß nicht mehr benötigt werden. Aus der Analyse des alten Systems muß hervorgehen, welche Code-Bausteine, Programme, Module, und Prozeduren überhaupt gekapselt werden und welche Anweisungen und Daten innerhalb der gewählten Bausteine zu benutzen sind.

Es kann sein, daß nur wenige Pfade durch ein Modul für die neuen Anwendungen von Interesse sind. Die Anderen werden markiert. Bei der Messung der Systemverwendbarkeit kommt es darauf an, die zu nutzenden Daten und Anweisungen zu zählen und relativ zur Summe aller Daten und Anweisungen zu betrachten. Kommen sie nicht auf mindestens 50 % , so ist die Kapselung keine tragbare Alternative, weil das alte System in seiner Mehrheit ungenutzt bleibt. Diese Wiederverwendungsrate für die Ausführung in der alten Umgebung entspricht der 75 % -Rate bei der Konvertierung in eine neue Umgebung. Es ist immer noch möglich, einzelne Teile eines Altsystems heraus zu holen und in ein neues System zu verpflanzen. Hierbei handelt es sich jedoch in der Tat um eine Neuentwicklung unter Verwendung alter Bausteine. Von einer Wiederverwendung des alten Systems kann hier nicht die Rede sein.

Wiederverwendbarkeit bezogen auf ein Software-System bedeutet, daß mindestens die Hälfte wiederverwendet wird. Denn nur so können die Kosten der Wiederverwendung relativ zu den Kosten einer Neuentwicklung niedrig bleiben.

Endres hat eine Formel für die Kosten und Nutzen der Wiederverwendbarkeit relativ zur Neuentwicklung vorgeschlagen. Dabei kommt heraus, daß die Wiederverwendungsrate mindestens 50 % betragen muß [7]. Derselbe Autor hat auch darauf hingewiesen, daß Reengineering-Kosten nicht mehr als 33 % der Neuentwicklungskosten betragen dürfen, ohne durch den Nutzen der Neuentwicklung ausgeglichen zu werden [18].

Es gibt somit zwei Grenzwerte die nicht zu unterschreiten sind:

Ermittlung der Wiederverwendungsmaße

Beide Maße sind automatisch ermittelbar. Allerdings setzt die Kapselierbarkeitsmessung voraus, daß die zu kapselierenden Ablaufpfade markiert sind. Dafür hat der Autor ein Tool entwickelt (SOFREDOC), welches dem Anwender erlaubt, sowohl datenflußbezogene als auch programmablaufbezogene ,,Scheiben`` zu markieren, die in die neue Anwendung einzubinden sind. Bei dem datenflußbezogenen Ansatz wird von den erwünschten Datenergebnissen ausgegangen, um den Weg durch das Programm vom Ausgang bis zum Eingang rückwärts zu verfolgen. Beim programmablaufbezogenen Ansatz wird von den erwünschten Einstiegsprodukten im Programm ausgegangen, um die Pfade durch das Programm vom Eingang bis zum Ausgang vorwärts zu verfolgen.

Nachdem die Pfade bzw. Programmscheiben markiert sind, werden die Anweisungen, die auf den markierten Pfaden liegen und die Daten, die von diesen Anweisungen verwendet werden, gezählt.

Die Zählung der 1:1, 1:N und M:N konvertierbaren Anweisungen wird vom Tool SOFAUDIT selbstständig durchgeführt. Dies geschieht auf der Grundlage vordefinierter Konvertierbarkeitstabellen sowie auf den bereits geschilderten Regelbäumen. Implementiert wurde dies für Assembler-, PL/1- und COBOL-Programme.

Zusammenfassung

In diesem Beitrag wurden zwei Maße für die Wiederverwendbarkeit bestehender DV-Applikationen vorgeschlagen.

Im Falle der Konvertierung wird die Umsetzbarkeit des Quellcodes gemessen. Im Falle der Kapselung wird die Wiederverwendungsrate gemessen. In beiden Fällen wird eine Entscheidungshilfe für die Frage geleistet, ob konvertiert, gekapselt oder neuentwickelt werden soll.

Das Meßverfahren basiert auf der bisherigen Forschung in der statischen Code-Analyse und Wartungsmessung. Es wird noch verfeinert und mit Erfahrungswerten aus laufenden Migrationsprojekten kalibriert. Erste Erfahrungen sind bereits aus zwei Projekten vorhanden.

Literatur

1
Bames, B.; Durek, T.; Gaffney, J.: A Framework and Economic Foundation for Software Reuse. in IEEE Tutorial Software Reuse Ed. W. Tracz, IEEE Press, L.A., 1988, p. 77

2
Brodie, M.; Stonebraker, M.: Migrating Legacy Systems. Morgan Kaufmann Pub., San Francisco, 1995

3
Chapin, N.: A Measure of Software Complexity. in Proc. of NCC, Chicago, 1977, p. 995

4
Cimitile, A.; De Lucia, A.; Minro, M.: A Specification Driven Slicing Process for identifying Reusable Functions. in Journal of Software Maintenance, Vol. 8, No. 3, May 1996, p. 145

5
Dahl, O.; Dijkstra, E.; Hoare, C.: Structured Programming. Academic Press, London, 1972, p. 63

6
Dumke, R.; Foltin, E.; Koeppe, R.; Winkler, A.: Software Qualität durch Meßtools. Vieweg Verlag, Braunschweig, 1996

7
Endres, A.: Software-Wiederverwendung - Ziele, Wege und Erfahrungen. in Informatik Spektrum, Nov. 1988, p. 85

8
Fenton, N.: Software Metrics - A rigorous approach. Chapman & Hall, London, 1991

9
Halstead, M.: Elements of Software Science. Elvesier Pub., New York, 1977, p. 79

10
Hehner, E.: Predicative Programming. in Comm. of ACM, Vol. 27, No. 2, Feb. 1984, p.134

11
Henry, S.; Kafura, D.: Software Structure Metrics based on Information Flow. in IEEE Trans. on S.E. , Vol 7, No. 5, Sept. 1981

12
ISO/IEC: Software Product Evaluation - Quality Characteristics and Guidelines for their use. ISO/IEC Standard ISO-9126, 1991

13
Kozacynski, W.; Niny, J.: Program Concept Recognition and Transformation in IEEE Trans. on S.E., Vol. 18, No.12, Dec. 1992, p. 1065

14
Lanubile, G.; Visaggio, G.: Extracting Reusable Functions by Flow Graph-Based Program Slicing. in IEEE Trans. on S.E., Vol. 23, No. 4, April 1997, p. 246

15
Li, W.: An Empirical Study of Software Reuse in Reconstructive Maintenance. in Journal of Software Maintenance, Vol. 9, No. 2, March 1997, p. 69

16
McCabe, T.: A Complexity Measure. in IEEE Trans. on S.E., Vol. 7, No. 5, Sept.1981

17
Schach, S.: Economic Impact of Software Reuse on Maintenance. in Journal of Software Maintenance, Vol. 6, No. 4, July 1994, p. 185

18
Sneed, H.: Economics of Software Reengineering. in Journal of Software Maintenance, Vol. 3, No. 3, Sept. 1991, p. 163

19
Sneed, H.: Software muß messbar werden. in Information Management 4/91, Nov. 1991, p.56

20
Sneed, H.: Understanding Software through Numbers - A metric based Approach to Program Comprehension. in Journal of Software Maintenance, Vol. 7, No. 6, Nov. 1995, p. 405

21
Sneed, H.: Encapsulating Legacy Software for Use in Client/Server Systems. in Proc. of 3rd Conf. in Reverse Eng., IEEE Press, Monterey, Nov. 1996, p. 104

22
Welker, K.; Oman, P.; Atkinson, G.: Development and Applikation of an automated Source Code Maintainability Index. in Journal of Software Maintenance, Vol. 9, No. 3, May 1997, p. 127

23
Zuse, H.: Software Complexity - Measures and Methods. de Gruyter Verlag, Berlin, 1991


zurück zur Startseite der Softwaretechnik-Trends , zu Band 18 Heft 4