DE3854546T2 - Verfahren und Gerät zur Programmablaufmessung. - Google Patents
Verfahren und Gerät zur Programmablaufmessung.Info
- Publication number
- DE3854546T2 DE3854546T2 DE3854546T DE3854546T DE3854546T2 DE 3854546 T2 DE3854546 T2 DE 3854546T2 DE 3854546 T DE3854546 T DE 3854546T DE 3854546 T DE3854546 T DE 3854546T DE 3854546 T2 DE3854546 T2 DE 3854546T2
- Authority
- DE
- Germany
- Prior art keywords
- instruction
- program
- executed
- causing
- interrupt
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Prevention of errors by analysis, debugging or testing of software
- G06F11/3668—Testing of software
- G06F11/3672—Test management
- G06F11/3676—Test management for coverage analysis
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Prevention of errors by analysis, debugging or testing of software
- G06F11/362—Debugging of software
- G06F11/3644—Debugging of software by instrumenting at runtime
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)
Description
- Ein Teil der Offenbarung dieser Patentunterlagen enthält Material, das einem Urheberrechtsschutz unterliegt. Der Urheberrechtsinhaber hat keine Einwände gegen die Faksimilereproduktion der Patentunterlagen oder der Patentoffenbarung, wie sie in der Akte oder den Aufzeichnungen des Patent- und Warenzeichenamts erscheinen/-t, durch jederman, behält sich aber im übrigen trotz allem alle Urheberrechte vor.
- Diese Erfindung betrifft Computersoftware-Testwerkzeuge und betrifft genauer ein Verfahren und eine Vorrichtung zum Bestimmen, welche Programmanweisungen ausgeführt wurden.
- Ein wichtiger Aspekt der Software-Qualitätssicherung ist der Umfang des Testens. Ohne die Unterstützung spezieller Werkzeuge ist es schwierig, wenn nicht unmöglich, die "Abdeckung" genau zu bestimmen, d.h. welche Programmbefehle ausgeführt sind, wenn Testfälle laufen gelassen werden. Es ist daher schwierig zu wissen, welche Testfälle laufen gelassen werden sollen oder wann die Testfallentwicklung zu stoppen ist.
- Beim Stand der Technik gibt es zwei grundsätzliche Arten von Werkzeugen zum Messen des Umfangs von Testfällen. Die erste Art sind Werkzeuge, die Vorprozessoren verwenden, um einen Quellcode zu modifizieren, bevor er kompiliert wird. Prozeduraufrufe werden am Anfang von Programmblöcken eingefügt, um nachzuvollziehen, ob ein Block ausgeführt wurde. Bei diesem Versuch gibt es mehrere Nachteile. Diese Werkzeuge sind sprachenspezifisch, das heißt, daß die Vorprozessoren für die Syntax der Quellensprache maßgeschneidert sein müssen. Die Größe des Objektcodes wird durch die Prozeduraufrufe verändert, was die Ausführungscharakteristika das Programms ändern kann. Programme müssen für eine Messung vorverarbeitet und rekompiliert werden, und dann zur Produktionsverwendung oder Produktabgabe wieder gespeichert oder rekompiliert werden. Die Verwendung von Vorprozessoren erfordert nicht nur einen extra Schritt, sie macht diese Werkzeuge auch unpraktisch zum Messen eines Betriebssystemcodes und zeitkritischer Programme.
- Die zweite Art eines Abdeckungsmeßwerkzeuges beim Stand der Technik verwendet Probentechniken zum periodischen Lesen des Programmzählers und Ansammeln von Statistiken darüber, wieviel Zeit in vorgegebenen Spelcheradressenbereichen verbracht wird. Es werden Histogramme entwickelt, die auf das Ladespeicherabbild des Programms abgestimmt werden können. Diese Werkzeuge sind nützlich zum Auswerten der Programmleistung, da sie Probeentnahmen verwenden, können sie jedoch nicht verwendet werden, um zu bestimmen, welche Befehle nicht ausgeführt wurden.
- Was erforderlich ist, ist ein wirkliches Abdeckungsmeßwerkzeug, das keine Quellcode-Vorverarbeitung erfordert, bei jeder Art von Programm verwendet werden kann und keine Modifikation existierender Programme oder Testreihen erfordert.
- Das IBM Technical Disclosure Bulletin Vol. 25, Nr.6, November 1982, Seite 3054, "Determination of Code Coverage" von D. J. Bradley et. al. offenbart ein Verfahren zum Bestimmen einer Codeabdeckung wie folgt:
- A. Identifiziere jene Bereiche, die für eine Abdeckungsanalyse markiert werden sollen.
- B. Untersuche die identifizierten Sektionen des Codes und ersetze die bedingten Befehle mit einem Aufrufbefehl zu einem speziellen Treiber.
- C. Erstelle eine Tabelle, die Adressen und Originaloperationscodes der markierten bedingten Befehle enthält.
- 2. Führe Testfälle aus und bestimme die Abdeckung.
- A. Teste Fälle, die zum Ausführen aller Teile des Codes gestaltet sind.
- B. Wenn der spezielle Treiber aufgerufen wird (von einem ersetzten bedingten Befehl), suche die Tabelle von 1C, um den Befehl zu bestimmen, der ausgeführt werden sollte.
- C. Simuliere den Originalbefehl durch den speziellen Treiber.
- D. Aktualisiere die Tabelle, um zu zeigen, welche Richtung der Verzweigung genommen wurde.
- E. Wenn beide Richtungen der Verzweigung genommen wurden, ersetze den Aufruf zum speziellen Treiber durch den Originaloperationscode, um die obigen und die nachfolgenden Ausführungen zu verringern.
- F. Führe die Steuerung an dem Punkt, der durch die Simulation der Befehle bestimmt ist, zum Programm zurück.
- G. Nachdem alle Testfälle ausgeführt wurden, zeige die Tabelle an, um alle Wege zu zeigen, die nicht ausgeführt wurden, und die Adressen, an denen sie sind.
- Das IBM Technical Disclosure Bulletin Vol. 24, Nr.2, Juli 1981, Seite 1192, "Permanent Breakpoints using Hardware Trace", R. J. Bowdry et. al., betrifft das Vorsehen von "permanenten" Programmstopps, wobei in einfacher Weise und ohne Leistungsverringerung die ersten zwei Bytes eines Befehls durch einen Organisationsaufruf- (SVC) Befehl ersetzt werden, während die ersetzten zwei Bytes gespeichert werden. Wenn der SVC-Befehl während der Programmausführung angetroffen wird, erlangt das Austestleistungsmerkmal die Steuerung. Um permanente Programmstopps zu erreichen, werden zwei Ablaufunterbrechungen herangezogen, die dem anfänglichen SVC folgen, der verursacht hat, daß das Austestprogramm an dem Programmstopps die Steuerung erhält. Nach der zweiten Ablaufunterbrechung wird der Unterbrechungspunkt wiederhergestellt und das Ablauf-Bit wird abgeschaltet.
- Die Erfindung versucht eine verbesserte Technik zum Bestimmen, welche eines Untersatzes eines Satzes von ausführbaren Befehl in einem Programm nicht ausgeführt werden, wenn das Programm laufen gelassen wird, zu schaffen.
- Gemäß der vorliegenden Erfindung wird ein Verfahren zum Bestimmen, welche eines ausgewählten Untersatzes eines ersten Satzes von ausführbaren Befehlen nicht ausgeführt werden, wenn ein Computerprogramm, das den ersten Satz von ausführbaren Befehlen enthält, ausgeführt wird, geschaffen, wie im Anspruch 1 definiert ist.
- Die Erfindung schafft ferner ein System zum Ausführen eines Computerprogramms, um zu bestimmen, welche eines ausgewählten Untersatzes eines ersten Satzes von ausführbaren Befehlen nicht ausgeführt werden, wenn das Computerprogramm ausgeführt wird, wie im Anspruch 9 bestimmt ist.
- Somit schafft diese Erfindung ein Abdeckungsmeßwerkzeug, das mißt, welche Befehle ausgeführt wurden und welche Befehle nicht ausgeführt wurden, während die Nachteile, die dem Stand der Technik anhaften, überwunden werden. Keine Vorverarbeitung oder Probeentnahme wird verwendet. Das Werkzeug ist einfach zu verwenden, und Messungen können in der normalen Testumgebung des Testers ausgeführt werden. Die Messung wird unter Verwendung derselben ausführbaren Objektcodeversion des Programms ausgeführt, die nach dem Testen freigegeben wird. Verschiedene Programme oder Mehrfachtests desselben Programms können gleichzeitig gemessen werden. Die Ausgabe der Messung kann direkt in problemorientierte Programmsprachen-Quellanweisungen abgebildet werden. Die Größe des Objektcodes wird nicht geändert. Das Meßwerkzeug verringert die Ausführungsleistung des getesteten Programms nicht merklich.
- Gemäß der Erfindung werden Befehle auf Maschinenebene zur Messung ausgewählt, und jeder dieser Befehle wird durch einen Meßbefehl ersetzt. Vorzugsweise ist der Meßbefehl ein eine Unterbrechung verursachender Befehl. Dann wird das Programm, das die Meßbefehle enthält, ausgeführt. Wenn ein Meßbefehl ausgeführt wird, wird der gemessene (ersetzte) Befehl identifiziert und ein Wert wird gespeichert, um anzugeben, daß der gemessene Befehl ausgeführt wurde. Dann wird der gemessene Befehl durch Ersetzen des Meßbefehls mit dem Originalbefehl wiederhergestellt, und die Ausführung fährt mit dem wiederhergestellten Befehl fort. Die Auswirkung auf die Ausführungsleistung (wie sie durch abgelaufene Zeit gemessen wird) ist minimal, da das Ersetzen nur einmal für jeden ausgewählten Befehl ausgeführt wird, selbst wenn der ausgewählte Befehl vielfach ausgeführt wird.
- Bei einer Ausführung der Erfindung wird der erste Befehl jedes Blocks eines ausführbaren Objektcodes, der von einer Quelisprachenanweisung kompiliert wurde, zur Messung ausgewählt. Dies schafft eine Anweisungsebenen- Abdeckungsmessung. Jeder ausgewählte Befehl wird durch einen Programmstopp-Befehl ersetzt, der nicht maskierbare Unterbrechungen verursacht. Um vielfache Anwender des gemessenen Programms unterzubringen, wird die Messung auf einer Duplikatkopie des Programms laufengelassen. Die Ergebnisse der Messung werden in einem Bitmap gespeichert, das zum Erzeugen einer Vielfalt von nützlichen Ausgaben verwendet werden kann, wie einer gekennzeichneten Kopie des Quellcodes, die angibt, welche Quellsprachenanweisungen ausgeführt wurden oder nicht. Diese Ausgaben können die Effizienz und Wirksamkeit der Qualitätssicherheitsbemühungen signifikant erhöhen.
- Fig. 1 list ein Blockdiag ramm einer Computerspeichervorrichtung für die bevorzugte Ausführung.
- Fig. 2 ist ein Flußdiagramm, das den Betrieb der FREIGABE-Funktion darstellt.
- Fig. 3 ist ein Flußdiagramm, das den Betrieb der MESS-Funktion darstellt.
- Fig. 4 ist ein Flußdiagramm, das den Betrieb des Programms als Antwort auf eine Programmstopp-Unterbrechung darstellt.
- Fig. 5 ist ein Flußdiagramm, das den Betrieb der SICHERN-Funktion darstellt.
- Fig. 6 ist ein Flußdiagramm, das den Betrieb der RÜCKSTELL-Funktion darstellt.
- Fig. 7 ist ein Flußdiagramm, das den Betrieb der SPERREN-Funktion darstellt.
- Fig. 8 ist ein Beispiel eines KENNZEICHNEN-Berichts.
- Fig. 9 ist ein Beispiel der ANZEIGE-Ausgabe.
- Fig. 10 ist ein Beispiel der SORTIERUNG-Ausgabe.
- Fig. 11 ist ein Beispiel der ORDNUNG-Ausgabe.
- Fig. 12 ist eine Pseudocode-Darstellung des Algorithmus, der zum Erzeugen des ORDNUNG-Berichts verwendet wird
- Bei der bevorzugten Ausführung wird das Verfahren der Erfindung durch ein Computerprogramm durchgeführt, das in der "TAL"-Sprache geschrieben ist, und auf einem "Tandem"-"NonStop"-Computer unter der Steuerung des "GUARDIAN 90"-Betriebssytems ausgeführt. ("Tandem", "TAL", "NonStop" und "GUARDIAN 90" sind Marken von Tandem Computers, Inc., von Cupertino California. Handbücher für die "TAL"-Sprache und das "GUARDIAN 90"- Betriebssystem und das "NonStop"-Systembeschreibungshandbuch sind von Tandem Computers, Inc., erhältlich.) Die folgende genaue Beschreibung unter Bezugnahme auf die Zeichnungen versetzt jene mit üblichen Fachkenntnissen in die Lage, die Erfindung auszuführen und zu nutzen.
- ABDECKEN ist ein Satz von Programmodulen, von denen einige im ABDECKEN-Befehlsinterpreter (COVERCOM), einige iN DER Überwachungseinrichtung (CVRMON) und einige im Betriebssystem sind (im Programmstopp-Unterbrechungstreiber). In der folgenden Beschreibung werden Bezugnahmen auf Seiten im Anhang zusammen mit Bezugnahmen auf Flußdiagrammblöcke bereitgestellt.
- Diese Bezugnahmen auf den Quellcodeanhang sind in der Form "(Annn)", wobei "nnn" eine Seitenzahl im Anhang A ist. Der Quellcode wird eine vollständige Offenbarung der bevorzugten Ausführung bereitstellen. Jedoch wird jemand mit üblichen Kenntnissen in der relevanten Technik in der Lage sein, die Erfindung ohne Bezugnahme auf die Quellcodeauflistung anhand der Beschreibung und Diagramme hierin auszuführen.
- Die bevorzugte Ausführung mißt eine Anweisungsabdeckung. Die Anweisungsabdeckung ist ein Maß, welche Quellcodeanweisungen ausgeführt werden (und welche nicht). Andere Abdeckungsarten (wie Codeabdeckung, die ein Maß der Ausführung von Maschinenbefehlen ist) liegen innerhalb des Umfangs der Erfindung, da die tatsächliche Messung an ausgewählten Maschinenbefehlen im Objektcode ausgeführt wird.
- Unter Bezugnahme auf die Fig. 1 stellt ein vereinfachtes Blockdiagramm die logische Organisation einer Computerspeichervorrichtung 4 zum implementieren der bevorzugten Ausführung der Erfindung dar. Es sind zwei Prozeßsteuerblöcke (PCBs) 6, 7 gezeigt. In diesem Computersystem sind bis zu 256 aktive PCBs, von denen jeder einen Prozeß oder eine Aufgabe steuert. Ein Prozeß ist ein laufender Aufruf eines Programms in Verbindung mit einem einzelnen Anwender. Ein einzelnes Programm kann mehrere Prozesse für mehrere Anwender ausführen. PCBI 6 enthält einen Zeiger 6a, der zum Programmcodesegment 8 zeigt, und einen Zeiger 6b, der zum Datenbereich 9 zeigt. PCB2 7 enthält einen Zeiger 7a, der anfänglich (bevor eine ABDECKEN- Messung gestartet wird) zum Codesegment 8 zeigt (gestrichelter Pfeil), und einen Zeiger 7b, der zum Datenbereich 11 zeigt. Wenn das ABDECKEN- Programm 12 freigegeben ist, richtet es den Abdeckungsroutinen-Steuerblock (CRCB) 14 ein. Wenn ABDECKEN eine Messung an einem bestimmten Prozeß (PIN) initiiert, richtet es einen Abdeckungs-PIN-Datenblock (CPDB) 16 für diesen Prozeß ein und schreibt die CPDB-Adresse in einen der 256 Zeiger P(CPDB) 14a im CRCB. ABDECKEN macht dann eine Kopie 10 des Codesegments 8 und sichert einen Zeiger P(CODE) 16b zum Codesegment 8 und einen Zeiger P(COPY) 16a zur Kopie 10 in CPDB 16. ABDECKEN fügt meßverursachende Befehle an bestimmten Orten in die Codekopie 10 ein, richtet eine Bitmap 18 zum Speichern von Ergebnissen der Messung ein und speichert einen Zeiger zur Kopie 10 in einem Zeiger 7a von PCB2 7. Ein Zeiger P(BITMAP) zum Bitmap 18 wird in CPDB 16 gespeichert. Das System wird die Kopie 10 ausführen.
- ABDECKEN muß durch den Systemoperator für eine bestimmte CPU (Zentralverarbeitungseinheit) freigegeben werden, bevor Anwender das Meßleistungsmerkmal an dieser CPU aufrufen können. (Diese Ausführung ist auf einem System realisiert, das mehrere CPUs hat.) Der Systemoperator gibt den FREIGABE-Befehl aus, um Messungen an einer bestimmten CPU zuzulassen. Unter Bezugnahme auf die Fig. 2 stellt das Flußdiagramm 20 die Operation von ABDECKEN als Antwort auf den FREIGABE-Befehl dar (A-663- 4). Beim Block 22 (A-123), ist der Speicher für einen Abdeckungsroutinen- Steuerblock (CRCB) zugeordnet. Das Format der CRCB-Datenstruktur ist in der Tabelle 1 (A-296-7) gezeigt. Beim Block 24 (A-123) ist der CRCB-Speicherraum gesperrt, um ihn speicherresistent zu machen und um absolutes Adressieren zuzulassen. Der CRCB wird beim Block 26 initialisiert (A-123). Der CRCB wird gelöscht (auf Nullen) und dann werden die Verifiziereinrichutng ("CovR" in dieser Ausführung) und andere Anfangsblockfelder eingestellt. Beim Block 28 (A-123) wird die Adresse des CRCBs an einem fest vorgegebenen Ort im Speicher gespeichert (globaler Zeiger). Die Adresse des globalen Zeigers ist dem Operationssystem bekannt, das den Programmstopp-Unterbrechungstreiber enthält. ABDECKEN ist nun freigegeben, und Anwender können Messungen ausführen. TABELLE I VERIFIZIEREINRICHTUNG "CovR" VERSION XCVRN ^ PIN PrivFreigegeben SpeicherVerhältnis AblaufSpeicher Datei zum Messen [0:127] Steuerung durch PIN [0:255]
- Die Messung wird folgendermaßen ausgeführt. Das Programm "COVERCOM" wird laufengelassen, um den ABDECKEN-Befehlsinterpreter aufzurufen. Um eine Messung eines Prozesses zu starten, wird der Befehl "MESSEN" mit einer Prozeßidentifikationsnummer ("PIN") ausgegeben, die den zu messenden Prozeß identifiziert. Unter Bezugnahme auf die Fig. 3 stellt ein Flußdiagramm 30 die Operation von ABDECKEN als Antwort auf den MESSEN-Befehl (A-541) dar. Beim Block 32 (A-543) wird ein Test gemacht, um zu bestimmen, ob ABDECKEN freigegeben ist. Die Adresse am vorgegebenen Ort des globalen Zeigers im Speicher wird gelesen. Wenn die Adresse nicht Null ist, ist ABDECKEN freigegeben. Wenn ABDECKEN nicht freigegeben ist, kann keine Messung ausgeführt werden und das Programm steigt aus (Block 34) und informiert den Anwender mit einer Fehlermeldung.
- Wenn ABDECKEN freigegeben ist, wird beim Block 36 (A-543-4) ein Test durchgeführt, um zu bestimmen, ob an dem spezifizierten Prozeß eine Messung abläuft (an einem Prozeß ist gleichzeitig nur eine Messung erlaubt). Wie in der Tabelle I zu sehen ist, gibt es eine Gruppe von 256 SteuerungDurchPin-Felder (eines für jeden möglichen Prozeß an einer CPU) in der CRCB. Jedes Feld enthält einen Zeiger zu einem Erfassen-PlN-Datenblock, wenn dieser Prozeß gemessen wird. Wenn ein Prozeß nicht gemessen wird, ist das dem PIN entsprechende Feld Null. Wenn der Einsprung für den angeforderten Prozeß nicht Null ist, existiert beim Block 38 somit das ABDECKEN-Programm und informiert den Anwender mit einer Fehlermeldung. Wenn der Einsprung für den angeforderten Prozeß Null ist, initiiert ABDECKEN eine Messung.
- Beim Block 40 ist ein Erfassen-Pin-Datenblock (CPDB) für den angeforderten Prozeß eingerichtet und die Adresse wird für diesen Prozeß in den CRCB- Steuerung Durch Pin-Eingang geschrieben. (Alternativ können die Erfassen-Pin- Datenblöcke eingerichtet werden, wenn ABDECKEN freigegeben wird; in diesem Fall wird das Statusfeld verwendet, um anzuzeigen, ob für eine PIN eine Messung abläuft.) Die Tabelle II (A-296) zeigt das Format eines CPDBs. Beim Block 42 (A-125) wird die Segmentnummer für den Programmcode aus dem code.seg-Feld in dem PCB für diesen Prozeß gelesen und in den CPDB beim Feld UC.SEG geschrieben. (Die Segmentnummer ist äquivalent der Startadresse des Codes, da Programme an Speichersegmentgrenzen starten. Der Programmzähler mißt die Distanzadresse in ein Segment.) Beim Block 44 (A-126, A-686) wird ein Speicherblock für eine Kopie des Programmcodes zugeordnet. Beim Block 46 (A-687) wird der Speicher blockweise "gesperrt", um sicherzustellen, daß er für die Dauer der Messung jederzeit adressierbar bleibenwird. TABELLE II Zustand Immer gesichert Sichere Vol UC.Seg UC.CopySeg UG.Name UC.Timestamp UC.SpaceCount UC.Space Size UC.Bitmap Ptr.
- Beim Block 48 (A-686) wird der Programmcode in den zugeordneten Speicherblock kopiert. Beim Block 50 (A-687) wird die Segmentnummer für diesen Speicherblock am Ort UC.CopySeg in den CPDB geschrieben. Beim Block 52 (A-116-7) wird der Speicher für ein "Bitmap" erhalten (und abgesperrt). Das Bitmap wird verwendet, um die Ergebnisse der Messung des Prozesses zu speichern. Jedes Bit in dem Bitmap entspricht einem Wort (2- Bytes, die Länge eines Befehis) im Objektcode. Das Bitmap ist auf Nullen initialisiert und seine Adresse ist in dem CPDB beim Feld UC.Bitmap.Ptr gespeichert.
- Die Maschinenbefehle, die gemessen werden sollen, werden nun ausgewählt. Programme, die auf einem Tandem-Compiler mit der "'Inspect'-Symbole"- Option kompiliert sind, enthalten eine Liste von "Anweisungsstartern", die auf den ersten Maschinencodebefehl jeder kompilierten Quellensprachenanweisung zeigen. ("Inspect" ist eine Marke von Tandem Computers, Inc.) Für die Anweisungsabdeckung dieser Ausführung werden diese Anweisungsstart-Maschinenbefehle als der Satz von Befehlen ausgewählt, die gemessen werden sollen. Bei anderen Ausführungen können andere Einrichtungen zum Auswählen der gemessenen Befehle verwendet werden. Zum Beispiel können alle der Codebefehle ausgewählt werden (Codeabdeckung), solange wie Befehle in der Objektdatei von Daten unterschieden werden können.
- Beim Block 54 (A-157-9) werden die Anweisungsstarter gelesen, und Meßbefehle werden an die Stelle der Anweisungsstart-Maschinencodebefehle geschrieben. Bei dieser Ausführung werden Programmstopp-Befehle als die Meßbefehle verwendet. Programmstopp-Befehle werden in diesem Gomputersystem verwendet, um Unterbrechungen zu verursachen und die Steuerung auf den entsprechenden Unterbrechungstreiber in dem Betriebssystem zu übertragen. Bei anderen Ausführungen können andere Meßbefehle verwendet werden, wie ein SVC (Organisationsaufruf) oder ein Befehl mit einem ungültigen Operationscode. Subroutinenaufrufe können ebenfalls verwendet werden, aber es ist vorzuziehen, nicht maskierbare unterbrechungsverursachende Befehle zu verwenden, um die Messung von innerhalb des Betriebssystems auszuführen.
- Beim Block 56 (A-128) wird die Segmentnummer der Codekopie (UC.CopySeg) für diesen Prozeß beim code.seg-Feld in den PCB geschrieben. Dieses Feld in dem PCB speichert die Segmentnummer für das Programm, das zum Ausführen des Prozesses verwendet wird, und es ist dasselbe Feld, aus dem die Original-Codesegmentnummer nach UC.seg kopiert wurde. UC.seg speichert somit die Adresse des "Original"-Codes, und der PCB hat die Adresse der Codekopie. Dies veranlaßt das System, die Codekopie mit den Programmstopps zu verwenden, um diesen Prozeß auszuführen. Andere Prozesse können den unmodifizierten Originalcode verwenden, während die Messung an der Kopie stattfindet.
- Wenn die Codekopie läuft, wird, wann immer ein ausgewählter Befehl ausgeführt würde, zuerst ein Programmstopp-Befehl ausgeführt. Dies verursacht eine Programmstopp-Unterbrechung.
- Unter Bezugnahme auf die Fig. 4 zeigt ein Flußdiagramm 62 die Wirkung der Programmstopp-Unterbrechung. Beim Block 64 (A-84) ruft der Programmstopp- Unterbrechungstreiber die ABDECKEN-Prozedur. Beim Block 66 (A-86) wird ein Test durchgeführt, um zu bestimmen, ob ABDECKEN freigegeben ist. Dies wird durch Lesen des globalen Zeigers, wo die CRCB-Adresse gespeichert ist, und Bestimmen, ob die Adresse von Null verschieden ist, ausgeführt. Wenn ABDECKEN nicht freigegeben ist, kehrt das aufgerufene Programm (Block 68) zum "Standard"-Unterbrechungstreiber zurück. Wenn ABDECKEN freigegeben ist, wird bei Block 70 (A-86) die Unterbrechungslaufumgebung adressierbar gemacht. Dann wird beim Block 72 (A-86) ein Test durchgeführt, um zu bestimmen, ob der unterbrochene Prozeß ein gemessener Prozeß ist. Die PIN des unterbrochenen PCBs wird von einem globalen Speicherort gelesen und zum Indexieren in den CRCB hinein verwendet, um zu bestimmen, ob es einen von Null verschiedenen Adressenzeiger zu einem CPDB für diese PIN gibt. Wenn der Zeiger für diese PIN Null ist, wird dieser Prozeß nicht gemessen, und an einem Block 74 wird die Steuerung zum Standard-Unterbrechungstreiber zurückgegeben. Wenn der Zeiger für diese PIN von Null verschieden ist, wird das ZUSTAND-Feld in dem CPDB geprüft. Dieses Feld zeigt an, ob die Messung aktuell läuft. (Während das Programm kopiert wird und Programmstopps eingefügt werden, wird das Zustandsfeld verwendet, um diesen Zwischenzustand anzuzeigen.)
- Wenn der Prozeß gemessen wird, wird beim Block 76 (A-86) das geeignete Bit in dem Bitmap eingestellt, um anzuzeigen, daß der Befehl ausgeführt wurde. Das Bit entsprechend dem unterbrochenen (gemessenen) Befehl wird folgendermaßen gefunden: Der unterbrochene Befehl wird durch Lesen des Programmzählers in dem Programmumgebungsregister identifiziert, um die Distanzadresse (in Worten) in das Segment hinein für den Programmstopp-Befehl zu erhalten, der die Unterbrechung verursacht hat; diese Wort- Distanzadresse wird als eine Bit-Distanzadresse von der Bitmap-Startadresse verwendet, die (bei UC.BitmapPtr) in dem CPDB gespeichert ist. Das Bit an jener Distanzadresse wird auf Eins gesetzt, um die Ausführung des entsprechenden gemessenen Befehls anzuzeigen.
- Nach dem Einstellen des Bits in dem Bitmap wird der Programmstopp-Befehl in der Codekopie durch den tatsächlichen Befehl ersetzt, der ausgeführt werden soll (Block 78, A-87). Die Distanzadresse vom Programmzähler wird zur Segmentnummer in dem UC.seg-Feld in dem CPDB verkettet. Eine niederrangige 0 wird hinzuaddiert (um 0 Byte Distanzadresse in den Befehl hinein anzuzeigen) um an der 32-Bitadresse des Befehls anzukommen. Die Adresse des Befehls in der Codekopie wird in derselben Weise unter Verwendung des UC.copy.seg-Feldes in dem CPDB und der Distanzadresse vom Programmzähier erhalten. Der gemessene Befehl vom Originalprogramm wird in die Ausführungscodekopie kopiert, wodurch der Programmstopp-Befehl ersetzt wird. Beim Block 80 (A-88) wird die Steuerung zum Programm zur Ausführung des tatsächlichen Befehls zurückgegeben.
- Bei dieser Ausführung wird der Programmstopp-Befehl ebenfalls zum Austesten verwendet. Daher wird vor dem Ersetzen des Programmstopp- Befehls durch den tatsächlichen Befehl ein Test durchgeführt, um zu bestimmen, ob ein Austest-Haltepunkt eingestellt wurde. Wenn das Diagnoseprogramm einen Programmstopp eingestellt hat, wird ABDECKEN einen Programmstopp in dem Originalcode finden. Eine Programmstopp- Tabelle speichert den Befehl, der durch einen Austest-Programmstopp ersetzt wurde. ABDECKEN wird den Befehl in der Programmstopp-Tabelle verwenden, um den Programmstopp in der Kopie zu ersetzen. Die Steuerung kehrt zum Unterbrechungstreiber statt zum Programm zurück. Der Unterbrechungstreiber wird die Austestroutine für diesen Programmstopp ausführen. (Es ist verständlich, daß diese Routine nur erforderlich ist, weil diese Ausführung denselben Programmstopp-Befehl verwendet, der von dem Diagnoseprogramm verwendet wird. Bei anderen Ausführungen kann ein einheitlicher, eine Unterbrechung verursachender Befehl verwendet werden, oder ein zusammentreffendes Austesten kann untersagt werden.)
- Der Anwender kann den SICHERN-Befehl an jedem Punkt ausgeben, um die Bitmap-Daten zu sichern. Unter Bezugnahme auf die Fig. 5 stellt das Flußdiag ramm 88 die Operation von ABDECKEN als Antwort auf den SICHERN-Befehl dar. Beim Block 90 (A-12) wird das Bitmap für die spezifizierte PIN zu einem anderen Ort im Speicher kopiert. Beim Block 92 (A- 23) wird eine Magnetplattendatei zum Sichern des Bitmaps erzeugt. Dann wird beim Block 94 (A-23) ein Anfangsblock in die Bitmap-Datei mit dem Namen des gemessenen Programms, seinem Zeitaufdruck, etc. unter Verwendung der Daten in dem CPDB für den gemessenen Prozeß geschrieben. Dann wird beim Block 96 das Bitmap zu dieser Magnetplattendatei geschrieben. Das "immer gesicherte" Feld in dem CPDB wird aktualisiert, um anzuzeigen, daß das Bitmap gesichert wurde. Auch wenn ein Prozeß zu Ende geht, wird, wenn der Prozeß gemessen wurde, die Systemüberwachungseinrichtung die Bitmap- Daten sichern.
- Der RÜCKSTELLEN-Befehl kann von dem Anwender oder dem Betriebssystem nach einer Sicherungsoperation ausgegeben werden. Unter Bezugnahme auf Fig. 6 stellt ein Flußdiagramm 108 die Operation des Programms in Antwort auf den RÜCKSTELLEN-Befehl dar. Beim Block 110 (A-670-1) wird die Originalcodesegmentnummer vom CPDB-Feld UC.seg. in den PCB kopiert, was verursacht, daß der Originalcode anstelle der Kopie ausgeführt wird. Beim Block 112 ist der Codekopiespeicherraum unversperrt. Beim Block 114 (A-130, A-698) wird der Speicherraum freigegeben (Zuweisung aufgehoben), und beim Block 116 (A-130, A-140) wird der Bitmap-Raum freigegeben. Die Messung ist somit beendet.
- Unter Bezugnahme auf die Fig. 7 ist der SPERREN-Befehl dargestellt. Der SPERREN-Befehl führt die entgegengesetzten Funktionen des FREIGABE- Befehls aus. Beim Block 122 (A-660) testet das Programm, um zu bestimmen, ob ABDECKEN freigegeben ist, und, falls nicht, ob es existiert. Beim Block 126 (A-122) werden Nullen an den globalen Zeiger geschrieben, der die Adresse des CRCBs enthält. Beim Block 128 (A-122) wird der CRCB-Speicher freigegeben. Beim Block 130 (A-122) wird der CRCB-Speicherraum freigegeben (Zuweisung aufgehoben).
- Ein nützlicher Ausgabebericht ("MARKUP") (A-505-618), der bei der bevorzugten Ausführung erzeugt wird, ist eine markierte Quellencodeauflistung, wie die, die in der Fig. 8 gezeigt ist. Anweisungen, die nicht ausgeführt wurden, sind mit einem Stern (*) markiert. Wenn mehr als eine Anweisung auf derselben Zeile auftritt, zeigt ein Plus (+) an, daß eine Anweisung ausgeführt wurde, aber Irgendeine weitere Anweisung nicht ausgeführt wurde. Dieser Bericht wird unter Verwendung derselben Symboltabelle in der Objektdatei erzeugt, die zum Einfügen der Programmstopp-Befehle verwendet wurde. Die Symboltabelle zeigt die Distanzadressen in den Objektcode hinein an, an denen kompilierte Quellenanweisungen beginnen. Diese selben Distanzadressen (in Bits anstelle von Worten) werden verwendet, um in das Bitmap hinein zu indexieren, um zu testen, ob ein Anweisungs-Startbefehl ausgeführt wurde. Der "ANZEIGE"-Befehl zeigt eine Auflistung von allen Anweisungs- Quellendateizeilennummern in dem gemessenen Programm an. Alle unausgeführten Anweisungen sind mit einem Stern markiert. Für jede Prozedur und für das gesamte Programm sind Statistiken enthalten, die die Anzahl von Anweisungen und den Prozentsatz von jenen, die nicht ausgeführt wurden, anzeigen. Ein Beispiel ist in der Fig. 9 gezeigt.
- Ein weiterer nützlicher Bericht ("SORTIERUNG") (A-641-52) ist in der Fig. 10 gezeigt. Dieser Bericht berichtet alle Sequenzen von über n unausgeführten benachbarten Anweisungen, wobei n durch den Anwender/Anforderer spezifiziert ist. Die Anweisungsstarter werden gelesen und mit dem Bitmap verglichen. Unausgeführte benachbarte Anweisungen werden nachgezählt, bis eine ausgeführte Anweisung gefunden wird, und eine neue Rechnung wird begonnen. Die Rechnungen werden dann sortiert.
- Der "ORDNUNG"-Bericht (A-555-75) ist in der Fig. 11 gezeigt. Wenn ein existierender Satz von K Testfällen gegeben ist, ist es nützlich, die Testfälle zu ordnen, so daß der Test mit der höchsten Abdeckung zuerst laufengelassen wird. Nach diesem Test wird der nächste Testfall ausgewählt, so daß er das meiste zur Gesamtabdeckung hinzufügt, etc. Dies wird das Programm dem breitesten Testen in der kürzesten Zeit aussetzen.
- Zuerst werden die Bitmaps komprimiert, um nur die Bits zu enthalten, die Quellencodeanweisungsstartern entsprechen. Wenn das Programm N Anweisungen hat, bilden die komprimierten Bitmaps für die K Testfälle eine Bit- Matrix X(K,N). Unter Bezugnahme auf die Fig. 12 ist eine Pseudocodeversion des Algorithmus zum Ordnen der Testfälle gegeben. Zuerst wird der Testfall J, der die meiste Abdeckung ergibt, identifiziert. Dann wird jedes der verbleibenden Bitmaps mit dem Bitmap für jeden der K-1 verbleibenden Testfälle geODERt (inklusives oder) um die Kombination herauszufinden, die die höchste Abdeckung ergibt. Das kombinierte Bitmap für diese zwei Fälle wird dann mit jedem der K-2 verbleibenden Fälle geodert, etc.
- Andere Bool'sche Operationen, wie UND, EXKLUSIV-ODER, können ebenfalls auf spezifizierte Bitmaps auf Anforderung hin angewandt werden. Das ODER und exklusive oder (XOR) kann auf Bitmaps A und B angewandt werden, um die inkrementierende Zunahme anzuzeigen, die durch Testfälle geschaffen wird. Die Funktion (A oder B) XOR A bestimmt, was Test B erfaßt, das Test A nicht erfaßt. Die UND-Operation zeigt an, welche Anweisungen von allen Testfällen getestet wurden.
- Zusammenfassend wurde eine neue Technik zum Messen der Ausführung eines Computerprogramms beschrieben.
Claims (11)
1. Verfahren zum Bestimmen, welche eines ausgewählten Untersatzes eines
ersten Satzes von ausführbaren Befehlen nicht ausgeführt werden, wenn ein
Computerprogramm (8), das den ersten Satz von ausführbaren Befehlen
enthält, ausgeführt wird, enthaltend die Schritte:
Erstellen (48) einer Programmkopie (10) des Computerprogramms (8), wobei
die Programmkopie einen zweiten Satz von ausführbaren Befehlen enthält,
der mit dem ersten Satz von ausführbaren Befehlen identisch ist
Speichern der Programmkopie (10),
Modifizieren der gespeicherten Programmkopie durch Ersetzen (54) jedes
ausführbaren Befehls des ausgewählten Untersatzes des zweiten Satzes in
der Programmkopie (10) mit einem eine Unterbrechung verursachenden
Befehl,
Starten der Ausführung der modifizierten Programmkopie,
Durchführen der folgenden Schritte in Abhängigkeit von der Ausführung
jedes der eine Unterbrechung verursachenden Befehle in der modifizierten
Programmkopie:
Lokalisieren eines mit dem durch den ausgeführten der eine Unterbrechung
verursachenden Befehle ersetzten Befehl identischen Befehis in dem ersten
Satz von ausführbaren Befehlen,
Wiederherstellen (78) des ersetzten Befehls durch Schreiben des
lokalisierten Befehls an Stelle des ausgeführten eine Unterbrechung verursachenden
Befehls in die modifizierte Programmkopie,
Speichern (76) einer Indikation, daß der ersetzte Befehl wiederhergestellt
wurde, und
Ausführen (80) der wiederhergestellten Befehle, und
Bestimmen, welche des ausgewählten Untersatzes von Befehle
wiederhergestellt und ausgeführt wurden, durch Lesen deren gespeicherter Indikation.
2. Verfahren nach Anspruch 1,
dadurch gekennzeichnet,
daß der eine Unterbrechung verursachende Befehl ein
Programmstopp-Befehl ist.
3. Verfahren nach Anspruch 1,
dadurch gekennzeichnet,
daß der eine Unterbrechung verursachende Befehl ein ungültiger Befehl ist.
4. Verfahren nach Anspruch 1,
dadurch gekennzeichnet
daß es ferner den Schritt des Berichtens enthält, welche des ausgewählten
Untersatzes von Befehlen wiederhergestellt und ausgeführt wurden.
5. Verfahren nach Anspruch 1,
dadurch gekennzeichnet,
daß es ferner den Schritt des Berichtens enthält, welche des ausgewählten
Untersatzes von Befehlen nicht wiederhergestellt und ausgeführt wurden.
6. Verfahren nach Anspruch 1,
dadurch gekennzeichnet,
daß es ferner den Schritt des Bezeichnens in Abhängigkeit von der
Ausführung eines Meßbefehls enthält, daß der durch den eine Unterbrechung
verursachenden Befehl ersetzte Befehl ausgeführt werden wird.
7. Verfahren nach Anspruch 6,
dadurch gekennzeichnet,
daß der Bezeichnungsschritt das Speichern einer Indikation, daß der eine
Unterbrechung verursachende Befehl ablief, in dem Computersystem enthält.
8. Verfahren nach Anspruch 7,
dadurch gekennzeichnet
daß es ferner den Schritt des Berichtens enthält, daß jeder
wiederhergestellte Befehl ausgeführt wurde.
9. System zum Ausführen eines Computerprogramms (8) zum Bestimmen,
welche eines ausgewählten Untersatzes eines ersten Satzes von
ausführbaren Befehlen nicht ausgeführt werden, wenn das Computerprogramm, das
den ersten Satz von ausführbaren Befehlen enthält, ausgeführt wird,
enthaltend:
Speichereinrichtungen (14) zum Speichern von Programmen und Daten,
wobei das Computerprogramm in den Speichereinrichtungen (14)
gespeichert ist,
Kopiereinrichtungen, die eine Programmkopie (10) des Computerprogramms
erstellen und sie in den Speichereinrichtungen (14) speichern, wobei die
Programmkopie einen zweiten Satz von ausführbaren Befehlen enthält, der
mit dem ersten Satz von ausführbaren Befehlen identisch ist,
mit den Speichereinrichtungen (14) gekoppelte Verarbeitungseinrichtungen,
die die gespeicherte Programmkopie durch Ersetzen (54) jedes ausführbaren
Befehis des ausgewählten Untersatzes des zweiten Satzes in der
Programmkopie mit einem eine Unterbrechung verursachenden Befehl
modifizieren und dann die Programmkopie ausführen, und die in Abhängigkeit von
der Ausführung jedes der eine Unterbrechung verursachenden Befehle in der
modifizierten Programmkopie einen mit dem durch den ausgeführten der
eine Unterbrechung verursachenden Befehle ersetzten Befehl identischen
Befehis in dem ersten Satz von ausführbaren Befehlen lokalisiert, den
ersetzten Befehl durch Schreiben des lokalisierten Befehls an Stelle des
ausgeführten eine Unterbrechung verursachenden Befehls in die modifizierte
Programmkopie wiederherstellt, den wiederhergestellten Befehl ausführt und
eine Indikation in dem Speicher speichert, daß der ersetzte Befehl
wiederhergestellt wurde, und
Berichteinrichtungen, die berichten, welche des ausgewählten Untersatzes
von Befehlen wiederhergestellt und ausgeführt wurden, durch Lesen deren in
dem Speicher gespeicherter Indikation.
10. System nach Anspruch 9,
dadurch gekennzeichnet
daß der eine Unterbrechung verursachende Befehl ein
Programmstopp-Befehl ist.
11. System nach Anspruch 9,
dadurch gekennzeichnet,
daß der eine Unterbrechung verursachende Befehl ein ungültiger Befehl ist.
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US07/072,811 US4910663A (en) | 1987-07-10 | 1987-07-10 | System for measuring program execution by replacing an executable instruction with interrupt causing instruction |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| DE3854546D1 DE3854546D1 (de) | 1995-11-09 |
| DE3854546T2 true DE3854546T2 (de) | 1996-05-15 |
Family
ID=22109900
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| DE3854546T Expired - Fee Related DE3854546T2 (de) | 1987-07-10 | 1988-07-08 | Verfahren und Gerät zur Programmablaufmessung. |
Country Status (5)
| Country | Link |
|---|---|
| US (1) | US4910663A (de) |
| EP (1) | EP0307075B1 (de) |
| JP (1) | JPH0193839A (de) |
| AU (1) | AU618269B2 (de) |
| DE (1) | DE3854546T2 (de) |
Families Citing this family (94)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH02199548A (ja) * | 1988-11-09 | 1990-08-07 | Asea Brown Boveri Ag | 電算機系で作成されるオブジエクト・プログラムの時間経過を観察する方法とこの方法を実行する観測器具 |
| US5134701A (en) * | 1989-02-10 | 1992-07-28 | Hewlett-Packard Co. | Test apparatus performing runtime replacement of program instructions with breakpoint instructions for processor having multiple instruction fetch capabilities |
| US5050168A (en) * | 1989-12-29 | 1991-09-17 | Paterson Timothy L | Test coverage analyzer |
| GB2258064B (en) * | 1991-07-26 | 1995-07-12 | Research Machines Plc | Monitoring execution of a computer program to provide test coverage analysis |
| US5301312A (en) * | 1991-08-21 | 1994-04-05 | International Business Machines Corporation | Method and system for utilizing benign fault occurrence to measure interrupt-blocking times |
| WO1994009432A1 (de) * | 1992-10-15 | 1994-04-28 | Siemens Aktiengesellschaft | Verfahren zur durchfürhung mindestens eines tests an mindestens einem von auf einem rechner parallel ablauffähigen objekten eines objektorientierten programmes |
| DE4315944A1 (de) * | 1993-05-12 | 1994-11-17 | Siemens Ag | Verfahren zur maschinellen Überwachung des Ablaufs eines Programmsystems |
| US5495561A (en) * | 1993-06-21 | 1996-02-27 | Taligent, Inc. | Operating system with object-oriented printing interface |
| US5758160A (en) * | 1993-06-28 | 1998-05-26 | Object Technology Licensing Corporation | Method and apparatus for building a software program using dependencies derived from software component interfaces |
| US5325533A (en) * | 1993-06-28 | 1994-06-28 | Taligent, Inc. | Engineering system for modeling computer programs |
| US5519866A (en) * | 1993-06-28 | 1996-05-21 | Taligent, Inc. | Method and apparatus of incrementally linking components of a modeled computer program |
| WO1995015529A1 (en) * | 1993-12-01 | 1995-06-08 | Marathon Technologies Corporation | Fault resilient/fault tolerant computing |
| US5790397A (en) | 1996-09-17 | 1998-08-04 | Marathon Technologies Corporation | Fault resilient/fault tolerant computing |
| US6253368B1 (en) * | 1997-03-31 | 2001-06-26 | International Business Machines Corporation | Dynamically debugging user-defined functions and stored procedures |
| US6393490B1 (en) | 1997-12-18 | 2002-05-21 | Ian James Stiles | Method and system for a programmatic feedback process for end-user support |
| US20040205704A1 (en) * | 1999-12-27 | 2004-10-14 | Miller Donald W. | Transparent monitoring system and method for examining an executing program in real time |
| US6883168B1 (en) * | 2000-06-21 | 2005-04-19 | Microsoft Corporation | Methods, systems, architectures and data structures for delivering software via a network |
| US7155667B1 (en) | 2000-06-21 | 2006-12-26 | Microsoft Corporation | User interface for integrated spreadsheets and word processing tables |
| JP4522650B2 (ja) | 2000-06-21 | 2010-08-11 | マイクロソフト コーポレーション | スプレッドシートとワードプロセッシングの表を統合するシステムと方法 |
| US7000230B1 (en) | 2000-06-21 | 2006-02-14 | Microsoft Corporation | Network-based software extensions |
| US7117435B1 (en) | 2000-06-21 | 2006-10-03 | Microsoft Corporation | Spreadsheet fields in text |
| US6948135B1 (en) * | 2000-06-21 | 2005-09-20 | Microsoft Corporation | Method and systems of providing information to computer users |
| US7191394B1 (en) | 2000-06-21 | 2007-03-13 | Microsoft Corporation | Authoring arbitrary XML documents using DHTML and XSLT |
| US7624356B1 (en) | 2000-06-21 | 2009-11-24 | Microsoft Corporation | Task-sensitive methods and systems for displaying command sets |
| US6874143B1 (en) | 2000-06-21 | 2005-03-29 | Microsoft Corporation | Architectures for and methods of providing network-based software extensions |
| US7346848B1 (en) | 2000-06-21 | 2008-03-18 | Microsoft Corporation | Single window navigation methods and systems |
| US7191430B2 (en) * | 2001-09-24 | 2007-03-13 | Hewlett-Packard Development Company, L.P. | Providing instruction execution hints to a processor using break instructions |
| US7243340B2 (en) * | 2001-11-15 | 2007-07-10 | Pace Anti-Piracy | Method and system for obfuscation of computer program execution flow to increase computer program security |
| JP4224250B2 (ja) * | 2002-04-17 | 2009-02-12 | パイオニア株式会社 | 音声認識装置、音声認識方法および音声認識プログラム |
| EP1387279B1 (de) * | 2002-07-31 | 2008-05-14 | Texas Instruments Inc. | Cachespeicherkohärenz in einem Multiprozessorsystem |
| US7062684B2 (en) * | 2002-12-19 | 2006-06-13 | International Business Machines Corporation | Enabling tracing of a repeat instruction |
| US8225293B2 (en) * | 2003-02-13 | 2012-07-17 | Accurate Technologies Inc. | Method for supporting calibration parameters in an ECU |
| US7650596B2 (en) * | 2003-02-13 | 2010-01-19 | Accurate Technologies Inc. | Method for ECU calibration and diagnostics development |
| US7370066B1 (en) | 2003-03-24 | 2008-05-06 | Microsoft Corporation | System and method for offline editing of data files |
| US7275216B2 (en) | 2003-03-24 | 2007-09-25 | Microsoft Corporation | System and method for designing electronic forms and hierarchical schemas |
| US7415672B1 (en) | 2003-03-24 | 2008-08-19 | Microsoft Corporation | System and method for designing electronic forms |
| US7913159B2 (en) | 2003-03-28 | 2011-03-22 | Microsoft Corporation | System and method for real-time validation of structured data files |
| US7296017B2 (en) * | 2003-03-28 | 2007-11-13 | Microsoft Corporation | Validation of XML data files |
| US7516145B2 (en) | 2003-03-31 | 2009-04-07 | Microsoft Corporation | System and method for incrementally transforming and rendering hierarchical data files |
| US7168035B1 (en) | 2003-06-11 | 2007-01-23 | Microsoft Corporation | Building a view on markup language data through a set of components |
| US7451392B1 (en) | 2003-06-30 | 2008-11-11 | Microsoft Corporation | Rendering an HTML electronic form by applying XSLT to XML using a solution |
| US7197515B2 (en) * | 2003-06-30 | 2007-03-27 | Microsoft Corporation | Declarative solution definition |
| US7581177B1 (en) | 2003-08-01 | 2009-08-25 | Microsoft Corporation | Conversion of structured documents |
| US7406660B1 (en) | 2003-08-01 | 2008-07-29 | Microsoft Corporation | Mapping between structured data and a visual surface |
| US7334187B1 (en) | 2003-08-06 | 2008-02-19 | Microsoft Corporation | Electronic form aggregation |
| US8819072B1 (en) | 2004-02-02 | 2014-08-26 | Microsoft Corporation | Promoting data from structured data files |
| US7318063B2 (en) | 2004-02-19 | 2008-01-08 | Microsoft Corporation | Managing XML documents containing hierarchical database information |
| US7831979B2 (en) * | 2004-04-28 | 2010-11-09 | Agere Systems Inc. | Processor with instruction-based interrupt handling |
| US7496837B1 (en) * | 2004-04-29 | 2009-02-24 | Microsoft Corporation | Structural editing with schema awareness |
| US7568101B1 (en) | 2004-05-13 | 2009-07-28 | Microsoft Corporation | Digital signatures with an embedded view |
| US7409518B2 (en) * | 2004-05-21 | 2008-08-05 | International Business Machines Corporation | Method for improving disk space allocation |
| US7281018B1 (en) | 2004-05-26 | 2007-10-09 | Microsoft Corporation | Form template data source change |
| US7774620B1 (en) | 2004-05-27 | 2010-08-10 | Microsoft Corporation | Executing applications at appropriate trust levels |
| US7516399B2 (en) | 2004-09-30 | 2009-04-07 | Microsoft Corporation | Structured-document path-language expression methods and systems |
| US20060074933A1 (en) * | 2004-09-30 | 2006-04-06 | Microsoft Corporation | Workflow interaction |
| US7692636B2 (en) | 2004-09-30 | 2010-04-06 | Microsoft Corporation | Systems and methods for handwriting to a screen |
| US8487879B2 (en) | 2004-10-29 | 2013-07-16 | Microsoft Corporation | Systems and methods for interacting with a computer through handwriting to a screen |
| US7584417B2 (en) * | 2004-11-15 | 2009-09-01 | Microsoft Corporation | Role-dependent action for an electronic form |
| US7712022B2 (en) * | 2004-11-15 | 2010-05-04 | Microsoft Corporation | Mutually exclusive options in electronic forms |
| US7509353B2 (en) | 2004-11-16 | 2009-03-24 | Microsoft Corporation | Methods and systems for exchanging and rendering forms |
| US7721190B2 (en) * | 2004-11-16 | 2010-05-18 | Microsoft Corporation | Methods and systems for server side form processing |
| US7904801B2 (en) * | 2004-12-15 | 2011-03-08 | Microsoft Corporation | Recursive sections in electronic forms |
| US7437376B2 (en) | 2004-12-20 | 2008-10-14 | Microsoft Corporation | Scalable object model |
| US7937651B2 (en) | 2005-01-14 | 2011-05-03 | Microsoft Corporation | Structural editing operations for network forms |
| US7725834B2 (en) * | 2005-03-04 | 2010-05-25 | Microsoft Corporation | Designer-created aspect for an electronic form template |
| US7673228B2 (en) * | 2005-03-30 | 2010-03-02 | Microsoft Corporation | Data-driven actions for network forms |
| US8010515B2 (en) * | 2005-04-15 | 2011-08-30 | Microsoft Corporation | Query to an electronic form |
| US20070006166A1 (en) * | 2005-06-20 | 2007-01-04 | Seagate Technology Llc | Code coverage for an embedded processor system |
| US7543228B2 (en) | 2005-06-27 | 2009-06-02 | Microsoft Corporation | Template for rendering an electronic form |
| US8200975B2 (en) * | 2005-06-29 | 2012-06-12 | Microsoft Corporation | Digital signatures for network forms |
| US7613996B2 (en) * | 2005-08-15 | 2009-11-03 | Microsoft Corporation | Enabling selection of an inferred schema part |
| US20070036433A1 (en) * | 2005-08-15 | 2007-02-15 | Microsoft Corporation | Recognizing data conforming to a rule |
| US8001459B2 (en) | 2005-12-05 | 2011-08-16 | Microsoft Corporation | Enabling electronic documents for limited-capability computing devices |
| US7779343B2 (en) | 2006-01-30 | 2010-08-17 | Microsoft Corporation | Opening network-enabled electronic documents |
| US8510596B1 (en) * | 2006-02-09 | 2013-08-13 | Virsec Systems, Inc. | System and methods for run time detection and correction of memory corruption |
| US8019566B2 (en) * | 2007-09-11 | 2011-09-13 | International Business Machines Corporation | System and method for efficiently testing cache congruence classes during processor design verification and validation |
| US7992059B2 (en) | 2007-09-11 | 2011-08-02 | International Business Machines Corporation | System and method for testing a large memory area during processor design verification and validation |
| US8006221B2 (en) | 2007-09-11 | 2011-08-23 | International Business Machines Corporation | System and method for testing multiple processor modes for processor design verification and validation |
| US8099559B2 (en) * | 2007-09-11 | 2012-01-17 | International Business Machines Corporation | System and method for generating fast instruction and data interrupts for processor design verification and validation |
| US20090070570A1 (en) * | 2007-09-11 | 2009-03-12 | Shubhodeep Roy Choudhury | System and Method for Efficiently Handling Interrupts |
| US20090083616A1 (en) * | 2007-09-25 | 2009-03-26 | Microsoft Corporation | Ubiquitous electronic forms |
| JP5228537B2 (ja) * | 2008-02-29 | 2013-07-03 | 日本電気株式会社 | テキスト表示装置、開発システム、テキスト表示方法及びプログラム |
| US8265606B2 (en) * | 2008-10-09 | 2012-09-11 | Microsoft Corporation | Targeted advertisements to social contacts |
| US9003367B2 (en) * | 2009-05-11 | 2015-04-07 | International Business Machines Corporation | Specific debug trace collecting |
| US8769497B2 (en) | 2010-07-20 | 2014-07-01 | General Electric Company | System and method for use in indicating execution of application code |
| US20120023483A1 (en) * | 2010-07-20 | 2012-01-26 | Dan Welchman | System and method for use in indicating execution of application code |
| US8645912B2 (en) | 2010-08-31 | 2014-02-04 | General Electric Company | System and method for use in replaying software application events |
| US9069900B2 (en) * | 2013-03-28 | 2015-06-30 | Intel Mobile Communications GmbH | Method for determining whether a machine code instruction of a machine code program is executed in the machine code program |
| US10540180B2 (en) * | 2014-12-07 | 2020-01-21 | Lenovo Enterprise Solutions (Singapore) Pte. Ltd. | Reconfigurable processors and methods for collecting computer program instruction execution statistics |
| EP3472746B1 (de) | 2016-06-16 | 2020-05-13 | Virsec Systems, Inc. | Systeme und verfahren zur behebung von speicherkorruption in einer computeranwendung |
| WO2022174246A1 (en) * | 2021-02-10 | 2022-08-18 | Microchip Technology Incorporated | Trap sub-portions of computer-readable instructions and related systems, methods, and apparatuses |
| US11200151B1 (en) | 2021-03-12 | 2021-12-14 | Sas Institute Inc. | Graphical user interface and debugger system for selecting and testing alterations to source code for software applications |
| CN113392006B (zh) * | 2021-06-17 | 2022-07-12 | 浪潮思科网络科技有限公司 | 一种使用capsys监控自动化测试日志的方法及设备 |
| CN119782137B (zh) * | 2024-07-10 | 2025-11-11 | 电子科技大学 | 一种面向深度学习框架的代码覆盖率分析系统及方法 |
Family Cites Families (15)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US3509541A (en) * | 1967-04-04 | 1970-04-28 | Bell Telephone Labor Inc | Program testing system |
| US3551659A (en) * | 1969-05-05 | 1970-12-29 | Charles O Forsythe | Method for debugging computer programs |
| US3707725A (en) * | 1970-06-19 | 1972-12-26 | Ibm | Program execution tracing system improvements |
| DE2432024A1 (de) * | 1974-07-03 | 1976-01-22 | Siemens Ag | Verfahren zum betrieb einer datenverarbeitungsanlage |
| US4205370A (en) * | 1975-04-16 | 1980-05-27 | Honeywell Information Systems Inc. | Trace method and apparatus for use in a data processing system |
| US4080650A (en) * | 1976-07-28 | 1978-03-21 | Bell Telephone Laboratories, Incorporated | Facilitating return from an on-line debugging program to a target program breakpoint |
| US4231106A (en) * | 1978-07-13 | 1980-10-28 | Sperry Rand Corporation | Performance monitor apparatus and method |
| JPS5750058A (en) * | 1980-09-10 | 1982-03-24 | Usac Electronics Ind Co Ltd | Debugging method by instruction exchange |
| JPS5854456A (ja) * | 1981-09-28 | 1983-03-31 | Fujitsu Ltd | 被デバツグ・プログラム・デバツグ制御方式 |
| JPS5886648A (ja) * | 1981-11-18 | 1983-05-24 | Mitsubishi Electric Corp | トレ−ス装置 |
| EP0087064A3 (de) * | 1982-02-18 | 1986-12-10 | Hewlett-Packard Company | Verfahren und System zur Programmfehlerbeseitigung |
| US4511961A (en) * | 1982-04-16 | 1985-04-16 | Ncr Corporation | Apparatus for measuring program execution |
| US4462077A (en) * | 1982-06-24 | 1984-07-24 | Bell Telephone Laboratories, Incorporated | Trace facility for use in multiprocessing environment |
| JPS593651A (ja) * | 1982-06-30 | 1984-01-10 | Fujitsu Ltd | フア−ムウエアによる性能測定システム |
| US4635193A (en) * | 1984-06-27 | 1987-01-06 | Motorola, Inc. | Data processor having selective breakpoint capability with minimal overhead |
-
1987
- 1987-07-10 US US07/072,811 patent/US4910663A/en not_active Expired - Lifetime
-
1988
- 1988-07-07 AU AU18790/88A patent/AU618269B2/en not_active Ceased
- 1988-07-08 EP EP88306251A patent/EP0307075B1/de not_active Expired - Lifetime
- 1988-07-08 DE DE3854546T patent/DE3854546T2/de not_active Expired - Fee Related
- 1988-07-11 JP JP63172488A patent/JPH0193839A/ja active Pending
Also Published As
| Publication number | Publication date |
|---|---|
| US4910663A (en) | 1990-03-20 |
| JPH0193839A (ja) | 1989-04-12 |
| DE3854546D1 (de) | 1995-11-09 |
| EP0307075A2 (de) | 1989-03-15 |
| EP0307075B1 (de) | 1995-10-04 |
| EP0307075A3 (en) | 1990-10-10 |
| AU1879088A (en) | 1989-01-12 |
| AU618269B2 (en) | 1991-12-19 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| DE3854546T2 (de) | Verfahren und Gerät zur Programmablaufmessung. | |
| DE69330537T2 (de) | System zur Analyse und Fehlerbeseitigung integrierter Software durch dynamischen und interactiven Gebrauch von Kode-Markierern | |
| DE69903629T2 (de) | Prüfung der funktionsfähigkeit eines gerätetreibers | |
| DE69216020T2 (de) | Verbessertes fehlersuchsystem und -verfahren, besonders für die fehlersuche in einer multi-architekturumgebung | |
| DE60130840T2 (de) | Vorrichtung und Verfahren zur Katalogisierung von symbolischen Daten zur Verwendung bei der Leistungsanalyse von Computerprogrammen | |
| DE4332993C1 (de) | Tracer-System zur Fehleranalyse in laufenden Realzeitsystemen | |
| DE69415593T2 (de) | Verfahren zur Überprüfung eines nachrichtengesteuerten Betriebssystems | |
| Ohba et al. | Does imperfect debugging affect software reliability growth? | |
| DE60010420T2 (de) | Automatisches Regressionstesten von Arbeitsplatz-Software | |
| DE69604347T2 (de) | Bestimmung der dynamischen Eigenschaften von Programmen | |
| DE69523029T2 (de) | Bytecodeprograminterpreter, Verfahren und Anordnung mit Vorprüfung von Datentyprestriktionen | |
| DE3787431T2 (de) | Verfahren zur Generierung einer Kandidatenliste von fehlerhaften Schaltungselementen und Verfahren zur Isolierung von Fehlern in einer logischen Schaltung unter Verwendung dieser Kandidatenliste. | |
| DE68921775T2 (de) | Prozessorssimulation. | |
| DE69909945T2 (de) | Verfahren und Anordnung zur Korrelation von Profildaten dynamisch erzeugt durch ein optimiertes ausführbares Programm mit Quellcodeanweisungen | |
| DE69026208T2 (de) | Verfahren zur Erkennung möglicher Fehler einer Programmierung in Assembler Sprache mit Erfassung offensichtlicher Inkonsistenz mit einer vorhergehenden Operation | |
| EP0679995B1 (de) | Verfahren und Vorrichtung zur selbstbeschreibenden Datenkodierung | |
| DE112018001257T5 (de) | Generieren und überprüfen von ablaufverfolgungen von hardware-anweisungen einschliesslich dateninhalten des arbeitsspeichers | |
| DE69524170T2 (de) | Eingebettete Programmablaufinformation zwecks Zielcodemanipulation | |
| DE69219662T2 (de) | Verfahren zur On-Line-Modifizierung von komprimierten digitalen Prüfvektoren | |
| DE68924507T2 (de) | Verfahren und Gerät zur Markierung von Emulationsanalysezuständen. | |
| EP0721620B1 (de) | Tracer-system zur fehleranalyse in laufenden realzeitsystemen | |
| DE3750311T2 (de) | Gerät und Verfahren zur Übertragung zwischen Prozessoren. | |
| DE102006019292A1 (de) | Modellieren programmierbarer Einrichtungen | |
| DE69712986T2 (de) | Programmentwicklungssystem | |
| DE60021092T2 (de) | Vorrichtung und Verfahren zur Echtzeitfehlerbeseitigung von Quellprogrammen, insbesondere für DSP |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| 8364 | No opposition during term of opposition | ||
| 8339 | Ceased/non-payment of the annual fee |