DE4416704A1 - Integrationstestverfahren für ein objektorientiertes Programm - Google Patents

Integrationstestverfahren für ein objektorientiertes Programm

Info

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
Application number
DE4416704A
Other languages
English (en)
Inventor
Peter Dr Juettner
Sebald Kolb
Peter Zimmerer
Udo Naumann
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Siemens AG
Original Assignee
Siemens AG
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Siemens AG filed Critical Siemens AG
Priority to DE4416704A priority Critical patent/DE4416704A1/de
Priority to US08/438,846 priority patent/US5615333A/en
Publication of DE4416704A1 publication Critical patent/DE4416704A1/de
Withdrawn legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3676Test management for coverage analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-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)).
"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:
1. Fall: es gibt solche Objekte
Dieser Fall entsprechend der obigen Fallunterscheidung wird in a) und b) aufgeteilt.
a) Vorgehen nach Objekten
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.
b) Vorgehen nach durchführbaren Testschritten (die beispiels­ weise jeweils einer Objekt-Benutzung entsprechen)
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.
2. Fall: es gibt keine solchen Objekte, aber es gibt noch un­ getestete Objekte
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.
3. Fall: es gibt keine ungetesteten Objekte mehr
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 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)).
1. Fall: es gibt solche Objekte
Dieser Fall wird in a) und b) aufgeteilt, entsprechend zur obigen Fallunterscheidung.
a) Vorgehen nach Objekten
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.
b) Vorgehen nach durchführbaren Testschritten (die je­ weils einer Objekt-Benutzung entsprechen)
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.
2. Fall: es gibt keine solchen Objekte, aber es gibt noch ungetestete Objekte
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.
3. Fall: es gibt keine ungetesteten Objekte mehr
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:
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  }
MGT := Menge der getesteten Objekte
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:
Programmiererdefinierte Objekte
o2, o3 in main() (o1 von c1 ist noch nicht testbar!)
Benutzung von o2
  • - 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)
Benutzung von o3
  • - 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.
Programmiererdefinierte Objekte
Privates Objekt a von c2 in c1 mit parameterlosem Konstruktor (o1 von c1 noch nicht testbar!)
Compilergenerierte Objekte
Temporäres Objekt to1 der Klasse c3 an Parameterposition in Zeile 46 durch compilergenerierten Copy-Konstruktor erzeugt
Benutzung von to1
  • - 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))
Benutzung von a
  • - Aufruf des parameterlosen Konstruktors von c2 in Zeile 34
  • - weitere Benutzung nur zusammen mit to1 (in Strategie 1. Fall b))
Benutzung von to1 und a (in Strategie 1. Fall b)):
  • - a.c2_m1(to1) in Zeile 37
Weitere Benutzung von a
  • - 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
Programmiererdefinierte Objekte
Privates Objekt a von c2 in c1 mit parameterlosem Kon­ struktor
Compilergenerierte Objekte
Temporäres Objekt to2 der Klasse c3 an Parameterposition in Zeile 47 mit parameterisiertem Konstruktor c3(float z) erzeugt
Benutzung von to2
  • - Aufruf des parameterisiertem Konstruktors c3(float z) mit 10.0 als konstantem Parameterwert
  • - weitere Benutzung nur zusammen mit a (in Strategie 1. Fall b))
Benutzung von a
  • - a aus Schritt 2.) übernehmen!
  • - weitere Benutzung nur zusammen mit to2 (in Strategie 1. Fall b))
Benutzung von to2 und a (in Strategie 1. Fall b))
  • - a.c2_m1(to2) in Zeile 37
Weitere Benutzung von a
  • - 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
Programmiererdefinierte Objekte
o1
Compilergenerierte Objekte
Keine mehr (alle bereits getestet)
Benutzung von o1
  • - 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:
  • - 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.
DE4416704A 1994-05-11 1994-05-11 Integrationstestverfahren für ein objektorientiertes Programm Withdrawn DE4416704A1 (de)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

Cited By (5)

* Cited by examiner, † Cited by third party
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