DE4416704A1 - Integrationstestverfahren für ein objektorientiertes Programm - Google Patents
Integrationstestverfahren für ein objektorientiertes ProgrammInfo
- Publication number
- DE4416704A1 DE4416704A1 DE4416704A DE4416704A DE4416704A1 DE 4416704 A1 DE4416704 A1 DE 4416704A1 DE 4416704 A DE4416704 A DE 4416704A DE 4416704 A DE4416704 A DE 4416704A DE 4416704 A1 DE4416704 A1 DE 4416704A1
- Authority
- DE
- Germany
- Prior art keywords
- objects
- tested
- test
- call
- integration
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3676—Test management for coverage analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Description
Die Erfindung bezieht sich auf ein automatisch ablaufendes
Verfahren zum Integrationstesten eines objektorientierten
Programmes.
Im Gegensatz zu prozeduraler Software mit einer Modul- bzw.
Funktionsstruktur und gemeinsamen globalen Daten, verbunden
über Funktionsaufrufe und Datenflüsse, besteht objektorien
tierte Software aus Objekten und Klassen, verbunden über
Nachrichtenaustausch, Vererbung und Aufruf-/Benutztbeziehung.
insgesamt gibt es in objektorientierten Programmen viel mehr
gegenseitige "Abhängigkeiten" (Aufruf, Benutzt, Daten
attribute, etc.) als in prozeduraler Software. Durch die Kap
selung von Daten und Funktionen in den Klassen besteht eine
enge Kopplung zwischen den Daten- und den Aufrufbeziehungen.
Die Funktionalität eines objektorientierten Programms ist
nicht in einer top-down organisierten Hierarchie von Funktio
nen realisiert, sondern sie ist vielmehr in einem Netzwerk
von miteinander kommunizierenden Objekten verteilt. Dadurch
verschiebt sich die Komplexität und die Ablauflogik in einem
objektorientierten Programm von den einzelnen Funktionen bzw.
Methoden zu dem korrekten Zusammenspiel zwischen den Me
thoden. Dies wird durch die speziellen objektorientierten
Merkmale wie etwa Vererbung, Polymorphismus, dynamisches
Binden, Overloading und Reimplementierung noch verstärkt.
Ein "Stub" einer Methode ist eine Ersatzimplementierung zu
Testzwecken, die nicht die vollständige Funktionalität der
Methode bietet, aber einen Testablauf ermöglicht. Der Prozeß
des "Stubbing" beim Testen objektorientierter Software ist
komplizierter als in der prozeduralen Programmierung. Die
Gründe liegen in der andersartigen Architektur und Struktur
der objektorientierten Software, in der Datenkapselung und in
den vielen gegenseitigen Abhängigkeiten zwischen den ein
zelnen Objekten bzw. Klassen.
Eine Beschreibung der grundlegenden Fachbegriffe der objekt
orientierten Programmierung findet sich in: Steve Cook
"Introduction to Object Technologie," OOP 1992, Conference
Proceedings, SIGS Publications, New York, 1992.
Für die Integration von objektorientierten Programmen und den
zugehörigen Integrationstest gibt es bisher keine expliziten
Verfahren, und es sind demzufolge auch keine entsprechenden
Testwerkzeuge auf dem Markt vorhanden.
Die der Erfindung zugrundeliegende Aufgabe besteht darin, ein
automatisiertes Verfahren zum Integrationstest eines objekt
orientierten Programmes anzugeben, das Stubs weitestgehend
vermeidet.
Diese Aufgabe wird gemäß den Merkmalen des Patentanspruches 1
gelöst.
Weiterbildungen der Erfindung ergeben sich aus den Unteran
sprüchen.
Ein besonderer Vorteil des erfindungsgemäßen Verfahrens be
steht darin, daß durch eine Quellcode-Analyse des objektori
entierten Programms die Abhängigkeiten der einzelnen Klassen
und Objekte zueinander gefunden werden und daß diese Abhän
gigkeiten genutzt werden, um solche Objekte zu testen, welche
nur von bereits getesteten Objekten bzw. Klassen abhängen.
Günstigerweise sieht es das erfindungsgemäße Verfahren wei
terhin vor, falls keine solchen Objekte gefunden werden, Ob
jekte zu testen, welche lediglich von einem ungetesteten Ob
jekt und weiteren bereits getesteten Objekten abhängen kön
nen. So wird sichergestellt, daß immer möglichst wenig Stubs
zum Testen separat programmiert werden müssen.
Vorteilhaft sieht es das erfindungsgemäße Verfahren vor, zum
automatisierten Testen mittels des Quellcodes und der Bezie
hungsstruktur den richtigen Konstruktor für ein Objekt auto
matisch zu ermitteln und dieses Objekt daraus zu erzeugen.
Günstigerweise wird das Objekt durch das erfindungsgemäße
Verfahren automatisiert durch Kopieren von Datenkomponenten
in den Zustand versetzt, welcher aktuell für den Integrati
onstest benötigt wird.
Vorteilhaft sieht es das erfindungsgemäße Verfahren vor, ein
Objekt durch einen Methodenaufruf zu testen, welcher aus der
Beziehungsstruktur abgeleitet wurde. Die verwendeten Parame
ter für den Objektaufruf ergeben sich aus dem Quellcode-Pro
gramm und dem aktuellen Zustand des Objektes.
Besonders günstig ist es, solche Objekte, die miteinander ei
nen Zyklus bilden, d. h. welche nur voneinander abhängig sind
und sich gegenseitig aufrufen, aus der Beziehungsstruktur zu
ermitteln und von diesen Objekten mindestens eines durch ei
nen Objektstub zu ersetzen, um das andere testen zu können.
Fallweise kann es sich auch ergeben, daß ein solches Objekt
an einem weiteren ungetesteten Objekt nur einen Methoden
aufruf, sozusagen im Durchgriff durch dieses Objekt bewirkt,
welcher sich auf ein bereits getestetes Objekt bezieht. Damit
kann dieses zunächst als ungetestet gekennzeichnete Objekt
direkt als getestet markiert werden und der Testabsolventen
menge zugeführt wird.
Vorteilhaft ist es auch im erfindungsgemäßen Verfahren vorge
sehen, Objekte, die nicht getestet sind und auf welche zuge
griffen wird, durch einen Objektstub zu ersetzen. Stubs
stellen eine gängige Methode zum Simulieren eines Objektver
haltens dar und sind daher ohne übermäßigen Einsatz zu pro
grammieren.
Vorteilhaft ist es im erfindungsgemäßen Verfahren vorgesehen,
die Vorgehensweise mehrfach durchzuführen, um so schließlich
für das objektorientierte Programm einen vollständigen Inte
grationstest durchzuführen. Am Ende eines solchen Tests sind
keine ungetesteten Objekte mehr vorhanden.
Mit der Erfindung wird erstmals ein Verfahren zur rechnerge
stützten Integration von objektorientierten Programmen und
zum zugehörigen Integrationstest bereitgestellt.
Das erfindungsgemäße Verfahren besteht hier zum Beispiel aus
zwei Komponenten:
- 1. Analyseteil und
- 2. Ablaufteil.
Das erfindungsgemäße Verfahren führt zunächst eine genaue
statische Quellcode-Analyse des zu integrierenden objektori
entierten Programmes durch und ermittelt alle Abhängigkeiten
und Beziehungen zwischen den einzelnen Objekten bzw. Klassen
(Analyseteil). Diese so erhaltenen Informationen werden für
die schrittweise Integration der einzelnen Objekte und den
dabei durchzuführenden Integrationstest (Durchführung von Me
thodenaufrufen, etc.) benötigt (Ablaufteil). Das Vorgehen zur
Integration wird im folgenden beschrieben.
Als Ausgangspunkt für die Integration dienen alle Klassen,
die als getestet vorausgesetzt werden können (z. B. aus Stan
dardbibliotheken). Alle im Programm vorkommenden Objekte
solcher getesteter Klassen werden als "Menge getesteter Ob
jekte" definiert.
(Dies beinhaltet auch anonyme Objekte, d. h. Objekte, die nur
über einen Pointer zugänglich sind und Objekte, die implizit,
bzw. temporär vom Compiler erzeugt werden.)
Das Integrationsverfahren beginnt mit dieser Menge, die evtl.
leer sein kann. Das Ziel ist die schrittweise Vergrößerung
dieser Menge um getestete Objekte bis alle Objekte des Pro
gramms erfaßt sind.
Im ersten Schritt werden nun vom erfindungsgemäßen Verfahren
alle die Objekte automatisch ermittelt, die
entweder noch nicht getestet sind und nur Standarddatentypen
oder bereits getestete Objekte benutzen (siehe 1. Fall a))
oder aber deren Benutzungen/Verwendungen nur gemeinsam in einem Testschritt getestet werden können (z. B. muß bei o1.m(o2) sicherlich o1 und o2 auch gemeinsam in einem Testschritt getestet werden) (siehe 1. Fall b)).
entweder noch nicht getestet sind und nur Standarddatentypen
oder bereits getestete Objekte benutzen (siehe 1. Fall a))
oder aber deren Benutzungen/Verwendungen nur gemeinsam in einem Testschritt getestet werden können (z. B. muß bei o1.m(o2) sicherlich o1 und o2 auch gemeinsam in einem Testschritt getestet werden) (siehe 1. Fall b)).
"Benutzt" bedeutet in diesem Zusammenhang als Datenattribut,
als lokale Variable in einer Methode oder als Parameter eines
Methodenaufrufs an diesem Objekt.
Ausgehend von diesem ersten Schritt sind beispielsweise drei
Fälle zu unterscheiden:
Dieser Fall entsprechend der obigen Fallunterscheidung wird
in a) und b) aufgeteilt.
Zunächst werden beispielsweise für jedes dieser Objekte alle
möglichen Benutzungen (unter Berücksichtigung von Polymor
phismus, Pointer, etc.) bestimmt. (Benutzung heißt hier Auf
ruf einer Methode dieses Objekts.) Die dazu benötigten In
formationen wurden bei der Quellcode-Analyse des objektorien
tierten Programmes vom erfindungsgemäßen Verfahren ermittelt.
Anschließend werden alle diese Benutzungen getestet, d. h. es
werden Methoden aufgerufen und die Ergebniswerte und Zustände
überprüft. Der Vorteil bei dieser Vorgehensweise ist, daß
keine Programmteile "gestubbt" werden müssen. Die Objekte
werden dabei sukzessive "bottom-up" getestet.
Ein einzelner Testschritt besteht dabei beispielsweise in ei
nem Methodenaufruf an einem Objekt des Anwendungsprogrammes.
Dazu erzeugt das erfindungsgemäße Verfahren zum Beispiel ein
neues Objekt und bringt dieses, soweit es möglich ist, in
denselben Zustand wie das Objekt des Anwendungsprogrammes
(z. B. über einen Konstruktoraufruf und durch Kopieren der
Datenkomponenten). Anschließend wird der entsprechende Metho
denaufruf in der von dem erfindungsgemäßen Verfahren gene
rierten Testumgebung (Ablaufteil) durchgeführt.
Benutzungen, die theoretisch möglich sind, in der speziellen
Anwendung aber aufgrund der statischen Analyse nicht auftre
ten können, werden in diesem Zusammenhang beispielsweise
nicht getestet, da es in diesem Kontext nur um den Test eines
konkreten Anwendungsprogrammes geht. Die Intention des
Verfahrens ist es, genau das (und nicht mehr und nicht weni
ger) zu testen, was für das konkrete Anwendungsprogramm not
wendig ist und dabei eine vorteilhafte Reihenfolge bzgl. der
Objektintegration anzugeben, die die Verwendung der "Stubs"
minimiert bzw. vermeidet.
Nach dem erfolgreichen Testen wird jedes solche Objekt zur
Menge aller getesteten Objekte hinzugefügt. Das Verfahren
wird im Anschluß beispielsweise mit dem ersten Schritt fort
gesetzt.
Dieses Vorgehen ist präziser als bei a) an den durchführbaren
Testschritten orientiert.
Zunächst werden alle möglichen Testschritte (entsprechend zu
a)) sukzessive ausgeführt, bis keine weiteren mehr möglich
sind. Dabei vergrößert sich die Menge der ausgeführten und
ausführbaren Testschritte mit jedem der ausgeführten Test
schritte (oder bleibt gleich groß), da jeder ausgeführter
Test schritt eventuell wiederum weitere Testschritte ermög
licht.
Am Ende, d. h. wenn keine weiteren Testschritte mehr möglich
sind, wird geprüft, ob ein, oder eventuell mehrere Objekte
ganz getestet wurden.
Falls "ja", dann wird jedes solche Objekt zur Menge aller ge
testeten Objekte hinzugefügt. Das Verfahren wird mit dem er
sten Schritt fortgesetzt.
Falls "nein", d. h. es wurde kein Objekt ganz getestet und es
sind keine Testschritte mehr möglich, dann wird das Verfahren
mit dem 2. Fall fortgesetzt.
Als Alternative zu b) muß man nicht unbedingt solange testen
bis kein Testschritt mehr möglich ist, sondern kann bereits,
wenn ein Objekt ganz getestet wurde, mit dem ersten Schritt
fortfahren.
In diesem Fall ist ein Zyklus aufgetreten, d. h. es besteht
eine gegenseitige Abhängigkeit zwischen noch ungetesteten Ob
jekten.
Der Zyklus wird beispielsweise durch Stubben einer Objektbe
nutzung aufgelöst, um wenigstens ein weiteres Objekt testen
zu können. Dieses Objekt wird dann getestet, d. h. zum Bei
spiel es werden Methoden aufgerufen und Ergebniswerte und Zu
stände überprüft.
Hier zeigt sich ein Vorteil des Verfahrens: es wird nur dann
gestubbt, wenn es unbedingt erforderlich ist, ansonsten wird
es vermieden.
Nach dem erfolgreichen Testen wird dieses Objekt zur Menge
aller getesteten Objekte hinzugefügt. Das Verfahren wird mit
dem ersten Schritt fortgesetzt.
Damit ist der Integrationstest vollständig und beendet.
Das erfindungsgemäße Verfahren besteht hier zum Beispiel aus
zwei Komponenten:
- 1. Analyseteil und
- 2. Ablaufteil.
Im Analyseteil ermittelt das erfindungsgemäße Verfahren alle
Abhängigkeiten und Beziehungen zwischen den einzelnen Objek
ten bzw. Klassen anhand des Quellcodes des konkreten Anwen
dungsprogrammes. Diese so erhaltenen Informationen werden im
Ablaufteil benötigt. Der Ablaufteil ist für die eigentliche
Integration und den dabei durchzuführenden Integrationstest
(Durchführung der Methodenaufrufe, etc.) verantwortlich.
Zusammenfassend besteht das Verfahren für die Integration und
den Integrationstest von Objekten in objektorientierten Pro
grammen beispielsweise aus folgenden Teilen und Abläufen:
- 1. Analyseteil: analysiere den Quellcode des konkreten Anwen dungsprogrammes, und ermittle alle Abhängigkeiten und Beziehungen zwischen den einzelnen Objekten bzw. Klassen;
- 2. Ablaufteil:
Definitionen:
Standardtypen: = int, float, char, etc.;
getestete Klassen: = alle Klassen aus (bereits erfolgreich getesteten oder Standard-) Klassenbiblio theken, alle bereits erfolgreich getesteten Klassen;
definiere eine Menge getesteter Objekte; sie kann leer sein oder Objekte getesteter Klassen enthalten:
getestete Klassen: = alle Klassen aus (bereits erfolgreich getesteten oder Standard-) Klassenbiblio theken, alle bereits erfolgreich getesteten Klassen;
definiere eine Menge getesteter Objekte; sie kann leer sein oder Objekte getesteter Klassen enthalten:
getestete Objekte := alle Objekte von bereits getesteten
Klassen, alle Variablen von Standard
typen;
Start: bestimme alle Objekte, die entweder noch nicht getestet sind und die nur Stan dardtypen, getestete Objekte oder nichts benutzen ("benutzen" bedeutet hier: benutzen als Datenattribut, als lokale Variable in einer Methode, als Parameter bei einem Metho denaufruf bei diesem Objekt) (siehe 1. Fall a))
oder aber deren Benutzungen/Verwendungen nur gemeinsam in einem Testschritt getestet werden können (z. B. muß bei o1.m(o2) sicherlich o1 und o2 auch gemeinsam in einem Test schritt getestet werden) (siehe 1. Fall b)).
Start: bestimme alle Objekte, die entweder noch nicht getestet sind und die nur Stan dardtypen, getestete Objekte oder nichts benutzen ("benutzen" bedeutet hier: benutzen als Datenattribut, als lokale Variable in einer Methode, als Parameter bei einem Metho denaufruf bei diesem Objekt) (siehe 1. Fall a))
oder aber deren Benutzungen/Verwendungen nur gemeinsam in einem Testschritt getestet werden können (z. B. muß bei o1.m(o2) sicherlich o1 und o2 auch gemeinsam in einem Test schritt getestet werden) (siehe 1. Fall b)).
Dieser Fall wird in a) und b) aufgeteilt, entsprechend
zur obigen Fallunterscheidung.
Bestimme für jedes dieser Objekte alle möglichen
Benutzungen (unter Berücksichtigung von Polymorphis
mus, Pointer, etc.) und teste diese (rufe Methode auf,
überprüfe Ergebniswerte und Zustände);
Benutzungen, die theoretisch möglich sind, in der
speziellen Anwendung aber nicht auftreten, werden in
diesem Zusammenhang nicht getestet;
nach erfolgreichem Testen füge jedes solche Objekt zur
Menge der getesteten Objekte hinzu;
goto Start.
Führe sukzessive alle möglichen Testschritte (entspre
chend zu a)) aus;
wenn keine weiteren Testschritte mehr möglich sind, dann prüfe, ob ein (oder eventuell mehrere) Objekt(e) ganz ge testet wurde(n);
falls "ja": füge jedes solche Objekt zur Menge der getes teten Objekte hinzu; goto Start;
falls "nein": goto 2. Fall;
Alternative zu b): Man muß natürlich nicht unbedingt so lange testen bis kein Testschritt mehr möglich ist, son dern kann bereits, wenn ein Objekt ganz getestet wurde, wieder zu Start gehen.
wenn keine weiteren Testschritte mehr möglich sind, dann prüfe, ob ein (oder eventuell mehrere) Objekt(e) ganz ge testet wurde(n);
falls "ja": füge jedes solche Objekt zur Menge der getes teten Objekte hinzu; goto Start;
falls "nein": goto 2. Fall;
Alternative zu b): Man muß natürlich nicht unbedingt so lange testen bis kein Testschritt mehr möglich ist, son dern kann bereits, wenn ein Objekt ganz getestet wurde, wieder zu Start gehen.
In diesem Fall ist ein Zyklus aufgetreten (gegenseitige
Abhängigkeit zwischen ungetesteten Objekten);
löse den Zyklus auf durch Stubben eines Objektes/Methode,
um wenigstens ein weiteres Objekt testen zu können, und
teste dieses Objekt (rufe Methode auf, überprüfe Ergeb
niswerte und Zustände);
nach erfolgreichem Testen füge dieses Objekt zur Menge der getesteten Objekte hinzu; goto Start.
nach erfolgreichem Testen füge dieses Objekt zur Menge der getesteten Objekte hinzu; goto Start.
Der Integrationstest in vollständig und beendet;
Die folgende Tabelle 1 zeigt ein C++-Beispiel, mit dem die Arbeitsweise des erfindungsgemäßen Verfahrens verdeutlicht werden soll:
Die folgende Tabelle 1 zeigt ein C++-Beispiel, mit dem die Arbeitsweise des erfindungsgemäßen Verfahrens verdeutlicht werden soll:
Tabelle 1:
1 class c3
2 { private:
3 float r;
4 public:
5 int c3_m1()
6 { if (r < 0)
7 return (0);
8 else return (1);
9 }
10 c3()
11 { r = 17;
12 c3(float z)
13 { r = z * z; };
14 };
15
16 class c2
17 { private:
18 int i;
19 public:
20 void c2_m1(c3 p)
21 { if (p.c3_m1())
22 i = 10;
23 else i = 7;
24 };
25 void c2_m2(int k)
26 { i = k;
27 }
28 c2()
29 { i = 100;
30 };
31 };
32
33 class c1
34 { private: c2 a;
35 public:
36 void cl_m1(c3 p)
37 { a.c2_m1(p);
38 a.c2_m2(5);
39 }
40 }
41
42 main()
43 { c1 o1;
44 c3 o2;
45 c3 03(5);
46 o1.c1_m1(o2);
47 o1.c1_m1(10.0);
48 }
2 { private:
3 float r;
4 public:
5 int c3_m1()
6 { if (r < 0)
7 return (0);
8 else return (1);
9 }
10 c3()
11 { r = 17;
12 c3(float z)
13 { r = z * z; };
14 };
15
16 class c2
17 { private:
18 int i;
19 public:
20 void c2_m1(c3 p)
21 { if (p.c3_m1())
22 i = 10;
23 else i = 7;
24 };
25 void c2_m2(int k)
26 { i = k;
27 }
28 c2()
29 { i = 100;
30 };
31 };
32
33 class c1
34 { private: c2 a;
35 public:
36 void cl_m1(c3 p)
37 { a.c2_m1(p);
38 a.c2_m2(5);
39 }
40 }
41
42 main()
43 { c1 o1;
44 c3 o2;
45 c3 03(5);
46 o1.c1_m1(o2);
47 o1.c1_m1(10.0);
48 }
MGT := Menge der getesteten Objekte
MGT := { }
MGT := { }
Als Beispiel werden folgende Iterationsschritte angegeben
(die Aufteilung in die einzelnen Schritte ist teilweise fle
xibel)
- 1.) Ermittlung aller noch nicht getesteten Objekte, die nur Objekte aus MGT oder Standardtypen benutzen:
o2, o3 in main() (o1 von c1 ist noch nicht testbar!)
- - Aufruf des parameterlosen Konstruktors von c3 in Zeile 44
- - Benutzung als "rechte Seite" im vom Compiler generierten Copy-Konstruktor in Zeile 46 (über tol, siehe Schritt 2.); muß nicht getestet werden, da compilergeneriert)
- - Aufruf des parameterisierten Konstruktors von c3 in Zeile
45
=< generierte Testfälle: - - Test des parameterlosen Konstruktors von c3
- - Test des parameterisierten Konstruktors von c3 mit Parameter 5 (incl. cast von int auf float)
Damit sind o2 und o3 getestet.
MGT := MGT + {o2, o3i}
- 2.) Ermittlung von noch nicht getesteten Objekten, die nur die Objekte aus MGT oder Standardtypen benutzen; Testfortset zung mit den Objekten, die in Zeile 46 benötigt werden wird angestrebt.
Privates Objekt a von c2 in c1 mit parameterlosem
Konstruktor (o1 von c1 noch nicht testbar!)
Temporäres Objekt to1 der Klasse c3 an Parameterposition
in Zeile 46 durch compilergenerierten Copy-Konstruktor
erzeugt
- - Aufruf des compilergenerierten Copy-Konstruktors mit o2 als rechter Seite (muß nicht getestet werden, da compi lergeneriert)
- - weitere Benutzung nur zusammen mit a (in Strategie 1. Fall b))
- - Aufruf des parameterlosen Konstruktors von c2 in Zeile 34
- - weitere Benutzung nur zusammen mit to1 (in Strategie 1. Fall b))
- - a.c2_m1(to1) in Zeile 37
- - a.c2_m2(5) in Zeile 38
=< generierte Testfälle: - - Test des parameterlosen Konstruktors von c2 für a
- - Test von a.c2_m1(to1) mit schon getestetem to1
- - Test von a.c1_m1(5)
MGT := MGT + {to1 inklusive a}
- 3.) Ermittlung von noch nicht getesteten Objekten, die nur die Objekte aus MGT oder Standardtypen benutzen
Privates Objekt a von c2 in c1 mit parameterlosem Kon
struktor
Temporäres Objekt to2 der Klasse c3 an Parameterposition
in Zeile 47 mit parameterisiertem Konstruktor c3(float z)
erzeugt
- - Aufruf des parameterisiertem Konstruktors c3(float z) mit 10.0 als konstantem Parameterwert
- - weitere Benutzung nur zusammen mit a (in Strategie 1. Fall b))
- - a aus Schritt 2.) übernehmen!
- - weitere Benutzung nur zusammen mit to2 (in Strategie 1. Fall b))
- - a.c2_m1(to2) in Zeile 37
- - a.c2_m2(5) in Zeile 38
=< generierte Testfälle: - - Test des parameterisierten Konstruktors c3(float z) mit z = 10.0
- - Test von a.c2_m1(to2) mit schon getestetem to2 und "altem" a
- - Test von a.c1_m1(5)
MGT := MGT + {to2 inklusive a}
- 4.) Ermittlung von noch nicht getesteten Objekten, die nur die Objekte aus MGT oder Standardtypen benutzen
o1
Keine mehr (alle bereits getestet)
- - Aufruf des parameterlosen, compilergenerierten Konstruk tors von c1 in Zeile 43
- - Aufruf der Methode c1_m1(o2) in Zeile 46
- - Aufruf der Methode c1_m1(10.0) in Zeile 47
Bemerkung: Die dabei auftretenden weiteren Objekte wurden
schon für ihre jeweiligen Verwendungen getestet
=< generierte Testfälle:
=< generierte Testfälle:
- - Test der Methode c1_m1(o2)
- - Test der Methode c1_m1(10.0)
MGT := MGT + {o1}
Damit sind alle Objekte aus main() getestet.
Im folgenden wird die Erfindung anhand einer Figur weiter er
läutert
Fig. 1 zeigt ein Beispiel des erfindungsgemäßen Verfahrens
ohne das Verfahren auf diesen Anwendungsfall beschränken zu
wollen. Es stellt sich folgende Situation dar:
Die Objekte O₁, O₂ und O₃ sind bereits getestet, die Objekte
O₄ und O₅ nicht. O₄ benutzt O₁, O₂ und O₃. O₄ und O₅ benutzen
sich gegenseitig, also wäre nach dem reinem Integrieren nach
Objekten ein Stub notwendig.
Bei genauerer automatischer Analyse der Abhängigkeit durch
das erfindungsmäßige Verfahren ergibt sich, daß der Aufruf
von m₅ an O₄ lediglich einen Aufruf von m₁ an O₁ zur Folge
hat (dieser kann als getestet angesehen werden.) Somit ergibt
sich eine Integrationsreihenfolge ohne Stub: Teste den Aufruf
von m₅ an O₄. Anschließend ist O₅ testbar, da keine weiteren,
nicht getesteten Aufrufe von O₅ ausgehen. Nach dem Test von
O₅ kann dieses zur Menge der getesteten Objekte hinzugefügt
werden.
Danach ist auch O₄ testbar.
Claims (9)
1. Integrationstestverfahren für ein objektorientiertes Pro
gramm, welches bereits getestete Objekte, bzw. Klassen ent
hält
- a) bei dem durch eine Quellcode-Analyse des objektorientier ten Programmes gegenseitige Abhängigkeiten zwischen minde stens zwei Objekten und/oder Klassen als Beziehungsstruktur ermittelt werden,
- b) bei dem ein getestetes Objekt und/oder ein aus einer ge testeten Klasse abgeleitetes Objekt einer Testabsolventen menge zugeordnet wird,
- c) und bei dem mit Hilfe der Beziehungsstruktur mindestens ein Objekt ermittelt wird, welches lediglich von Objekten der Testabsolventenmenge abhängt und getestet wird.
2. Verfahren nach Anspruch 1, bei dem zum Testen eines Objek
tes mittels des Quellcodes und der Beziehungsstruktur ein
richtiger Konstruktor automatisch ermittelt wird, welcher der
Erzeugung des Objektes für den Integrationstest dient.
3. Verfahren nach Anspruch 2, bei dem das zu testende Objekt
unter Verwendung des Quellcodes durch einen Konstruktoraufruf
und kopieren von Datenkomponenten automatisch in einen Zu
stand gebracht wird, wie er für den Integrationstest benötigt
wird.
4. Verfahren nach einem der obigen Ansprüche, bei dem zum
Testen eines Objektes aus der Beziehungsstruktur ein Metho
denaufruf abgeleitet wird, mit dem das Objekt getestet wird.
5. Verfahren nach einem der voranstehenden Ansprüche, bei dem
falls kein Objekt ermittelt wird, welches lediglich von Ob
jekten der Testabsolventenmenge abhängt, dasjenige Objekt
ermittelt wird, welches zusätzlich von möglichst wenigen un
getesteten Objekten abhängt und getestet wird.
6. Verfahren nach Anspruch 5, bei dem ein ungetestetes Objekt
durch ein Objekt-Stub ersetzt wird.
7. Verfahren nach einem der voranstehenden Ansprüche, bei dem
von solchen Objekten, welche aufgrund der Beziehungsstruktur
nur voneinander und nicht von Objekten der Testabsolventen
menge abhängen mindestens eines durch einen Objekt-Stub er
setzt wird, um ein anderes zu testen.
8. Verfahren nach einem der voranstehenden Ansprüche, das
mehrfach ausgeführt wird.
9. Verfahren nach Anspruch 5, das so oft ausgeführt wird bis
kein ungetestetes Objekt mehr vorhanden ist.
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
DE4416704A DE4416704A1 (de) | 1994-05-11 | 1994-05-11 | Integrationstestverfahren für ein objektorientiertes Programm |
US08/438,846 US5615333A (en) | 1994-05-11 | 1995-05-11 | Integration testing method for object-oriented software |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
DE4416704A DE4416704A1 (de) | 1994-05-11 | 1994-05-11 | Integrationstestverfahren für ein objektorientiertes Programm |
Publications (1)
Publication Number | Publication Date |
---|---|
DE4416704A1 true DE4416704A1 (de) | 1995-11-16 |
Family
ID=6517917
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE4416704A Withdrawn DE4416704A1 (de) | 1994-05-11 | 1994-05-11 | Integrationstestverfahren für ein objektorientiertes Programm |
Country Status (2)
Country | Link |
---|---|
US (1) | US5615333A (de) |
DE (1) | DE4416704A1 (de) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1998025204A1 (de) * | 1996-12-04 | 1998-06-11 | Siemens Aktiengesellschaft | Verfahren zum testen von systemkomponenten eines objektorientierten programms |
EP0862114A1 (de) * | 1997-02-27 | 1998-09-02 | Siemens Schweiz AG (Siemens Suisse SA) (Siemens Svizzera SA) Siemens Switzerland Ltd) | Verfahren zur Prüfung eines objekt-orientierten Systems |
CN115658550A (zh) * | 2022-12-09 | 2023-01-31 | 合肥高维数据技术有限公司 | 提升大规模样本测试效率的自动化测试方法及*** |
Families Citing this family (40)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6067639A (en) * | 1995-11-09 | 2000-05-23 | Microsoft Corporation | Method for integrating automated software testing with software development |
US5864660A (en) * | 1996-03-12 | 1999-01-26 | Electronic Data Systems Corporation | Testing the integration of a plurality of elements in a computer system using a plurality of tests codes, each corresponding to an alternate product configuration for an associated element |
US6704802B1 (en) * | 1996-03-27 | 2004-03-09 | Dell Usa, Lp | Method and system for communicating between independent software modules |
US5805796A (en) * | 1996-03-27 | 1998-09-08 | Dell Usa, Lp | System architecture for implementing modular diagnostics |
US5751941A (en) * | 1996-04-04 | 1998-05-12 | Hewlett-Packard Company | Object oriented framework for testing software |
US6401135B1 (en) * | 1996-06-21 | 2002-06-04 | Sun Microsystems, Inc. | Translator object for testing an interface to a server object |
US5918053A (en) * | 1996-12-19 | 1999-06-29 | International Business Machines Corp. | Method and system for diagraming collaborations deduced from small talkcode using a design virtual machine |
US5881219A (en) * | 1996-12-26 | 1999-03-09 | International Business Machines Corporation | Random reliability engine for testing distributed environments |
US5926622A (en) * | 1997-03-18 | 1999-07-20 | Lucent Technologies Inc. | Efficient regression verification |
US6182024B1 (en) * | 1997-10-14 | 2001-01-30 | International Business Machines Corporation | Modeling behaviors of objects associated with finite state machines and expressing a sequence without introducing an intermediate state with the arc language |
US6047390A (en) * | 1997-12-22 | 2000-04-04 | Motorola, Inc. | Multiple context software analysis |
US7526468B2 (en) * | 1999-01-08 | 2009-04-28 | Computer Associates Think, Inc. | System and method for recursive path analysis of DBMS procedures |
US6973560B1 (en) * | 1999-07-16 | 2005-12-06 | Lamarck, Inc. | Fault tolerant and combinatorial software environment system, method and medium |
US7590973B1 (en) * | 2000-06-30 | 2009-09-15 | Microsoft Corporation | Systems and methods for gathering, organizing and executing test cases |
US7925513B2 (en) * | 2001-03-15 | 2011-04-12 | Versata Development Group, Inc. | Framework for processing sales transaction data |
US20020133753A1 (en) * | 2001-03-19 | 2002-09-19 | Thomas Mayberry | Component/Web services Tracking |
US6757849B2 (en) * | 2001-08-03 | 2004-06-29 | Hewlett-Packard Development Company, L.P. | System and method for developing customized integration tests and network peripheral device evaluations |
US6859866B2 (en) * | 2001-10-01 | 2005-02-22 | International Business Machines Corporation | Synchronizing processing of commands invoked against duplexed coupling facility structures |
US20030070142A1 (en) * | 2001-10-10 | 2003-04-10 | International Business Machines Corporation | Self-contained validation of data model object content |
US7137104B2 (en) * | 2002-05-21 | 2006-11-14 | International Business Machines Corporation | Semantics-based composition of class hierarchies |
US7039902B2 (en) * | 2002-06-06 | 2006-05-02 | Sun Microsystems, Inc. | Mechanism for enabling efficient testing of a set of computer code |
US7334219B2 (en) * | 2002-09-30 | 2008-02-19 | Ensco, Inc. | Method and system for object level software testing |
US7680818B1 (en) * | 2002-12-18 | 2010-03-16 | Oracle International Corporation | Analyzing the dependencies between objects in a system |
GB0229669D0 (en) * | 2002-12-19 | 2003-01-29 | Ibm | A method for capturing computer application diagnostics |
US7287242B2 (en) * | 2003-09-02 | 2007-10-23 | Hewlett-Packard Development Company, L.P. | Efficient re-validation of modified software |
US7296189B2 (en) * | 2003-09-19 | 2007-11-13 | International Business Machines Corporation | Method, apparatus and computer program product for implementing autonomic testing and verification of software fix programs |
EP1676251A1 (de) * | 2003-10-08 | 2006-07-05 | Innerworkings (Holdings) Limited | Lernsystem |
US7765221B2 (en) * | 2004-09-30 | 2010-07-27 | Sap Ag | Normalization of a multi-dimensional set object |
US20060179351A1 (en) * | 2005-02-10 | 2006-08-10 | Microsoft Corporation | Target object for dynamic marshaling testing |
US20070088986A1 (en) * | 2005-10-19 | 2007-04-19 | Honeywell International Inc. | Systems and methods for testing software code |
US20070168973A1 (en) * | 2005-12-02 | 2007-07-19 | Sun Microsystems, Inc. | Method and apparatus for API testing |
US8561036B1 (en) | 2006-02-23 | 2013-10-15 | Google Inc. | Software test case management |
US8205191B1 (en) * | 2006-06-02 | 2012-06-19 | Parasoft Corporation | System and method for change-based testing |
US8311794B2 (en) * | 2007-05-04 | 2012-11-13 | Sap Ag | Testing executable logic |
US7873951B1 (en) * | 2007-08-01 | 2011-01-18 | Oracle America, Inc. | Automated object delegation |
US9223683B1 (en) * | 2012-05-03 | 2015-12-29 | Google Inc. | Tool to analyze dependency injection object graphs for common error patterns |
JP5605397B2 (ja) * | 2012-07-11 | 2014-10-15 | 株式会社デンソー | 結合検査要否判定方法及び装置 |
US10223246B2 (en) * | 2012-07-30 | 2019-03-05 | Infosys Limited | System and method for functional test case generation of end-to-end business process models |
US9934130B2 (en) * | 2016-05-20 | 2018-04-03 | Accenture Global Solutions Limited | Software integration testing with unstructured database |
EP3862822A1 (de) * | 2020-02-06 | 2021-08-11 | Siemens Aktiengesellschaft | Verfahren und system zum validieren eines steuerungsprogramms |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4595981A (en) * | 1984-03-05 | 1986-06-17 | At&T Bell Laboratories | Method of testing interfaces between computer program modules |
US4729096A (en) * | 1984-10-24 | 1988-03-01 | International Business Machines Corporation | Method and apparatus for generating a translator program for a compiler/interpreter and for testing the resulting translator program |
US4819233A (en) * | 1987-04-08 | 1989-04-04 | Westinghouse Electric Corp. | Verification of computer software |
US4864569A (en) * | 1987-11-25 | 1989-09-05 | Westinghouse Electric Corp. | Software verification and validation configuration management system |
US4864497A (en) * | 1988-04-13 | 1989-09-05 | Digital Equipment Corporation | Method of integrating software application programs using an attributive data model database |
US5301325A (en) * | 1991-03-07 | 1994-04-05 | Digital Equipment Corporation | Use of stack depth to identify architechture and calling standard dependencies in machine code |
JPH06103048A (ja) * | 1992-04-24 | 1994-04-15 | Nec Corp | プログラム開発支援システム |
US5371747A (en) * | 1992-06-05 | 1994-12-06 | Convex Computer Corporation | Debugger program which includes correlation of computer program source code with optimized object code |
US5357452A (en) * | 1992-06-30 | 1994-10-18 | Sun Microsystems, Inc. | Automatic generation of auto-checking testing functions |
US5359546A (en) * | 1992-06-30 | 1994-10-25 | Sun Microsystems, Inc. | Automatic generation of test drivers |
US5432940A (en) * | 1992-11-02 | 1995-07-11 | Borland International, Inc. | System and methods for improved computer-based training |
US5390325A (en) * | 1992-12-23 | 1995-02-14 | Taligent, Inc. | Automated testing system |
US5325533A (en) * | 1993-06-28 | 1994-06-28 | Taligent, Inc. | Engineering system for modeling computer programs |
-
1994
- 1994-05-11 DE DE4416704A patent/DE4416704A1/de not_active Withdrawn
-
1995
- 1995-05-11 US US08/438,846 patent/US5615333A/en not_active Expired - Fee Related
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1998025204A1 (de) * | 1996-12-04 | 1998-06-11 | Siemens Aktiengesellschaft | Verfahren zum testen von systemkomponenten eines objektorientierten programms |
US6523169B1 (en) | 1996-12-04 | 2003-02-18 | Siemens Aktiengesellschaft | Method for testing system components of an object-oriented program |
CN1105353C (zh) * | 1996-12-04 | 2003-04-09 | 西门子公司 | 测试一个面向对象程序的***组成部分的方法 |
EP0862114A1 (de) * | 1997-02-27 | 1998-09-02 | Siemens Schweiz AG (Siemens Suisse SA) (Siemens Svizzera SA) Siemens Switzerland Ltd) | Verfahren zur Prüfung eines objekt-orientierten Systems |
CN115658550A (zh) * | 2022-12-09 | 2023-01-31 | 合肥高维数据技术有限公司 | 提升大规模样本测试效率的自动化测试方法及*** |
Also Published As
Publication number | Publication date |
---|---|
US5615333A (en) | 1997-03-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE4416704A1 (de) | Integrationstestverfahren für ein objektorientiertes Programm | |
EP1034475B1 (de) | Verfahren zum testen von systemkomponenten eines objektorientierten programms | |
DE10244131B4 (de) | Verfahren zur Unterstützung einer Identifizierung einer defekten Funktionseinheit in einer technischen Anlage | |
DE102005014273B4 (de) | Vergleich von Schnittstellen zwischen Softwarekomponenten | |
DE19639424A1 (de) | Entwurfsverfahren für die Anlagentechnik und rechnergestütztes Projektierungssystem zur Verwendung bei diesem Verfahren | |
EP0525432A2 (de) | Verfahren zur Änderung von Systemkonfigurationsdatensätzen in einem Fernmeldevermittlungssystem | |
WO1994014117A1 (de) | Verfahren zum testen mindestens einer klasse eines objektorientierten programmes auf einem rechner | |
DE10059796A1 (de) | Steuerung der Lebensdauer von Aktivitäten für die Datenverarbeitung | |
DE10333087A1 (de) | Verfahren zum automatischen Zerlegen von dynamischen Systemmodellen in Teilmodelle | |
DE10048941A1 (de) | Zeitdiagramm-Compiler und Laufzeitumgebung für die interaktive Erzeugung von ausführbaren Testprogrammen zur Logiküberprüfung | |
DE10197097T5 (de) | Programmierwerkzeug | |
EP1005215B1 (de) | Verfahren und Vorrichtung zum Editieren von Konfigurationsdaten für Telekommunikationssysteme | |
EP1005216B1 (de) | Verfahren und Vorrichtung zur Validierung von Konfigurationsdaten für Telekommunikationssysteme | |
DE69836751T2 (de) | Dienste mit rufunabhängigen modulen | |
WO1997040442A1 (de) | Verfahren und steuereinrichtung für eine graphische steuerung von abläufen in einem netzwerkmanagementsystem | |
WO1999030232A1 (de) | Verfahren zur überprüfung der pfadüberdeckung bei software-tests | |
WO1994009432A1 (de) | Verfahren zur durchfürhung mindestens eines tests an mindestens einem von auf einem rechner parallel ablauffähigen objekten eines objektorientierten programmes | |
EP0708941B1 (de) | Verfahren zum test eines objektorientierten programms | |
EP1505399B1 (de) | Verfahren zum Erzeugen von Testdaten zum Austesten der Funktionsfähigkeit einer datenverarbeitenden Schaltung | |
DE102009019442A1 (de) | Testdatengenerator | |
DE3016510A1 (de) | Hilfsgeraet zur steuerprogrammentwicklung fuer komplexe anlagen, insbesondere fuer ein fernsprech-vermittlungssystem | |
DE112010005924T5 (de) | Verfahren und System zum Weitergeben von Änderungen an einer Master-Einheit zu Duplikaten | |
DE10105729C1 (de) | Verfahren und System zur funktionsmäßigen Erweiterung einer Telekommunikationsanlage | |
DE102005005585A1 (de) | Verfahren und Vorrichtung zum Zuweisen von Testzahlen | |
EP0560342B1 (de) | Verfahren zum Untersuchen des Ablaufs eines in einer Hardware-Beschreibungssprache geschriebenen Programms |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8139 | Disposal/non-payment of the annual fee |