DE3884034T2 - Verfahren zur Überprüfung von Computersoftware. - Google Patents
Verfahren zur Überprüfung von Computersoftware.Info
- Publication number
- DE3884034T2 DE3884034T2 DE88303029T DE3884034T DE3884034T2 DE 3884034 T2 DE3884034 T2 DE 3884034T2 DE 88303029 T DE88303029 T DE 88303029T DE 3884034 T DE3884034 T DE 3884034T DE 3884034 T2 DE3884034 T2 DE 3884034T2
- Authority
- DE
- Germany
- Prior art keywords
- block
- program
- code
- test
- file
- 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.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims description 39
- 238000012360 testing method Methods 0.000 claims description 104
- 238000012795 verification Methods 0.000 claims description 11
- 238000004590 computer program Methods 0.000 claims description 8
- 230000007704 transition Effects 0.000 claims description 4
- 230000008569 process Effects 0.000 description 15
- 230000006870 function Effects 0.000 description 12
- 238000012544 monitoring process Methods 0.000 description 7
- 238000007373 indentation Methods 0.000 description 6
- 238000013461 design Methods 0.000 description 3
- 238000011156 evaluation Methods 0.000 description 3
- 230000014509 gene expression Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000002360 preparation method Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 230000001143 conditioned effect Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 238000003780 insertion Methods 0.000 description 2
- 230000037431 insertion Effects 0.000 description 2
- 230000002452 interceptive effect Effects 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 238000011179 visual inspection Methods 0.000 description 2
- 238000013474 audit trail Methods 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 230000003750 conditioning effect Effects 0.000 description 1
- 230000001276 controlling effect Effects 0.000 description 1
- 238000013479 data entry Methods 0.000 description 1
- 238000013498 data listing Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 238000002372 labelling Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000013031 physical testing Methods 0.000 description 1
- 230000001105 regulatory effect Effects 0.000 description 1
- 238000010998 test method Methods 0.000 description 1
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/3688—Test management for test execution, e.g. scheduling of test suites
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Devices For Executing Special Programs (AREA)
Description
- Diese Erfindung bezieht sich auf ein Verfahren zum Testen neuer und überarbeiteter Computerprogramme durch automatisches Erzeugen, Ausführen und Dokumentieren eines kundenorientierten Testprogramms, das nur minimale Eingaben bzw. Interventionen durch den Benutzer erfordert.
- Viele Anlagenprozesse werden heutzutage überwacht und in unterschiedlichem Maße im Anlagenkontrollraum gesteuert, wobei Signale verwendet werden, die von überall in der Anlage angeordneten Sendeeinheiten und Instrumentierungen übermittelt werden. Ein typisches Beispiel einer solchen Prozeßanlage ist ein Kernkraftwerk. Obwohl zahlreiche Tätigkeiten im Kontrollraum manuell erfolgen, wird die verbleibende Mehrheit automatisch mit Hilfe von Schaltungen durchgeführt, die programmierte Mikroprozessoren oder programmierbare Digitalrechner umfassen. Zahlreiche der in diesen Mikroprozessoren und Rechnern verwendeten Programme sind mit Bezug auf die Anlagensicherheit kritisch und deshalb sind ihre Genauigkeit und Integrität wichtig.
- Bei einem typischen Kernkraftwerk können etwa 1200 oder mehr dieser Steuerungs- und Überwachungsprogramme vorhanden sein. Gegenwärtig werden sie durch eine Sichtprüfung des Codes zusammen mit einer unabhängigen physikalischen Prüfung jedes Programmsegments verifiziert und validitiert, um eine richtige Arbeitsweise des Programms sicherzustellen. Obwohl die Sichtprüfung sich als sehr effektiv bei der Validitierung des Programms erwiesen hat, erfordert die von der Nuclear Regulatory Commission der Vereinigten Staaten herausgegebene Richtlinie 1.97, daß Einrichtungen, die Datenerfassungs- und qualifizierte Anzeigefunktionen innerhalb des Kontrollraums erfüllen, in strengerer Weise geprüft werden. Die physikalischen Tests sind bisher unter Verwendung einer Demonstrationseinheit der tatsächlichen Hardware durchgeführt worden, die Zugang zu den Speicherplätzen für die Eingangsparameter und Ausgangsparameter ermöglicht. Um den zu testenden Softwareteil zu isolieren, werden die gewünschten Testwerte der Eingangsparameter direkt in die zugeordneten Speicherplätze in der Demonstrationseinheit eingegeben, und man läßt das Programm ablaufen. Die Ausgangswerte werden von den Ausgangsspeicherplätzen für einen manuellen Vergleich mit den erwarteten Werten herausgezogen.
- Ein solches Testen legt dem Verifizierer die ganze Last des Entwerfens eines Testprogramms auf, das alle Instruktionen und alle möglichen Verzweigungen in dem Programm ausführt. Dies erfordert ein großes Maß an Geschick auf Seiten des Verifizierers, und es gibt keine direkte Aufzeichnung sämtlicher ausgeführter Programmpfade. Da jedes Programm eine Vielzahl von Aufgaben erfordern kann, um alle Verzweigungen auszuführen, wird das Verfahren außerdem extrem zeitaufwendig und kompliziert.
- Demgemäß ist es das Hauptziel der vorliegenden Erfindung, ein Verfahren zum Testen von Computerprogrammen zu schaffen, das automatisch ein kundenorientiertes Testprogramm unter Verwendung minimaler Benutzereingaben erzeugt, ausführt und dokumentiert.
- Hingewiesen wird auf "Angewandte Informatik", Band 25, 8. August 1983, Seiten 321 bis 327, Wiesbaden, wo ein Verfahren zum Verifizieren eines Computerprogrammquellencodes mit bekanntem Format und einer Reihe von Programmanweisungen einschließlich Nichtsteuer- und Steueranweisungen beschrieben ist, durch welche das Programm sich auf alternative Anweisungen des Quellencodes verzweigen kann, und das Verfahren umfaßt das Instrumentieren einer Zieleinheit des Quellencodes durch Betreiben eines Prozessors zum Unterteilen des Quellencodes in Codeblöcke, wobei ein Codeblock durch die Nichtsteueranweisungen zwischen Steueranweisungen markiert wird, und zum Einfügen von ausführbaren Instruktionen in die Codeblöcke zum Schreiben einer Kennung in eine Ausgabedatei für jeden Codeblock, wenn er ausgeführt wird, das Auswählen eines Testdatensatzes für die Zielcodeeinheit, wobei jeder Testdatensatz Eingabewerte für Variable in der Testeinheit und erwartete Ausgabewerte enthält und der Testdatensatz so ausgewählt wird, daß jeder Codeblock in der Testeinheit ausgeführt wird, und das Erzeugen einer Ausgabe, die tatsächliche Ausgabewerte und erwartete Ausgabewerte für den Testdatensatz darstellt, und einer sequentiellen Auflistung der Blockkennungen der Blöcke der Zielcodeeinheit aus der Ausgabedatei in der Reihenfolge, in der sie ausgeführt wurden.
- Die Erfindung besteht in einem Verfahren zum Unterstützen der Verifizierung eines Computerprogrammquellencodes mit den Schritten:
- a) Neuformatieren des Quellencodes einer Programmquellendatei, wobei der Quellencode ein bekanntes Format und eine Reihe von Programmanweisungen aufweist, die Nichtsteueranweisungen und Steueranweisungen umfassen, mittels welcher das Programm sich auf alternative Programmanweisungen des Quellencodes verzweigen kann,
- b) Auswählen einer benutzergewählten Programmeinheit aus der neuformatierten Programmquellendatei,
- c) Instrumentieren des benutzergewählten Programms mittels eines Codeinstrumentenprozessors, der den Quellencode in Codeblöcke unterteilt, wobei ein Codeblock durch die Nichtsteueranweisungen zwischen Steueranweisungen markiert wird, und Einsetzen von ausführbaren Instruktionen in die Codeblöcke zum Schreiben einer Kennung in eine Ausgabedatei für jeden Codeblock, wenn er ausgeführt wird,
- d) Erzeugen eines Quellentestprogramms mit Eingabewerten für die benutzergewählte Programmeinheit und erwarteten Ausgabewerten, um die Programmeinheit mit einer Mehrzahl von benutzergewählten Testdaten auszuführen,
- e) Kompilieren, Verknüpfen und Ausführen des Testprogramms und der benutzergewählten Programmeinheit,
- f) wobei die Ausführung eine Ausgabe erzeugt, die aktuelle Ausgabewerte für jede Gruppe von Testdaten und eine sequentielle Auflistung der Blockkennungen der Blöcke der genannten benutzergewählten Programmeinheit aus der Ausgabedatei in der Reihenfolge darstellt, in welche sie ausgeführt wurden.
- Es wird hier ein Verfahren zum Instrumentieren eines Quellencodes, der in einem Prozeßprogramm zu verifizieren ist, und zum Erzeugen eines Teststeuerprogramms beschrieben, das kompiliert und mit dem instrumentierten Quellencode verknüpft wird, um den Quellencode durch Verarbeitung einer Reihe von Testdatensätzen auszuführen. Der Quellencode wird durch Prozessoren instrumentiert, um, wenn der Code ausgeführt wird, eine Anzeige für jeden Codeblock zu erzeugen, daß die Anweisungen des Blocks ausgeführt worden sind. Ein Codeblock umfaßt die Programmanweisungen zwischen Steueranweisungen. Deshalb wird, wenn der instrumentierte Code durch das Teststeuerprogramm ausgeführt wird, eine Ausgabe erzeugt, welche die ausgeführten Codeblöcke angibt. Durch eine zweckmäßig unterteilte Testreihe werden alle Codeblöcke ausgeführt. Die Testdatensätze werden durch Wählen von Werten für die Eingabevariablen des Zielcodes erzeugt. Die erwarteten Werte für die Ausgabevariablen des Zielcodes werden ebenfalls bestimmt, so daß die durch Ausführung der Testdatensätze erzeugten aktuellen Programmausgabewerte verifiziert werden können.
- Vorzugsweise wird der zu verifizierende Quellencode zuerst entsprechend einer standardisierten Gruppe von Formatierungsregeln neu formatiert, um einen standardisierten neuformatierten Quellencode herzustellen. Dieser neuformatierte Quellencode wird dann instrumentiert und Einheit für Einheit verifiziert, wobei eine Einheit ein Routine oder ein anderer zweckmäßiger Teil des Quellencodes ist.
- Beim Instrumentieren des Quellencodes werden nichtausführbare Bemerkungen mit einer eindeutigen Blockkennung am Anfang und Ende jedes Blocks der Zielcodeeinheit eingesetzt. Eine Blockdatentabelle wird erzeugt, welche die Blockkennungen, den Verschachtelungsgrad jedes Blocks, die Blockkennung, durch welche in jeden Block eingetreten wird, und eine Anzeige, ob ein Block ein Rückschleifenblock ist, auflistet. Eine Blockverknüpfungstabelle wird ebenfalls aus den Steueranweisungen erzeugt, welche alle gültigen Übergänge zwischen Blöcken aufzeigt. Sodann wird eine ausführbare Instruktion am Anfang des Blocks eingesetzt, um eine Ausgabedatei im Hinblick auf die Blockkennung zu informieren, wenn der Block ausgeführt wird. Eine weitere ausführbare Instruktion wird am Ende des Blocks eingesetzt, die den Block anzeigt, zu welchem die Steuerung zurückspringt, nachdem alle Anweisungen in dem Block ausgeführt worden sind. Während das Programm durch die Teststeuerung ausgeführt wird, werden die Blockkennungen während der Ausführung jedes Blocks in einer eindimensionalen Anordnung in eine Ausgabedatei eingeschrieben.
- Wenn die Zielcodeeinheit ein weiters Routine aufruft, werden ausführbare Schreibinstruktionen durch einen Prozessor vor und nach der Aufrufanweisung eingefügt, um in der Ausgabedokumentation eine Anzeige zu schaffen, daß die Aufrufanweisung erreicht wurde und das Programm nach dem Aufruf an die richtige Stelle zurückgekehrt ist. Gewünschtenfalls können außerdem Instruktionen zum Einschreiben des Wertes gewählter Variabler in die Ausgabedatei vor und nach dem Aufruf durch einen Prozessor in die Zielcodeeinheit eingefügt werden.
- Außerdem kann, wie hier beschrieben ist und bevorzugt wird, ein Pseudocode durch einen Pseudocodeprozessor aus der neuformatierten Zielcodeeinheit erzeugt werden. Der Pseudocode enthält nur die Steueranweisungen, wobei Bemerkungen zwischen den Identifizieren der Codeblöcke die gleichen Kennungen wie der instrumentierte Code verwenden. Der Pseudocodeprozessor kann außerdem die Blockdatentabelle und die Verknüpfungstabelle erzeugen, die vom Instrumentenprozessor erzeugt wird.
- Der Verifizierer prüft den Quellencode, sämtliche verfügbare Dokumentation und den Pseudocode sowie die von dem Pseudocodeprozessor erzeugten Blockdaten- und Verknüpfungstabellen zum Auswählen von Testdatensätzen, die alle Blöcke der Zielcodeeinheit ausführen werden. Die gewählten Werte von Eingabevariablen und die erwarteten Ausgabewerte für jeden Testdatensatz werden durch eine benutzerfreundliche Schnittstelle eingegeben und durch einen Testgeneratorprozessor in einer Variablendatei angeordnet. Der Testdatenprozessor benutzt dann diese Daten zum Erzeugen eines Teststeuerprogramms zur Verarbeitung der Testdatensätze. Die Variablendatei kann außerdem zur Bestimmung verwendet werden, welche Testdatensätze beeinträchtigt werden, wenn eine Variable verändert wird. Der Teststeuerprozessor erzeugt außerdem eine Testspezifizierung, welche die Eingabewerte, die erwarteten Ausgabewerte und die Blockverknüpfungen für jeden von dem Teststeuerprogramm verarbeiteten Testdatensatz darstellt.
- Das Teststeuerprogramm wird kompiliert und mit der instrumentierten Zielcodeeinheit verknüpft, und das sich ergebende Programm wird ausgeführt, um die Zielcodeeinheit für jeden Testdatensatz sukzessiv auszuführen. Die abschließende Dokumentation umfaßt, zusätzlich zum Pseudocode, die Blockdaten- und Verknüpfungstabellen und der Software-Testspezifizierung, Ausgabedaten, welche die Werte die Eingabevariablen, die tatsächlichen Werte der Ausgabevariablen zusammen mit den erwarteten Werten, und die tatsächliche Folge der Blockverknüpfungen auflisten.
- Die Erfindung, die sowohl das Verfahren wie auch die Einrichtung zum Verifizieren eines Computerquellencodes umfaßt, vereinfacht den Verifizierungsprozeß so, daß er schneller und mit einem größeren Maß an Standardisierung und Zuverlässigkeit ausgeführt werden kann, als dies bisher möglich ist.
- Ein volles Verständnis der Erfindung ergibt sich aus der folgenden Beschreibung der nur beispielsweise angegebenen bevorzugten Ausführungsformen in Verbindung mit den anliegenden Zeichnungen, in welchen zeigen:
- Die Fig. 1a, 1b und 1c, wenn sie entsprechend den jeweils im Kreis angegebenen Zeichen nebeneinander zusammengesetzt sind ein Flußdiagramm des automatisierten Software-Verifizierungssystems nach einer Ausführungsform der Erfindung,
- Fig. 2 die Organisation eines Bausteins einer beispielsweisen, nach der Erfindung zu verifizierenden Software,
- die Fig. 3 bis 6 Beispiele von Formatierungsregeln, die bei dem Ausführungsbeispiel der Erfindung zur Standardisierung der Formatierung des Zielcodes verwendet sind,
- die Fig. 7a und 7b einen Teil des Zielcodes, der gemäß der Standardisierungs- Formatierungsregeln des Ausführungsbeispiels der Erfindung neu formatiert ist,
- Fig. 8 einen Teil eines erzeugten Pseudocodes, wie er bei dem Erfindung anwendbar ist,
- die Fig. 9a, 9b und 9c zusammengenommen ein Segment eines vollständig instrumentierten Zielcodes gemäß dem Ausführungsbeispiel der Erfindung,
- die Fig. 10a, 10b und 10c zusammengenommen eine benutzerspezifische Informationsdarteiliste, die von dem Testgeneratorprozessor gemäß dem Ausführungsbeispiel der Erfindung erzeuge worden ist,
- Fig. 11 Teile eines Teststeuerprogramms, das von dem Testdatenprozessor gemäß dem Ausführungsbeispiel der Erfindung erzeugt worden ist,
- die Fig. 12 und 13 Teile der Softwaretestprogrammdatei, die von dem Testdatenprozessor gemäß dem Ausführungsbeispiel der Erfindung erzeugt worden ist,
- Fig. 14 die Formatierung von Ausgabeergebnissen gemäß dem Ausführungsbeispiel der Erfindung,
- Fig. 15 schematisch in Blockdiagrammform ein System zur Ausführung der Erfindung.
- Die Erfindung wird in ihrer Anwendung zum automatischen Verifizieren von Software für die Mikroprozessoren in einem digitalen integrierten Schutz- und Kontrollsystem für ein Kernkraftwerk beschrieben. Es ist jedoch ersichtlich, daß die Erfindung in gleicher Weise zur Verifizierung aller Arten von Software einsetzbar ist.
- Das automatisierte Softwareverifizierungssystem nach der Erfindung weist eine Reihe von Computerprogrammen auf, davon einige Dialogprogramme, die zum Testen von Zielcomputerprogrammen durch automatisches Erzeugen, Ausführen und Dokumentieren eines kundenorientieren Testprogramms unter Verwendung minimaler Benutzereingaben eingesetzt werden. Die Verifizierung wird an einem Allzweckdigitalcomputer ausgeführt, obwohl die Zielprogramme auch für die Verwendung bei Mikroprozessoren ausgelegt sein können. Das Softwaresystem wird in eine Anzahl unabhängiger Prozessoren unterteilt, um Modifikationen des Systems zu erleichtern.
- Der anfängliche Schritt des Verifizierungsprozesses ist die Standardisierung der Formatierung des Zielprogrammquellencodes. Die von verschiedenen Programmierern verwendete Formatierung und auch die Formatierung eines individuellen Programmierers innerhalb eines gegebenen Programms kann beträchtlich variieren. Der anfängliche Prozessor formatiert den gesamten Quellencode entsprechend standardisierter Regeln neu. Während diese Formatierung für die Ausführung der Erfindung nicht wesentlich ist, vereinfacht sie die Aufgaben der anderen Prozessoren. Sodann wird ein spezifisches Programm auf dem Zielprogrammsystem zum Testen aus der neuformatierten Datei herausgezogen. Ein Pseudocodegenerator zieht dann aus dem Zielprogramm eine informatorische Auflistung nur der Steueranweisungen des Zielprogramms heraus. Diese Steueranweisungen werden als Blöcke identifiziert und mit einer Blocknummer versehen. Der Pseudocodegenerator erzeugt außerdem eine Blockdatentabelle, die anzeigt, wie in jeden der Blöcke eingetreten wird, und die identifiziert, ob der Block ein Rückschleifenblock ist oder nicht. Zusätzlich wird eine Verknüpfungstabelle erzeugt, die alle gültigen Verzweigungen zwischen Blockpaaren identifiziert. Diese informatorische Blockdatentabelle und die Verknüpfungstabelle werden dem menschlichen Verifizierer verfügbar gemacht, damit er sie beim Aufsetzen des Testprogramms benutzen kann.
- In einem Parallelpfad fügt ein Codekommentarprozessor Blockidentifikationsbemerkungen entsprechend den vom Pseudocodegenerator benutzen Bemerkungen in den Zielquellencode ein. Ein Codeinstrumentierungsprozessor fügt dann ausführbare Überwachungsanweisungen in jeden Block des Quellencodes ein. Diese Überwachungsanweisungen werden ausgedruckt, wenn der Test durchgeführt wird, um zu verifizieren, daß jeder der Blöcke tatsächlich ausgeführt worden ist. Dieser instrumentierte Code ist dann zum Testen bereit. Der menschliche Verifizierer prüft den Zielquellencode anhand der Programmsoftwaredesignspezifikation und irgendwelcher weiterer verfügbarer Dokumentation und wählt zusammen mit der informatorischen Blockdatentabelle und der Verknüpfungstabelle Testbedingungen aus, die alle Zweige des Programms ausführen. Bei dieser Tätigkeit wählt der Verifizierer Eingabewerte für die verschiedenen Variablen und legt fest, wie die erwarteten Ausgabewerte aussehen sollten. Für ein komplexes Programm kann dies die Erstellung zahlreicher Testdatensätze erfordern.
- Ein Flußdiagramm des automatisierten Softwareverifizierungssystems nach der Erfindung ist in den Fig. 1a, b und c dargestellt. Der Verifizierer, also die Person, welche den Zielcode testet, erhält eine Datei 1 von zu testenden Programmen zusammen mit einer vom Programmierer geschriebenen Designspezifikation 2. Der Verifizierer muß den Zielcode und seine Dokumentation analysieren, um sicherzustellen, daß die Dokumentation richtig und genau ist, und muß den tatsächlichen Zielcode durch ein kundenspezifisches Teststeuerprogramm ausführen, das verifiziert, daß der Zielcode richtig arbeitet.
- Aus den Fig. 1a, b und c ist ersichtlich, daß zwei gesonderte Parallelzweige A und B im Funktionsdiagramm vorhanden sind. Der Zweig A zeigt eine Reihe von Prozessoren, die den Zielcode durch Einfügen von Anweisungen so konditionieren, daß bei seiner Ausführung Mittel zur Überwachung und Aufzeichnung des Ausführungspfads sowie sämtlicher Eingabe- und Ausgabewerte für jeden Testdatensatz innerhalb des Verifizierungsprozesses verfügbar sind. Dies ist die Hauptfunktion der Blöcke 3 bis 7 in den Fig. 1a und b. Diese Überwachungsanweisungen und Eingabe/Ausgabewerte stellen die notwendige Dokumentation für den Verifizierungsprozeß dar, wenn der Zielcode ausgeführt wird.
- Der Zweig B zeigt den Beurteilungs- und Testspezifikationsvorgang. Unter Verwendung der vom Programmierer geschriebenen Designspezifikation 2, die den Zweck des Zielcodes beschreibt, und unter Betrachtung einer Kopie des Originalcodes 1 muß der Verifizierer eine Reihe von Testdatensätzen - Block 9 - mit einem geeigneten Eingabewert zum Testen sämtlicher existierender Zweige innerhalb des instrumentierten Codes auswählen, während er außerdem bestätigen muß, daß die Ausgabewerte vorhersagbar und genau sind. Dieses Verfahren ist mit oder ohne dem automatisierten Softwareverifizierungssystem gleich und genauso anstrengend, aber die Dateneingabe, die Codekonditionierung und die Erzeugung von Steueranweisungen ist bei diesem System stark vereinfacht. Der Verifizierer gibt bei 10 die Eingabewerte und die erwarteten Ausgabewerte für jeden Testdatensatz ein, und der Zweig B verarbeitet die eingegebenen Testdaten - Block 11 - und erzeugt - Block 12 - ein Teststeuerprogramm, das den im Zweig A "konditionierten" Code ausführt.
- Alle innerhalb des beispielsweisen automatisierten Softwareverifizierungssystems eingesetzten Prozessoren wurden mit PL/M86, wie von der Intel Corporation in ihren Mikroprozessoren verwendet wird, als Zielsprache entwickelt. Es ist wichtig, zu verstehen, daß die grundsätzlichen Richtlinien, aufgrund derer diese Prozessoren entwickelt wurden, für jede blockstrukturierte Sprache universal sind und deshalb diese Prozessoren so modifiziert werden können, daß sie eine breite Vielfalt von Programmiersprachen wie beispielsweise unter anderem Pascal, PL1, und struktuiertes FORTRAN bearbeiten können. Eine Programmquellendatei für Intel PL/M86 wird als "MODUL" bezeichnet. Um einen gewöhnlichen Mechanismus zu schaffen, so daß jedes Stück der Software innerhalb der Gesamtsoftwarehierarchie schnell und leicht etikettiert werden kann, sind die folgenden Regeln getroffen worden: jeder "MODUL" innerhalb des Gesamtsoftwaresystems wird eindeutig mit einer fünfstelligen alphanumerischen Kennung mit einem daran anschließenden dreistelligen alphanumerischen Zusatz gekennzeichnet.
- Beispiel: TA028.PLM, RA039.ASM, FI007.INC, FD020.DEC.
- Die ersten beiden Buchstaben (z. B. TA, RA, FI, FD) werden zur Kategorisierung des Software "MODULS" nach Softwaresystem/Untersystem benutzt.
- Die nächsten drei Ziffern (d. h. 028, 039, 007, 020) kennzeichnen einen eindeutigen "MODUL" innerhalb eines spezifischen Softwaresystems/Untersystems.
- Die letzten drei Buchstaben (der Zusatz) bezeichnet eine spezifikationsfunktionelle Art der PL/M86-Quellenkartei:
- PLM - PL4M86-Programmquellendatei
- ASM - PL/M86-Assemblerprogrammquellendatei
- INC - PL/M86-Inklusivdatei
- DEC - PL/M86-Deklarationsdatei
- Eine PL/M86-Programmquellendatei (z. B. "MODUL" in PL/M86-Terminologie) kann irgendwo von 1 bis 99 Unterprogramme enthalten, die gewöhnlich als Prozeduren oder Funktionen bezeichnet werden, oder in der PL/M86-Terminologie als "UNITS". Die aktuelle PL/M86-Programmquellendatei selbst besteht aus drei Funktionsteilen :
- Der "MODUL"-"Kopfteil" enthält den gesamten Quellencode (einschließlich Bemerkungszeilen) innerhalb eines "MODULS" ausschließlich: (1) der "Ende"-Anweisung des Moduls, und (2) des gesamten zur Ausführung eines öffentlich oder lokal deklarierten Unterprogramms (d. h. Prozedur oder Funktion) innerhalb des "MODULS" erforderlichen Codes.
- Beispiel: TA028.HDR ist lediglich der Kopfteil des Software "MODULS" TA028.
- Das sind die individuellen Unterprogramme, die innerhalb des "MODULS" existieren. Diese Unterprogramme werden sequentiell von 1 bis 99 nummeriert, entsprechend ihrer physikalischen Reihenfolge in dem "MODUL". Jedes dieser Unterprogramme innerhalb des "MODULS" wird "UNIT" genannt.
- Beispiel: TA02823.UNT ist die 23. "UNIT" innerhalb des "MODUL" TA028.
- Das ist der Teil des "MODULS", der dem Ende des letzten Unterprogramms folgt.
- Beispiel: TA028.ENS ist lediglich der Endteil des Software "MODULS" TA028.
- Die physikalische Struktur eines PL/M86-"MODUL" ist in Fig. 2 dargestellt. Wie dort gezeigt ist, weist der Modul 20 einen Kopfteil 21, eine Reihe von bis zu 99 Unterprogrammen oder Units 22 und einen Endteil 23 auf.
- Wie in Block 3 der Fig. 1a gezeigt ist, formatiert der Codevorprozessor (CPP) die Datei von zu testenden Computerprogrammen 1 neu. Der CPP erzeugt eine syntaktisch korrekte Programmdatei aus einem erfolgreich kompilierten PL/M86-Programm. Der CPP bewerkstelligt das zeilenweise Vorformatieren und Einziehen der ursprünglichen PL/M86-Quellenprogrammdatei durch Anwendung der folgenden Programmcodierstandards. Der CPP verändert die Ausführung des ursprünglichen Quellencodes nicht, sondern bewirkt lediglich, daß sämtliche PL/M86- Quellencodeprogramme in sehr ähnlichem Format erscheinen, unabhängig von dem ursprünglichen Programmierer. Diese Standardisierung des Programmformats macht es anderen Personen als dem Urheber leichter verständlich. Es erleichtert auch die Ausführung weiterer Vorprozessoren, d. h. PPP 4, CCP 7, PCG 5, CIP 8, usw., da es anderenfalls für diese sehr schwierig wäre, alle diese verschiedenen in von Programmierer zu Programmierer unterschiedlichen Formaten zu bearbeiten.
- Die Blockstruktur der PL/M86-Sprache wird bei der Neuformatierung betont, um sicherzustellen, daß das Programm einfach lesbar ist und daß seine Funktion klar ist. Die folgenden Regeln zeigen, wie Blockstrukturen in dem beispielsweisen System formatiert werden. Natürlich sind die jeweils gewählten Regeln nicht kritisch, solang das Ziel des Erhalts eines standardisierten Formats realisiert wird.
- Einrückungen betragen zwei Stellen.
- Die einleitende "DO"-Anweisung und die entsprechende "END"- Anweisung haben die gleiche Linksbündigkeit. Innerhalb des Blocks werden Anweisungen eingerückt. Jeder neue Blockverschachtelungsgrad innerhalb eines Blocks erzeugt eine weitere Einrückung. Komplexe "DO"-Blöcke können mit äußeren "DO"- und "END"-Anweisungen etikettiert sein. Vorsicht ist bei der Etikettierung innerer Blöcke angebracht, weil sie die Einrückungsstruktur und Klarheit stört; statt dessen sollten Bemerkungen verwendet werden.
- Alle in "DO CASE" oder "DO WHILE"-Anweisungen verwendeten Ausdrücke werden in Klammern gesetzt. Ein Beispiel eines etikettierten "DO WHILE"-Blocks mit einem verschachtelten inneren "DO-END"-Block ist in Fig. 3 gezeigt. "DO CASE"- Blöcke müssen eine umschließende "DO"- und "END"-Anweisung um Ausdrücke herum haben, um die von solchen Blöcken umrissenen Pfade zu identifizieren helfen. Es können Anweisungsetiketten oder Bemerkungen in der ersten Zeile jedes Datensatzes verwendet werden. Jedem "DO CASE"-Block muß eine Prüfung auf gültigen Indexbereich vorausgehen. Ein "DO CASE"-Block mit "DO"- und "END"-Begrenzungen für jeden individuellen Datensatz ist in Fig. 4 dargestellt. Ein "DO CASE"-Block mit "DO"- und "END"-Begrenzungen für jeden individuellen Datensatz sowie mit Bemerkungen ist in Fig. 5 dargestellt.
- Der Auswertungsausdruck wird stets in Klammern gesetzt, und ausführbare Anweisungen werden stets eingerückt. "DO"-Blöcke sollten jederzeit angewendet werden. Wenn "DO"-Blöcke verwendet werden, gelten die sie betreffenden Regeln. "THEN" erscheint auf der gleichen Zeile wie die "IF"-Anweisung, wobei die "DO"-Anweisung auf der nächsten Zeile mit richtiger Einrückung beginnt.
- "END IF" ist wörtlich als "DO; END" definiert und dient zum Abschließen eines "IF"-Blocks. Er ist linksbündig mit der anfänglichen "IF" -Anweisung.
- Wenn "IF"-Anweisungen nach den "THEN", "DO"-Blöcken verschachtelt sind, müssen stets "DO"-Blöcke und das "END IF"- Konstrukt verwendet werden.
- Wenn sequentielle "IF"-Anweisungen verwendet werden ("IF"-Anweisungen, die nach der "ELSE"-Anweisung verschachtelt sind), müssen "DO"-Blöcke immer um die "IF"-Anweisungen herum verwendet werden. Ein Beispiel des verschachtelten und sequentiellen Konstrukts ist in Fig. 6 dargestellt.
- Die Möglichkeit zur Verwendung von Grußbuchstaben und Kleinbuchstaben ermöglicht die Einführung eines weiteren Klarheitsgrades in den Quellencode. Unter dieser Regel werden Großbuchstaben für auf die Blockstruktur bezogene Wörter verwendet, beispielsweise für "DO", "END", "IF" usw., während Kleinbuchstaben für alles übrige verwendet werden.
- Bemerkungen innerhalb des Codes sollten in der ersten Spalte stehen oder in der gleichen Spaltenposition wie der eingerückte Code auf der vorhergehenden Zeile des kommentierten Codes beginnen. Eine Bemerkung kann vor einem vollständigen Codeblock eingesetzt werden, um seine Funktionalität zu erläutern.
- Ein Beispiel eines nach den obigen Regeln neuformatierten Programmsegments ist in den Fig. 7a und b dargestellt.
- Der nächste Prozessor ist der Prozedur-Parser-Prozessor (PPP) 4. Der PPP wird zum automatischen Wählen "des" richtigen zu testenden (d. h. zu verifizierenden) Programms aus einer PL/M86-Quellendatei verwendet, die viele Programme enthalten kann. Dies eliminiert mögliche Fehler, die durch individuelle Verifizierer eingeführt werden können, wenn sie die ursprüngliche PL/M86-Programmquellendatei manuell schneiden und kleben, um das gewünschte Programm herauszuziehen. Der PPP erfordert, daß die PL/M86-Quellendatei zuerst den CPP-Vorprozessor durchlaufen haben muß.
- Der PPP zieht das folgende aus der vom CPP verarbeiteten PL/M86-Programmquellendatei heraus:
- 1. Den Kopfteil des "MODULS" (d. h. TA028.HDR).
- 2. Die bezeichnete "UNIT" (bzw. Unterprogramm) innerhalb des zu verifizierenden "MODULS" (d. h. TA02823).
- 3. Den Endteil des "MODULS" (d. h. TA002.END).
- Sodann erzeugt er eine modifizierte PL/M86-Programmquellendatei, die mit einer Kennung versehen wird, beispielsweise mit (TA02823.PLM), und aus dem folgenden besteht:
- 1. Dem herausgezogenen Kopfteil des ursprünglichen "MODULS" (d. h. TA028.HDR).
- 2. Der unmittelbar darauffolgenden Einfügung eines /*MARK*/- Zeichenkette zum Bezeichnen des Zustands der zu verifizierenden "UNITS" (d. h. Unterprogramm).
- 3. Der herausgezogenen, zu verifizierenden "UNIT" (d. h. TA02823.UNT).
- 4. Der unmittelbar darauffolgende Einfügung einer /*MARK END*/-Zeichenkette zum Bezeichnen des Endes der zu verifizierenden "UNIT".
- 5. Dem herausgezogenen Endteil des ursprünglichen "MODULS" (d. h. TA023.END).
- Infolgedessen-hat die Ausgabe des PPP (d. h. TA02823.PLM) die folgende Struktur:
- TA028.HDR ursprünglicher Kopfteil von TA028.PLM /*MARK*/ kommentierte "MARK" -Anweisung
- TA02823.UNT spezifische getestete TA028-"UNIT" /*MARK END*/ kommentierte "MARK END"-Anweisung
- TA028.END ursprüngliches Ende von TA028.PLM
- Diese modifizierte Quellendatei wird als Arbeitskopie der zu verifizierenden Einheit verwendet.
- Der nächste Prozessor ist der Pseudocodegenerator (PCG) 5, der vollständig informatorisch ist, und die Arbeitskopie des Programms nicht beeinflußt. Der PCG nimmt die aus dem Modul von dem PPP herausgezogene Programm-"UNIT" heraus und führt zwei Funktionen durch. Zunächst wird der Code abgefragt und irgendwelche ausführbaren Instruktionen identifiziert, die zu einem Programmübergang über Verzweigungen innerhalb des Programms führen könnten. Diese Methodologie basiert auf dem, was als Code- "BLOCK" definiert ist. Ein Code-"BLOCK" besteht aus einer Reihe von ausführbaren Softwareanweisungen, die stets von Anfang bis Ende in der gleichen genauen Reihenfolge ausgeführt werden. Normalerweise sind diese Code- "BLÖCKE" durch das voneinander getrennt, was als "Steuer"-Anweisungen bekannt ist, die wiederum bestimmen, welcher Code-"BLOCK" als nächster ausgeführt wird. Jeder Code- "BLOCK" wird mit einem mehrstelligen numerischen Code identifiziert, der als seine "Blocknummer" bekannt ist. Jedem Code-"BLOCK" ist außerdem eine "Verschachtelungsnummer" zugeteilt, die den "Block"-Verschachtelungsgrad identifiziert. Der Verschachtelungsgrad eines Code-"BLOCKS" ist ein Maß dafür, wieviele Steueranweisungen ausgeführt werden müssen, um diesen Code-"BLOCK" zu erreichen. Der PCG löscht sämtlichen Text zwischen den Steueranweisungen und setzt an dessen Stelle eine einfache "BLOCK-nn"-Kommentierungsanweisung, wobei "nn" die Blocknummer in ihrer sequentiellen Position vom Beginn des Programms an beschreibt. Der Zweck hiervon liegt darin, die zur Verifizierung zu testenden Codebereiche kenntlich zu machen. Fig. 8 zeigt den vom PCG für die in den Fig. 7a und b gezeigte Einheit erzeugten Pseudocode.
- Die zweite Funktion des PCG ist die Bestimmung aller möglichen Verzweigungen innerhalb der Programmeinheit. Bei der Durchführung dieser Funktion erzeugt der PCG zwei Datentabellen. Die erste ist die Blockdatentabelle, von welcher ein Beispiel folgt und die als Tafel 1 bezeichnet ist. Diese Tafel gibt die Blocknummer, die Verschachtelungsnummer und den damit zusammenhängenden Block an, welcher den Pfad darstellt, über welchen in den Block eingetreten wird.
- Die Verschachtelungsnummer in der Blockdatentabelle gibt den Verschachtelungsgrad des Blocks an. Ein Zähler, der den Verschachtelungsgrad verfolgt, erhöht jeweils bei "DO"-Anweisungen und vermindert bei "END"-Anweisungen. Schließlich zeigt die Blockdatentabelle an, ob der Block ein Rückschleifenblock ist, wobei ein "T" angibt, daß dies der Fall ist, und ein "F" angibt, daß dies nicht der Fall ist. Tafel 1 Blockdatentabelle Block Nr. Verschachtelungsnr. Blocknummer des zusammenhängenden Blocks Rückschleifenblock
- Die zweite von dem PCG erzeugte Tabelle ist die Verknüpfungstabelle, die nachstehend als Tafel 2 bezeichnet ist. Diese Tabelle bezeichnet alle möglichen Verzweigungen, die auftreten können, wenn der Code ausgeführt wird. Tafel 2 Verknüpfungstabelle
- Der PCG kombiniert den Pseudocode zusammen mit den beiden Datenquellen zu einer einzigen gemeinsamen Ausgabedatei 6, beispielsweise TA02823.PCG, die für die abschließende Dokumentation verwendet wird.
- Der Kommentierte-Code-Prozessor (CCP) 7 verwendet ebenso wie der PCG den Ausgang des PPP als seinen Eingang. Der CCP ist ähnlich dem PCG, und tatsächlich haben die beiden Prozessoren einen gemeinsamen Code, den sie beide benutzen. Während der PCG nur für den informatorischen Gebrauch für den Verifizierer bestimmt war, ist der CCP für die richtige Arbeitsweise des Codeinstrumentenprozessors (CIP) 8 unbedingt wichtig. Ebenso wie der PPP und PCG hilft auch der CCP, Fehler zu minimieren, die von dem individuellen Verifizierer durch Verwendung eines entsprechenden Standards an Regeln unabhängig von dem zu verifizierenden Code eingeführt werden. Der CCP untersucht den Code Zeile für Zeile auf die gleichen Steueranweisungen wie der PCG. Dieses Mal wird jedoch der Code nicht gelöscht, sondern es werden nichtausführbare Kommentarkarten in den Zielcode eingeführt, um Anfang und Ende jedes Codeblocks zu markieren. Folglich identifiziert der CCP jeden "Block" mit der eindeutigen "Blocknummer" die identisch mit der vom PCG dem gleichen Codeblock zugeordneten Nummer ist. Außerdem fügt der CCP eine kommentierte "DO"-Anweisung (d. h. /*DO*/) unmittelbar vor jedem Code "BLOCK" und eine kommentierte "END"-Anweisung (d. h. /*END*/) unmittelbar nach jedem Code- " BLOCK" ein. Er unterscheidet außerdem zwischen der "END"-Anweisung für ein normales "DO"-"END"-"BLOCK"- Konstrukt und der "END"-Anweisung für ein Schleifen-"DO"-"BLOCK"-Konstrukt (d. h. "END FOR", "END WHILE", usw.). Er gibt auch an, welche kommentierten, "DO"- und "END"-Anweisungen er in dem Programm eingefügt hat, in dem er daneben eine "/*ADDED BY CCP*/"-PL/M86-Kommentaranweisung plaziert. Dies dient lediglich Überwachungszwecken und wird nicht von CIP verwendet.
- Der CCP schreibt diese kommentierte "DO END"-Version des Programmquellencodes in eine Datei ein (d. h. TA02823.PRE).
- Der CCP erzeugt außerdem die gleichen beiden Datentabelle wie der PCG, aber schreibt sie in eine separate Datei ein (d. h. PA02823.TAB). Diese beiden Dateien werden von dem Codeinstrumentenprozessor (CIP) 8 benutzt.
- Der Codeinstrumentenprocessor (CIP) 8 verwendet die vom CCP hinzugefügten Bemerkungen als Markierungen zum Einfügen ausführbarer Überwachungsinstruktionen am Anfang und Ende von Codeblöcken zwischen Steueranweisungen und zum Kategorisieren jedes Blocks mit einer Folgenummer. Die Blöcke werden vom CIP in gleicher Weise nummeriert, wie das PCG-Verfahren die Blöcke nummeriert. Die ausführbaren Instruktionen setzen den Wert eines Elements in einer eindimensionalen Anordnung zu der entsprechenden Blocknummer, wenn in dem Block eingetreten wird, und den Block, zu welchem die Steuerung zurückspringt, wenn während der Ausführung aus dem Block ausgetreten wird. Auf diese Weise wird eine Überwachung des Programmausführungspfads leicht hergestellt, indem die Feldwerte ausgedruckt werden, die den Eintritt und den Austritt in einen bzw. aus einem ausgeführten Block in dem Programm zeigen.
- Der CIP identifiziert auch, welche ausführbare Anweisung er durch Danebensetzen einer "/*ADDED BY CIP* /"-PL/M86-Kommentaranweisung in das Programm eingefügt hat. Er identifiziert auch die aktuellen "Blocknummern", die er bei der Verarbeitung der vom CCP kommentierten einfachen "DO"- und "END"-Anweisungen durch Setzen einer "/*BLOCK nn*/"-PL/M86- Kommentaranweisung zugeordnet hat, wobei "nn" die aktuelle "Blocknummer" ist, die vom CIP am Anfang und Ende jedes "BLOCKS" zugeordnet worden ist. Ebenso wie beim CCP erfolgt dies lediglich zu Überwachungszwecken.
- Die Fig. 9a, b und c zeigen das voll instrumentierte, in den Fig. 7a und b dargestellte Codestück. Wie man sieht, wird jeder der Blöcke sequentiell in gleicher Weise wie im Pseudocode nach Fig. 8 durch die "BLOCK nn"-Bemerkungen identifiziert, beispielsweise durch die Bemerkungen 24 und 25 am Anfang und Ende des Blocks 3.
- Die ausführbaren Überwachungsinstruktionen, die in dem instrumentierten Code nach den Fig. 9a, b und c benutzt werden, sind die ACTLINKS-Anweisungen, welche die entsprechende Blocknummer in ein eindimensionales Feld an einer durch TRACEINX bezeichneten Stelle einschreiben. Beispielsweise schreibt die ACTLINKS-Anweisung 26 in dem Feld die Zahl "3" ein, was anzeigt, daß in den Block 3 eingetreten wurde. Die Zahl "3" wird in der Anordnung an der durch den Wert von TRACEINX angegebenen Stelle gespeichert. TRACEINX wird dann zur Vorbereitung für den nächsten Eintritt um 1 erhöht, wie bei 27 angegeben ist. Am Ende des Blocks 3 fügt eine weitere ACTLINKS-Anweisung 28 eine "2" in das eindimensionale Feld ein, was anzeigt, daß die Steuerung zum Block 2 zurückgeführt wurde. Wiederum wird TRACEINX zur Vorbereitung des nächsten Eintritts, beispielsweise bei 29, um 1 erhöht.
- Der instrumentierte Code nach den Fig. 9a, b und c zeigt auch ein weiteres Merkmal der Erfindung. Man sieht, daß der Block 3 ein weiteres, als "DEADMAN" identifiziertes Routine aufruft, wie durch die Anweisung "CALL DEADMAN" 30 angegeben ist. Der CIP fügt vor der Aufrufanweisung eine Reihe von Anweisungen ein, welche während der Ausführung des Programms "BEFORE DEADMAN" ("vor Deadman") ausdrucken. Diese Instruktionen umfassen eine Bewegungsbyte-Instruktion 31, eine Ausgabedatei-Schreibinstruktion 32 und eine Zeilenvorschubinstruktion 33. In gleicher Weise fügt der CIP-Prozessor nach der Aufrufinstruktion Instruktionen ein, die in die Ausgabedatei "AFTER DEADMAN" ("Nach Deadman") schreiben, was durch die Instruktionen 34, 35 und 36 verkörpert wird. Diese Sequenz verifiziert, daß das Zielroutine die Instruktion zum Aufrufen des externen Routine erreicht hat, und daß das Programm von dem aufgerufenen Routine an die richtige Stelle im Zielprogramm zurückgekehrt ist. Obwohl dies nicht durch den in den Fig. 9a, b und c gezeigten Code verköpert ist, kann der CIP-Prozessor auch für ein Einschreiben der Werte der Zieleinheitvariablen sowohl vor und nach dem Übergang zu dem aufgerufenen Routine in die Ausgabedatei einschreiben, um irgendeine Beeinträchtigung zu beobachten, die das Routine auf die Variablen haben kann.
- An dieser Stelle ist der Zielcode neu formatiert und alle möglichen Verzweigungsbereiche sind mit einer Blocknummer gekennzeichnet. Außerdem ist ein Code in den Zielcode eingesetzt, um den entsprechenden Wert in einem eindimensionalen Blocknummernfeld zu setzen, wenn dieser besondere Codeabschnitt ausgeführt wird. Außerdem ist ein Code eingeführt worden, um zu verifizieren, daß das Programm von einem aufgerufenen Routine zur richtigen Stelle zurückkehrt, und gewünschtenfalls auch die Werte der Variablen vor und nach dem Aufruf. Bis zu dieser Stelle war die einzige vom Verifizierer verlangte Eingabe die sequentielle Position des vom Modul herauszuziehenden Programms.
- Der Verifizierer muß sich nun mit der Computerprogrammsoftwaredesignspezifikation 2 vertraut machen, die vom Programmierer geschrieben ist und exakt die Funktion und den Zweck des Programms beschreibt. Außerdem muß sich der Verifizierer mit dem aktuellen Zielcode vertraut machen, der in der Datei 1 enthalten ist. Der Verifizierer muß den Zielcode visuell analysieren und mit der Designspezifikation 9 vergleichen. Mit dieser Information muß der Verifizierer 10 Eingabewerte und erwartete Ausgabewerte bestimmen, die zum Testen des Zielcodes verwendet werden. Der Pseudocode, die Blockdatentabelle und die Blockverknüpfungstabelle, die vom PCG bei 5 erzeugt worden sind, sind nützlich, indem sie den Verifizierer in die Lage versetzen, Eingabewerte vorzugeben, die jeden der Blöcke im Zielcode ausführen. Wenn die Eingabe/ erwartete Ausgabewerte bestimmt sind, müssen diese Daten zusammen mit entsprechender Identifizierung für die verschiedenen Testdatensätze manuell in den Testgeneratorprozessor (TGP) 12 eingegeben werden.
- Der Testgeneratorprozessor 12 dient zum Anfordern und Aufnehmen von Daten vom Verifizierer in einem benutzerfreundlichen Format und zum Anordnen derselben in einer mit dem Zielcode kompatiblen formatierten Weise. Der TGP stellt außerdem sicher, daß der Verifizierer einen vollständigen und folgerichtigen Datensatz eingegeben hat. Eine vom TGP erzeugte benutzerspezifizierte Informationsdateiliste, die auch als Variablendatei bezeichnet wird, wird in Abschnitte unterteilt. Ein Beispiel einer solchen Dateiliste ist in den Fig. 10a, b und c gezeigt. Die erste Zeile 37 bzw. Dateiüberschrift gibt die Daten und die Zeit der Erstellung der Datei und der Version des TGP an. Dies schafft einen Prüfpfad für jede Ausführung durch den Prüfstand. Der Abschnitt 0 gibt die aufgerufenen Prozeduren und/oder Funktionen an; in diesem Fall das Routine "Deadman". Die Zeilen mit einem Stern am Anfang sind Bemerkungen, welche die Information durch eine in der Zeile 39 erscheinende Spalte identifizieren. Beispielsweise ist der aufgerufene Prozedur- oder Funktionsname in den Spalten 1 bis 31 angegeben. In diesem Fall nimmt "Deadman" nur die Spalten 1 bis 7 ein. Die Dateikennung TA03801 ist in den Spalten 32 bis 38 aufgezeichnet.
- Der Abschnitt 1, der durch das Bezugszeichen 40 bezeichnet ist, enthält allgemeine Informationen über das Zielprogramm einschließlich solcher Dinge wie die Anzahl von Testdatensätzen und der verwendeten Feldgröße.
- Der Abschnitt 2, der durch das Bezugszeichen 41 bezeichnet ist, enthält spezifische Informationen über jede der Variablen, wobei 2 Zeilen jeder Variablen zugeordnet sind. Die Bemerkungen geben die in jeder Spalte der Datei aufgezeichneten Daten an einschließlich des Namens der zu überwachenden Variablen, ihrer Datenart (B-Byte, C-Zeichen, D-Doppelwort, H-Sedezimal, I-Ganze Zahl, L-Logisch, P-Zeiger, R-Real, W- Wort, X-Sedezimales Wort, Y-Sedezimales Doppelwort), eine Feldbezeichnung, eine Eingabebezeichnung, eine Ausgabebezeichnung und einen Auswertetyp (A-Argument, G-Global, L-Lokal, M-Modul, -Spezialbereich für "an" einem speziellem Speicherplatz befindliche Variable). Die Spalte 78 ist eine Allverwendungsbezeichnung, die ein Y ist, wenn diese Variable in sämtlichen Testdatensätzen verwendet wird. Die zweite Zeile, beispielsweise 42 für die Variable SEQ, gibt die Testdatensätze an, in welcher diese Variable benutzt wird. Beispielsweise werden alle vier Variablen in dem beispielsweisen Programm in allen drei Testdatensätzen verwendet.
- Der Abschnitt 3, der durch das Bezugszeichen 42 bezeichnet ist, enthält die Anfangswerte für jede der Variablen für jeden der Testdatensätze. In diesem Fall sind die Testdatensätze durch die Ziffern 00, 01 und 02 gekennzeichnet.
- Der Abschnitt 4 der TGP-Informationsdateiliste, der durch das Bezugszeichen 43 bezeichnet ist, listet die Aufrufe der getesteten Einheit mit der erforderlichen Argumentliste auf.
- Der Abschnitt 5, der durch das Bezugszeichen 44 bezeichnet ist, listet den erwarteten Wert für jede Ausgabevariable für jeden Testdatensatz auf und gibt einen Feldindex an, wenn die Variable ein Feld ist.
- Ein nichtdargestellter Kommentarabschnitt ist als Abschnitt 6 für den Benutzer vorgesehen, um irgendwelche testspezifischen Informationen hinzuzufügen, die während der Testausführung zu beachten sind.
- Die vom TGP erzeugten Daten werden in einer Datei mit einer siebenstelligen Kennung wie der Dateiname sichergestellt, aber mit dem Zusatz .VAR, beispielsweise TA02838.VAR. Das zur Informationseingabe benützte Schnittstellenmanagementsystem, das vom Benutzer bereitgestellt wird, wurde bei dem beispielsweisen System unter Verwendung des Forms Management Systems auf einem VAX 780 und einem VAX 8600-Computer entwickelt. Das Quellenprogramm für den Testgeneratorprozessor wurde unter Verwendung der FORTRAN-Programmiersprache entwickelt und zwar ebenfalls auf einem VAX 780 und einem VAX 8600.
- Die formatierte Datei vom TGP wird vom Testdatenprozessor (TDP) 13 zur Erzeugung einer Softwaretestspezifikation 14 sowie eines Teststeuerprogramms verwendet. Ein Beispiel relevanter Teile eines Teststeuerprogramms, das vom TDP erzeugt worden ist, ist in Fig. 11 dargestellt. Nach Erklärung der Variablen (in Fig. 11 nicht dargestellt) wird eine Ausführungsschleifenanweisung 44 eingefügt, welche die Anzahl von Testdatensätzen enthält, die von der Variablendatei abgeleitet ist. Dem Testprogramm wird dann eine Blockkennung "1" durch eine ACTLINKS-Anweisung 45 zugeordnet. Diese Blocknummer wird in die eindimensionale Blockverknüpfungstabelle eingeschrieben, während das Testprogramm ausgeführt wird, um eine Überwachung der Ausgabe zu erzeugen, die angibt, daß das Testprogramm abgelaufen ist. Als nächstes kommen in Fig. 11 die Anweisungen zur Eingabe der zugeordneten Werte für jede Variable in jedem Testdatensatz und zum Schreiben der Testdatensatznummer zusammen mit den Eingabewerten und den erwarteten Werten in die Ausgabedatei, wie bei 46 angedeutet ist.
- Das Teststeuerprogramm ruft dann bei 47 den zu verifizierenden Prozedur/Funktions/Zielcode zusammen mit der entsprechenden Argumentliste aus der Variablendatei auf. Danach folgt eine Anweisung 48, die Instruktionen zur Steuerung des Ausgabeformats aufruft, und eine weitere ACTLINKS-Anweisung 49, die angibt, daß das Testprogramm vervollständigt worden ist.
- Schließlich weist das Teststeuerprogramm Ausführungsanweisungen 50 auf, die Ausgangsvariablenwerte und Blockverknüpfungen, die in jedem Testdatensatz erzeugt worden sind, in die Ausgabedatei einschreiben.
- Die vom Testdatenprozessor erzeugte Softwaretestspezifikation beschreibt das Testprogramm, das die erwarteten Blockverknüpfungen für jeden Testdatensatz identifizieren, sowie eine Wiederholung des Eingabewerts und des geprüften Ausgabewerts herstellen, die früher vom Verifizierer eingegeben worden sind. Die Softwaretestspezifikation (STS)-Datei 14 enthält keine Programmausführungsergebnisse, obwohl sie noch einen sehr wichtigen Teil der Gesamtprogrammdokumentation 19 darstellt. Teile der STS sind in den Fig. 12 und 13 dargestellt.
- Fig. 12 zeigt die allgemeinen Eingabe- und Ausgabedaten. Fig. 13 zeigt einen der Testdatensätze, in diesem Fall den Testdatensatz 0. Die Reihenfolge der Blockausführung ist bei 51 angegeben. Die Anführungszeichen "1" jeweils am Anfang und am Ende der Reihenfolge gibt die Ausführung des Testprogramms selbst an. Die STS gibt auch die Werte der Eingabevariablen 52 und die erwarteten Werte der Ausgabevariablen 53 an. Eine ähnliche Aufzeichnung wird für jeden Testdatensatz durch die STS erzeugt.
- An dieser Stelle ist der Zielcode bei 8 so konditioniert, daß der Pfad der Programmausführung und die Eingabe/Ausgabevariablenergebnisse in einer Ausgabedatei aufgezeichnet werden. Ein gesondertes Teststeuerprogramm 15 ist ebenfalls erzeugt worden und ruft den im Test befindlichen instrumentierten Zielcode auf, während ebenfalls alle Eingabe/Ausgabevariablen in der gleichen Ausgabedatei aufgezeichnet werden. Ein Programmkompilier-, Verknüpfungs- und Lokalisierprozessor (PCL) 16 verknüpft den instrumentierten Zielcode, der die Ausgabe des CIP 8 darstellt, mit dem Teststeuerprogramm 15.
- Die aktuelle Ausführung des Testprogramms 15 und des Zielcodes wird unter Verwendung des SED-Prozessors 17 bewerkstelligt. Bei dem Ausführungsbeispiel der Erfindung in welchem ein VAX-Computer für die Prozessoren eingesetzt wurde, wurde ein Emulator zum Ausführen des PLM 86-Codes des Zielprogramms eingesetzt. Die Ausführung des Teststeuerprogramms/Zielcodes führte zum Schreiben der erzeugten aktuellen Ausgabewerte und der Blockverknüpfungen für jeden Testdatensatz in die Testergebnisse-Ausgabedatei 18. Ein Beispiel der Formatierung der Ausgabeergebnisse ist in Fig. 14 gezeigt. Die abschließende Dokumentation 19 des Programmverifizierungsprozesses schließt zusätzlich zu der Testergebnisdatei 18 die STS-Datei 14 ein, welche die Eingabewerte, die erwarteten Ausgabewerte, die erwarteten Blockverknüpfungen und Rationale für jeden durchzuführenden Testdatensatz definiert, und die PCT-Ausgabedatei 6 ein, welche die Pseudododestruktur und das zu verifizierende Programm zusammen mit seinen Blocknummern und den gültigen Blockverknüpfungen identifiziert. Diese Dokumentation wird analysiert, um für jeden Testdatensatz festzustellen, daß der Programmausführungspfad korrekt war und die aktuellen Ausgabewerte mit den erwarteten in Übereinstimmung stehen. Zusätzlich muß die Feststellung getroffen werden, daß alle Ausführungspfade getestet worden sind. Dies kann automatisch durch Vergleich der Blocknummern in der Blockdatentabelle mit den Blocknummern erfolgen, die während der Testausführung in die Ausgabedatei eingeschrieben wurden, um sicherzustellen, daß jeder Block mindestens einmal ausgeführt worden ist. Wenn die aktuellen Ausgabewerte in Übereinstimmung mit den erwarteten Ausgabewerten stehen, und wenn alle möglichen Verzweigungskombinationen entsprechend berücksichtigt sind, ist das Zielprogramm verifiziert.
- Der Verifizierungsprozeß kann unter Verwendung eines Computersystems ausgeführt werden, wie es beispielsweise in Fig. 15 dargestellt ist. Dieses System weist einen Mehrzweck- Digitalcomputer 54 auf, der bei dem beispielsweisen System ein VAX-Computer war. Die Prozessoren sowie das Zielprogramm werden im Diskettenspeicher 55 gespeichert. Ein Anzeigeterminal 56 schafft die Dialogschnittstelle mit dem Verifizierer zum Wählen der Zieleinheit und der Testfalldaten. Dauerhafte Kopien der Ergebnisse der Verifizierung werden von einem Drucker 57 erzeugt.
- Das beschriebene System automatisiert die frühere Arbeitsintensive komplexe Aufgabe der Codevorbereitung zum Ausführen einer ausreichenden Anzahl von Testfällen zum ausreichenden Verifizieren des Zielprogramms. Zusätzlich ist das System so ausgelegt, daß jeder Prozessor einen Teil der Gesamtaufgabe übernimmt und folglich Modifikationen des Systems leicht durch Änderungen in den einzelnen Prozessoren vorgenommen werden können. Ein weiterer Vorteil des Systems liegt darin, daß das Softwareverifizierungssystem notwendigerweise einheitlicher durchgeführt wird. Dieser Vorteil existiert unabhängig von dem zu testenden Programm oder dem den Test durchführenden Verifizierer. Des weiteren machen es das benutzerfreundliche Format und die Codifizierung des Verifizierungsprozesses auch für einen weniger Geübten möglich, die notwendige Softwareverifizierung durchzuführen. Schließlich ist das System in der Lage, mit Modifikationen eine Softwareverifizierung von Programmen durchzuführen, die in irgendeiner Computersprache und für irgendeinen Anwendungsfall geschrieben sind.
Claims (9)
1. Verfahren zum Unterstützen der Verifizierung eines
Computerprogrammquellencodes mit den Schritten:
a) Neuformatieren (3) des Quellencodes einer
Programmquellendatei (1), wobei der Quellencode ein bekanntes Format und
eine Reihe von Programmanweisungen aufweist, die
Nichtsteueranweisungen und Steueranweisungen umfassen, mittels welcher
das Programm sich auf alternative Programmanweisungen des
Quellencodes verzweigen kann,
b) Auswählen (4) einer benutzergewählten Programmeinheit aus
der neuformartierten Programmquellendatei,
c) Instrumentieren (8) der benutzergewählten Programmeinheit
mittels eines Codeinstrumentenprozessors, der den Quellencode
in Codeblöcke unterteilt, wobei ein Codeblock durch die
Nichtsteueranweisungen zwischen Steueranweisungen markiert
wird, und Einsetzen von ausführbaren Instruktionen in die
Codeblöcke zum Schreiben einer Kennung in eine Ausgabedatei
für jeden Codeblock, wenn er ausgeführt wird,
d) Erzeugen (12, 13) eines Quellentestprogramms mit
Eingabewerten für die benutzergewählte Programmeinheit und
erwarteten Ausgabewerten, um die Programmeinheit mit einer Mehrzahl
von benutzergewählten Testdaten (9, 10) auszuführen,
e) Kompilieren, Verknüpfen und Ausführen (16, 17) des
Testprogramms und der benutzergewählten Programmeinheit,
f) wobei die Ausführung eine Ausgabe (18) erzeugt, die
aktuelle Ausgabewerte für jede Gruppe von Testdaten und eine
sequentielle Auflistung der Blockkennungen der Blöcke der
genannten benutzergewählten Programmeinheit aus der
Ausgabedatei in der Reihenfolge darstellt, in welcher sie ausgeführt
wurden.
2. Verfahren nach Anspruch 1, wobei der
Instrumentierungsschritt das Betreiben eines Prozessors umfaßt, um
nichtausführbare Anmerkungen mit einer einzigartigen Blockkennung
am Anfang und am Ende jedes Codeblocks in die Zieleinheit
einzusetzen, indem aus den Steueranweisungen und den
Blockanmerkungen eine Blockdatentabelle erzeugt wird, welche den
Block, durch welchen jeder Block eingegeben wird, den
Verschachtelungsgrad des Blocks, und irgendwelche Rückführungen
in einem Block identifiziert werden, und wobei der Schritt
des Einsetzens ausführbarer Schreibinstuktionen in jeden
Block die Verwendung der Anmerkungen und der
Blockdatentabelle umfaßt, um am Anfang jedes Blocks eine Instruktion zum
Schreiben der Blockkennung einzusetzen und am Ende jedes
Blocks eine Instruktion zum Schreiben der Blockkennung des
Blocks einzusetzen, zu welchem die Zieleinheit zurückkehrt.
3. Verfahren nach Anspruch 2, wobei der Schritt des Erzeugens
eine Ausgabe das Erzeugen eines Vergleichs der
Blockkennungen, die während der Ausführung eines Codeblocks in die
Ausgabedatei eingeschrieben worden sind, und der
Blockkennungen in der Blockdatentabelle umfaßt.
4. Verfahren nach Anspruch 2, wobei der
Instrumentierungsschritt das Erzeugen einer Blockverknüpfungsdatei umfaßt, die
alle möglichen Übergänge zwischen Codeblöcken in der
Zieleinheit identifiziert.
5. Verfahren nach Anspruch 2, wobei die Zielcodeeinheit eine
Rufinstruktion enthält, die einen externen Programmteil
aufruft, und wobei der Instrumentierungsschritt umfaßt:
Einsetzen einer ausführbaren Instruktion vor der Rufinstruktion zum
Schreiben einer Rufkennung in die Ausgabedatei und Einsetzen
einer ausführbaren Instruktion nach der Rufinstruktion zum
Schreiben einer Kennung in die Ausgabedatei, daß das Programm
an der richtigen Stelle in die Zielcodeeinheit zurückgekehrt
ist.
6. Verfahren nach Anspruch 5, wobei der
Instrumentierungsschritt das Einsetzen von Instruktionen zum Schreiben der
Werte mindestens ausgewählter Zielcodevariablen in die
Ausgabedatei vor und nach der genannten Rufinstruktion in die
Zieleinheit umfaßt, und wobei der Schritt des Erzeugens einer
Ausgabe das Erzeugen von Darstellungen der Werte der
gewählten Variablen aus der Ausgabedatei vor und nach dem Ruf
umfaßt.
7. Verfahren nach Anspruch 2, welches das Erzeugen eines
Pseudocodes zur Verwendung beim Auswählen der genannten
Testfälle durch Betätigung eines Prozessors umfaßt, um eine
gesonderte Datei zu erzeugen, die nur die Steueranweisungen der
Zieleinheit mit anstelle der Nichtsteueranweisungen
eingesetzten nichtausführbaren Anmerkungen enthält, wobei die
Anmerkungen die Blöcke mit den gleichen Kennungen wie die durch
den Instrumentierungsschritt in den Zielcode eingesetzten
Anmerkungen identifizieren.
8. Verfahren nach Anspruch 1, wobei der Schritt des Erzeugens
eines Quellentestprogramms das Erzeugen einer Variablendatei
für die Testvorgänge umfaßt, welche Eingabe- und
Ausgabevariable für jeden Testvorgang zusammen mit Eingabewert für jede
Eingabevariable und dem erwarteten Wert für jede
Ausgabevariable auflistet, und wobei das Verfahren, wenn eine
Programmrevision eine Änderung einer bezeichneten Variablen abruft,
das Suchen dieser Variablendatei zum Identifizieren der
Testvorgänge umfaßt, welche die bezeichnete Variable verwenden.
9. Verfahren nach Anspruch 1, wobei der Schritt des Erzeugens
eines Quellentestprogramms das Erzeugen einer
Software-Testspezifizierung umfaßt, welche die Werte von durch den
Testtreiber zum Implementieren der Testvorgänge verwendeten
Variablen und die erwarteten Werte von Ausgabeparametern
auflistet.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US07/035,802 US4819233A (en) | 1987-04-08 | 1987-04-08 | Verification of computer software |
Publications (2)
Publication Number | Publication Date |
---|---|
DE3884034D1 DE3884034D1 (de) | 1993-10-21 |
DE3884034T2 true DE3884034T2 (de) | 1994-05-05 |
Family
ID=21884862
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE88303029T Expired - Fee Related DE3884034T2 (de) | 1987-04-08 | 1988-04-05 | Verfahren zur Überprüfung von Computersoftware. |
Country Status (7)
Country | Link |
---|---|
US (1) | US4819233A (de) |
EP (1) | EP0286361B1 (de) |
JP (1) | JPS63271643A (de) |
CA (1) | CA1297191C (de) |
DE (1) | DE3884034T2 (de) |
ES (1) | ES2045108T3 (de) |
IN (1) | IN171541B (de) |
Families Citing this family (150)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS63296465A (ja) * | 1987-05-28 | 1988-12-02 | Canon Inc | 受信画像記録装置 |
US5127103A (en) * | 1987-10-14 | 1992-06-30 | North American Philips Corporation | Real-time tracing of dynamic local data in high level languages in the presence of process context switches |
JP2624753B2 (ja) * | 1988-03-18 | 1997-06-25 | 株式会社日立製作所 | 上位仕様書作成方法 |
US5133070A (en) * | 1988-06-30 | 1992-07-21 | International Business Machines Corporation | Method of nesting and processing mixed data objects within a data stream utilizing selective environment inheritance |
JPH0281230A (ja) * | 1988-09-19 | 1990-03-22 | Hitachi Ltd | 構文解析および言語処理システム |
JPH02109127A (ja) * | 1988-10-19 | 1990-04-20 | Hitachi Ltd | 仕様処理方法 |
JPH02199548A (ja) * | 1988-11-09 | 1990-08-07 | Asea Brown Boveri Ag | 電算機系で作成されるオブジエクト・プログラムの時間経過を観察する方法とこの方法を実行する観測器具 |
JPH07113898B2 (ja) * | 1989-05-09 | 1995-12-06 | 株式会社日立製作所 | 障害検出方式 |
US5274811A (en) * | 1989-06-19 | 1993-12-28 | Digital Equipment Corporation | Method for quickly acquiring and using very long traces of mixed system and user memory references |
US5193191A (en) * | 1989-06-30 | 1993-03-09 | Digital Equipment Corporation | Incremental linking in source-code development system |
US5325531A (en) * | 1989-06-30 | 1994-06-28 | Digital Equipment Corporation | Compiler using clean lines table with entries indicating unchanged text lines for incrementally compiling only changed source text lines |
US5201050A (en) * | 1989-06-30 | 1993-04-06 | Digital Equipment Corporation | Line-skip compiler for source-code development system |
US5465258A (en) * | 1989-11-13 | 1995-11-07 | Integrity Systems, Inc. | Binary image performance evaluation tool |
US5157779A (en) * | 1990-06-07 | 1992-10-20 | Sun Microsystems, Inc. | User extensible testing system |
US5241623A (en) * | 1990-09-27 | 1993-08-31 | General Electric Company | Method and system for delineation of structure and linkages between knowledge base modules |
US5657438A (en) * | 1990-11-27 | 1997-08-12 | Mercury Interactive (Israel) Ltd. | Interactive system for developing tests of system under test allowing independent positioning of execution start and stop markers to execute subportion of test script |
US5511185A (en) * | 1990-11-27 | 1996-04-23 | Mercury Interactive Corporation | System for automatic testing of computer software having output synchronization and capable of responding to asynchronous events |
US5333304A (en) * | 1991-05-03 | 1994-07-26 | International Business Machines Corporation | Method and apparatus for software application evaluation utilizing compiler applications |
US5455949A (en) * | 1991-09-06 | 1995-10-03 | International Business Machines Corporation | Method for representing and signaling run-time program conditions |
US5568642A (en) * | 1991-12-26 | 1996-10-22 | Institute Of Software Scientifical Constructions | Computer system with easy programming architecture and programming method therefor |
US5600789A (en) * | 1992-11-19 | 1997-02-04 | Segue Software, Inc. | Automated GUI interface testing |
US5737561A (en) * | 1993-01-22 | 1998-04-07 | Intel Corporation | Method and apparatus for executing an instruction with multiple brancing options in one cycle |
US5717908A (en) * | 1993-02-25 | 1998-02-10 | Intel Corporation | Pattern recognition system using a four address arithmetic logic unit |
US5825921A (en) * | 1993-03-19 | 1998-10-20 | Intel Corporation | Memory transfer apparatus and method useful within a pattern recognition system |
DE69415593T2 (de) * | 1993-06-30 | 1999-05-20 | Microsoft Corp | Verfahren zur Überprüfung eines nachrichtengesteuerten Betriebssystems |
US5414836A (en) * | 1993-09-29 | 1995-05-09 | International Business Machines Corporation | Software testing system that employs a graphical interface to generate test cases configured as hybrid tree structures |
US6009267A (en) * | 1993-09-30 | 1999-12-28 | Fujitsu Limited | Apparatus for analyzing the task specification (business rule specification) of a source program |
US5729676A (en) * | 1993-12-10 | 1998-03-17 | Nec Corporation | Method of generating data for evaluating programs |
US6201539B1 (en) | 1994-01-04 | 2001-03-13 | International Business Machines Corporation | Method and system for customizing a data processing system graphical user interface |
DE4416704A1 (de) * | 1994-05-11 | 1995-11-16 | Siemens Ag | Integrationstestverfahren für ein objektorientiertes Programm |
US5613118A (en) * | 1994-06-20 | 1997-03-18 | International Business Machines Corporation | Profile-based preprocessor for optimizing programs |
US5790858A (en) * | 1994-06-30 | 1998-08-04 | Microsoft Corporation | Method and system for selecting instrumentation points in a computer program |
US5768592A (en) * | 1994-09-27 | 1998-06-16 | Intel Corporation | Method and apparatus for managing profile data |
US5542043A (en) * | 1994-10-11 | 1996-07-30 | Bell Communications Research, Inc. | Method and system for automatically generating efficient test cases for systems having interacting elements |
US5687375A (en) * | 1994-10-14 | 1997-11-11 | International Business Machines Corporation | Debugging of High Performance Fortran programs with backup breakpoints |
JPH08185326A (ja) * | 1994-12-28 | 1996-07-16 | Fujitsu Ltd | インタープリタ言語処理装置 |
US5652899A (en) * | 1995-03-03 | 1997-07-29 | International Business Machines Corporation | Software understanding aid for generating and displaying simiplified code flow paths with respect to target code statements |
US5671351A (en) * | 1995-04-13 | 1997-09-23 | Texas Instruments Incorporated | System and method for automated testing and monitoring of software applications |
US5956478A (en) * | 1995-09-11 | 1999-09-21 | Digital Equipment Corporation | Method for generating random test cases without causing infinite loops |
US5845064A (en) * | 1995-09-11 | 1998-12-01 | Digital Equipment Corporation | Method for testing and verification of a CPU using a reference model |
US5748878A (en) * | 1995-09-11 | 1998-05-05 | Applied Microsystems, Inc. | Method and apparatus for analyzing software executed in embedded systems |
US5761510A (en) * | 1995-11-07 | 1998-06-02 | Microsoft Corporation | Method for error identification in a program interface |
US6272559B1 (en) * | 1997-10-15 | 2001-08-07 | Sun Microsystems, Inc. | Deferred reconstruction of objects and remote loading for event notification in a distributed system |
US6393497B1 (en) * | 1998-03-20 | 2002-05-21 | Sun Microsystems, Inc. | Downloadable smart proxies for performing processing associated with a remote procedure call in a distributed system |
US6446070B1 (en) * | 1998-02-26 | 2002-09-03 | Sun Microsystems, Inc. | Method and apparatus for dynamic distributed computing over a network |
US6938263B2 (en) | 1996-04-23 | 2005-08-30 | Sun Microsystems, Inc. | System and method for facilitating dynamic loading of “stub” information to enable a program operating in one address space to invoke processing of a remote method or procedure in another address space |
US6185611B1 (en) * | 1998-03-20 | 2001-02-06 | Sun Microsystem, Inc. | Dynamic lookup service in a distributed system |
US6023580A (en) * | 1996-07-03 | 2000-02-08 | Objectswitch Corporation | Apparatus and method for testing computer systems |
US5754860A (en) * | 1996-07-23 | 1998-05-19 | Digital Equipment Corporation | Method and apparatus for software testing using a differential testing technique to test compilers |
US5950004A (en) * | 1996-09-13 | 1999-09-07 | The United States Of America As Represented By The Secretary Of The Navy | Model-based process for translating test programs |
US5832529A (en) * | 1996-10-11 | 1998-11-03 | Sun Microsystems, Inc. | Methods, apparatus, and product for distributed garbage collection |
US6513154B1 (en) | 1996-10-21 | 2003-01-28 | John R. Porterfield | System and method for testing of computer programs in programming effort |
JPH10214203A (ja) * | 1997-01-29 | 1998-08-11 | Nec Corp | 情報処理装置 |
US6381740B1 (en) | 1997-09-16 | 2002-04-30 | Microsoft Corporation | Method and system for incrementally improving a program layout |
US6071316A (en) * | 1997-09-29 | 2000-06-06 | Honeywell Inc. | Automated validation and verification of computer software |
US5966541A (en) | 1997-12-04 | 1999-10-12 | Incert Software Corporation | Test protection, and repair through binary-code augmentation |
US6106571A (en) * | 1998-01-29 | 2000-08-22 | Applied Microsystems Corporation | Relocatable instrumentation tags for testing and debugging a computer program |
US6243835B1 (en) * | 1998-01-30 | 2001-06-05 | Fujitsu Limited | Test specification generation system and storage medium storing a test specification generation program |
CN1292115A (zh) * | 1998-02-26 | 2001-04-18 | 太阳微系统公司 | 分布系统中动态验证信息的装置和方法 |
JP2002505467A (ja) * | 1998-02-26 | 2002-02-19 | サン・マイクロシステムズ・インコーポレーテッド | 分散システムにおける動的参照サービス |
US6163858A (en) * | 1998-06-08 | 2000-12-19 | Oracle Corporation | Diagnostic methodology for debugging integrated software |
US6490721B1 (en) | 1998-07-14 | 2002-12-03 | Oc Systems Incorporated | Software debugging method and apparatus |
US6338149B1 (en) | 1998-07-31 | 2002-01-08 | Westinghouse Electric Company Llc | Change monitoring system for a computer system |
US6577981B1 (en) * | 1998-08-21 | 2003-06-10 | National Instruments Corporation | Test executive system and method including process models for improved configurability |
US6546553B1 (en) | 1998-10-02 | 2003-04-08 | Microsoft Corporation | Service installation on a base function and provision of a pass function with a service-free base function semantic |
US7039919B1 (en) * | 1998-10-02 | 2006-05-02 | Microsoft Corporation | Tools and techniques for instrumenting interfaces of units of a software program |
US6499137B1 (en) | 1998-10-02 | 2002-12-24 | Microsoft Corporation | Reversible load-time dynamic linking |
US6381628B1 (en) | 1998-10-02 | 2002-04-30 | Microsoft Corporation | Summarized application profiling and quick network profiling |
US6230312B1 (en) | 1998-10-02 | 2001-05-08 | Microsoft Corporation | Automatic detection of per-unit location constraints |
US6983463B1 (en) | 1998-10-02 | 2006-01-03 | Microsoft Corporation | Network independent profiling of applications for automatic partitioning and distribution in a distributed computing environment |
US6263491B1 (en) | 1998-10-02 | 2001-07-17 | Microsoft Corporation | Heavyweight and lightweight instrumentation |
US6381735B1 (en) | 1998-10-02 | 2002-04-30 | Microsoft Corporation | Dynamic classification of sections of software |
US6988271B2 (en) * | 1998-10-02 | 2006-01-17 | Microsoft Corporation | Heavyweight and lightweight instrumentation |
US6742175B1 (en) * | 1998-10-13 | 2004-05-25 | Codagen Technologies Corp. | Component-based source code generator |
US6333999B1 (en) * | 1998-11-06 | 2001-12-25 | International Business Machines Corporation | Systematic enumerating of strings using patterns and rules |
US6308321B1 (en) | 1998-12-11 | 2001-10-23 | Incert Software Corporation | Method for determining program control flow |
US6353924B1 (en) * | 1999-02-08 | 2002-03-05 | Incert Software Corporation | Method for back tracing program execution |
US8044793B2 (en) * | 2001-03-01 | 2011-10-25 | Fisher-Rosemount Systems, Inc. | Integrated device alerts in a process control system |
US7206646B2 (en) * | 1999-02-22 | 2007-04-17 | Fisher-Rosemount Systems, Inc. | Method and apparatus for performing a function in a plant using process performance monitoring with process equipment monitoring and control |
US7562135B2 (en) * | 2000-05-23 | 2009-07-14 | Fisher-Rosemount Systems, Inc. | Enhanced fieldbus device alerts in a process control system |
US6633782B1 (en) | 1999-02-22 | 2003-10-14 | Fisher-Rosemount Systems, Inc. | Diagnostic expert in a process control system |
US6298454B1 (en) | 1999-02-22 | 2001-10-02 | Fisher-Rosemount Systems, Inc. | Diagnostics in a process control system |
WO2001022228A1 (en) | 1999-09-17 | 2001-03-29 | Nortel Networks Limited | System and method for producing a verification system for verifying procedure interfaces |
US6973417B1 (en) | 1999-11-05 | 2005-12-06 | Metrowerks Corporation | Method and system for simulating execution of a target program in a simulated target system |
US6539501B1 (en) | 1999-12-16 | 2003-03-25 | International Business Machines Corporation | Method, system, and program for logging statements to monitor execution of a program |
US6748584B1 (en) * | 1999-12-29 | 2004-06-08 | Veritas Operating Corporation | Method for determining the degree to which changed code has been exercised |
US6804814B1 (en) | 1999-12-29 | 2004-10-12 | Veritas Operating Corporation | Method for simulating back program execution from a traceback sequence |
US6745383B1 (en) | 1999-12-29 | 2004-06-01 | Veritas Operating Corporation | Early warning mechanism for enhancing enterprise availability |
US6951010B2 (en) * | 2000-09-19 | 2005-09-27 | Fujitsu Limited | Program specification generating system |
US7296275B2 (en) * | 2001-01-04 | 2007-11-13 | Sun Microsystems, Inc. | Method and system for passing objects in a distributed system using serialization contexts |
US6965806B2 (en) * | 2001-03-01 | 2005-11-15 | Fisher-Rosemount Systems Inc. | Automatic work order/parts order generation and tracking |
WO2002071173A2 (en) * | 2001-03-01 | 2002-09-12 | Fisher-Rosemount Systems, Inc. | Data sharing in a process plant |
US7720727B2 (en) * | 2001-03-01 | 2010-05-18 | Fisher-Rosemount Systems, Inc. | Economic calculations in process control system |
US8073967B2 (en) | 2002-04-15 | 2011-12-06 | Fisher-Rosemount Systems, Inc. | Web services-based communications for use with process control systems |
IL142487A0 (en) * | 2001-04-05 | 2003-09-17 | Hexalock Ltd | Method and system for protecting data |
US20020191102A1 (en) * | 2001-05-31 | 2002-12-19 | Casio Computer Co., Ltd. | Light emitting device, camera with light emitting device, and image pickup method |
US7036111B2 (en) * | 2001-06-01 | 2006-04-25 | Hewlett-Packard Development Company, L.P. | Code verification system and method |
US7406432B1 (en) | 2001-06-13 | 2008-07-29 | Ricoh Company, Ltd. | Project management over a network with automated task schedule update |
US7191141B2 (en) * | 2001-06-13 | 2007-03-13 | Ricoh Company, Ltd. | Automated management of development project files over a network |
US6941546B2 (en) * | 2001-08-01 | 2005-09-06 | International Business Machines Corporation | Method and apparatus for testing a software component using an abstraction matrix |
US6986125B2 (en) * | 2001-08-01 | 2006-01-10 | International Business Machines Corporation | Method and apparatus for testing and evaluating a software component using an abstraction matrix |
US7756969B1 (en) | 2001-09-07 | 2010-07-13 | Oracle America, Inc. | Dynamic provisioning of identification services in a distributed system |
US8473922B2 (en) * | 2001-09-19 | 2013-06-25 | Hewlett-Packard Development Company, L.P. | Runtime monitoring in component-based systems |
SE524639C2 (sv) * | 2002-10-15 | 2004-09-07 | Abb As | Feldetektering i en industriell kontroller under säkerhetsrelaterad styrning |
US7171652B2 (en) * | 2002-12-06 | 2007-01-30 | Ricoh Company, Ltd. | Software development environment with design specification verification tool |
US6986110B1 (en) * | 2003-01-02 | 2006-01-10 | Hewlett-Packard Development Company, L.P. | Automated method and system for backtracing of instruction parameters from specified instruction in test cases |
US20050028146A1 (en) * | 2003-08-01 | 2005-02-03 | Quick Shawn G. | Systems and methods for software and firmware testing using checkpoint signatures |
US7308675B2 (en) * | 2003-08-28 | 2007-12-11 | Ricoh Company, Ltd. | Data structure used for directory structure navigation in a skeleton code creation tool |
US7237224B1 (en) * | 2003-08-28 | 2007-06-26 | Ricoh Company Ltd. | Data structure used for skeleton function of a class in a skeleton code creation tool |
US7346894B1 (en) * | 2003-12-12 | 2008-03-18 | Nvidia Corporation | Method and system for specifying file-specific program settings |
US7287243B2 (en) * | 2004-01-06 | 2007-10-23 | Hewlett-Packard Development Company, L.P. | Code verification system and method |
US7792874B1 (en) | 2004-01-30 | 2010-09-07 | Oracle America, Inc. | Dynamic provisioning for filtering and consolidating events |
US20050204340A1 (en) * | 2004-03-10 | 2005-09-15 | Ruminer Michael D. | Attribute-based automated business rule identifier and methods of implementing same |
US7581211B2 (en) * | 2004-07-14 | 2009-08-25 | International Business Machines Corporation | Method and apparatus for on demand debugging, tracing, and logging of applications |
US7823132B2 (en) * | 2004-09-29 | 2010-10-26 | Microsoft Corporation | Automated test case verification that is loosely coupled with respect to automated test case execution |
US8185868B1 (en) | 2004-12-20 | 2012-05-22 | The Mathworks, Inc. | System and method for cell-based code editing and publishing |
US20060174248A1 (en) * | 2005-02-03 | 2006-08-03 | Zeidman Robert M | Software tool for automatically protecting shared resources within software source code |
JP4924976B2 (ja) * | 2005-03-23 | 2012-04-25 | 新日鉄ソリューションズ株式会社 | ソフトウェア開発支援システム |
US9201420B2 (en) | 2005-04-08 | 2015-12-01 | Rosemount, Inc. | Method and apparatus for performing a function in a process plant using monitoring data with criticality evaluation data |
US8005647B2 (en) | 2005-04-08 | 2011-08-23 | Rosemount, Inc. | Method and apparatus for monitoring and performing corrective measures in a process plant using monitoring data with corrective measures data |
US7272531B2 (en) * | 2005-09-20 | 2007-09-18 | Fisher-Rosemount Systems, Inc. | Aggregation of asset use indices within a process plant |
US20070101196A1 (en) * | 2005-11-01 | 2007-05-03 | Rogers William A | Functional testing and verification of software application |
US7895565B1 (en) * | 2006-03-15 | 2011-02-22 | Jp Morgan Chase Bank, N.A. | Integrated system and method for validating the functionality and performance of software applications |
US8050953B2 (en) * | 2006-06-07 | 2011-11-01 | Ricoh Company, Ltd. | Use of a database in a network-based project schedule management system |
US20070288288A1 (en) * | 2006-06-07 | 2007-12-13 | Tetsuro Motoyama | Use of schedule editors in a network-based project schedule management system |
US8799043B2 (en) * | 2006-06-07 | 2014-08-05 | Ricoh Company, Ltd. | Consolidation of member schedules with a project schedule in a network-based management system |
US8352923B2 (en) * | 2006-09-25 | 2013-01-08 | Typemock Ltd. | Method and system for isolating software components |
CN100547562C (zh) * | 2006-10-18 | 2009-10-07 | 国际商业机器公司 | 自动生成可再现运行时问题的单元测试用例的方法和系统 |
US8762956B1 (en) * | 2007-01-31 | 2014-06-24 | The Mathworks, Inc. | Generating a report document from code |
WO2008110411A1 (en) * | 2007-03-14 | 2008-09-18 | International Business Machines Corporation | Automatic formatting of computer program source code |
US8028276B1 (en) * | 2007-06-29 | 2011-09-27 | Oracle America, Inc. | Method and system for generating a test file |
US8301676B2 (en) | 2007-08-23 | 2012-10-30 | Fisher-Rosemount Systems, Inc. | Field device with capability of calculating digital filter coefficients |
US7702401B2 (en) | 2007-09-05 | 2010-04-20 | Fisher-Rosemount Systems, Inc. | System for preserving and displaying process control data associated with an abnormal situation |
US8055479B2 (en) | 2007-10-10 | 2011-11-08 | Fisher-Rosemount Systems, Inc. | Simplified algorithm for abnormal situation prevention in load following applications including plugged line diagnostics in a dynamic process |
US8365149B2 (en) * | 2008-02-29 | 2013-01-29 | International Business Machines Corporation | Debugger for a declarative event-driven programming model |
US8397216B2 (en) * | 2008-02-29 | 2013-03-12 | International Business Machines Corporation | Compiler for a declarative event-driven programming model |
US8627299B2 (en) | 2008-02-29 | 2014-01-07 | International Business Machines Corporation | Virtual machine and programming language for event processing |
US9594670B2 (en) * | 2008-07-03 | 2017-03-14 | International Business Machines Corporation | Managing software dependencies during software testing and debugging |
US8352907B2 (en) * | 2009-08-10 | 2013-01-08 | International Business Machines Corporation | Software application recreation |
US20120102458A1 (en) * | 2010-10-22 | 2012-04-26 | Microsoft Corporation | Generating documentation from tests |
JP5626786B2 (ja) * | 2010-11-09 | 2014-11-19 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | ソフトウエア開発支援方法とソフトウエア開発支援装置とソフトウエア開発支援プログラム |
US8713679B2 (en) | 2011-02-18 | 2014-04-29 | Microsoft Corporation | Detection of code-based malware |
US9927788B2 (en) | 2011-05-19 | 2018-03-27 | Fisher-Rosemount Systems, Inc. | Software lockout coordination between a process control system and an asset management system |
US9038185B2 (en) * | 2011-12-28 | 2015-05-19 | Microsoft Technology Licensing, Llc | Execution of multiple execution paths |
CN104956326A (zh) * | 2013-02-01 | 2015-09-30 | 惠普发展公司,有限责任合伙企业 | 基于抽象测试用户控制的测试脚本创建 |
JP6102448B2 (ja) * | 2013-04-10 | 2017-03-29 | 富士通株式会社 | 検証支援プログラム、検証支援装置、および検証支援方法 |
US9311223B2 (en) * | 2013-05-21 | 2016-04-12 | International Business Machines Corporation | Prioritizing test cases using multiple variables |
IN2013MU02497A (de) * | 2013-07-29 | 2015-06-26 | Tata Consultancy Services Ltd | |
US10001978B2 (en) * | 2015-11-11 | 2018-06-19 | Oracle International Corporation | Type inference optimization |
US10713150B1 (en) * | 2019-04-04 | 2020-07-14 | Sap Se | Accurate test coverage of generated code |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3427443A (en) * | 1965-04-08 | 1969-02-11 | Ibm | Instruction execution marker for testing computer programs |
US3522597A (en) * | 1965-11-19 | 1970-08-04 | Ibm | Execution plotter |
US3551659A (en) * | 1969-05-05 | 1970-12-29 | Charles O Forsythe | Method for debugging computer programs |
JPS5755456A (en) * | 1980-09-19 | 1982-04-02 | Hitachi Ltd | Career recording system |
JPS57157362A (en) * | 1981-03-25 | 1982-09-28 | Hitachi Ltd | Method and apparatus of execution path career data pickup for architecture program |
JPS57191761A (en) * | 1981-05-20 | 1982-11-25 | Hitachi Ltd | Analyzing method for execution path of structured program |
JPS585850A (ja) * | 1981-07-03 | 1983-01-13 | Fujitsu Ltd | プログラム翻訳装置 |
JPS5886648A (ja) * | 1981-11-18 | 1983-05-24 | Mitsubishi Electric Corp | トレ−ス装置 |
-
1987
- 1987-04-08 US US07/035,802 patent/US4819233A/en not_active Expired - Fee Related
-
1988
- 1988-03-14 IN IN213/CAL/88A patent/IN171541B/en unknown
- 1988-03-30 CA CA000562992A patent/CA1297191C/en not_active Expired - Lifetime
- 1988-04-05 EP EP88303029A patent/EP0286361B1/de not_active Expired - Lifetime
- 1988-04-05 DE DE88303029T patent/DE3884034T2/de not_active Expired - Fee Related
- 1988-04-05 ES ES88303029T patent/ES2045108T3/es not_active Expired - Lifetime
- 1988-04-08 JP JP63085521A patent/JPS63271643A/ja active Pending
Also Published As
Publication number | Publication date |
---|---|
DE3884034D1 (de) | 1993-10-21 |
EP0286361A3 (en) | 1989-05-10 |
EP0286361B1 (de) | 1993-09-15 |
CA1297191C (en) | 1992-03-10 |
IN171541B (de) | 1992-11-14 |
JPS63271643A (ja) | 1988-11-09 |
ES2045108T3 (es) | 1994-01-16 |
EP0286361A2 (de) | 1988-10-12 |
US4819233A (en) | 1989-04-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE3884034T2 (de) | Verfahren zur Überprüfung von Computersoftware. | |
DE60010420T2 (de) | Automatisches Regressionstesten von Arbeitsplatz-Software | |
DE69720821T2 (de) | Fehlersuchsystem für Programme mit einer graphischen Benutzerschnittstelle | |
DE69932371T2 (de) | Verschiebbare Instrumentationskennzeichen für die Prüfung und die Fehlerbeseitigung eines Computerprogramms | |
DE69826659T2 (de) | Billige, leicht anzuwendende software für ein automatisches testsystem | |
DE68923888T2 (de) | Speicherprogrammierbare Steuerung mit gespeichertem markierten Quellencode. | |
DE3787431T2 (de) | Verfahren zur Generierung einer Kandidatenliste von fehlerhaften Schaltungselementen und Verfahren zur Isolierung von Fehlern in einer logischen Schaltung unter Verwendung dieser Kandidatenliste. | |
DE69021659T2 (de) | Verfahren und Vorrichtung zur reihenweisen Parallelprogrammfehlersuche. | |
EP1723513B1 (de) | Verfahren zur konfiguration eines computerprogramms | |
DE3789724T2 (de) | System zur Prüfung von interaktiver Software. | |
DE3687842T2 (de) | Verfahren und Gerät zum Software-Austesten. | |
DE69831732T2 (de) | Verfahren und gerät zum korrigieren von fehlern in einem rechnersystem | |
DE19960050A1 (de) | Grafische Benutzerschnittstelle zur Entwicklung von Anwendungsbeispielen unter Verwendung einer Testobjektbibliothek | |
DE3842289C2 (de) | Verfahren zur Entwicklung von Programmen für ein verteiltes Datenverarbeitungssystem | |
DE10308725A1 (de) | System und Verfahren zum Verwalten und zum Austausch von Daten eines technischen Projektes, einer technischen Anlage sowie einzelner Anlagenkomponenten | |
DE102011014830A1 (de) | Verfahren und vorrichtung zum analysieren vonsoftware | |
DE19959157A1 (de) | Verbessertes Funktionstesten durch das Filtern von groben Mutationen | |
DE112018002316T5 (de) | Codeabdeckungsverfolgung für ein mikrocontroller-programm | |
DE68924507T2 (de) | Verfahren und Gerät zur Markierung von Emulationsanalysezuständen. | |
DE2654389B2 (de) | ||
DE2242009C2 (de) | Verfahren und Anordnung zum Erkennen, ob im Mikroprogramm einer Datenverarbeitungsanlage vorgesehene Verzweigungsoperationen ausgeführt werden | |
EP1505399B1 (de) | Verfahren zum Erzeugen von Testdaten zum Austesten der Funktionsfähigkeit einer datenverarbeitenden Schaltung | |
DE19924437A1 (de) | Verfahren, Computerprogrammprodukte und Vorrichtung zur Initialisierung von globalen Registern | |
EP0662226B1 (de) | Verfahren zur bearbeitung eines anwenderprogramms auf einem parallelrechnersystem | |
EP0708941B1 (de) | Verfahren zum test eines objektorientierten programms |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8364 | No opposition during term of opposition | ||
8339 | Ceased/non-payment of the annual fee |