-
Technisches
Feld
-
Die
vorliegende Erfindung bezieht sich auf die Instrumentierung eines
Computerprogramms zur Prüfung
und Fehlerbeseitigung, und im Speziellen auf die Instrumentierung
eines Computerprogramms mit Kennzeichnungsanweisungen.
-
Hintergrund
der Erfindung
-
Der
Softwareentwicklungsprozess besteht typischerweise aus der unabhängigen Erzeugung
zahlreiche Quellcodemodule, die gemeinsam ein komplettes Computerprogramm
festlegen. Die Quellcodemodule werden dann kompiliert und zusammen
verknüpft,
um ein ausführbares
Computerprogramm zu bilden. Da mehrere Softwareentwickler ein oder
mehrere dieser Quellcodemodule geschrieben haben könnten, müssen die
Quellcodemodule oder die kompilierten Versionen typischerweise auf
einen einzelnen Computer zum Verknüpfen übertragen werden. Sobald das
ausführbare
Computerprogramm erzeugt worden ist, kann der Softwareentwickler
das Computerprogramm prüfen
und Fehler beseitigen und dabei Standardprüfungs- und Fehlerbeseitigungsmethoden
verwenden.
-
Wegen
der Anzahl von Quellcodemodulen ist das entstehende Computerprogramm
oft sehr komplex. Das Prüfen
und anschließend
die Fehlerbeseitigung von Computerprogrammen sind wichtige Schritte
in jedem Softwareentwicklungsprozess, und diese Schritte werden
sogar noch wichtiger für
komplexe Computerprogramme. In der Tat, solch eine Fehlerbeseitigung
(d. h. verbessern jeglicher Fehler) kann sogar eine vertragliche
Forderung, vor der Abnahme durch die für das Computerprogramm beabsichtigten
Benutzer bilden. Es ist nicht überraschend,
dass die Schwierigkeit der Prüfung
und Fehlerbeseitigung von Computerprogrammen allgemein ansteigt,
wenn die Komplexität
zunimmt. Zusätzlich
steigt oft die Schwierigkeit beim Testen eines kompletten Computerprogramms
mit der Anzahl von Softwareentwicklern.
-
Beim
Prüfen
eines Computerprogramms muss ein Softwareentwickler normalerweise
sicherstellen, dass jedes Quellcodemodul unabhängig seine beabsichtigten Funktionen
korrekt ausführt
und dass das Computerprogramm, umfassend alle den Quellcodemodulen,
seine beabsichtigte Funktion auch korrekt ausführt. Um in einem Computerprogramm
die Fehler richtig zu beseitigen, muss der Softwareentwickler typischerweise die
Ausführung
des Computerprogramms verfolgen. Das Verfolgen der Ausführung zeigt
genau, welche Schritte in dem Computerprogramm ausgeführt worden
sind und die Reihenfolge, in welcher diese ausgeführt worden
sind. Das Verfolgen der Ausführung
eines Computerprogramms kann durch eine Instrumentierung der Quellcodemodule
durchgeführt
werden.
-
Die
Quellcodeinstrumentierung besteht typischerweise aus dem Einfügen einer
ausführbaren
Kennzeichnungszuweisungsanweisung, oder "Kennzeichen" in einem Quellcodemodul eines Computerprogramms an
mehreren Kennzeichnungspunkten vor dem Kompilieren des Quellcodemoduls.
Kennzeichnungspunkte sind Stellen von Interesse in dem Quellcodemodul,
wie z. B. Eintritt oder Austritt einer Funktion, die alternativen Zweige
einer Auswahlanweisung, und das Ausführen einer Schleifenanweisung,
an denen ein Softwareentwickler den Status des Computerprogramms
beim Ausführen
wissen wollen könnte.
An jedem Kennzeichnungspunkt weist die Kennzeichnungszuweisungsanweisung
typischerweise der Kennzeichnungsvariablen einen eindeutigen Wert
zu. Eine Instrumentierungsdatenbank ("IDB")
enthält
Daten bezüglich
dem Kennzeichnungspunkt, wie z. B. den Kennzeichnungswert, der der
Kennzeichnungsvariablen an jedem Kennzeichnungspunkt zugewiesen
ist und Informationen über
das Quellcodemodul an dem Kennzeichnungspunkt.
-
Ein
Softwareentwickler kann dann das instrumentierte Computerprogramm
ausführen
und den aktuellen Wert der Kennzeichnungsvariable überwachen,
um die Ausführung
des Computerprogramms verfolgen. Die Kennzeichnungswerte, die während der
Computerprogrammausführung
erzeugt werden, können
gespeichert werden, um ein Verfolgen der Ausführung des Computerprogramms
zu liefern. Nachfolgend der Ausführung
des Computerprogramms liefern diese Kennzeichnungswerte Hinweise
zur Identifizierung der Kennzeichnungspunkte in dem Computerprogramm.
Auf diese Weise dienen Kennzeichen als ein Mittel zum Anzeigen der
Ausführung
eines bestimmten Bruchstücks
des Computerprogramms.
-
Die
Instrumentierung kann typischerweise durch das Benutzen von "nach Adresse"- oder "nach Wert"-Schemata erreicht
werden. In einer Instrumentierung nach dem Adressschema wird eine
eindeutige Speicherstelle mit einer eindeutigen Adresse für jeden
Kennzeichnungspunkt bestimmt und die Kennzeichnungsanweisung speichert
einen Kennzeichnungswert an seiner eindeutigen Stelle. Zum Beispiel
kann ein einzelner Kennzeichnungswert benutzt werden und wenn dieser
Kennzeichnungswert an eine eindeutige Stelle geschrieben wird, kann
der Softwareentwickler folgern, dass ein entsprechender Kennzeichnungspunkt
in dem Computerprogramm ausgeführt
worden ist. In einer Instrumentierung nach dem Wertschema werden
unterschiedliche Kennzeichnungswerte an eine einzelne Speicherstelle
geschrieben und der Kennzeichnungswert, der an diese Stelle geschrieben
wurde, eher als die Stelle selbst, entspricht einem bestimmten Kennzeichnungspunkt
in dem Computerprogramm. Spezialisierte Prüfer fangen typischerweise diese
Kennzeichnungswerte ab und schreiben sie in eine Datei, die von
einem Softwareentwickler überprüft werden
kann und die als Werkzeug für
die Fehlerbeseitigung des Computerprogramms verwendet werden kann.
-
Tabelle
1 liefert ein Beispiel eines Quellcodemoduls vor seiner Instrumentierung
mit Kennzeichen. Quellcodemodul 1, in Tabelle 1 gezeigt, enthält Pseudocode
für zwei
Variablenzuweisungsanweisungen zur Variablen "A" (Zeile
4 und Zeile 8), eine "while"-Schleife (Zeile 5), einen Funktionsaufruf
(Zeile 7) und eine "if-then-else"-Anweisung (Zeilen
10 bis 16). Quellcodemodul 1 enthält keine Kennzeichen und sein
ausführbarer
Code würde
keine Kennzeichnungswerte ausgeben (d. h. Ausführen der Kennzeichnungszuweisungsanweisungen).
Auf diese Weise wird der Softwareentwickler keinen Zugriff auf eine
Hinweistabelle aus Kennzeichnungswerten für Quellcodemodul 1 haben, um
festzustellen, z. B., dass "function_1" (Zeile 7) durch
dieses Quellcodemodul ausgeführt
wurde.
-
-
Tabelle
2 gibt ein Beispiel eines Quellcodemoduls 1 nach seiner Instrumentierung
mit Kennzeichen in einer Instrumentierung nach dem Wertschema. Ein
Instrumentierer hat für
eine Kennzeichnungsvariable, "AMC_Control_Port" (Zeile 2), eine
Vereinbarung in Quellcodemodul 1 eingefügt. (In einer Instrumentierung nach
dem Adressschema würde
der Instrumentierer typischerweise Vereinbarungen für mehrere
Kennzeichnungsvariablen einfügen.)
Der Instrumentierer hat auch Kennzeichnungszuweisungsanweisungen
an verschiedenen Kennzeichnungspunkten (Zeilen 7, 11, 15, 19, 21
und 25) innerhalb des Quellcodemoduls 1 eingefügt, welches den Pseudocode,
wie vorher in Tabelle 1 gezeigt, enthält. Ein ausführbares
Computerprogramm, das das instrumentierte Quellcodemodul 1 enthält, wird
während
dem Ausführen
Kennzeichen ausgeben. Deshalb kann ein Softwareentwickler sich auf
eine Tabelle mit ausgegebenen Kennzeichnungswerten beziehen, um
festzustellen, welche Schritte aus Quellcodemodul 1 ausgeführt worden
sind. Zum Beispiel kann ein Softwareentwickler nachprüfen, ob "function_1" (Zeile 8) in Quellcodemodul
1 ausgeführt
worden ist, indem er feststellt, ob eine Kennzeichnungsvariable
mit dem Wert "0" (Zeile 7) in der
Tabelle mit den ausgegebenen Kennzeichnungswerten gespeichert worden
ist. Wenn eine "0" gespeichert worden
ist, dann kann der Softwareentwickler folgern, dass "function_1" ausgeführt worden
ist, und wenn eine "0" nicht gespeichert
worden ist, dann kann der Softwareentwickler folgern, dass "function_1" nicht ausgeführt worden
ist.
-
-
1 zeigt
ein typisches Überwachungssystem,
das im Zusammenhang mit einer Quellcodeinstrumentierung nach dem
Wertschema steht. Sobald ein Computerprogramm mit Kennzeichnungszuweisungsanweisungen
instrumentiert worden ist, überwacht
eine spezialisierte Prüfungsvorrichtung
die Ausführung
des Computerprogramms. Da das Computerprogramm innerhalb von CPU 100 ausgeführt wird,
erfasst spezialisierte Hardware 103 das Schreiben an bestimmten
Stellen im Speicher 102. In der Instrumentierung nach dem Wertschema
kennt diese spezialisierte Hardware die Adresse der Kennzeichnungsvariablen.
Während
das Computerprogramm ausgeführt
wird, gehen Daten zwischen der CPU und dem Speicher über den
Adress- und Datenbus 101. Prüfer 105 überwacht
den Adressbus und schaut nach dem Auftreten des Schreibens von Daten
an die Adressstelle der Kennzeichnungsvariablen. Wenn der Prüfer ein
Schreiben für
die Kennzeichnungsvariable feststellt, kopiert der Prüfer den
Kennzeichnungswert aus der Datenbusverbindung 104. Der
Prüfer hängt dann
einen Zeitstempel an den Kennzeichnungswert an, bevor er den Kennzeichnungswert
an den Datenreduktionsprozessor 107 über Verbindung 106 weiter
gibt. Der Datenreduktionsprozessor identifiziert bestimmte Kennzeichnungspunkte
als solche, die zusätzliche
Verarbeitung erfordern. Zum Beispiel paart der Datenreduktionsprozessor
Funktionseintrag und Austrittskennzeichnungswerte so zusammen, dass
der Unterschied der Zeitstempel berechnet werden kann, um die Menge
der Zeit zu bestimmen, die während
der Ausführung
der entsprechenden Funktion verbracht wird. Der Datenreduktionsprozessor
bereitet dann einen Bericht vor, der eine Liste von Kennzeichnungswerten
und ihren entsprechenden Zeitstempeln, eine Liste von ausgeführten Funktionen,
die durch Kennzeichnungswerte, zusammen mit "Leistungs"-Statistiken
identifiziert werden, und eine komprimierte Liste von ausgeführten Kennzeichnungswerten,
um ihre Ausführung
anzuzeigen, (z. B. ein "Bewältigungsplan") beinhalten kann.
Der Bericht kann auch andere Informationen enthalten. Der Datenreduktionsprozessor
leitet diesen Bericht an einen Arbeitsplatz weiter, der den Bericht
einer grafischen Benutzeroberfläche
("GUI") 108 bereitstellt.
Die GUI 108 identifiziert die Kennzeichnungspunkte, die den
Kennzeichnungswerten entsprechen, welche in dem Bericht vom Datenreduktionsprozessor
gefunden wurden mit Hilfe der in der IDB 109 gespeicherten
Daten. Die GUI 108 erstellt dann einige von mehreren Berichten,
die neben der Identifizierung der Kennzeichnungspunkte zusätzliche
Informationen enthalten können, um
den Verlauf der Ausführung
zu zeigen. Zusätzliche
Information, die häufig
an jeden berichteten Kennzeichnungspunkt angefügt wird, enthält den Namen
des Quellcodemoduls, von welchem aus die Kennzeichnungsanweisung
ausgefordert worden ist, die Zeilennummern für den Beginn und das Ende der
Funktion, die die Kennzeichnungszuweisungsanweisung beinhaltet,
und andere Informationen, die die Art des Kennzeichnungspunktes
identifizieren. Ein Softwareentwickler überwacht den Ausführungsverfolgungsbericht über die GUI,
um festzustellen, ob das Computerprogramm innerhalb von erwarteten
Parametern arbeitet.
-
Um
ein Computerprogramm dazu zu bringen, während der Ausführung Kennzeichnungswerte
auszugeben, muss das Computerprogramm zuerst mit Kennzeichnungszuweisungsanweisungen
ausgestattet werden. Ein Instrumentierer fügt typischerweise Kennzeichnungszuweisungsanweisungen
in das Quellcodemodul eines Computerprogramms, während dem Instrumentierungsarbeitsgang
ein, der stattfindet, bevor die Quellcodemodule kompiliert werden.
Wenn eine Kennzeichnung nach dem Wertschema verwendet wird, besitzt
die Kennzeichnungszuweisungsanweisung normalerweise eine einfache
Form, wie z. B. "AMC_control_port
= 0x12345678", bei
der der überwachten
Kennzeichnungsvariable "AMC_control_port" ein eindeutiger
Kennzeichnungswert "0x12345678" zugewiesen wird. 2A zeigt
ein exemplarisches Kennzeichnungswertformat. In diesem Beispiel
ist der Wert eine 32 Bit-Zahl. Während
dem Instrumentierungsarbeitsgang erfasst der Instrumentierer passende
Informationen über
die Stelle von jedem der einge fügten
Kennzeichen, die anschließend
dafür verwendet
werden kann, um das Verhalten des Computerprogramms während der
Ausführung
zu deuten. Wie oben beschrieben, überwacht ein Prüfer die
Adresse, an welche die Kennzeichnungsvariable geschrieben wird.
Zum Beispiel, wenn ein bestimmtes Kennzeichen den Eintritt in eine
Funktion mit dem Namen "read_data" darstellt, dann
kann ein Softwareentwickler, wenn während der Laufzeit das Computerprogramm die
durch dieses Kennzeichen zugewiesenen bestimmten Kennzeichnungswerte
ausgibt, folgern, dass das Computerprogramm die Anweisung beim Eintritt
der Funktion "read_data" ausgeführt hat.
-
In üblichen
Instrumentierungsschemata werden die Quellcodemodule, die das Computerprogramm
repräsentieren,
erst durch einen Kompilierervorprozessor vorverarbeitet. Der Vorprozessor
erweitert Makros, entfernt Kommentare und erweitert Aufnahmedateien.
Der Instrumentierer nimmt dann diese vorverarbeiteten Quellcodemodule
und fügt
die Kennzeichnungszuweisungsanweisungen hinzu. Der Kompilierer erzeugt
Objektcode aus den instrumentierten Quellcodemodulen und ein Verknüpfer kombiniert
dann den Objektcode, um ausführbaren
Code zu bilden.
-
Wenn
alle Quellcodemodule eines Computerprogramms zur gleichen Zeit instrumentiert
werden, kann ein Instrumentierer jedem Kennzeichnungspunkt einen
eindeutigen Kennzeichnungswert zuweisen. Allerdings, wenn die verschiedenen
Quellcodemodule zu unterschiedlichen Zeiten (z. B. durch unterschiedliche Softwareentwickler)
instrumentiert und kompiliert werden, dann tritt ein Problem auf.
Insbesondere kann der Instrumentierer zwei unterschiedlichen Kennzeichnungspunkten
den gleichen Kennzeichnungswert zuweisen. Die Folge ist, wenn ein
Computerprogramm diese Kennzeichnungswerte ausgibt, kann ein Softwareentwickler Schwierigkeiten
haben, dem Verlauf der Ausführung
zu folgen, da dieser einen Kennzeichnungspunkt nicht eindeutig identifiziert.
-
Tabelle
3A zeigt das instrumentierte Quellcodemodul 1, das vorher in Tabelle
2 gezeigt wurde, und Tabelle 3B zeigt das instrumentierte Quellcodemodul
2. Beide Quellcodemodule wurden ohne Berücksichtigung der Kennzeichnungswerte,
die dem anderen zugewiesen wurden, instrumentiert, wie es aufgrund
von einer Instrumentierung zu verschiedenen Zeitabschnitten auftreten
kann. Folglich, wenn ein Computerprogramm, das diese beiden Quellcodemodule
enthält,
z. B. ein Kennzeichen mit dem Wert "0" während der
Ausführung
ausgibt, wird der Softwareentwickler nicht wissen, ob das Programm
den Aufruf der function_1 (Zeile 8) des Quellcodemoduls 1 ausgeführt hat
oder ob das Pro gramm die "if"-Anweisung (Zeile
6) des Quellcodemoduls 2 ausgeführt
hat. In der Tat teilt Quellcodemodul 1 zehn Kennzeichnungswerte
mit dem Quellcodemodul 2. Folglich, kein Kennzeichen, das während dem
Ausführen
des Computerprogramms ausgegeben wurde, kann als aus dem Quellcodemodul
1 entspringend, bestätigt
werden und nur die Kennzeichen in Quellcodemodul 2 nach dem zehnten
Kennzeichen würden
eindeutige Werte ausgeben.
-
-
-
Einige
Instrumentierer bieten Methoden an, um auf IDBs zu verweisen, die
für Quellcodemodule
von früheren
Versionen des Computerprogramms erzeugt wurden, die auch für die jetzt
zu produzierende Version des Computerprogramms benutzt werden. Wenn
ein Quellcodemodul sich seit der vorherigen Version des Computerprogramms
nicht verändert
hat, dann verläuft
der Instrumentierungsprozess effizienter, da keine Re-Instrumentierung
jener Quellcodemodule, die sich nicht verändert haben, vorgenommen wird.
Allerdings muss darauf Acht gegeben werden, zu gewährleisten,
dass die Kennzeichnungswerte, die im Instrumentierungsablauf für die neuere
Version des Computerprogramms zugewiesen werden, nicht mit den Kennzeichnungswerten,
die in einer früheren
Version des Computerprogramms zugewiesen wurden, in Konflikt geraten, die
auch in der neuen Version des Computerprogramms benutzt werden.
-
Einige
herkömmliche
Systeme unterstützen
diese effizientere stufenweise Instrumentierungsarbeitsweise, die
oben vorgeschlagen wurde. Wenn nur ein Quellcodemodul sich geändert hat,
braucht bei dieser Vorgehensweise nur dieses Quellcodemodul re-instrumentiert
und kompiliert zu werden, bevor man das komplette Programm wieder
verknüpft.
Allerdings leiden diese konventionellen Systeme an einer Beschränkung, die
es erforderlich macht, dass der Softwareentwickler den Instrumentierer
auf die Gruppe von IDBs lenkt, die alle bis zu diesem Zeitpunkt
im Entwicklungsdurchlauf zugewiesenen Kennzeichnungswerte enthält. Für zentralisierte
Kompilierungsumgebungen, wo ein Konfigurationsmanager die Kontrolle
der Quellcodemodule zusammen mit den Softwareentwicklern koordiniert,
sollte dieses Erfordernis nicht zu einschränkend sein. Softwareentwickler
in solch zentralisierten Umgebungen profitieren wahrscheinlich von
einer kontrollierten Methode zum Lokalisieren bestimmter Versionen
der Quellcodemodule, Objektcodedateien und IDBs, also ist das Identifizieren
von IDBs von früheren
Versionen des Computerprogramms relativ einfach. Jedoch bricht dieser Mechanismus
in großen
dezentralisierten Umgebungen zusammen, die für viele moderne Softwareentwicklungsprojekte
typisch sind. Ungleiche Gruppen von Softwareentwicklern können jeder
für sich
verantwortlich für
den Aufbau von dynamisch verknüpften
Libraries oder kompilierten Libraries aus, von vielen Projekten
benutzten Objektcode oder für
unterschiedliche Gruppen von Softwareentwicklern aus demselben Projekt
sein. Mit keiner zentralisierten Kontrolle über die Erzeugung von neuen
Versionen des Computerprogramms kann jeder dieser Libraries unabhängig voneinander
instrumentiert werden, was zu Konflikten bei Kennzeichnungswerten,
die durch den Instrumentierer zugewiesen werden, führt. Während der
Laufzeit verwirren diese widersprüchlichen Kennzeichnungswerte
den Analyseprozess, weil ein identischer Kennzeichnungswert auf
mehrere Quellcodemodule hinweisen kann, und das Überwachungswerkzeug des Computerprogramms
nicht weiß,
welcher Kennzeichnungswert welchem Quellcodemodul entspricht.
-
Darüber hinaus
unterstützt
das zentralisierte Kompilierungsmodell die parallele Erzeugung von
Versionen des Computerprogramms nicht. Moderne Softwareprojekte
sind oftmals so groß,
dass es impraktikabel ist, das komplette Computerprogramm auf einer
Maschine zu kompilieren und zu verknüpfen. In einer vernetzten Umgebung
kann der Kompilierungsprozess auf viele Maschinen verteilt werden,
so dass diese die Quellcodemodule parallel kompilieren können und
so die Kompilierung in einem Bruchteil der Zeit abschließen, typischerweise
1/n von der Zeit, wobei n die Anzahl der angebundenen Maschinen
ist. Auf diese Weise, wenn eine Version des Computerprogramms aus
1000 Quellcodemodulen besteht, wobei 100 der Quellcodemodule auf
zehn Maschinen kompiliert werden, erfordert der Entwickler, dass
die Instrumentierung auch auf jeder dieser zehn Maschinen stattfindet,
wo die Kompilierung erfolgt. Wenn das Auflösen der Kennzeichnungswerte nicht
regelgerecht unter diesen Maschinen koordiniert ist, wird das ent stehende
Computerprogramm unzählige Konflikte
in den Kennzeichnungswerten enthalten, die in die verschiedenen
Quellcodemodule eingefügt
worden sind.
-
Das
Dokument EP-286361 zeigt eine Softwareinstrumentierungsmethode,
in der jedem Programmmodul ein eindeutiger Kennzeichnungswert zugewiesen
wird, und nummerierte Instrumentierungskennzeichen in jeden Codeblock
des Moduls eingefügt
werden.
-
Zusammenfassung
der Erfindung
-
Die
Erfindung wird durch die unabhängigen
Ansprüche
definiert.
-
Eine
Ausführungsform
der vorliegenden Erfindung zeigt ein Verfahren und ein System zur
Instrumentierung eines Computerprogramms mit einer Vielzahl von
Quellcodemodulen mit Kennzeichnungszuweisungsanweisungen. Ein eindeutiger
Wert für
die Kennzeichnungsvariable in jeder Kennzeichnungszuweisungsanweisung
resultiert aus dem Zuweisen eines Wertes, gleich einer Kombination
eines Versatzwertes und eines Basiswertes, zu der Kennzeichnungsvariablen.
Ein Versatzkennzeichnungsinstrumentierer der vorliegenden Erfindung
erzeugt eine eindeutige Basisvariable für jedes Quellcodemodul, das
mit Kennzeichnungszuweisungsanweisungen instrumentiert werden soll.
Der Versatzkennzeichnungsinstrumentierer überprüft dann das Quellcodemodul
und fügt
Kennzeichnungszuweisungsanweisungen an Instrumentierungspunkten
ein. Die eingefügten
Kennzeichnungszuweisungsanweisungen setzen die Kennzeichnungsvariable
gleich der Kombination eines Versatzwertes und der generierten Basisvariablen
für dieses
Quellcodemodul. Der Versatzkennzeichnungsinstrumentierer erzeugt
einen eindeutigen Versatzwert für
jede Kennzeichnungszuweisungsanweisung in einem Quellcodemodul.
Ein Kompilierer erzeugt aus den instrumentierten Quellcodemodulen
Objektcodemodule. Ein Basiswertauflöser erzeugt Quellcodeanweisungen,
die einen eindeutigen Wert für
jede erzeugte Basisvariable zuweisen, so dass jede Kombination von
generierten Versatzwerten und Werten regenerierter Basisvariablen
jeden Instrumentierungspunkt eindeutig identifiziert. Ein Kompilierer
kompiliert die generierten Quellcodeanweisungen. Ein Verknüpfer verknüpft die
kompilierten instrumentierten Quellcodemodule mit den kompilierten
erzeugten Quellcodeanweisungen, um ein verknüpftes Programm zu bilden, so
dass während dem
Ausführen
des verknüpften
Programms die Kennzeichnungsvariable auf einen eindeutigen Wert
an jedem lnstrumentierungspunkt gesetzt wird. Da die Bestimmung
des Basiswertes für
jede erzeugte Basisvariable bis zum Verknüpfungszeitpunkt verzögert wird,
kann der Basiswertauflöser
gewährleisten,
dass jede Kennzeichnungszuweisungsanweisung in jedem Modul die Kennzeichnungsvariable
auf einen Wert setzt, der für
alle verknüpften
Module eindeutig ist.
-
Kurze Beschreibung
der Figuren
-
1 zeigt
ein typisches Überwachungssystem,
das in Zusammenhang mit einem instrumentierten Kennzeichnungsschema
für die
Softwareüberprüfung und
-fehlerbeseitigung steht.
-
2A zeigt
einen herkömmlichen
Kennzeichnungswert, der in eine Instrumentierungsdatenbank eingefügt wird.
-
2B zeigt
den neuen Kennzeichnungswert, der durch eine beispielhafte Ausführungsform
der vorliegenden Erfindung vorgesehen ist und besteht aus einer
Kennzeichnungsbasisvariablen plus einem Kennzeichnungsversatzwert.
-
3 stellt
repräsentative
Instrumentierungsdatenbanken dar, die mit einer Ausführungsform
der vorliegenden Erfindung in Zusammenhang stehen.
-
4 liefert
ein Ablaufdiagramm für
die Instrumentierung von Quellcodemodulen gemäß einer Ausführungsform
der vorliegenden Erfindung.
-
5A und
B liefern ein Ablaufdiagramm für
das Auflösungsverfahren
für den
Kennzeichnungsbasisvariablenwert in Zusammenhang mit einer Ausführungsform
der vorliegenden Erfindung.
-
6 zeigt
ein Beispielsinstrumentierungsverfahren gemäß einer Ausführungsform
der vorliegenden Erfindung.
-
7 zeigt
ein Beispielsinstrumentierungsverfahren gemäß einer Ausführungsform
der vorliegenden Erfindung, in welcher die Quellcodemodule auf mehr
als einen Computer instrumentiert werden.
-
8 zeigt
eine alternative Ausführungsform
für die
IDBs, die in der vorliegenden Erfindung verwendet werden.
-
9 zeigt
eine alternative Ausführungsform
für den
Kennzeichnungswert, der von der der vorliegenden Erfindung bereitgestellt
wird, und der aus einer Kennzeichnungsbasisvariablen verknüpft mit
einem Kennzeichnungsversatzwert besteht.
-
Detaillierte
Beschreibung der Erfindung
-
Eine
beispielhafte Ausführungsform
der vorliegenden Erfindung liefert eine Instrumentierungskennzeichnungsmethode
und Vorrichtung, welche eine parallele Instrumentierung durch die
Kennzeichnung auf einer Vielzahl von Computern unterstützen. Ausführungsformen
der vorliegenden Erfindung liefern einen Versatzkennzeichnungsinstrumentierer,
der eine Instrumentierung von ein oder mehreren geänderten
Quellcodemodulen erlaubt, ohne Gefahr zu laufen, dass ein Kennzeichnungswert
sich mit vorher instrumentierten Quellcodemodulen oder mit Quellcodemodulen,
die auf unterschiedlichen Computersystemen instrumentiert wurden,
widerspricht. Eine Modifikation herkömmlicher Kennzeichnungszuweisungsanweisung
ermöglicht
diese erweiterten Instrumentierungsfähigkeiten.
-
Der
Versatzkennzeichnungsinstrumentierer gewährleistet, dass jeder Kennzeichnungspunkt
einen eindeutigen Kennzeichnungswert besitzen wird, durch die Verzögerung der
eigentlichen Zuweisung des Kennzeichnungswertes zu Kennzeichnungspunkten
bis zur Ausführung
des instrumentierten Programms. Der Versatzkennzeichnungsinstrumentierer
verwendet Kennzeichnungszuweisungsanweisungen, die eine Kennzeichnungsbasisvariable
und einen Kennzeichnungsversatzwert kombinieren, um einen Kennzeichnungswert für eine Kennzeichnungsvariable
zu bilden. Jedes Quellcodemodul hat eine einmalige Kennzeichnungsbasisvariable,
und jeder Kennzeichnungspunkt hat einen Kennzeichnungsversatzwert,
der innerhalb des Quellcodemoduls eindeutig ist. Zum Zeitpunkt der
Instrumentierung fügt
der Versatzkennzeichnungsinstrumentierer Kennzeichnungszuweisungsanweisungen
ein, die einen konstanten Kennzeichnungsversatzwert mit der Basisvariablen
für das
Quellcodemodul verbinden. Zum Verknüpfungszeit punkt erzeugt ein
Kennzeichnungsbasiswertauflöser
einen eindeutigen Basiswert für
jede Kennzeichnungsbasisvariable so, dass jede Kennzeichnungszuweisungsanweisung
einen eindeutigen Kennzeichnungswert erzeugt. Der Kennzeichnungsbasiswertauflöser führt dann
die Initialisierung jeder Kennzeichnungsbasisvariablen auf ihrem
eindeutigen Wert aus. Während
der Laufzeit, wenn die Kennzeichnungszuweisungsanweisung ausgeführt wird,
wird der Wert, der der Kennzeichnungsbasisvariablen des Quellcodemoduls
zugewiesen ist, mit dem konstanten Kennzeichnungsversatzwert, der
der Kennzeichnungszuweisungsanweisung zugewiesen ist, verbunden,
um einen Kennzeichnungswert zu bilden, der für alle Module einmalig ist.
Die Kennzeichnungsvariable wird dann gleich dem einmaligen Kennzeichnungswert
gesetzt. Auf diese Weise können
Quellcodemodule, die zu unterschiedlichen Zeiten instrumentiert
werden, ohne Widersprüche
in den Kennzeichnungswerten zusammen verknüpft werden. Diese Kennzeichnungszuweisungsanweisungen
werden als zum Verknüpfungszeitpunkt "verschiebbar" bezeichnet, weil
der Bereich der Kennzeichnungswerte, der einer bestimmten Anweisung
zugewiesen ist, sich zum Verknüpfungszeitpunkt ändern kann.
-
Die
eindeutigen Kennzeichnungswerte sind eine Kombination eines Kennzeichnungsversatzwertes und
dem Wert der Kennzeichnungsbasisvariablen. In einer beispielhaften
Ausführungsform
beginnt der Kennzeichnungsversatzwert für jedes Quellcodemodul mit
einem Wert von "0". Der Versatzkennzeichnungsinstrumentierer
erhöht
dann den Kennzeichnungsversatzwert um 1, jedes Mal, wenn der Versatzkennzeichnungsinstrumentierer
eine neue Kennzeichnungszuweisungsanweisung in das Quellcodemodul
einfügt.
Auf diese Weise würde
ein Quellcodemodul, das 10 Kennzeichnungszuweisungsanweisungen enthält, einen
Bereich von Kennzeichnungsversatzwerten von 0 bis 9 und einen nächsten Kennzeichnungsversatzwert
von 10 haben. Der nächste
Kennzeichnungsversatzwert weist auf den Kennzeichnungsversatzwert
hin, der benutzt würde, wenn
eine andere Kennzeichnungszuweisungsanweisung in das Quellcodemodul
eingefügt
werden sollte. Jedes Quellcodemodul hat eine eindeutige Basisvariable.
In einer beispielhaften Ausführungsform
ist der Wert für
die Kennzeichnungsbasisvariable des ersten Moduls, wie sie zum Verknüpfungszeitpunkt
festgelegt wird, 0. Der Wert für
die Kennzeichnungsbasisvariable des zweiten Moduls ist der nächste Kennreichnungsversatzwert
von dem ersten Modul plus dem Kennzeichnungsbasiswert des ersten
Moduls. Zum Beispiel, wenn der nächste
Kennzeichnungsversatzwert des Moduls 10 ist, dann würde der
Kennzeichnungsbasiswert für
das zweite Modul einen Wert von 10 (d. h. 10 + 0) haben. Der Wert
für die
Kennzeichnungsbasisvariable des dritten Moduls ist der nächste Kennzeichnungsversatzwert
des zweiten Moduls plus den Kennzeichnungsbasiswert des zweiten
Moduls. Zum Beispiel, wenn der nächste
Kennzeichnungsversatzwert des zweiten Moduls 12 ist, dann ist der
Kennzeichnungsbasiswert für
das dritte Modul 22 (d. h. 12 + 10). Der Kennzeichnungsbasiswert für irgendein
folgendes Modul ist gleich der Summe der nächsten Kennzeichnungsversatzwerte
für jegliche vorhergehende
Module, oder gleich der Summe des Basiswertes des vorhergehenden
Moduls und des nächsten
Kennzeichnungsversatzwertes. Auf diese Weise wird der entstehende
Kennzeichnungswert eindeutig für jede
Kennzeichnungszuweisungsanweisung, wenn der Kennzeichnungsversatzwert
zu dem Wert der Kennzeichnungsbasisvariablen addiert wird. 2B zeigt
die Erzeugung eines zum Verknüpfungszeitpunkt
verschiebbaren Kennzeichnungswertes.
-
3 zeigt
Beispiel-IDBs, die im Zusammenhang mit einer beispielhaften Ausführungsform
der vorliegenden Erfindung stehen. Diese IDBs beinhalten die Kennzeichnungswerte
und andere Informationen, die für
die Instrumentierung benötigt
werden. Jede IDB kann einem Quellcodemodul entsprechen. IDB1 301 enthält Daten,
die die Kennzeichnungspunkte 0 bis 9 für ein instrumentiertes Quellcodemodul
darstellen. Diese Daten beinhalten den Kennzeichnungsversatzwert
und die Lage von jedem Kennzeichnungspunkt. IDB1 hat eine Kennzeichnungsbasisvariable,
dessen Wert, der durch den Kennzeichnungsbasiswertauflöser zum
Verknüpfungszeitpunkt
erstellt wird, 0 sein wird und hat einen nächsten Kennzeichnungsversatzwert
von 10. Die IDB enthält
den Namen der Kennzeichnungsbasisvariablen, so dass ein Kennzeichnungsbasiswertauflöser die IDB,
die mit einer gegebenen Kennzeichnungsbasisvariablen in Verbindung
steht, ausfindig machen kann, und die Kennzeichnungsbasisvariable
dient zum Zeigen, dass die IDB von einer Art ist, die zum Verknüpfungszeitpunkt
wieder beschreibbare Kennzeichen enthält. Der Versatzkennzeichnungsinstrumentierer
speichert die Daten für
die Kennzeichnungspunkte und den nächsten Kennzeichnungsversatzwert.
Auf die gleiche Weise enthält
IDB2 302 Daten, die 12 Kennzeichnungspunkten und einen
nächsten
Kennzeichnungsversatzwert von 12 entsprechen. Da IDB1 einen nächsten Kennzeichnungsversatzwert
von 10 hat, ist der Wert der Kennzeichnungsbasisvariablen, die schließlich von
dem Kennzeichnungsbasiswertauflöser
IDB2 zugewiesen wird, 10. Gleichermaßen ist der Kennzeichnungsbasiswert
von IDB3 303, 22, weil der nächste Kennzeichnungsversatzwert
von IDB1 10 ist und der nächste
Kennzeichnungsversatzwert von IDB2 12 ist (z. B. eindeutige Werte
von 0 bis 21 wurden für
IDB1 und IDB2 schon gewählt).
Natürlich
sollen die Kennzeichnungsbasiswerte, wie vorher erwähnt, nicht
erzeugt werden, bis die entsprechenden Objektmodule verknüpft werden,
um einen ausführbaren
Code zu bilden, und die eindeutigen Kennzeichnungswerte selber sollen
sogar nicht erzeugt werden bis zur Ausführung von jeder Kennzeichnungszuweisungsanweisung.
Zusätzlich
kann in einigen Ausführungsformen
der Erfindung mehr als eine Kennzeichnungsbasisvariable in einer
gegebenen IDB gespeichert werden, wobei jede Kennzeichnungsbasisvariable
auf einen unterschiedlichen Typen von Kennzeichnungsanweisung hinweist.
Allerdings ist ein solches Kennzeichnungsschema eine bloße Erweiterung
des Schemas, das hier beschrieben wird.
-
Tabellen
4A, 4B und 4C zeigen die instrumentierten Quellcodemodule 1, 2 und
3, die jeweils der IDB1, IDB2 und IDB3 von 3 entsprechen.
Wie oben im Pseudocode, der dem instrumentierten Quellcode in Tabelle
4A entspricht, gezeigt ist, hat der Versatzkennzeichnungsinstrumentierer
eine Vereinbarungsanweisung für
die Kennzeichnungsvariable eingefügt, welche in diesem Beispiel
ein externer flüchtiger
vorzeichenloser langer Variablennamen "AMC_control_port" (Zeile 3) ist. Der Versatzkennzeichnungsinstrumentierer
hat auch eine Vereinbarung für "IDB1_base" (Zeile 4) eingefügt, wobei
die Kennzeichnungsbasisvariable mit IDB1 und Quellcodemodul 1 zusammenhängt. Der
Versatzkennzeichnungsinstrumentierer überprüft dann das Quellcodemodul
und fügt
Kennzeichnungszuweisungsanweisungen an Punkten von Interesse ein,
wie z. B. bei Zeile 9. Diese bestimmte Kennzeichnungszuweisungsanweisung
würde den
Softwareentwickler auf die Ausführung des
Aufrufes der function_1 (Zeile 10) hinweisen. Die Kennzeichnungszuweisungsanweisung,
die aus einer Kennzeichnungsbasisvariablen plus einem Kennzeichnungsversatzwert
besteht, und durch den Versatzkennzeichnungsinstrumentierer eingefügt wurde,
kann auch eine ähnliche
Form zu "AMC_control_port
= Kennzeichnungsbasisvariable + 0x12345678" besitzen. Der Versatzkennzeichnungsinstrumentierer
setzt die Kennzeichnungspunkte von Interesse innerhalb des Quellcodemoduls
bis zum Erreichen seines Endes weiter. Wie in Tabelle 4A gezeigt,
ereignet sich der letzte Kennzeichnungspunkt innerhalb von Quellcodemodul
1 ganz am Ende vom Quellcodemodul und ist durch eine Kennzeichnungszuweisungsanweisung
gebildet, die einen Kennzeichnungswert von IDB1_base plus einem
Kennzeichnungsversatzwert von 9 (Zeile 27) besitzt. Der Versatzkennzeichnungsinstrumentierer
fügt auch
Daten auf der vorher gezeigten Art und Weise ein, die sich auf diese
Kennzeichnungszuweisungsanweisungen in IDB1 beziehen.
-
Gleichermaßen fügt das instrumentierte
Quellcodemodul 2, wie in Tabelle 4B gezeigt, auch Vereinbarungsanweisungen
für die
Kennzeichnungsvariable "AMC_control_port" (Zeile 3) ein und
eine Vereinbarung für
die Variable "IDB2_base" (Zeile 4), welche
der Kennzeichnungsbasisvariable für das instrumentierte Quellcodemodul
2 entspricht. Der Versatzkennzeichnungsinstrumentierer überprüft dann
Quellcodemodul 2, indem Kennzeichnungszuweisungsanweisungen in das
Quellcodemodul an mehreren Punkten von Interesse eingefügt werden.
Zum Beispiel weist die Kennzeichnungszuweisungsanweisung, die durch "AMC_control_port
= IDB2_base + 1" (Zeile
11) dargestellt wird, wenn ausgeführt, darauf hin, dass der "then"-Bereich (Zeile 9)
der "if"-Anweisung, wo "A ≤ 12" (Zeile 8) ausgeführt worden
ist. Genauer gesagt, weist die Lage dieser Kennzeichnungszuweisungsanweisung
auch darauf hin, dass der Variablen "A" der
Wert von "A – 10" (Zeile 12) zugewiesen
worden ist. Der letzte Kennzeichnungspunkt in diesem Quellcodemodul
ist "AMC_control_port
= IDB2_base + 11" (Zeile
22). Der Versatzkennzeichnungsinstrumentierer wird in IDB2 Daten
speichern, die darauf hinweisen, dass Quellcodemodul 2 Kennzeichnungszuweisungsanweisungen
von 0 bis 11 und einen nächsten
Kennzeichnungsversatzwert von 12 besitzt.
-
Zuletzt überprüft der Versatzkennzeichnungsinstrumentierer
Quellcodemodul 3, wie in Tabelle 4C gezeigt. Ähnlich wie in den vorhergehenden
zwei Quellcodemodulen fügt
der Versatzkennzeichnungsinstrumentierer die Vereinbarung für die "AMC_control_port"-Variable (Zeile 3) ein. Der Versatzkennzeichnungsinstrumentierer
fügt auch
eine Vereinbarung für
die Kennzeichnungsbasisvariable "IDB3_base" (Zeile 4) ein. Der Versatzkennzeichnungsinstrumentierer
fährt dann
fort, Punkte von Interesse innerhalb des Quellcodemoduls durch die
Verwendung von Kennzeichnungszuweisungsanweisungen zu kennzeichnen.
Die letzte Kennzeichnungszuweisungsanweisung "AMC_control_port = IDB3_base + 6" (Zeile 10) tritt
am Ende des Quellcodemoduls 3 ein.
-
-
-
-
4 zeigt
ein Ablaufdiagramm für
die instrumentierung von Quellcodemodulen gemäß einer beispielhaften Ausführungsform
der vorliegenden Erfindung. Der Versatzkennzeichnungsinstrumentierer
wählt jedes Quellcodemodul
aus, fügt
die vereinbarenden Anweisungen und Kennzeichnungszuweisungsanweisungen
in das ausgewählte
Modul ein und speichert die Daten in der IDB. Zuerst stellt der
Versatzkennzeichnungsinstrumentierer fest, ob noch mehr Quellcodemodule
eine Instrumentierung erfordern (Schritt 401). Wenn keine Quellcodemodule
mehr zum Instrumentieren übrig
sind, bricht der Versatzkennzeichnungsinstrumentierer ab. Allerdings,
wenn es noch Quellcodemodule, die eine Instrumentierung benötigen, gibt,
wählt der
Versatzkennzeichnungsinstrumentierer das nächste Quellcodemodul, das zu
Instrumentieren ist (Schritt 402) aus. Der Versatzkennzeichnungsinstrumentierer
setzt dann den Kennzeichnungsversatzwert auf 0 zurück (Schritt 403). Der
Versatzkennzeichnungsinstrumentierer öffnet eine neue Instrumentierungsdatenbank
und wählt
einen Namen für
diese neue IDB aus (Schritt 404). Der Versatzkennzeichnungsinstrumentierer
verwendet diesen ausgewählten
Namen auch, um einen Namen für
eine neue Kennzeichnungsbasisvariable zu erzeugen, die in das Quellcodemodul,
das zu instrumentieren ist, einzufügen ist. Der Versatzkennzeichnungsinstrumentierer
beginnt dann die Überprüfung des
Quellcodemoduls (Schritte 405–411). Der Versatzkennzeichnungsinstrumentierer
fügt eine
Vereinbarung für
die Kennzeichnungsvariable in das Quellcodemodul ein (Schritt 405)
und fügt dann
eine Vereinbarung für
die Kennzeichnungsbasisvariable von diesem Quellcodemodul ein (Schritt 406). Diese
Vereinbarungen werden denen ähneln,
die in Tabelle 4A, 4B und 4C für
AMC_control_port, IDB1_base, IDB2_base und IDB3_base gezeigt sind.
Der Versatzkennzeichnungsinstrumentierer bildet dann eine Schleife zum
Einfügen
der Kennzeichnungszuweisungsanweisungen (Schritte 407–411).
Der Versatzkennzeichnungsinstrumentierer stellt fest, ob im Quellcodemodul
Kennzeichnungspunkte übrig
sind (Schritt 407). Wenn Kennzeich nungspunkte übrig sind,
lokalisiert der Versatzkennzeichnungsinstrumentierer die nächsten Kennzeichnungspunkte
innerhalb des Quellcodemoduls (Schritt 408). Nach der Lokalisierung
des nächsten
Kennzeichnungspunktes fügt
der Versatzkennzeichnungsinstrumentierer eine Kennzeichnungszuweisungsanweisung ein
(Schritt 409). Diese Kennzeichnungszuweisungsanweisung
hat typischerweise die Form "AMC_control_port
= Kennzeichnungsbasisvariable plus den aktuellen Kennzeichnungsversatzwert", wie vorher erörtert. Nach
diesem Schritt wird dann der Kennzeichnungsversatzwert um eins erhöht (Schritt 410).
Zusätzlich
wird ein Kennzeichnungseintrag in der dazugehörigen IDB gebildet (Schritt 411).
Der Kennzeichnungseintrag enthält
typischerweise den Kennzeichnungsversatzwert für diesen Kennzeichnungspunkt,
Informationen über
den Quellcode an dem Kennzeichnungspunkt und die Einstellung des
nächsten
Kennzeichnungsversatzwertes auf den erhöhten Versatz. Der Versatzkennzeichnungsinstrumentierer
geht dann zurück
(zu Schritt 407), um den nächsten Kennzeichnungspunkt
zu verarbeiten. Nach der Instrumentierung des Quellcodemoduls wird
die IDB für
dieses Quellcodemodul geschlossen (Schritt 412). Der Versatzkennzeichnungsinstrumentierer
geht dann zurück
(zu Schritt 401), um festzustellen, ob andere Quellcodemodule
instrumentiert werden müssen.
-
Wie
vorher erwähnt,
werden den Kennzeichnungsbasisvariablen ihre Werte nicht während dem
Instrumentierungsablauf oder während
dem Kompilieren der instrumentierten Quellcodemodule zugewiesen.
Da der Wert der Kennzeichnungsbasisvariablen zum Verknüpfungszeitpunkt
zugewiesen wird, muss nur der Verknüpfungsprozess zentralisiert
werden. Diese Methode unterstützt
deshalb eine typische parallele Kompilierung von neuen Versionen
des Computerprogramms. Ähnlich
zum Verknüpfen
eines ausführbaren
Computerprogramms enthält
ein Instrumentierungsverknüpfer,
gemäß einer
Ausführungsform,
einen Kennzeichnungsbasiswertauflöser, der den Wert, der für jede Kennzeichnungsbasisvariable
gebraucht wird, auflöst
und den Bereich der Kennzeichnungswerte, der von jeder Objektcodedatei
benötigt
wird, auflöst,
so dass keine Konflikte unter den endgültigen Kennzeichnungswerten
auftreten. Diese Methode unterstützt
die Instrumentierung von riesigen Computerprogrammen, die tausende
von Quellcodemodulen einbinden, die in parallel kompiliert werden
können,
um dabei riesige Mengen an Zeit zu sparen. Wenn die Verknüpfung der
Objektcodedateien auf einem einzelnen Computer stattfindet, so auch
der Instrumentierungsverknüpfungsprozess,
der die eigentlichen Kennzeichnungswerte abschließt, die
zugewiesen werden, während
das Computerprogramm ausgeführt wird.
Deshalb haben die Variablen IDB1_base, IDB2_base und IDB3_base,
die oben in Bezug auf 3 und Tabellen 4A, 4B und 4C
erörtert
wurden, keinen Wert festgelegt, vor der Verknüpfung der Objektdateien, die das
Computerprogramm darstellen. Wie in Tabelle 5 gezeigt, bereitet
der Instrumentierungsverknüpfer
Quellcodeanweisungen für
die aufgelösten
Kennzeichnungsbasisvariablen vor, die dann kompiliert werden und
mit den Objektcodedateien für
die instrumentierten Quellcodemodule verknüpft werden. Wie in Tabelle
5 gezeigt, bereitet der Instrumentierungsverknüpfer Quellcode vor, der die
Kennzeichnungsbasisvariable für
IDB1, IDB1_base auf einen Wert von 0 setzt (Zeile 3). Gleichermaßen wird
die Kennzeichnungsbasisvariable für IDB2 (IDB2_base) einen Wert
von 10 haben (Zeile 5), und die Kennzeichnungsbasisvariable für IDB3 (IDB3_base)
wird einen Wert von 22 haben (Zeile 7).
-
-
Der
Kennzeichnungsbasiswertauflöser
kann bestimmte Kennzeichnungswertbereiche vermeiden. Diese Fähigkeit
kann den Instrumentierungsprozess für den Softwareentwickler in
einer Vielzahl von unterschiedlichen Zusammenhängen vereinfachen, von denen
einige unten ausgeführt
werden.
-
Als
erstes kann ein Computerprogramm eine Vielzahl von Quellcodemodulen
enthalten, die sich selten ändern
und Altcode in Form von Quellcodemodulbibliotheken enthalten. (Altcode
beinhaltet Code, der mit Kennzeichnungszuweisungsanweisungen, die
die Kennzeichnungsvariable zu einem konstanten Wert setzen, instrumentiert
wurden und die deshalb nicht kompatibel mit der Verwendung von zum
Verknüpfungszeitpunkt verschiebbaren
Kennzeichnungswerten ist.) Das Instrumentierungsverfahren würde offensichtlich
effizienter sein, wenn der Softwareentwickler solche Quellcodemodule
nur einmal instrumentieren müsste,
solange wie die Module nicht geändert
werden.
-
Als
zweites würde
sich der Softwareentwickler einfach wünschen, einen Bereich von Kennzeichnungswerten
für ein
Quellcodemodul zu reservieren, der nicht unter der Verwendung des
Versatzkennzeichnungsinstrumentierers instrumentiert wird. Zum Beispiel könnte sich
der Softwareentwickler wünschen,
ein besonders fehleranfälliges
Quellcodemodul per Hand zu instrumentieren, und dabei viel mehr
Kennzeichnungszuweisungsanweisungen einfügen als typischerweise durch
einen Versatzkennzeichnungsinstrumentierer eingefügt würden. In
solch einer Situation könnte
der Softwareentwickler einfach den eingefügten Kennzeichnungszuweisungsanweisungen
Werte zuweisen, dann den Kennzeichnungsbasiswertauflöser anweisen,
diesen Bereich von Kennzeichnungswerten zu vermeiden, wenn Kennzeichnungswerte
für andere
Quellcodemodule dieses Computerprogramms aufgelöst werden.
-
Als
drittes könnten
sich einige Quellcodemodule von einer Version von Computerprogramm
zur nächsten
nicht verändert
haben. Diese Quellcodemodule könnten
vorher instrumentiert worden sein, und deren zugehörigen Kennzeichnungswerte
könnten
noch immer eindeutig sein. Deshalb könnte sich der Softwareentwickler
wünschen,
eine effizientere Vorgehensweise zu verfolgen, bei der einfach der
Kennzeichnungsbasiswertauflöser
angewiesen wird, den Bereich von Kennzeichnungswerten, die zu diesem
vorher instrumentierten und aktuell unveränderten Quellcodemodulen zugewiesen
wurden, zu reservieren und neue Kennzeichnungswerte nur für jene Quellcodemodule
zu bestimmen, die sich verändert
haben und in dieser letzten Version des Computerprogramms re-instrumentiert
worden sind.
-
Als
viertes kann das dritte Beispiel oben weiter unterstützt werden,
indem der nächste
Kennzeichnungsversatzwert in einer Version des Computerprogramms
so gesetzt wird, dass zusätzliche
Kennzeichnungszuweisungsanweisungen in einer späteren Version des Computerprogramms
eingefügt
werden können, ohne
eine Wiederberechnung der Kennzeichnungsbasisvariablen zu erfordern.
Zum Beispiel, wie oben in Bezug auf Tabelle 4A erörtert, kann
der nächste
Kennzeichnungsversatzwert für
das instrumentierte Quellcodemodul 1 bis auf 10 heruntergesetzt
werden, um eindeutige Kennzeichnungswerte zu gewährleisten. Allerdings, wenn
der nächste
Kennzeichnungsversatzwert für
das instrumentierte Quellcodemodul 1 auf 12 gesetzt wurde anstatt
auf 10, dann könnten
zwei zusätzliche
Kennzeichnungszuweisungsanweisungen in das Quellcodemodul 1 in einer
späteren
Version des Computerprogramms eingefügt werden, ohne eine Wiederberechnung
von irgendwelchen Basisvariablen (z. B. IDB2_base) zu erfordern,
und dabei noch immer eindeutige Kennzeichnungswerte für das Computerprogramm
gewährleisten.
-
Als
fünftes
können
einige Ausführungsformen
der vorliegenden Erfindung so strukturiert werden, dass während einer
ersten Version des Computerprogramms der Instrumentationsverknüpfer nicht
nur die Kennzeichnungsbasisvariablen für die instrumentierten Quellcodemodule
des Computerprogramms festlegt, sondern auch die eigentlichen Kennzeichnungswerte
für jede
Kennzeichnungszuweisungsanweisung festlegt. (Wie vorher erörtert, wird
der eigentliche Kennzeichnungswert typischerweise während dem
Ausführen
des Computerprogramms bestimmt.) In dieser Ausführungsform speichert der instrumentierungsverknüpfer dann diesen
Bereich der eigentlichen Kennzeichnungswerte, so dass dieser Bereich
in der entsprechenden IDB für jedes
instrumentierte Quellcodemodul gespeichert wird. In dem Instrumentierungsablauf
für eine
spätere
Version des Computerprogramms überprüft der Versatzkennzeichnungsinstrumentierer
jedes instrumentierte Quellcodemodul, um festzustellen, ob sich
das instrumentiere Quellcodemodul seit der vorherigen Version des Computerprogramms
verändert
hat. Wenn sich ein gegebenes Quellcodemodul nicht verändert hat,
dann holt sich der Versatzkennzeichnungsinstrumentierer den Bereich
der eigentlichen Kennzeichnungswerte für das Quellcodemodul und ersetzt
die Kennzeichnungszuweisungsanweisungen der Form "Kennzeichnungsvariable
ist gleich Basisvariable und Kennzeichnungsversatzwert" durch Kennzeichnungszuweisungsanweisungen der
Form "Kennzeichnungsvariable
gleich eigentlicher Kennzeichnungswert". Die Verwendung dieser einfacheren
Kennzeichnungszuweisungsanweisungen für Quellcodemodule, die unverändert sind,
erlaubt es, dass ihre zugehörigen
Bereiche von Kennzeichnungsvariablen während dem Kompilierungsprozess
zugewiesen werden, anstatt während
der Ausführung
des Computerprogramms. Damit diese Ausführungsform regelgerecht arbeitet,
muss der Kennzeichnungsbasiswertauflöser natürlich fähig sein, einen Bereich von
reservierten Kennzeichnungswerten zu empfangen und das Auflösen irgendeiner
Kennzeichnungsbasisvariablen zu vermeiden, so dass sein zugehöriger Bereich
von Kennzeichnungswerten mit den reservierten Kennzeichnungswerten
zusammenfallen wird.
-
5 gibt ein Ablaufdiagramm eines Kennzeichnungsbasisvariablenwertauflösungsverfahrens
dar für eine
Ausführungsform
der vorliegenden Erfindung. Dieses Verfahren wählt jedes Modul aus und weist
der Kennzeichnungsbasisvariablen des ausgewählten Moduls einen Wert zu,
dabei gewährleistend,
dass reservierte Bereiche vermieden werden. Als einen ersten Schritt
prüft das
Verfahren, um festzustellen, ob alte IDBs in dieser Version des
Computerprogramms verknüpft
werden (Schritt 501). Das Vorhandensein von solch alten IDBs
stellt typischerweise instrumentierte Quellcodemodule dar, deren Kennzeichnungswerte
nicht zum Verknüpfungszeitpunkt
verschiebbare sind. Wegen der oben erläuterten Gründe haben diese alten IDBs
schon Kennzeichnungswerte zugewiesen und erfordern nur, dass Platz
für den
Bereich von ihren Kennzeichnungswerten reserviert wird. Wenn alte
IDBs existieren (Schritt 502), dann wählt das Verfahren diese alten
IDBs aus (Schritt 503). Das Verfahren erstellt eine Aufzeichnung
von dem Bereich der, für
jedes IDB zu reservierenden, Kennzeichnungswerte (Schritt 504).
Das Verfahren setzt einen reservierten Flagwert auf wahr, wenn alte
IDBs vorhanden sind (Schritt 505). Das Verfahren macht
weiter, bis keine alten IDBs mehr übrig bleiben, für die Platz reserviert
werden muss. Sobald der ganze benötigte Platz reserviert worden
ist, setzt das Verfahren dann einen anwachsenden Kennzeichnungsversatzwert
auf 0 (Schritt 506). Das Verfahren führt dann eine Schleife aus,
um jedem Modul einen Kennzeichnungsbasiswert zuzuweisen, das die
zum Verknüpfungszeitpunkt
verschiebbaren Kennzeichnungswerte benutzt (Schritte 507–516).
Das Verfahren wählt
das nächste
neue IDB aus (Schritt 507). Wenn alle von den neuen IDBs
schon ausgewählt
worden sind, dann bricht das Verfahren ab (Schritt 508).
Andernfalls setzt das Verfahren die Kennzeichnungsbasisvariable
gleich dem anwachsenden Kennzeichnungsversatzwert (Schritt 509).
Das Verfahren holt dann den nächsten
Kennzeichnungsversatzwert für
dieses IDB zurück
(Schritt 510). Das Verfahren überprüft dann den vorgeschlagenen
Wert für
die Kennzeichnungsbasisvariable und den nächsten Kennzeichnungsversatzwert
für dieses
IDB, um festzustellen, ob dieser vorgeschlagene Kennzeichnungswertebereich
mit irgendwelchen reservierten Kennzeichnungswerten kollidiert.
Natürlich
kann dieser Schritt ausgelassen werden, wenn das reservierte Werteflag
nie auf wahr gesetzt worden ist (Schritt 511). Wenn der
vorgeschlagene Bereich konfliktfrei ist, dann bereitet der Kennzeichnungsbasiswertauflöser eine
Quellcodeanweisung vor, die der Kennzeichnungsbasisvariablen den
vorgeschlagenen Wert zuweist (Schritt 514). Wenn ein Konflikt
bei Verwenden des vorgeschlagenen Wertes für die Kennzeichnungsbasisvariable
auftreten würde,
dann wählt
der Kennzeichnungsbasiswertauflöser
einen anderen Wert für
die Kennzeichnungsbasisvariable, so dass der Bereich von Kennzeichnungswerten
für dieses
IDB nicht in Widerspruch mit dem reservierten Bereich der Kennzeichnungswerte
steht (Schritt 513). Sobald ein Wert für die Kennzeichnungsbasisvariable
bestimmt worden ist, speichert der Kennzeichnungsbasiswertauflöser dann
die Kennzeichnungswerte für
diese IDB in einer Haupt-IDB, die letztendlich alle Kennzeichnungswerte
für das
Computerprogramm beinhalten wird und von dem Arbeitsplatz GUI (z.
B. Arbeitsplatz GUI 108 aus 1) während der
Programmausführung
referenziert werden kann (Schritt 515). Das Verfahren erhöht als nächstes den
anwachsenden Kennzeichnungsversatzwert, um den als letzten zurückgeholten
nächsten
Kennzeichnungsversatzwert (Schritt 516). Das Verfahren
springt dann zurück
(zu Schritt 507), um das nächste IDB auszuwählen. Deshalb
kann der Kennzeichnungsbasiswertauflöser auch eine Haupt-IDB erstellen,
die die Information von allen IDBs zusammenfügt. Diese Haupt-IDB hat die
Form einer altausgeführten
IDB (z. B. eine IDB, die nicht den Namen einer Kennzeichnungsbasisvariablen
enthält).
Als eine afternative Ausführungsform könnte der
Kennzeichnungsbasiswertauflöser
eine alt ausgeführte
IDB für
jede IDB erstellen, nachdem ein Wert ihrer Kennzeichnungsbasisvariablen
zugewiesen worden ist.
-
6 bildet
eine Veranschaulichung vom Instrumentierungsverfahren einer beispielhaften
Ausführungsform
der vorliegenden Erfindung. Vier Quellcodemodule 600a, 600b, 600c und 600d stellen
das Computerprogramm vor der Instrumentierung dar. Ein Quellcodevorprozessor 601 entfernt
Kommentare und erweitert Makros aus diesen Quellcodemodulen. Ein
Versatzkennzeichnungsinstrumentierer überprüft als nächstes die Quellcodemodule,
dabei in der Art und Weise, wie in 4 angedeutet,
nach angemessenen Kennzeichnungspunkten suchend. Der Versatzkennzeichnungsinstrumentierer
erstellt IDBs 603a, 603b, 603c und 603d während seines Überprüfungsverfahrens. Üblicherweise
wird der Versatzkennzeichnungsinstrumentierer eine IDB pro Quellcodemodul
erstellen, wie in 6 gezeigt. Ersatzweise können die
Daten für
mehrere Quellcodemodule in einer IDB gespeichert werden. Der Versatzkennzeichnungsinstrumentierer
wird auch das instrumentierte Quellcodemodul 604 erstellen.
In einer alternativen Ausführungsform
könnte
der Versatzkennzeichnungsinstrumentierer ein instrumentiertes Quellcodemodul
für jedes überprüfte Quellcodemodul
erstellen. Der Kompilierer 605 erzeugt Objektcode aus dem
instrumentierten Quellcode. Der Kennzeichnungsbasiswertauflöser des
Verknüpfers 606 stellt,
in der Art und Weise wie durch 5 angedeutet,
Werte für
die Kennzeichnungsbasisvariablen fest und erzeugt Quellcodeanweisungen,
um die Kennzeichnungsbasisvariablen zu initialisieren. Die erzeugten
Quellcodeanweisungen werden dann kompiliert und mit dem kompilierten
Code verknüpft,
um den ausführbaren
Code 610 zu bilden. Der entstehende ausführbare Code 610 kann
dann für
das Testen des Computerprogramms benutzt werden.
-
7 stellt
ein Bild einer beispielhaften Ausführungsform der vorliegenden
Erfindung dar, bei der die Quellcodemodule auf mehr als einen Computer
instrumentiert und kompiliert werden. Ein erstes Quellcodemodul 701a befindet
sich auf Rechenmaschine 1. Ein Versatzkennzeichnungsinstrumentierer 702a benutzt
dieses Quellcodemodul, um IDB1 704a und den kompilierten
Code 705a zu erzeugen. In ähnlicher Weise hält Rechenmaschine
2 zwei Quellcodemodule 701b und 701e. Diese Quellcodemodule
werden in den Versatzkennzeichnungsinstrumentierer 702b gegeben,
was zu einer Erzeugung von IDB2 704b und IDB3 704e als
auch des kompilierten Codes 705b führt. Gleichermaßen benutzt
Versatzkennzeichnungsinstrumentierer 702e auf Rechenmaschine
3 das Quellcodemodul 4 701d, um IDB4 704d und
den kompilierten Code 705c zu erzeugen. Jedes einzelne
der, den kompilierten Code darstellenden, Objektdateien wird an
Rechenmaschine N 706 gegeben. Die Rechenmaschine N kann
irgendeine passende Rechenmaschine sein und könnte sogar eine von den drei
vorhergehend erwähnten
Rechenmaschinen sein. Gleichermaßen werden alte IDBs, die auf
den drei Rechenmaschinen erzeugt wurden, an Rechenmaschine N gegeben.
Der Verknüpfer 710 benutzt
die Objektcodedateien, die auf mehreren Rechenmaschinen erzeugt
wurden, um ausführbaren
Code 711 zu erzeugen. Der Kennzeichnungsbasiswertauflöser des
Verknüpfers
löst die
Werte der Kennzeichnungsbasisvariablen für jeden einzelnen der Kennzeichnungswerte,
die von den IDBs in der vorher gezeigten Art und Weise dargestellt werden,
so auf dass der entstehende ausführbare
Code eindeutige Kennzeichnungswerte enthält.
-
Abschließend zeigt 8 eine
alternative Ausführungsform
der vorliegenden Erfindung. Wenn der Versatzkennzeichnungsinstrumentierer
eine IDB erstellt, kann ein vorherbestimmter Füllbereich auch eingebunden
werden. IDBs 800, 801 und 803 haben je
solch einen Füllbereich
enthalten. Dieser Füllbereich
erlaubt es, zusätzliche
Kennzeichnungszuweisungsanweisungen in ein bestimmtes IDB einzufügen, ohne
den maximalen Bereich von Werten, die durch diese IDB dargestellt
werden, zu verändern.
Wenn ein großes
Computerprogramm alle von seinen Quellcodemodulen vorher instrumentiert
hätte und
der Softwareentwickler nur eine neue Zeile von Code an das erste
Quellcodemodul anfügen
würde,
was zu einem Hinzufügen
von einer weiteren Kennzeichnungszuweisungsanweisungen führt, dann
würde der
Wert für
die Kennzeichnungsbasisvariable von dieser IDB und all der anderen
IDBs sich nicht verändern,
weil diese neue Kennzeichnungszuweisungsanweisungen noch immer innerhalb
des Bereiches, das durch die Füllwerte
gegeben wird, sein würde. Deshalb
ermöglicht
dieses Verfahren eine schnellere Instrumentierung und einen schnelleren
Verknüpfungsprozess.
-
9 veranschaulicht
eine alternative Ausführungsform
für den,
durch die vorliegende Erfindung gegebenen, Kennzeichnungswert und
besteht aus einer Kennzeichnungsbasisvariablen, die an einen Kennzeichnungsversatzwert
angehängt
ist. Die Kennzeich nungswerte, die oben erläutert wurden, enthalten eine Kennzeichnungsbasisvariable
plus einem Kennzeichnungsversatzwert. Als eine alternative Ausführungsform enthält der Kennzeichnungswert
eine Kennzeichnungsbasisvariable, die an einen Kennzeichnungsversatzwert angehängt ist.
Zum Beispiel könnte
ein Kennzeichnungswert 64 Bits enthalten. Die ersten 32 Bits könnten den Kennzeichnungsversatzwert
darstellen und die zweiten 32 Bits könnten die Kennzeichnungsbasisvariable
darstellen. In dieser Ausführungsform
könnten
die Werte für
den Kennzeichnungsversatzwert und die Kennzeichnungsbasisvariable
noch immer auf der vorher gezeigten Art und Weise bestimmt werden.
Allerdings, anstatt die beiden Werte zu addieren, wie in den vorhergehenden
Ausführungsformen
erläutert,
würden
die beiden Werte jetzt verkettet werden. Deshalb müsste der
Verknüpfer
nur jedem Quellcodemodul einen eindeutigen Kennzeichnungsbasiswert
zuweisen und müsste
die Werte nicht auf die Anzahl von Kennzeichnungszuweisungsanweisungen
in jedem Quellcodemodul stützen.
Kennzeichnungswerte, die auf diese Art und Weise erzeugt werden,
würden
noch immer eindeutig sein und den Computerprogrammierer ermöglichen,
die Ausführung
des entstehenden Computerprogramms zu verfolgen.
-
Aus
dem Vorhergehenden kann man ersehen, dass, obwohl spezielle Ausführungsformen
der Erfindung hier zum Zweck der Darstellung beschrieben worden
sind, können
zahlreiche Änderungen
gemacht werden, ohne von dem Anwendungsbereich der Erfindung abzuweichen.
Zum Beispiel, wenn der Verknüpfer
geändert
wird, dann ist es möglich,
die Kennzeichnungswerte zum Verknüpfungszeitpunkt berechnet zu
haben und die Kennzeichnungswerte als Konstanten gespeichert zu
haben, die der Kennzeichnungsvariablen durch die Kennzeichnungszuweisungsanweisung
zugewiesen werden. Der Kompilierer könnte einen Hinweis auf die Stelle
von jeder Kennzeichnungszuweisungsanweisung innerhalb des Quellcodes
ausgeben. Der Verknüpfer könnte dann
einen eindeutigen konstanten Wert in jeder Kennzeichnungszuweisungsanweisung
speichern und die Zuordnungen von konstanten Werten zu Kennzeichnungspunkten
in einer IDB speichern. Auch bezieht sich der Begriff Modul auf
irgendeinen Teil des Computerprogramms, der eine komplette Quellcodedatei,
einen Teil einer Quellcodedatei, eine Funktion, ein Verfahren oder
irgendeine andere Sammlung von Anweisungen enthalten könnte, die
das Computerprogramm bilden. Entsprechend ist die Erfindung, außer durch
die angehängten
Ansprüche,
nicht eingeschränkt.