DE69524930T2 - Vorrichtung zur visuellen Darstellung von Programmscheiben - Google Patents

Vorrichtung zur visuellen Darstellung von Programmscheiben

Info

Publication number
DE69524930T2
DE69524930T2 DE69524930T DE69524930T DE69524930T2 DE 69524930 T2 DE69524930 T2 DE 69524930T2 DE 69524930 T DE69524930 T DE 69524930T DE 69524930 T DE69524930 T DE 69524930T DE 69524930 T2 DE69524930 T2 DE 69524930T2
Authority
DE
Germany
Prior art keywords
slice
display
code
line
file
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE69524930T
Other languages
English (en)
Other versions
DE69524930D1 (de
Inventor
David L Atkins
Thomas J Ball
Stephen Gregory Eick
Graham John Wills
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
AT&T Corp
Original Assignee
AT&T Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by AT&T Corp filed Critical AT&T Corp
Publication of DE69524930D1 publication Critical patent/DE69524930D1/de
Application granted granted Critical
Publication of DE69524930T2 publication Critical patent/DE69524930T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/048Interaction techniques based on graphical user interfaces [GUI]
    • G06F3/0484Interaction techniques based on graphical user interfaces [GUI] for the control of specific functions or operations, e.g. selecting or manipulating an object, an image or a displayed text element, setting a parameter value or selecting a range
    • G06F3/04847Interaction techniques to control parameter settings, e.g. interaction with sliders or dials
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/32Monitoring with visual or acoustical indication of the functioning of the machine
    • G06F11/323Visualisation of programs or trace data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/048Interaction techniques based on graphical user interfaces [GUI]
    • G06F3/0484Interaction techniques based on graphical user interfaces [GUI] for the control of specific functions or operations, e.g. selecting or manipulating an object, an image or a displayed text element, setting a parameter value or selecting a range
    • G06F3/0485Scrolling or panning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/048Interaction techniques based on graphical user interfaces [GUI]
    • G06F3/0484Interaction techniques based on graphical user interfaces [GUI] for the control of specific functions or operations, e.g. selecting or manipulating an object, an image or a displayed text element, setting a parameter value or selecting a range
    • G06F3/0485Scrolling or panning
    • G06F3/04855Interaction with scrollbars
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Software Systems (AREA)
  • Quality & Reliability (AREA)
  • Data Mining & Analysis (AREA)
  • User Interface Of Digital Computer (AREA)
  • Digital Computer Display Output (AREA)
  • Stored Programmes (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

    Hintergrund der Erfindung Technisches Gebiet
  • Die Erfindung betrifft die Anzeige von Informationen in einem digitalen Computersystem und insbesondere die Anzeige von Informationen über Abhängigkeiten zwischen Entitäten in einer sehr großen Menge davon.
  • Stand der Technik
  • Ein Hauptproblem für Benutzer von Computersystemen besteht darin, daß Anzeigen von Informationen, die durch das Computersystem zugänglich sind, im allgemeinen entweder eine Ansicht der Informationen auf sehr hoher Ebene oder eine sehr detaillierte Ansicht der Informationen bereitstellen, während der Benutzer häufig eine Ansicht der Informationen auf einer dazwischenliegenden Ebene benötigt. Zum Beispiel werden Textdateien in ihrer Gesamtheit durch Symbole oder Dateinamen dargestellt, und wenn eine Textdatei selektiert worden ist, können mehrere Zeilen in der Datei in einem Fenster angezeigt werden. Es gibt jedoch keine Anzeige von Informationen, die einen vernünftigen Eindruck verschafft, wie die gerade in dem Fenster angezeigten Zeilen mit den Zeilen in der gesamten Datei zusammenhängen. Als eine Folge des Fehlens einer solchen dazwischenliegenden Ebene der Anzeigeinformationen wird es schwierig, verfügbare Informationen zu verwenden und zu verstehen.
  • Das obige Problem wurde in der EP-A-0545583 angesprochen, aus der neuartige Vorrichtungen zur Anzeige von Informationen über eine sehr große Anzahl von Entitäten und das Filtern der Informationen, so daß ein Benutzer der Informationen ihn interessierende Muster sehen könnte, bekannt sind. Die Informationsanzeigetechniken der EP-A-0545583 haben viele Anwendungen, wie zum Beispiel Bildlaufleisten, die die Beziehung zwischen Text in einem Fenster und dem Rest des Texts besser zeigen, Fernsehprogramm- Auswahlschnittstellen, die Informationen über eine sehr große Anzahl von Fernsehprogrammen anzeigen können, Vorrichtungen zur Anzeige von Informationen über die Vorgeschichte von Codezeilen in einem großen Softwaresystem (alles aus EP-A-0545583), Vorrichtungen zur Anzeige von Informationen aus einer Fehlerprotokollierungsdatei (aus EP-A-0646868) und Vorrichtungen zur Anzeige von Informationen über Datenbankschemata (aus EP-A-0652665).
  • Bei der vorliegenden Anwendung werden die aus EP-A- 0545583 bekannten Techniken auf das Problem der visuellen Darstellung von Abhängigkeitsbeziehungen angewandt. Bei der bevorzugten Ausführungsform wird die Technik zur visuellen Darstellung von Programm-Slices verwendet. Formlos ausgedrückt enthält ein Programm- Slice diejenigen Komponenten eines Programms, die sich potentiell auf eine bestimmte interessierende Komponente auswirken können. Diese Komponente wird als der Slice-Punkt bezeichnet. Ein Programm-Slice hilft beim Verständnis des Programms, indem die Aufmerksamkeit auf ein kleineres und relevantes Teilprogramm konzentriert wird. Das Programm-Slicing als automatisiertes Verfahren zur Zerlegung von Programmen wurde von Mark Weiser in Weiser, M., "Programmers use slices when debugging", Communications of the ACM, Band 25(7), S. 446-452 (Juli 1982) und Weiser, M., "Progam slicing", IEEE Transactions 'on Software Engineering, Band SE-10(4), S. 352-357 (Juli 1984) vorgeschlagen.
  • Der Nutzen des Programm-Slicing als ein Verfahren zur Untersuchung von Programmen wird durch die zur Zeit zur Untersuchung von Programm-Slices verwendeten Benutzerschnittstellen begrenzt. Die gegenwärtigen Slicing-Schnittstellen basieren auf Text-browser- Programmen oder syntaxbezogenen Editoren. Siehe zum Beispiel Agrawal, H., DeMillo, R. A. und Spafford, E. H., "Debugging with dynamic slicing and backtracking", Software-Practice and Experience, Band 23(6), S. 589-616 (Juni 1993) und Gallagher, K. B., "Surgeon' s assistant limits side effects", IEEE Software, Band 7, S. 64 (Mai 1990). Bei diesen Schnittstellen wird ein Slice durch Auswählen einer Anweisung oder eines Ausdrucks als der Slice-Punkt und Aufrufen eines Slice- Befehls gebildet. Anweisungen in dem Slice, d. h. diejenigen Anweisungen, die sich potentiell auf die interessierende Komponente auswirken, werden als Ergebnis hervorgehoben oder gefärbt. Wenn das Slice Prozedur- oder Dateigrenzen überschreitet, können zusätzliche Browser-Programme geöffnet oder Browser- Befehle aufgerufen werden, um andere Entitäten zu betrachten. Solche Schnittstellen gestatten eine Untersuchung eines Slice, belasten den Programmierer jedoch mit der Aufgabe, das Ausmaß eines Slice und die Beziehung des Slice zu dem Rest des Codes zu bestimmen. Außerdem ist die Navigation durch ein Slice umständlich, insbesondere wenn das Slice Prozedur- und Dateigrenzen überschreitet, so wie es im allgemeinen bei größeren Programmen der Fall ist. Tatsächlich wird das Slice von den derzeitigen textgestützten Schnittstellen mehr versteckt als offengelegt. Eine Aufgabe der im folgenden offengelegten Vorrichtungen und Verfahren besteht darin, diese Probleme zu überwinden und das Slicing zu einem wirklich nützlichen Verfahren zur Analyse von Computerprogrammen zu machen.
  • Kurze Darstellung der Erfindung
  • Die Probleme der Programm-Slice-Vorrichtungen des Stands der Technik werden durch eine Vorrichtung zur visuellen Programm-Slice-Darstellung nach Anspruch 1 gelöst, die reduzierte Darstellungen der Zeilen, Prozeduren und Dateien, aus denen das Programm besteht, anzeigt. Der Benutzer verwendet einen durch ein Zeigegerät, wie zum Beispiel eine Maus, gesteuerten Zeiger, um eine der reduzierten Darstellungen als einen Slice-Punkt zu wählen. Die Vorrichtung berechnet dann das Slice und ändert die Erscheinung der reduzierten Darstellungen, die zu dem Slice gehören. Die Vorrichtung ermöglicht somit eine visuelle Darstellung von Slices, die Prozedur- und Dateigrenzen überschreiten. Durch eine Betrachtungsvorrichtung kann der Benutzer die von den reduzierten Darstellungen dargestellten Entitäten im Detail untersuchen.
  • Zu weiteren Aspekten der Progamm-Slice- Visualisierungsvorrichtung gehört die Verwendung von Farbe, um die Distanz einer zu einem Slice gehörenden Entität von dem Slice-Punkt zu zeigen, und die Verwendung von Prozedurdarstellungen, die "geöffnet" werden können, in der Anzeige. Wenn der Benutzer die Prozedurdarstellung öffnet, erscheint eine neue Prozedurdarstellung, die eine reduzierte Darstellung jeder Zeile in der Prozedur enthält. Die Erscheinung von Zeilendarstellungen, die zu dem Slice gehören, ist verändert. Die Prozedurdarstellungen können außerdem gemäß der Anzahl von Zeilen, die sie enthalten, verschieden groß sein, und können gemäß der Anzahl von Zeilen in dem Slice gefüllt werden. Durch andere Optionen kann der Benutzer die Anzeige reduzierter Darstellungen, die nicht in dem Slice enthalten sind, unterdrücken, und die Datei- und Prozedurdarstellungen in der Anzeige gemäß der Distanz von dem Slice-Punkt umordnen.
  • Die erfindungsgemäßen Techniken können nicht nur zur Visualisierung von Programm-Slices verwendet werden, sondern auch zur Visualisierung von Slices einer beliebigen Menge von Entitäten, für die ein Abhängigkeitsgraph hergestellt werden kann. Die obigen und weitere Aspekte und Aufgaben der hier offengelegten Techniken und Vorrichtungen werden für Durchschnittsfachleute bei Durchsicht der folgenden Zeichnung und ausführlichen Beschreibung deutlich. Es zeigen:
  • Kurze Beschreibung der Zeichnung
  • Fig. 1 ein Diagramm eines Systems, in dem eine bevorzugte Ausführungsform verwendet wird;
  • Fig. 2 ein Diagramm einer durch die bevorzugte Ausführungsform erzeugten Anzeige;
  • Fig. 3 ein Diagramm einer zweiten Anzeige, die von der bevorzugten Ausführungsform erzeugt wird;
  • Fig. 4 ein Diagramm einer dritten Anzeige, die von der bevorzugten Ausführungsform erzeugt wird;
  • Fig. 5 ein Diagramm einer vierten und einer fünften Anzeige, die von der bevorzugten Ausführungsform erzeugt werden;
  • Fig. 6 ein Diagramm einer sechsten Anzeige, die von der bevorzugten Ausführungsform erzeugt wird;
  • Fig. 7 eine Übersicht der bei der bevorzugten Ausführungsform verwendeten Hardware;
  • Fig. 8 eine Übersicht von Daten, die in der bevorzugten Ausführungsform verwendet werden;
  • Fig. 9 ein Diagramm des in der bevorzugten Ausführungsform verwendeten MR-Objekts;
  • Fig. 10 ein Diagramm anderer Daten, die in der bevorzugten Ausführungsform verwendet werden;
  • Fig. 11 ein Diagramm eines Codeobjekts und anderer Daten, die in der bevorzugten Ausführungsform verwendet werden;
  • Fig. 12 einen ersten Teil eines Flußdiagramms der Funktionsweise der bevorzugten Ausführungsform;
  • Fig. 13 einen zweiten Teil eines Flußdiagramms der Funktionsweise der bevorzugten Ausführungsform;
  • Fig. 14 ein Diagramm eines Code-Betrachtungs-Objekts;
  • Fig. 15 ein einfaches Slice;
  • Fig. 16 den Programmabhängigkeitsgraph des Slice von Fig. 15;
  • Fig. 17 eine erste Darstellung des Hauptanzeigeschirms der Erfindung;
  • Fig. 18 eine zweite Darstellung des Hauptanzeigeschirms;
  • Fig. 19 eine Darstellung eines Rückwärts-Slice;
  • Fig. 20 eine Darstellung eines Vorwärts-Slice;
  • Fig. 21 ein Diagramm des Prozesses zur Herstellung des Programmabhängigkeitsgraphen in der bevorzugten Ausführungsform;
  • Fig. 22 ein Diagramm der Hauptdatenstrukturen in der bevorzugten Ausführungsform; und
  • Fig. 23 ein Diagramm des Algorithmus, mit dem ein Slice in der bevorzugten Ausführungsform erzeugt wird.
  • In der Zeichnung und der Ausführlichen Beschreibung verwendete Bezugszahlen bestehen aus zwei Teilen. Die beiden niedrigstwertigen Ziffern geben die Nummer eines Elements in einer Figur an; die übrigen Ziffern geben die Figur an, in der das Element zuerst erscheint; somit wird ein Element mit der Bezugszahl 603 zuerst in Fig. 6 gezeigt.
  • Ausführliche Beschreibung
  • Die folgende Ausführliche Beschreibung einer bevorzugten Ausführungsform enthält Fig. 1-14 der EP-A- 0545583, zusammen mit der Ausführlichen Beschreibung davon bis zu dem Abschnitt mit dem Titel "Implementierung von Codebetrachtungsvorrichtungen: Fig. 5, 6 und 14". Danach wird eine bevorzugte Ausführungsform der Vorrichtung zur visuellen Darstellung von Programm-Slices beschrieben.
  • Umgebung der Erfindung: Fig. 1
  • Eine bevorzugte Ausführungsform der Erfindung wird von verantwortlichen Entwicklern verwendet, um einen sehr großen Codekörper für eine digitale Vermittlung zu warten. Ein Hauptproblem bei der Wartung großer Codekörper besteht darin, die Veränderungen mitzuverfolgen. Die Entwickler, die die bevorzugte Ausführungsform verwenden, ändern den Code für die digitale Vermittlung nur als Reaktion auf Modifikationsanforderungen (MRs). In der Umgebung 101, in der die bevorzugte Ausführungsform verwendet wird, werden alle Änderungen, die sich aus den MRs ergeben, in der Codekörper-Datenbasis (CBDB) 113 aufgezeichnet. In der Codekörper-Datenbasis 113 befindet sich ein Codedatei-Datensatz (CFR) 115 für jede Codedatei, die in der Vermittlung verwendet wird. Zusammen bilden diese Codedatei-Datensätze 115 Codedatei-Datensätze (CFRS) 114. Ein gegebener Codedatei-Datensatz 115(m) enthält einen Codedateinamen (CFN) 116, bei dem es sich um den Namen der Codedatei handelt, der der Datensatz entspricht, und einen Zeiger auf eine Menge von Codedatei-Zeilendatensätzen (CLFRS) 117. Die Menge von Datensätzen 117 enthält einen Codedatei-Zeilendatensatz (CFLR) 118 für jede Codezeile, die zu der dem Codedatei-Datensatz 115(m) entsprechenden Codedatei hinzugefügt oder aus dieser gelöscht wurde. Ein Codedatei-Zeilendatensatz 118(m, r) für die Zeile r der durch den Codedatei-Datensatz 115(m) dargestellten Datei enthält drei Felder:
  • - Das Textfeld 119 enthält den Text der hinzugefügten oder gelöschten Zeile;
  • - Add MR (AMR) 120 und delete MR (DMR) 122 sind Zeiger auf Datensätze in der Codekörper- Datenbasis 113 für die MRs, die dazu führten, daß die Zeile zu der Datei hinzugefügt oder aus dieser gelöscht wurde. Da jede Zeile zu einem bestimmten Zeitpunkt zu dem Codekörper hinzugefügt wurde, weist jede Zeile einen Zeiger in dem AMR-Feld 120 auf; wenn die Zeile später gelöscht wurde, besteht außerdem ein Zeiger in dem DMR-Feld 122; andernfalls enthält das DMR- Feld 122 einen Null-Zeigerwert.
  • In dem CFLR 118(m, r) enthält das add MR-Feld 120 einen Zeiger und das DMR-Feld 122 enthält einen Nullwert. Daher entspricht ein einziger Modifikationsanforderungsdatensatz (MRR) 121 der durch den Codedatei-Zeilendatensatz 118(m, r) dargestellten Codedateizeile.
  • Für jede Modifikationsanforderung, die zu einer Änderung des Codekörpers geführt hat, liegt ein Modifikationsanforderungsdatensatz 121 vor. Alle Modifikationsanforderungsdatensätze 121 bilden zusammen Modifikationsanforderungsdatensätze (MRRS) 126. Jeder Modifikationsanforderungsdatensatz 121 enthält einen Modifikationsanforderungsnamen (MRN) 125 und Zeiger auf andere Informationselemente. Zu den für die vorliegende Besprechung relevanten gehören das Datum 139, wobei es sich um das Datum handelt, an dem die in der Modifikationsanforderung angeforderten Modifikationen abgeschlossen wurden, eine Zusammenfassung 141, wobei es sich um eine kurze Beschreibung der Modifikationsanforderung handelt, und Entwicklerdatensätze (DVPRS) 143, die Entwicklerdatensätze (DVPR) 145 für die Entwickler enthalten, die die Modifikationsanforderung ausgeführt haben.
  • Wie aus Fig. 1 hervorgeht, enthält jeder Codedatei- Zeilendatensatz 118, der durch eine gegebene Modifikationsanforderung modifiziert wurde, einen Zeiger auf den Modifikationsanforderungsdatensatz 121 für die gegebene Modifikationsanforderung. Ein Entwickler kann somit die Codekörper-Datenbasis 113 verwenden, um zu bestimmen, wann, warum und von wem jede Zeile in dem Codekörper hinzugefügt oder gelöscht wurde. Alle Informationen in der Codekörper-Datenbasis 113 sind mittels der Verarbeitungseinheit 111 zugänglich, die ein Datenbanksystem verwenden kann, um Informationen aus der Codekörper-Datenbasis 113 abzurufen. Die abgerufenen Informationen können als Reaktion auf Befehle, die über die Tastatur 105 oder das Zeigegerät (in diesem Fall eine Maus) 103 eingegeben werden, auf der Anzeige 107 angezeigt werden. In der Anzeige 107 wird eine aktuelle Position durch den Cursor 110 angezeigt, der entweder durch die Tastatur 105 oder die Maus 103 gesteuert werden kann. Wenn ein Fenstersystem auf dem Prozessor 111 abläuft, können die Informationen in einem oder mehreren Fenstern 109 in der Anzeige 107 angezeigt werden. Zum Beispiel könnte ein Programmierer ein Fenster 109 verwenden, um Codezeilen aus den Textfeldern 119 der Codedatei-Zeilendatensätze 118 für die relevanten Zeilen anzuzeigen, und ein anderes Fenster, um Informationen aus den Modifikationsanforderungsdatensätzen 121 für die relevanten Zeilen anzuzeigen.
  • Obwohl die Codekörper-Datenbasis 113 alle Informationen enthält, die ein Programmierer, der die Vorgeschichte des Codekörpers verstehen möchte, benötigt, ist die Nützlichkeit der Informationen stark durch den Umstand eingeschränkt, daß nur sehr wenig davon zu einem gegebenen Zeitpunkt sichtbar ist. Das Anzeigegerät 107 umfaßt eine Anzeige, die im allgemeinen höchstens eine Diagonale von 19 Zoll mißt, und Informationen aus der Codekörper-Datenbasis 113 werden im allgemeinen in Form von ASCII-Zeichen angezeigt; dementsprechend können höchstens etwa 200 Gesamtzeilen von Informationen aus der Codekörper-Datenbasis 113 verwendbar in dem Anzeigegerät 107 angezeigt werden.
  • Verwendung der bevorzugten Ausführungsform zur Anzeige von Informationen: Fig. 2-6
  • Fig. 2 zeigt, wie die bevorzugte Ausführungsform verwendet wird, um Informationen aus der Codekörper- Datenbasis 113 anzuzeigen. Die Anzeige 201 befindet sich in einem Fenster 109 der Anzeige 107. Wie durch den Titel 203 oben auf der Anzeige 201 angegeben, besteht der Zweck der Anzeige darin, Informationen über Codezeilen aus den Codedateien anzuzeigen, die den Codekörper bilden. Die Anzeige 201 ist in fünf Teile aufgeteilt:
  • - Der Titelanzeigeteil 204 zeigt den Titel des Fensters an;
  • - display space part 213 zeigt Dateispalten 205 an, die Codedateien darstellen und Zeilendarstellungen 207 zur Darstellung von Zeilen in der durch die Dateispalte 205 dargestellten Codedatei enthalten;
  • - top space part 211 enthält den Namen der durch jede Dateispalte 205 dargestellten Codedatei;
  • - right hand space part 217 zeigt die Zeilencharakterisierungsspalte 219 an; und
  • - bottom space part 215 zeigt Textinformationen über eine gewählte Codezeile oder eine gewählte Modifikationsanforderung und drei Schaltflächen zur Steuerung der bevorzugten Ausführungsform an.
  • Beginnend mit den Einzelheiten des Anzeigeraums 213 liegt eine Spalte 205 für jede Codedatei in dem Codekörper vor. Der Name 209 der Codedatei, der die Spalte 205 entspricht, erscheint in dem oberen Raum 211 über dieser Spalts 205. Der Name wird natürlich dem Codedateinamen 116 des Codedatei-Datensatzes 115 entnommen, der der Codedatei entspricht. Jede Spalte 205 wird automatisch so bemessen, daß die Spalten 205 für alle Codedateien in dem Codekörper in den Anzeigeraum 213 passen. Die minimale Breite einer Spalte beträgt 15 Pixel, und die Spalte ist so lang, wie erforderlich, um eine Zeilendarstellung 207 für jede Codezeile, für die eine Zeilendarstellung angezeigt wird, aufzunehmen. Wenn die Anzahl von Zeilen in der Codedatei zu einer Spalte 205 führt, die länger als der Anzeigeraum 213 ist, wird unmittelbar neben der Spalte 205 eine zusätzliche Spalte 206 für die übrigen Zeilen angeordnet.
  • Der Entwickler kann die Taste 227 verwenden, um anzuzeigende Codezeilen zu wählen. Bei der bevorzugten Ausführungsform gibt es drei Wahlmöglichkeiten:
  • - eine hinzugefügte-Zeilen-Option, bei der die Zeilendarstellungen 207 in den Spalten 205 Codezeilen darstellen, die zu den durch die Spalten 205 dargestellten Dateien hinzugefügt und nicht gelöscht wurden;
  • - eine gelöschte-Zeilen-Option, bei der die Zeilendarstellungen 207 in den Spalten 206 Codezeilen darstellen, die aus den durch die Spalten 205 dargestellten Dateien gelöscht wurden, und
  • - eine Spalten-auftrennen-Option, bei der zwei Mengen von Zeilendarstellungen nebeneinander in den Spalten 205 angezeigt werden, wobei eine Codezeilen darstellt, die gelöscht wurden, und die andere Codezeilen darstellt, die hinzugefügt wurden.
  • Ob eine Codezeile hinzugefügt oder gelöscht wurde, kann natürlich aus der Codekörper-Datenbasis 113 bestimmt werden. Die Zeilendarstellungen 207 erscheinen in der Spalte 205 in derselben Reihenfolge, wie die Zeilen in der Codedatei erscheinen. Bei der bevorzugten Ausführungsform sind die Zeilendarstellungen 207 einen einzigen Pixel dick. Wie später ausführlicher besprochen wird, kann die Farbe der Zeilendarstellungen 207 durch Operationen an der Anzeige 201 verändert werden.
  • Bei der bevorzugten Ausführungsform wird der Code unter Verwendung standardmäßiger Einrückregeln geschrieben, und eingerückte Codezeilen führen folglich Informationen über die Struktur des Codes. Um diese Informationen Programmierern, die die Anzeige 201 betrachten, zur Verfügung zu stellen, stellt die bevorzugte Ausführungsform eine Schaltfläche 223 bereit, die wählt, ob eine Zeilendarstellung 207 die Einrückung der entsprechenden Codezeile zeigen soll. Der Programmierer verwendet seine Maus 103, um die Schaltfläche zu aktivieren und dadurch die Einrückung zu wählen. Wenn Einrückung gewählt wurde, beginnen die Pixel einer Zeilendarstellung 207 in einem Abstand von der rechten Seite der Spalte 205, der dem Grad der Einrückung der entsprechenden Codezeile entspricht, und die Zeilendarstellung enthält eine Anzahl von Pixeln, die der Länge der entsprechenden Codezeile entspricht. Wenn keine Einrückung- gewählt wurde, füllt die Zeilendarstellung 207 die gesamte Breite der Spalte 205.
  • Der untere Raum 215 enthält die Schaltflächen 223, 225 und 227 und die Etiketten 214 und 216; die Verwendung der Schaltfläche 223 und der Schaltfläche 227 wurden bereits besprochen, und die Verwendung der Schaltfläche 225 wird später ausführlich beschrieben. Das Etikett 214 zeigt das wo die bevorzugte Ausführungsform den Text einer gewählten Codezeile anzeigt, und das Etikett 216 gibt die Position an, an der der Text der Zusammenfassung einer gewählten Modifikationsanforderung angezeigt wird. Wie die Auswahl auftritt, wird später besprochen.
  • Der rechte Raum 217 enthält eine Zeilencharakterisierungsspalte 219 und ein Zeilencharakterisierungsspaltenetikett 220. Die Zeilencharakterisierungsspalte 219 gibt an, wie verschiedene Werte aus den Modifikationsanforderungsdatensätzen 121 in den Zeilendarstellungen 207 angezeigt werden sollen. Zum Beispiel enthält jeder Codedatei-Zeilendatensatz 118 einen Zeiger auf den Modifikationsanforderungsdatensatz 121 für die Modifikationsanforderung, die die Zeile hinzugefügt oder gelöscht hat, und der relevante Modifikationsanforderungsdatensatz 121 enthält wiederum einen Zeiger auf den Datums-Datensatz 139; der Zeitpunkt, zu dem jede Codezeile zu dem Codekörper hinzugefügt oder aus diesem gelöscht wurde, kann folglich aus der Codekörper-Datenbasis 113 bestimmt werden. Der Zeitpunkt, zu dem eine Codezeile verändert wurde, wird in der Anzeige 201 folgendermaßen sichtbar gemacht: jeder Modifikationsanforderung wird eine Farbschattierung zugewiesen. Die Schattierung hängt davon ab, wann die Modifikationsanforderung abgeschlossen wurde. Bei der bevorzugten Ausführungsform reichen die Schattierungen von Rot über Gelb bis Blau, wobei Blau die älteste und Rot die letzte Modifikationsanforderung darstellt. Außerdem wird jede Modifikationsanforderung einer Modifikationsanforderungsdarstellung zugeordnet, die aus einem Rechteck von Pixeln in der Zeilencharakterisierungsspalte 219 besteht, wobei sich das Rechteck für die älteste Modifikationsanforderung unten und das Rechteck für die jüngste oben befindet. Die Modifikationsanforderungsdarstellung für eine gegebene Modifikationsanforderung wird ferner in der Farbe dieser Modifikationsanforderung angezeigt, so daß die Farbe der Zeilencharakterisierungsspalte 219 von Blau unten bis zu Rot oben reicht. Als letztes werden die Zeilendarstellungen 207, die in einer gegebenen Modifikationsanforderung hinzugefügt oder gelöscht wurden, in der diesem Zeitpunkt entsprechenden Farbe angezeigt. Die Zeilendarstellungen 207, die bei der jüngsten Modifikationsanforderung hinzugefügt oder gelöscht wurden, sind also rot, während die Zeilen, die bei der ältesten Modifikationsanforderung hinzugefügt oder gelöscht wurden, blau sind, und die anderen Zeilendarstellungen 207 weisen die Farben auf, die den Modifikationsanforderungen entsprechen, bei denen sie hinzugefügt oder gelöscht wurden.
  • Die Anzeige 201 ist daher aus zwei Gründen bemerkenswert: erstens zeigt sie Darstellungen 207 aller Zeilen in dem Codekörper auf einmal an. Zweitens zeigt sie Informationen über die angezeigten Zeilen an. Bezüglich der Anzeige von Darstellungen aller Zeilen in dem Codekörper kann eine standardmäßige Anzeige 107 mit einer Diagonalen von 19 Zoll vertikal 1024 Pixel und horizontal 1280 Pixel anzeigen. Wenn sich die Anzeige 201 in einem Fenster 109 befindet, das im wesentlichen die gesamte Anzeige 107 einnimmt, dann nimmt die Zeilencharakterisierungsspalte 219 etwa ein Fünftel des horizontalen Raums ein, und der obere Raum 211 und der untere Raum 215 etwa ein Achtel des vertikalen Raums, so daß ein Anzeigeraum 213 von etwa 900 Pixeln mal 1000 Pixel für die Anzeige der Spalten 205 verbleibt. Bei einer minimalen Spaltenbreite von 15 Pixeln und einem Abstand von 8 Pixeln zwischen den Spalten können mehr als 40 Spalten 205 angezeigt werden, und jede dieser Spalten kann bis zu 900 Zeilendarstellungen aufweisen. Somit kann ein einziger Anzeigeraum 213 bei einer bevorzugten Ausführungsform Zeilendarstellungen 207 für mehr als 36 000 einzelne Codezeilen anzeigen.
  • Bezüglich der Anzeige von Informationen über die Zeilen gibt die Anzeige 201 bei dem oben dargelegten Beispiel dem Entwickler eine vollständige Übersicht der zeitlichen Entwicklung des Codekörpers. Zeilendarstellungen 207, die dieselben oder eng miteinander zusammenhängenden Schattierungen aufweisen, stellen Codezeilen dar, die ungefähr zum selben Zeitpunkt modifiziert wurden. Somit kann der Entwickler die Hauptstufen der Entwicklung des Codekörpers aus den Farben sehen, die in den Zeilendarstellungen 207 in den Spalten 205 erscheinen. Außerdem kann der Entwickler bestimmen, ob ein Teil des Codekörpers über die Zeit hinweg stabil geblieben ist, oder ob er dauernd umgearbeitet wurde. Im ersten Fall haben die meisten Zeilendarstellungen 207 dieselbe Farbe; im zweiten weisen sie viele verschiedene Farben auf. Schließlich kann der Entwickler leicht sehen, wie Änderungen, die an einer Codedatei vorgenommen wurden, mit Änderungen, die an anderen Codedateien vorgenommen wurden, zusammenhängen, und er kann dadurch Abhängigkeiten zwischen den Codedateien sehen.
  • Operationen an der Anzeige 201: Fig. 3-5
  • Die Anzeige 201 zeigt, wie eine bevorzugte Ausführungsform eine Gesamtansicht von Informationen aus der Codekörper-Datenbasis 113 über den Codekörper darstellt. Durch Verwendung der Maus 103 kann ein Benutzer der bevorzugten Ausführungsform Operationen an der Anzeige 201 ausführen, um ausführlichere Informationen über den Codekörper zu erhalten.
  • Es gibt vier allgemeine Klassen von Mausoperationen, die an der Anzeige 201 durchgeführt werden können: Bewegen des Cursors, Wählen einer Entität an der aktuellen Position des Cursors, Rückgängigmachen der Auswahl der Entität an der aktuellen Position des Cursors und Bewegen eines Fensters. Um den Cursor zu bewegen, bewegt der Entwickler einfach die Maus 103. Wenn keine Tasten gedrückt werden und der Cursor 110 über eine Zeilendarstellung 207 oder eine Modifikationsanforderungsdarstellung, die ausgeschaltet ist (bei einer bevorzugten Ausführungsform schwarz ist) geführt wird, dann wird die Zeilendarstellung 207 oder die Modifikationsanforderungsdarstellung eingeschaltet (d. h. sie erhält die Farbe, die der relevanten Modifikationsanforderung zugeordnet ist), während sich der Cursor 110 über der Zeilendarstellung oder der Modifikationsanforderungsdarstellung befindet. Die Modifikationsanforderungsdarstellung für eine gegebene Modifikationsanforderung und die Zeilendarstellungen 207 für die bei einer gegebenen Modifikationsanforderung modifizierten Codezeilen werden miteinander gekoppelt, so daß, wenn sich der Cursor 110 auf der gegebenen Modifikationsanforderung oder auf einer beliebigen Zeilendarstellung 207 für eine beliebige Codezeile, die durch die gegebene Modifikationsanforderung beeinflußt wird, befindet, die Modifikationsanforderungsdarstellung für die gegebene Modifikationsanforderung und alle Zeilendarstellungen für die Zeilen, die durch die gegebene Modifikationsanforderung beeinflußt werden, eingeschaltet werden.
  • Wenn die äußerste linke Maustaste gedrückt wird, dann wird die Zeilendarstellung oder die Modifikationsanforderungsdarstellung unter dem Cursor eingeschaltet und eingeschaltet gelassen, nachdem sich der Cursor weiterbewegt; die Modifikationsanforderungsdarstellung und die Zeilendarstellungen 207 für die betreffenden Zeilen werden wie oben beschrieben gekoppelt. Wenn die mittlere Maustaste gedrückt wird, dann wird die Zeilendarstellung oder Modifikationsanforderungsdarstellung unter dem Cursor ausgeschaltet und ausgeschaltet gelassen, nachdem sich der Cursor bewegt; wiederum werden die Modifikationsanforderung und ihre entsprechenden Zeilendarstellungen gekoppelt. Wenn sowohl die linke als auch die mittlere Taste gedrückt werden, kann man mit der Maus 103 Komponenten auf der Anzeige 201 hin und her bewegen. Die Verwendung der rechten Maustaste wird später beschrieben.
  • Alle Zeilendarstellungen 207 und Modifikationsanforderungsdarstellungen können mittels des Etiketts 220 für die Zeilencharakterisierungsspalte 219 ein- oder ausgeschaltet werden. Wenn die Maus 103 zu dem Etikett 220 bewegt und die ganz linke Taste gedrückt wird, werden alle Zeilendarstellungen 207 und Modifikationsanforderungsdarstellungen eingeschaltet und eingeschaltet gelassen; wenn die mittlere Taste gedrückt wird, werden alle Zeilendarstellungen 207 und Modifikationsanforderungsdarstellungen ausgeschaltet und ausgeschaltet gelassen, bis der Cursor über die Zeilendarstellung oder Modifikationsanforderungsdarstellung geführt wird. Im folgenden wird eine Modifikationsanforderung als "aktiv" beschrieben, wenn ihre Modifikationsanforderungsdarstellung und die Zeilendarstellungen 207, die mit der Modifikationsanforderung gekoppelt sind, eingeschaltet und eingeschaltet gelassen werden.
  • Fig. 3 zeigt, wie ein Entwickler die Maus 103 verwenden kann, um mehr Informationen über eine oder mehrere Modifikationsanforderungen zu erhalten. Die Anzeige 301 ergibt sich, wenn alle Zeilendarstellungen 207 und Modifikationsanforderungsdarstellungen wie gerade beschrieben ausgeschaltet worden sind. Während die Maus 103 den Cursor 110 über das Fenster hinweg bewegt, werden die Zeilendarstellungen 207 und ihre gekoppelten Modifikationsanforderungsdarstellungen, über die der Cursor geführt wird, eingeschaltet; wenn an diesem Punkt die ganz linke Taste gedrückt wird, dann wurde die Modifikationsanforderung, die der Modifikationsanforderungsdarstellung entspricht, aktiviert, und die Modifikationsanforderungsdarstellung und ihre gekoppelten Zeilendarstellungen 207 bleiben eingeschaltet. Somit zeigt Fig. 3 das Ergebnis, nachdem der Entwickler über der Modifikationsanforderungsdarstellung 303(1), 303(2), 303(3) und 303(4) die ganz linke Maustaste gedrückt hat. Die mit diesen Modifikationsanforderungsdarstellungen gekoppelten Zeilendarstellungen 207 erscheinen jeweils als Mengen von Zeilendarstellungen 307(1), 307(2), 307(3) bzw. 307(4). Wenn eine Modifikationsanforderungsdarstellung 303 wie gerade beschrieben aktiviert wird, erscheint ein Etikett 305 rechts neben der Modifikationsanforderungsdarstellung 303. Der Text des Etiketts 305 kommt aus dem Namendatensatz 125 des Modifikationsanforderungsdatensatzes 121 für die Modifikationsanforderung. Ferner erscheint der Text 309 der Zusammenfassung der Modifikationsanforderung nach dem Etikett 216 in dem unteren Feld 215. Der Text kommt natürlich aus dem Zusammenfassungsdatensatz 141.
  • Bei der bevorzugten Ausführungsform kann ein Entwickler eine Modifikationsanforderung deaktivieren, indem er den Cursor auf die Modifikationsanforderungsdarstellung 303 bringt, die der Modifikationsanforderung entspricht, und dann die mittlere Taste drückt. Wenn die Taste gedrückt wird, werden die Modifikationsanforderungsdarstellung 303 und ihre gekoppelten Zeilendarstellungen, sowie das Etikett 305 und der Zusammenfassungstext 309 ausgeschaltet. Die Etiketten 305 und der Zusammenfassungstext 309 erscheinen nicht, wenn alle Modifikationsanforderungen aktiviert werden, indem die Maus 103 verwendet wird, um das Zeilencharakterisierungsspaltenetikett 220 zu wählen.
  • Eine andere Operation an der Anzeige 201 ist die in Fig. 4 gezeigte Codedateiauswahloperation. Wiederum werden Codedateiauswahloperationen im allgemeinen ausgeführt, nachdem die Spalten 205 und die Zeilencharakterisierungsspalte 219 ausgeschaltet worden sind. Bei der Codedateiauswahloperation wird eine Codedatei gewählt, wobei die Maus 103 verwendet wird, um das Spaltenetikett 209 für die die Codedatei darstellende Spalte 205 zu wählen. In Fig. 4 wird die gewählte Codedatei 403 als die durch die Spalte 205(n) dargestellte genommen. Wenn das Spaltenetikett 209 gewählt wird, werden alle Modifikationsanforderungen, die sich auf die gegebene Datei auswirken, aktiviert. Folglich werden die Zeilendarstellungen 207 in der Spalte 205(n), alle Modifikationsanforderungen 303, die mit diesen Zeilendarstellungen gekoppelt sind, und alle anderen Zeilendarstellungen 207 in den anderen Spalten 205(1)-205(n-1), die mit den eingeschalteten Modifikationsanforderungen 303 gekoppelt sind, eingeschaltet. Wiederum erscheinen die Etiketten 305 und der Text 309 nicht.
  • In Fig. 4 ist die durch die Dateispalte 205(n) dargestellte Codedatei 403 das Ergebnis von drei Modifikationsanforderungen und somit von drei Modifikationsanforderungsdarstellungen 303(a), 303(b) und 303(c). Die Codezeilen 207, die bei den drei Modifikationsanforderungen modifiziert werden, erscheinen in den Spalten 205(n), 205(1) und 205(2) als Zeilen 307(a), 307(b) bzw. 307(c). Da eine Datei im allgemeinen viele Zeilen enthält und das Ergebnis mindestens mehrerer Modifikationsanforderungen ist, zeigt die Dateiauswahloperation im Anschluß an das Codeetikett 214 und das MR-Etikett 216 keinen Text an, kann aber Etiketten 305 für MR-Darstellungen 303(a)- 303(b) anzeigen. Das Rückgängigmachen der Auswahl des Spaltenetiketts 209 für eine gewählte Spalte 403 schaltet die Anzeige der Zeilendarstellungen 307(a), (b) und (c) in allen Spalten 205 und die Anzeige der Modifikationsanforderungsdarstellungen 303(a), (b) und (c) in der Zeilencharakterisierungsspalte 219 aus. Wie aus dem obigen ersichtlich ist, ermöglicht die Dateiauswahloperation dem Benutzer, sofort zu sehen, welche Modifikationsanforderungen sich auf die gewählte Datei ausgewirkt haben, und wie sich diese Modifikationsanforderungen auf die anderen Dateien des Codekörpers ausgewirkt haben.
  • Eine andere mögliche Operation an der Anzeige 201 ist die Zeilenauswahl. Wenn der Cursor 110 auf eine gegebene Zeilendarstellung 207 gebracht und die Zeilendarstellung durch Drücken der ganz linken Maustaste gewählt wird, bleiben die Pixel in der Zeilendarstellung 207 eingeschaltet, wenn sich der Cursor 110 weiterbewegt. Die gekoppelte Modifikationsanforderungsdarstellung 303 und die anderen Zeilendarstellungen 207, die mit dieser Modifikationsanforderungsdarstellung 303 gekoppelt sind, bleiben natürlich ebenfalls eingeschaltet, und das Etikett 305 erscheint mit der Modifikationsanforderungsdarstellung 303. Somit zeigt die Anzeige 501 in Fig. 5 die gewählte Zeilendarstellung 503, die bei der Modifikationsanforderung, die der Modifikationsanforderungsdarstellung 303(d) entspricht, modifiziert wurde. Die Zeilendarstellung 503 ist Teil einer der Mengen von Zeilendarstellungen 307(d), die bei der Modifikationsanforderung modifiziert wurden, die der Modifikationsanforderungsdarstellung 303(d) entspricht, und die Pixel in diesen Zeilendarstellungen werden ebenfalls eingeschaltet. Die gewählte Zeile selbst erscheint nach dem Etikett "Code" in dem unteren Raum 215, und die Zusammenfassung für die Modifikationsanforderung, die der Modifikationsanforderungsdarstellung 303(d) entspricht, erscheint im Anschluß an das Etikett "MR" im unteren Raum 215. In Fig. 5 trägt die Codezeile die Bezugszahl 515, und die Zusammenfassung trägt die Bezugszahl 517. Wie aus der obigen Besprechung geschlossen werden kann, besteht das allgemeine Prinzip für die Erscheinung einer Zusammenfassung bei 517 und einer Codezeile bei 515 darin, daß die aktuelle Operation an der Anzeige 201 nur eine einzige Modifikationsanforderung und/oder eine einzige Codezeile angibt. Das Rückgängigmachen der Zeilenauswahl erfolgt durch Bewegen des Cursors über eine Zeilendarstellung 207 mit gedrückter mittlerer Taste, und das Ergebnis ist die Umkehrung des Ergebnisses der Zeilenauswahl.
  • Fig. 5 zeigt außerdem das Codesichtfenster 505. Das Codesichtfenster 505 zeigt Codezeilen an, die der durch die Zeilendarstellung 207, auf der sich der Cursor 110 gerade befindet, dargestellten Codezeile vorausgehen und folgen. Um das Codesichtfenster 505 zu öffnen, verwendet der Entwickler, der die bevorzugte Ausführungsform verwendet, die Maus 103, um die Codefensterschaltfläche 227 zu wählen. Das Fenster öffnet sich dann, und der Entwickler kann die Maus 103 verwenden, um die Größe des Fensters oder seine Position zu verändern. Nachdem der Entwickler das Codesichtfenster 505 geöffnet und dessen Größe eingestellt hat, kann er den Cursor 110 zu einer Spalte 205 bewegen; an diesem Punkt erscheint an der Position des Cursors in der Spalte 205 ein Rechteck 504. Das Rechteck weist eine horizontale Linie durch seine Mitte und eine Größe auf, die proportional zu der Größe des Fensters 505 ist, d. h. das Rechteck 504 enthält Raum für so viele Zeilendarstellungen 207, wie im Fenster 109 für Codezeilen vorliegt. Solange sich der Cursor 110 in einer Spalte 205 befindet, liegt der Cursor 110 auf der Mitte des Rechtecks 504, und das Rechteck 504 bewegt sich mit dem Cursor 110. Die beliebigen Zeilendarstellungen 207 entsprechenden Codezeilen, die sich in dem Rechteck 504 befinden, erscheinen in dem Fenster 505.
  • Durch Drücken der ganz rechten Taste der Maus 103 kann das Rechteck 504 von dem Cursor 110 getrennt werden. Dabei bleibt das Rechteck 504 dann an der Stelle, an der es sich befand, als die ganz rechte Taste gedrückt wurde, und das Fenster 505 zeigt weiter die Codezeilen an, die den Zeilendarstellungen entsprechen, die in dem Rechteck 504 enthalten sind. Das Rechteck 504 kann wieder an den Cursor 110 angebunden werden, indem die ganz rechte Taste nochmals gedrückt wird, und das Rechteck 504 bewegt sich dann dorthin, wo sich der Cursor 110 befindet. Das Codefenster 505 wird durch die standardmäßige Schließoperation für das Fenstersystem geschlossen.
  • Wenn Spalten 205 aufgetrennt werden, d. h. Zeilendarstellungen 207 sowohl für hinzugefügte als auch gelöschte Zeilen angezeigt werden, wird das Fenster 505 ebenfalls aufgetrennt, wobei die hinzugefügten und gelöschten Codezeilen nebeneinander angezeigt werden. Die Farben der angezeigten Codezeilen 511 sind dieselben wie die der entsprechenden Zeilendarstellungen 207 in dem Rechteck 504. Wenn die entsprechende Zeilendarstellung 207 nicht eingeschaltet ist, dann ist die angezeigte Zeile grau. Auf der Mitte des Codeanzeigeraums 509 wird die Codezeile 513 angezeigt, d. h. die Codezeile, die der Zeilendarstellung 207 an der Position der horizontalen Linie in dem Rechteck 504 entspricht. Bei einer bevorzugten Ausführungsform weist die angezeigte Codezeile 513 einen andersfarbigen Hintergrund als die Zeilen 511 auf. Erwartungsgemäß stimmt die Codezeile 515 mit der Zeile 513 überein, und die Zusammenfassung 517 ist die Zusammenfassung für die Modifikationsanforderung, die der angezeigten Codezeile 513 entspricht. Bei einer bevorzugten Ausführungsform können die in dem Codefenster 505 sichtbaren Codezeilen nur durch Bewegen des Rechtecks 504 verändert werden; bei anderen Ausführungsformen können die Codezeilen durch Aufwärts- oder Abwärtsrollen in dem Fenster 505 bewegt werden, und das Rechteck 504 kann sich während des Rollens von Zeilen in dem Fenster 505 in der Spalte 205 bewegen.
  • Bei einer bevorzugten Ausführungsform kann es bis zu drei Codefenster 505 geben. Durch Verwendung mehrerer Codefenster 505 kann ein Entwickler den Code in einem Teil des Codekörpers mit dem Code in einem anderen Teil des Codekörpers vergleichen. Fig. 6 zeigt eine Anzeige 601 mit zwei Codefenstern 505(a) und 505(b). Unter der Annahme, daß das Codefenster 505(a) bereits existiert, und daß das Rechteck 504(a) von dem Cursor 103 getrennt wurde, entsteht ein neues Codefenster 505(b) durch Bewegen des Cursors 110 zu der Codefensterschaltfläche 227 und Drücken der Taste. Als Ergebnis öffnet sich das Fenster 505(b), und das Rechteck 504(b) erscheint und ist mit dem Cursor 110 verbunden. Das Fenster 505(b) kann wie bereits beschrieben bewegt und bemessen werden, und da das Rechteck 504(b) nun mit dem Cursor 110 verbunden ist, werden Bewegungen des Cursors 110 in dem Fenster 505(b) wiedergegeben.
  • Das Rechteck 504(b) kann natürlich wie oben beschrieben von dem Cursor 110 getrennt werden. Wenn die Anzeige 201 mehr als ein Rechteck 504 enthält und der Cursor 110 mit keinem von ihnen verbunden ist, bewirkt das Drücken der ganz rechten Taste der Maus 103, daß sich der Cursor 110 zu dem nächsten Rechteck 504 bewegt, und daß sich das Rechteck 504 mit dem Cursor 110 verbindet. Bei der bevorzugten Ausführungsform hat der Rand 603 eines Rechtecks 504 dieselbe Farbe wie der Rand 605 des Fensters 505, dem der Cursor entspricht, so daß der Entwickler leichter bestimmen kann, welches Rechteck 504 welchem Fenster 505 entspricht. Wie für Fachleute auf dem Gebiet der grafischen Anzeigen erkennbar ist, können die gerade in bezug auf Codefenster 505 und Rechtecke 504 beschriebenen Techniken in jeder beliebigen Situation verwendet werden, in der ein "Zoom"-Fenster verwendet wird, um Einzelheiten über einen Teil einer Anzeige zu zeigen.
  • Durch die Operationen an der Anzeige 201 kann ein Entwickler somit einfach und schnell bestimmen, welche Codezeilen in dem Codekörper durch eine oder mehrere Modifikationsanforderungen beeinflußt wurden, um zu bestimmen, welche Modifikationsanforderungen für eine gegebene Codedatei oder eine gegebene Zeile in einer gegebenen Codedatei relevant sind, und um eine gegebene Codezeile und die Codezeilen in der unmittelbaren Umgebung der gegebenen Zeile anzuzeigen. Alle diese Operationen werden natürlich dadurch umso nützlicher, daß sie im Kontext der Übersicht des gesamten Codekörpers, die durch die Anzeige 201 bereitgestellt wird, ausgeführt werden. Weitere Aspekte der Anzeige 201, die in Fig. 2-6 nicht gezeigt sind, aber erwähnt werden sollen, sind die folgenden: bei bestimmten Ausführungsformen befindet sich auf der linken Seite des Anzeigeraums 214 eine Zeilennummernskala und eine Skala entlang der linken Seite der Zeilencharakterisierungsspalte 219, die den Grad der Werte angibt, die den Farbschattierungen in der Zeilencharakterisierungsspalte 219 zugeordnet sind. Zum Beispiel sind in der Anzeige 201 die Schattierungen Datumsangaben zugeordnet, und die Skala ist eine Datum- Skala.
  • Implementierung einer bevorzugten Ausführungsform: Fig. 7-13
  • Die folgende Besprechung einer Implementierung einer bevorzugten Ausführungsform beschreibt zunächst die Hardware, in der die Erfindung implementiert wird, dann die Datenstrukturen und schließlich die Funktionsweise der bevorzugten Ausführungsform.
  • In einer bevorzugten Ausführungsform verwendete Hardware: Fig. 7
  • Eine bevorzugte Ausführungsform der Erfindung wird unter Verwendung eines 4D/35-Prozessors von Silicon Graphics, auf dem das Betriebssystem Personal IRIS abläuft, implementiert. Fig. 7 ist ein Blockschaltbild der Verarbeitungseinheit 111, die den 4D/35-Prozessor von Silicon Graphics verwendet. Die Verarbeitungseinheit 111 enthält zwei Hauptkomponenten: den Speicher (MEM) 701 und den Prozessor (PROC) 709. Der Speicher enthält Programmcode 703, der ein Programm darstellt, das verwendet wird, um die bevorzugte Ausführungsform zu implementieren, und Programmdaten (PDATA) 707, die Daten darstellen, die bei der Implementierung verwendet werden. Unter der Steuerung des Programmcodes 703 verwendet die Verarbeitungseinheit 709 Programmdaten 707 zur Erzeugung der Anzeigen, die bereits beschrieben wurden, auf der Anzeige 107.
  • Die Verarbeitungseinheit 111 ist speziell so ausgelegt, daß sie Grafikanzeigen erzeugt. Die Verarbeitungseinheit 111 enthält eine Grafikschnittstelle 711, die die Anzeige 107 steuert und auf Eingaben von der Tastatur 105 und der Maus 103 reagiert. Die Grafikschnittstelle 711 wird von Grafikoperationen 705 in dem Programmcode 703 gesteuert. Die Grafikschnittstelle wird ausführlich in Graphics Library Reference Manual, C Edition, Dokument Nr. 007- 1203-040, Silicon Graphics Computer Systems, 1991, beschrieben. Wie bereits erwähnt, verwenden die Anzeigen der bevorzugten Ausführungsform Farben; die in der Anzeige verwendeten Farben werden durch den Farbplan 713 in der Grafikschnittstelle 711 definiert. Wie ausführlich in dem unteren Teil von Fig. 7 gezeigt ist, enthält der Farbplan 713 4096 Farbplaneinträge (CMAPE) 715. Einzelne Farbplaneinträge 715 werden durch Werte indiziert, die von 0 bis 4095 reichen. Jeder Farbplaneintrag enthält drei Felder, ein Rot-Feld 717, ein Grün-Feld 719 und ein Blau-Feld 721. Die Werte in diesen Feldern bestimmen die Intensität einer roten Farbkomponente, einer grünen Farbkomponente und einer blauen Farbkomponente und definieren somit eine Farbe. Zum Beispiel enthalten für die Farbe Schwarz alle drei Felder den Wert Null.
  • Drei der Grafikoperationen 705 manipulieren den Farbplan 713:
  • - color (< Farbplanindex> ) gibt eine Farbe durch Angabe eines Index eines Farbplaneintrags 715 an. Die nächsten Pixel, die in die Anzeige 107 geschrieben werden, werden in der durch den angegebenen Farbplaneintrag 715 definierten Farbe geschrieben.
  • - mapcolor (< Farbplanindex> , < Rotwert> , < Grünwert> , < Blauwert> ) setzt die Felder in dem durch den Indexwert angegebenen Farbplaneintrag 715 auf die in den übrigen Argumenten angegebenen Werte.
  • - getmcolor (< Farbplanindex> , < red 10c> , < green loc> , < blue loc> ) schreibt die aktuellen Werte der Felder des Farbplaneintrags 715, der durch den Indexwert angegeben wird, in die durch die übrigen Argumente angegebenen Speicherstellen im Speicher 701.
  • Der Farbplan 713 kann somit verwendet werden, um eine "Palette" von Farben zur Verwendung in der Anzeige 107 zu erzeugen und dann die Farben in der Anzeige 107 zu verwenden. Außerdem können die aktuellen Inhalte des Farbplans 713 zur späteren Wiederverwendung im Speicher 701 gesichert werden.
  • Zeilen- und MR-Daten: Fig. 8
  • Um eine hohe Betriebsgeschwindigkeit der bevorzugten Ausführungsform zu gewährleisten, werden die Daten aus der Codekörper-Datenbasis 113, die die Grundlage der Anzeigen bilden, aus der Codekörper-Datenbasis 113 in den Speicher 701 kopiert und bilden dort einen Teil der Programmdaten 707. Das Kopieren wird als Teil einer Vorverarbeitungsoperation durchgeführt, die später ausführlich beschrieben wird. Fig. 8 zeigt die Form der Daten im Speicher 707. Die Daten fallen in zwei Gruppen: Zeileninformationen 801, d. h. Informationen bezüglich der Codezeilen in dem Codekörper, und Modifikationsanforderungsinformationen (MR-Informationen) 817, d. h. Informationen bezüglich der Modifikationsanforderungen, die den Codezeilen entsprechen.
  • Die Vorverarbeitungsoperation sortiert sowohl die Dateien in dem Codekörper als auch die Modifikationsanforderungen. Bei einer bevorzugten Ausführungsform werden die Dateien nach Dateinamen sortiert; die Modifikationsanforderungen werden nach den Werten sortiert, die den Farben zugeordnet sind;
  • bei dem vorliegenden Beispiel sind diese Werte die Werte des Datum-Datensatzes 139. Bei anderen Ausführungsformen können die Modifikationsanforderungen nach anderen Werten sortiert werden, wie zum Beispiel nach Entwicklernamen von den Entwicklern 143.
  • Beginnend mit den Zeileninformationen 801 setzt das erste Informationselement hinzugefügte Codezeilen mit den Modifikationsanforderungen in Beziehung, die die Zeilen hinzugefügt haben. Add modification requests 803 ist ein Array, das einen Eintrag für jeden Codedatei- Zeilendatensatz 118 enthält, dessen AMR-Feld 120 angibt, daß die Zeile hinzugefügt wurde. Die Einträge für jede Datei liegen in der Reihenfolge vor, in der sie an der Datei auftreten, und die Mengen von Einträgen für die Dateien werden in der Reihenfolge angeordnet, in der die Dateien sortiert wurden. Jeder Add modification-request-Eintrag (AMRE) 805 enthält einen Zeiger auf eine Speicherstelle in den Modifikationsanforderungsinformationen 817, der die Farbe angibt, die der Modifikationsanforderung zugeordnet ist, die die Zeile hinzugefügt hat.
  • Delete modification requests 807 ist ein Array wie add modification requests 803, mit der Ausnahme, daß es Einträge für jede gelöschte Zeile enthält. Wiederum enthält jeder Eintrag einen Zeiger auf eine Speicherstelle in den Modifikationsanforderungsinformationen 817, der die Farbe angibt, die der Modifikationsanforderung zugeordnet ist, die die Zeile gelöscht hat. Die Codezeilen 809 sind der Text der Codezeilen in dem Codekörper. Die Zeilen sind in der Reihenfolge angeordnet, in der sie in den Dateien auftreten, und die Dateien sind in der sortierten Reihenfolge angeordnet. Anzahl-von-Dateien 811 ist eine ganze Zahl, die die Anzahl von Dateien angibt, und Anzahl-von-Zeilen 813 ist ein Array von ganzen Zahlen, das die Anzahl von Zeilen in jeder Datei angibt. Die ganzen Zahlen für die Dateien sind in der Reihenfolge angeordnet, in der die Dateien sortiert wurden. Dateinamen 815 ist ein Array der Namen der Dateien, die wiederum in der Reihenfolge angeordnet werden, in der die Dateien sortiert wurden.
  • Weiter mit Bezug auf die Modifikationsanforderungsinformationen 817 ist der erste Teil dieser Daten ein Array, das die Farben angibt, die den Modifikationsanforderungen zugeordnet sind. Modifikationsanforderungsfarben 819 enthält einen Modifikationsanforderungsfarbeneintrag (MCRE) 821 für jede Modifikationsanforderung, die sich auf den Codekörper ausgewirkt hat. Der Eintrag für eine gegebene Modifikationsanforderung erscheint an einer Speicherstelle in dem Array, die der Speicherstelle der Modifikationsanforderung in der sortierten Liste von Modifikationsanforderungen entspricht, d. h. in diesem Fall gilt der erste Eintrag 821 für die älteste Modifikationsanforderung und der letzte Eintrag 821 für die jüngste Modifikationsanforderung. Als Teil der Vorverarbeitung wurde der Farbplan 713 so eingerichtet, daß eine Menge von Farbplaneinträgen 715 entsprechend den Modifikationsanforderungen vorlag. In dieser Menge wurden die Farben so angeordnet, daß dem Eintrag 715, der der ältesten Modifikationsanforderung entspricht, die Farbe Blau gegeben wurde, dem Eintrag 715, der der jüngsten entspricht, die Farbe Rot und den anderen die dazwischenliegenden Farben gegeben wurden. Jeder Eintrag 821 enthält den Index in dem Farbplan 713 der Farbe, die der durch den Eintrag 821 dargestellten Modifikationsanforderung entspricht.
  • MR names 822 ist ein Array der Namen der Modifikationsanforderungen. Die Informationen stammen aus dem Modifikationsanforderungsnamenfeld 125. Wiederum liegen die Namen in der Reihenfolge vor, in der die Modifikationsanforderungen sortiert wurden. Das Feld 823 gibt die Anzahl von Modifikationsanforderungen an; die Modifikationsanforderungsbeschreibungen 825 sind ein Array, das die Zusammenfassungen 141 enthält. MR-Titel 827 ist der Titel, der über der Zeilencharakterisierungsspalte 219 erscheint; er wird als ein Parameter während der Vorverarbeitung bereitgestellt. MR-Datum 829 ist ein Array der Datum- Angaben aus dem Datum-Feld 139; wiederum ist das älteste Datum das erste Element und das jüngste das letzte. MR-Etiketten 829 sind Daten, mit denen die MRs in der Zeilencharakterisierungsspalte 219 etikettiert werden. Die Etiketten liegen in der Reihenfolge vor, zu der die Modifikationsanforderungen sortiert wurden. Display-Flags 833 sind Flags, die die Erscheinung der Anzeige 201 vor allen Eingaben des Entwicklers angeben, zum Beispiel, ob die aufgeteilte Anzeige an diesem Punkt verwendet wird. Fenstertitel 835 ist schließlich der Titel 203 des Fensters 109. Sowohl die Flags als auch der Titel werden als Parameter bereitgestellt.
  • Die Auswirkung der Erzeugung der Zeileninformationen 801 und der Modifikationsanforderungsinformationen 817 aus der Codekörper-Datenbasis 113 besteht darin, daß alle Informationen, die sich aus bestimmten Anfragen an die Codedatenbasis 113 ergeben würden, in den Zeileninformationen 801 und in der Modifikationsanforderung 817 enthalten sind und der bevorzugten Ausführungsform unmittelbar zur Verfügung stehen. Die bevorzugte Ausführungsform kann somit im wesentlichen sofortige Anzeigen der Ergebnisse solcher Anfragen bereitstellen.
  • Bei der bevorzugten Ausführungsform verwendete Objekte: Fig. 9-11
  • Der Quellcode für den Programmcode 703 für die bevorzugte Ausführungsform ist unter Verwendung der Programmiersprache C++ geschrieben, die in Bjarne Stroustrup, The C++ Programming Language, Addison- Wesley, Reading, MA, 1987, beschrieben wird. C++ ist eine objektorientierte Sprache, und Objekte werden folglich in dem Quellcode verwendet, um die Modifikationsanforderungen und den Code darzustellen.
  • Fig. 9 zeigt Datenstrukturen, die in dem Modifikationsanforderungsobjekt 901 verwendet werden, das die Modifikationsanforderung darstellt. Die erste Datenstruktur ist das Modifikationsanforderungsstatusarray 903. Für jede Modifikationsanforderung besteht in dem Array 903 ein Modifikationsanforderungsstatuseintrag (MRSE) 905, und die Einträge sind in der Reihenfolge vom ältesten zum jüngsten angeordnet. Jeder Eintrag kann einen von vier Statuswerten aufweisen: weder markiert noch aktiv, markiert, aktiv, und sowohl markiert als auch aktiv. Der Status "markiert" zeigt an, daß das Etikett 305 der Modifikationsanforderung angezeigt werden soll; der Status "aktiv" zeigt an, daß die Modifikationsanforderung aktiv ist.
  • Die Felder 907 bis 919 sind Zeiger auf Teile von MR- INFO 817. MR-NAMEN 907 zeigt auf MR-NAMEN 822; MR-DESCS 911 zeigt auf MR-DESCS 825; MR-TITEL 915 zeigt auf MR- TITEL 827; MR-COLS 919 zeigt auf MR-FARBEN 819. Das Feld 923 gibt die Anzahl von Modifikationsanforderungen an; MR-SCALEN 925 zeigt auf ein Array, das die Skala- Etiketten für die Zeilencharakterisierungsspalte 219 enthält; MR-SCALEL 929 zeigt auf ein Array, das die Speicherstellen für die Etiketten enthält.
  • Die Arrays VORNE 933 und HINTEN 937 sind Boolsche Arrays. Für jede Modifikationsanforderung liegt ein Element in jedem Array vor, und der Wert des Elements gibt an, ob die Modifikationsanforderungsdarstellung 303 und die damit gekoppelten Zeilendarstellungen 205 in Schwarz oder in der der Modifikationsanforderung zugeordneten Farbe auf der Anzeige 201 angezeigt werden sollen. Es gibt zwei Arrays, so daß die Anzeige 201 von VORNE neu gezeichnet werden kann, während HINTEN 937 modifiziert wird, um die Änderungen umzusetzen, die sich aus der Bewegung des Cursors 110 und den Positionen der Tasten auf der Maus 103 ergeben.
  • Fig. 11 zeigt Datenstrukturen, die zu dem Codeobjekt 1101 gehören, das den Code des Codekörpers darstellt. Der Codezeiger 1103 zeigt auf Codezeilen 809 in Zeilen- Info 801; wie in Fig. 11 gezeigt sind die Zeilen in der Reihenfolge für jede Datei organisiert, wobei die Dateien in der sortierten Reihenfolge vorliegen. Anzahl-von-Dateien (n-Dateien) 1109 zeigt die Anzahl von Dateien mit Code in den Codezeilen 809 an. Der Anzahl-von-Zeilen-Zeiger 111 zeigt auf ein Anzahl-von- Zeilen-Array (NLA-Array) 1113, das für jede der Dateien in 809 einen Anzahl von-Zeilen-Array-Eintrag (NLAE) 1115 enthält, der die Anzahl von Zeilen in dieser Datei angibt. Die Reihenfolge der Einträge ist wiederum die sortierte Reihenfolge der Dateien. Schließlich zeigt der Maximal-Zeilen-Zeiger 1117 auf das Maximal-Zeilen- Längen-Array (MLLA) 1119, das für jede Datei einen Maximal-Zeilen-Längen-Array-Eintrag (MLLAE) 1121 enthält. Der Eintrag für eine Datei gibt die Länge der längsten Zeile in der Datei an. Die Zeilenlängeninformationen werden verwendet, um die Zeilendarstellungen 207 richtig zu bemessen.
  • Fig. 11 zeigt außerdem das Farb-Array 1123, ein Array im Speicher 701, das parallel zu dem Farbplan 713 ist und die Beziehung zwischen Modifikationsanforderungen und den ursprünglich in dem Farbplan 713 eingerichteten Farben behält. Entsprechend jedem Farbplaneintrag 715 liegt ein Farb-Array-Eintrag (LAE) 1125 in dem Farb- Array 1123 vor, und wie ein Farbplaneintrag 715 gibt ein Farb-Array-Eintrag 1125 durch Werte in einem Rot- Feld 1127, einem Grün-Feld 1129 und einem Blau-Feld 1131 eine Farbe an.
  • Fig. 10 zeigt andere relevante Datenstrukturen, die bei der bevorzugten Ausführungsform verwendet werden. Die Variable "do indent" zeigt durch ihren Wert an, ob die Zeilendarstellungen 207 Einrückungen zeigen sollen. Der Wert wird eingestellt, wenn der Cursor 110 über die Schaltfläche 223 bewegt und die linke Maustaste gedrückt wird. Die Variable "do split" zeigt durch ihren Wert an, ob die Zeilendarstellungen für die hinzugefügten Zeilen, die gelöschten Zeilen oder beide, angezeigt werden sollen. Der Wert wird eingestellt, wenn der Cursor 110 über die Schaltfläche 227 bewegt wird. Beide können auch aus Werten in Display-Flags 833 am Anfang der Ausführung des Programmcodes 703 gesetzt werden. Das Hinzugefügte-Zeile-Array (ALA) 1005 ist ein Array von Zeigern auf Einträge 805 in einem Hinzufügen- Modifikationsanforderungs-Array 803; jeder Eintrag 805 zeigt wiederum auf einen Eintrag in MR-Farben 819. Ähnlich ist das Gelöschte-Zeile-Array (DLA) 1011 ein Array von Zeigern auf Einträge in Löschen- Modifikationsanforderungen 807. Diese Strukturen dienen somit dazu, Codezeilen mit den relevanten Modifikationsanforderungen zu verbinden.
  • Funktionsweise der bevorzugten Ausführungsform: Fig. 12 und 13
  • Fig. 12 und 13 enthalten zusammen das Flußdiagramm 1201, das eine Ansicht der Funktionsweise der bevorzugten Ausführungsform auf höherer Ebene darstellt. Beginnend mit Fig. 12 ist der erste Teil der Funktionsweise der bevorzugten Ausführungsform der Vorverarbeitungsschritt 1209, der Zeilen-Info 801 und MR-Info 817 aus den Daten in der Codekörper-Datenbasis 113 vorbereitet. Der erste Schritt bei der Vorverarbeitung ist der Schritt 1203. Im Schritt 1203 wird eine Klasse von Werten gewählt, die in dem Farbplan 713 Farben zugeordnet werden soll. In dem oben umrissenen Beispiel war die gewählte Klasse von Werten das Datum, an dem jede der Modifikationsanforderungen abgeschlossen wurde; es ist jedoch genauso möglich, andere Klassen von Werten zu wählen. Wenn es zum Beispiel gewünscht ist, zu sehen, welcher Code von welchen Entwicklern geschrieben wurde, dann können die in den Entwickler-Datensätzen 103 angegebenen Gruppen von Entwicklern als die Klasse von Werten gewählt werden, und man kann jeder Gruppe von Entwicklern eine verschiedene Farbe zuordnen. Bei der bevorzugten Ausführungsform erfolgt die Auswahl der Klasse von MR- Werten als Reaktion auf einen dem Programm, das die Vorverarbeitung ausführt, bereitgestellten Parameter.
  • Der nächste Schritt (Schritt 1205) bildet die Modifikationsanforderungen auf Einträge 715 in dem Farbplan 713 ab. Bei der bevorzugten Ausführungsform erfolgt dies durch Sortieren der Werte der gewählten Klasse von MR-Werten, Abbilden der sortierten Werte auf Einträge 715 und dann Zuordnung jeder Modifikationsanforderung zu der Farbe, auf die der gewählte Wert für diese Modifikationsanforderung abgebildet wurde. Bei dem Datum-Beispiel wurden die Datum-Angaben von der frühesten zu der spätesten sortiert und in dieser Reihenfolge auf die Farbplaneinträge 715 abgebildet, die Farben im Bereich von Blau bis Grün, Gelb und Orange bis Rot darstellen. Jede Modifikationsanforderung weist ein Datum auf, und die Farbe, auf die das Datum der Modifikationsanforderung abgebildet wird, wird zu der Farbe der Modifikationsanforderung. Die Ergebnisse der Abbildung der gewählten Werte auf die Farben und der Zuordnung der Farben zu den Modifikationsanforderungen werden in MR-Farben 819 aufgezeichnet, worin jeder Eintrag 821 für eine MR den Index des Farbplaneintrags 714 für die dem Datum 139 zugeordnete Farbe für die gegebene Modifikationsanforderung enthält.
  • Der letzte Schritt (Schritt 1207) der Vorverarbeitung 1209 erstellt Zeilen-Info 801 und MR-Info 817. Wie bereits erwähnt, stammt der größte Teil der Informationen in diesen Datenstrukturen aus der Codekörper- Datenbasis 113. Informationen über Codezeilen und die Zeilen selbst werden geordnet, indem man die Dateinamen sortiert und die Zeilen in den Dateien in der Reihenfolge der sortierten Dateinamen anordnet; Informationen über MRs werden gemäß der sortierten Reihenfolge der Werte geordnet, die auf den Farbplan 713 abgebildet wurden. Die Werte von Display-Flags 813, MR-Titel 827 und Fenstertitel 835 werden dem Vorverarbeitungsprogramm durch Parameter bereitgestellt.
  • MR-Info 817 und Zeilen-Info 801 sind Argumente für das Programm, das die Anzeige 201 tatsächlich erzeugt und manipuliert. Der erste Schritt in diesem Programm (Schritt 1211) erzeugt die Objekte, einschließlich des Fensters 109, und initialisiert Daten in den Objekten mit Werten aus den Argumenten. Zu den Operationen, die an diesem Punkt durchgeführt werden, gehört das Kopieren der aktuellen Werte von Farbplaneinträgen 715 auf die entsprechenden Einträge des Farb-Array 1123.
  • Nachdem diese Initialisierungen durchgeführt wurden, kann die Hauptschleife 1301 (Fig. 13) mit der Ausführung beginnen. Der erste Schritt in der Hauptschleife (Schritt 1303) holt den Wert am Kopf einer Warteschlange von Eingaben aus der Tastatur 105 und der Maus 103. Dieser Wert bestimmt, was im Schritt 1305 geschieht, wenn er anzeigt, daß das Zeilenanzeigefenster, in dem die Anzeige 201 erscheint, geschlossen werden soll (Zweig 1306), die notwendigen Aktionen zum Schließen des Fensters werden unternommen, und das Programm, das die bevorzugte Ausführungsform implementiert, endet (siehe Schritt 1307 und 1309).
  • Andernfalls werden die anderen Fälle in 1311 verarbeitet; gleichgültig, welcher Fall verarbeitet wird, ist der nächste Schritt der Schritt 1313: wenn sich der Cursor 110 in dem Zeilenanzeigefenster befindet, ist der nächste Schritt der Schritt 1317; andernfalls ist es der Schritt 1303. Im Schritt 1317 wird der Programmzustand so eingestellt, wie es durch die Mauseingabe erfordert wird. Zu Beispielen gehören die folgenden:
  • Wenn die Maus im Anzeigenraum 213 ist, findet folgendes im Schritt S1317 statt:
  • - Wenn der Cursor über eine Zeilendarstellung 207 oder eine Modifikationsanforderungsdarstellung 303 geführt worden ist, wird der Eintrag 935 in dem VORNE-Array 933 für die Modifikationsanforderung, die die Zeile modifiziert hat, die durch die Zeilendarstellung dargestellt wird, oder die durch die Modifikationsanforderungsdarstellung dargestellt wird, auf WAHR gesetzt.
  • - Wenn die ganz linke Taste gedrückt war, als der Cursor über die Zeilendarstellung 207 oder die Modifikationsanforderungsdarstellung 303 geführt wurde, wird der MR-Status-Eintrag 905 für die Modifikationsanforderung auf "sowohl markiert als auch aktiv" gesetzt.
  • - Wenn die mittlere Taste gedrückt war, als der Cursor über die Zeilendarstellung 207 oder die Modifikationsanforderungsdarstellung 303 geführt wurde, wird der MR-Status-Eintrag 905 für die Modifikationsanforderung auf "weder markiert noch aktiv" gesetzt, und der Eintrag in dem VORNE-Array 933 für die Modifikationsanforderung wird auf FALSCH gesetzt.
  • Wenn sich der Cursor in dem oberen Raum 211 befindet, findet im Schritt 1317 folgendes statt: wenn sich der Cursor 110 auf einem Dateinamen 209 befindet, wird der Zustand so gesetzt, daß der Name weiß ist, wenn die linke Taste gedrückt wurde, rot, wenn die mittlere Taste gedrückt wurde, und andernfalls gelb. Danach wird eine Schleife ausgeführt, die für jede Zeile in der durch das Etikett identifizierten Datei folgendes durchführt: abhängig davon, ob die Anzeige hinzugefügte Zeilen, gelöschte Zeilen oder beides anzeigt, verwendet sie das Hinzugefügte-Zeilen-Array 1005 und/oder das Gelöschte-Zeilen-Array 1011, um den Eintrag in MR- Farben 819 zu finden, der den Index in dem Farbplan 713 für die Modifikationsanforderung enthält, die der hinzugefügten oder gelöschten Zeile zugeordnet ist. Der Eintrag in HINTEN 937 für diese Modifikationsanforderung wird auf WAHR gesetzt, wenn die linke Taste gedrückt ist, der Zustand in diesem MR-Status- Eintrag 905 wird auf aktiv gesetzt (oder auf sowohl aktiv als auch markiert, wenn er bereits auf markiert gesetzt war). Wenn die rechte Taste gedrückt ist, wird der Eintrag in HINTEN 937 für diese Modifikationsanforderung auf FALSCH gesetzt, und der Zustand in diesem MR-Status-Eintrag 905 wird auf weder markiert noch aktiv gesetzt.
  • Wenn sich der Cursor 110 in dem rechten Raum 217 befindet, hängt Schritt 1317 davon ab, ob sich der Cursor 110 auf einem Zeilencharakterisierungsspaltenetikett 220 oder in der Spalte 219 befindet. Im ersten Fall wird der Zustand so gesetzt, daß die Farbe des Etiketts 220, wie für die Dateinamen 209 beschrieben, verändert wird; wenn dann entweder die linke oder die mittlere Taste gedrückt ist, wird für jede Modifikationsanforderung der Eintrag 905 für die Modifikationsanforderung in dem MR-Status-Array 903 untersucht, um zu bestimmen, ob ihr Status "markiert" oder "markiert und aktiv" ist, und der Status gesichert; als nächstes wird der Eintrag für die MR in dem MR-Status-Array 903 so gesetzt, wie es durch die Maustasten erfordert wird: wenn die linke Taste gedrückt ist, wird der Status aktiv, und der Eintrag für die MR in HINTEN 937 wird auf WAHR gesetzt; wenn die mittlere Taste gedrückt ist, wird der Status weder markiert noch aktiv, und der Eintrag für die MR in HINTEN 937 wird auf FALSCH gesetzt. Wenn dann der gesicherte Status der MR nicht "markiert" oder "markiert und aktiv" ist, wird der aktuelle Status der MR nur auf "aktiv" gesetzt. Dadurch wird sichergestellt, daß nur die Etiketten 305 für die Modifikationsanforderungsdarstellungen 303, die vor der Auswahl des Spaltenetiketts 220 eingeschaltet waren, eingeschaltet bleiben, wenn alle Modifikationsanforderungsdarstellungen aktiviert werden.
  • Wenn sich der Cursor 110 in der Zeilencharakterisierungsspalte 219 befindet, wird die Position des Cursors 110 in die Nummer der Modifikationsanforderung konvertiert, die durch die Modifikationsanforderungsdarstellung am Cursor 110 dargestellt wird. Die Konvertierung ist möglich, da die Modifikationsanforderungsdarstellungen 309 in der Spalte 219 dieselbe Reihenfolge wie die Modifikationsanforderungen in Modifikationsanforderungs-Farben 819 aufweisen. Die Einträge in dem Modifikationsanforderungs-Status-Array 903 und dem HINTEN-Array 937 für die Modifikationsanforderung werden dann folgendermaßen gesetzt:
  • - Ob eine Schaltfläche gezeigt ist oder nicht, wird der HINTEN-Array-Eintrag auf WAHR gesetzt;
  • - wenn die ganz linke Taste gedrückt ist, wird der Status-Array-Eintrag weiterhin auf den Wert "markiert und aktiv" gesetzt;
  • - wenn die mittlere Taste gedrückt ist, wird der HINTEN-Array-Eintrags-Wert auf FALSCH zurückgesetzt und der Status-Array-Eintrag wird auf den Wert "weder markiert noch aktiv" gesetzt.
  • Eine wichtige Auswirkung des Setzens des Zustands wie in der obigen Besprechung der unternommenen Aktionen, wenn sich der Cursor 110 in dem Anzeigeraum 213, dem oberen Raum 211 oder dem rechten Raum 217 befindet, besteht darin, daß der HINTEN-Array-Eintrag 939 für jede Modifikationsanforderung, die durch den Cursor 110 "eingeschaltet" wurde, als der Cursor 110 über die Modifikationsanforderungsdarstellung 303 für die Modifikationsanforderung oder die Zeilendarstellung 207 einer Zeile, auf die sich die Modifikationsanforderung auswirkte, geführt wurde, auf WAHR gesetzt wird. Wenn die ganz linke oder mittlere Maustaste gedrückt wurde, wurde ferner der MR-Status-Eintrag 905 für die Modifikationsanforderung wie durch die Taste erfordert gesetzt, und im Fall der mittleren Maustaste wurde der HINTEN-Array-Eintrag 939 auf FALSCH gesetzt. Es ist also möglich, durch Untersuchen des HINTEN-Array 937 zu bestimmen, welche Zeilendarstellungen 207 und Modifikationsanforderungsdarstellungen 303 als Ergebnis der Bewegung des Cursors 110 eingeschaltet werden sollen, und durch Untersuchen des MR-Status-Array 903 zu bestimmen, welche Zeilendarstellungen 207 und Modifikationsanforderungsdarstellungen 303 eingeschaltet bleiben sollen, da sie mittels der ganz linken Maustaste gewählt wurden.
  • Als letztes enthält der untere Raum 223 nur die Schaltflächen 223, 225 und 227. Im Fall der Einrückungsschaltfläche 223 und der Codeanzeigeartschaltfläche 227 ändert ein Auswählen oder Rückgängigmachen der Auswahl der Schaltflächen den Zustand der statischen Variablen do indent und do_split; die Auswirkung der Codesichtschaltfläche 225 wird später ausführlicher beschrieben.
  • Der letzte Teil des Schritts 1317 beim Einrichten des Zustands ist das Einrichten des Farbplans 713, so daß die Farbplaneinträge 715, die den Modifikationsanforderungen entsprechen, deren Modifikationsanforderungsdarstellungen 303 und zugeordneten Zeilendarstellungen 207 eingeschaltet werden sollen, auf die Farbe eingestellt werden, die der Modifikationsanforderung zugeordnet ist, und die Farbplaneinträge 715, die den Modifikationsanforderungen entsprechen, deren Modifikationsanforderungsdarstellungen 303 und zugeordneten Zeilendarstellungen 207 nicht eingeschaltet werden sollen, auf Schwarz gesetzt werden. Der Farbplan 713 wird durch eine Schleife eingerichtet, die für jede Modifikationsanforderung zunächst den HINTEN-Array- Eintrag 939 für die Modifikationsanforderung mit dem VORNE-Array-Eintrag 935 für die Modifikationsanforderung vergleicht; wenn sie sich unterscheiden, wodurch angegeben wird, daß eine Modifikationsanforderung eingeschaltet oder ausgeschaltet wurde, wird der Index des Farbplaneintrags 715 dieser Modifikationsanforderung gesichert. Wenn der HINTEN- Array-Eintrag 939 für die Modifikationsanforderung WAHR ist, wird dann die Funktion "mapcolor" verwendet, um den Farbplaneintrag 715 der Modifikationsanforderung auf die Werte in dem Farb-Array-Eintrag 1125 der Modifikationsanforderung zu setzen; andernfalls setzt "mapcolor" den Farbplaneintrag 715 der Modifikationsanforderung auf Schwarz; daraufhin wird der HINTEN- Array-Eintrag 939 in den VORNE-Array-Eintrag 935 kopiert. Dieser letzte Schritt stellt natürlich sicher, daß das VORNE-Array 933 immer den unmittelbar vorausgehenden Zustand des HINTEN-Array 937 enthält. Als letztes werden das Etikett 214 und jede Codezeile 515, die angezeigt werden, und das Etikett 216 und jede Modifikationsanforderungszusammenfassung 517, die angezeigt werden, in dem unteren Raum 215 gezeichnet.
  • Wieder mit Bezug auf das Flußdiagramm 1201 wird im nächsten Schritt (Schritt 1319) die Anzeige 201 gemäß dem Zustand, der im Schritt 1317 oder in früheren Iterationen der Schleife 1301 gesetzt wurde, neu gezeichnet. Bei einer bevorzugten Ausführungsform werden nur diejenigen Teile der Anzeige 201 neu gezeichnet, die sich als Ergebnis der Mauseingabe verändert haben. Wenn die Eingabe zum Beispiel nur den Anzeigeraum 213 betrifft, wird nur dieser Raum neu gezeichnet. Das Neuzeichnen geschieht durch Kopieren des aktuellen Anzeigepuffers in einen leeren Puffer, wobei die Teile des leeren Puffers, die sich verändert haben, neu gezeichnet werden, und anschließendes Auswechseln des Puffers mit der neu gezeichneten Anzeige mit dem Puffer, aus dem die Anzeige 201 gerade angezeigt wird.
  • Das Neuzeichnen der verschiedenen Räume geschieht folgendermaßen: wenn der Anzeigeraum 213 neu gezeichnet werden muß, wird eine Schleife ausgeführt, in der die Spalte 205 für jede Datei in dem Körper gezeichnet wird. Die Spalte wird mittels der folgenden Schleife gezeichnet: für jede Zeile der Datei wird zunächst die in den Codezeilen 809 gespeicherte Zeile untersucht, um ihre Länge und die Anzahl vorangestellter Leerräume zu bestimmen; wenn die Variable do_indent 1001 dann anzeigt, daß die Einrückungsschaltfläche 223 gedrückt wurde, werden die Länge und der Startpunkt der Zeilendarstellung 203 entsprechend eingestellt; andernfalls ist die Zeilendarstellung 203 so breit wie die Spalte 205.
  • Als nächstes wird die Zeilendarstellung gezeichnet, wobei der Index in den Farbplan 713 verwendet wird, der in dem Hinzugefügte-Zeilen-Array 1005, dem Gelöschte- Zeilen-Array 1011 oder beidem, abhängig davon, ob die Anzeige 201 hinzugefügte Zeilen, gelöschte Zeilen oder beides anzeigt, für die Modifikationsanforderung der Zeile angegeben ist. Wenn die Zeilendarstellungen 207 für die gewählte Zeilenmodifikationsanforderung eingeschaltet werden sollen, wird, wie bereits erwähnt, der Eintrag der Modifikationsanforderung in dem Farbplan 713 auf die Farbe gesetzt, die in dem Farb- Array 1123 für die Modifikationsanforderung angegeben ist; wenn die Zeilendarstellungen ausgeschaltet werden sollen, wird der Eintrag 715 der Modifikationsanforderung auf Schwarz gesetzt.
  • Bezüglich des oberen Raums 211 wird der obere Raum 211 weiterhin durch eine Schleife neu gezeichnet, die den Dateinamen 209 jeder Datei über der Spalte 205 für die Datei schreibt. Das Zeichnen des unteren Raums 215 fügt den aktuellen Zustand der Schaltflächen 223, 225 und 227 zu den Etiketten 214 und 216 und dem Code und den Zusammenfassungszeilen 515 und 517 hinzu.
  • Der rechte Raum 217 wird folgendermaßen neu gezeichnet: die Zeilencharakterisierungsspalte 219 wird durch eine Schleife gezeichnet, die für jede Modifikationsanforderung ausgeführt wird. Die Schleife erhält den Index der Modifikationsanforderung in dem Farbplan 713 aus MR-Farben 819, verwendet die Farbfunktion, um die in diese Farbe zu schreibende Farbe zu setzen, und zeichnet dann die Modifikationsanforderungsdarstellung 303; dementsprechend hat die Modifikationsanforderungsdarstellung 303 die Farbe für die Modifikationsanforderung in dem Farbplan 713; wie bereits erwähnt, ist diese Farbe Schwarz, wenn die Modifikationsanforderung nicht "eingeschaltet" wurde, und andernfalls befindet sich die der Modifikationsanforderung zugeordnete Farbe in dem Farb-Array 1123. Wenn sich ferner der MR-Status-Array-Eintrag 905 für die Modifikationsanforderung in dem Zustand "markiert" oder dem Zustand "markiert und aktiv" befindet, wird das Etikett 305 für die Modifikationsanforderung neben der Modifikationsanforderungsdarstellung gezeichnet. Das Etikett 305 hat dieselbe Farbe wie die Modifikationsanforderungsdarstellung. Als letztes wird bei der bevorzugten Ausführungsform die Datum-Skala der Modifikationsanforderung rechts neben der Zeilencharakterisierungsspalte 219 gezeichnet, und das Titeletikett 220 wird über der Zeilencharakterisierungsspalte 220 gezeichnet.
  • Implementierung von Codebetrachtungsvorrichtungen: Fig. 5, 6 und 14
  • Wie bei der Besprechung von Fig. 5 erläutert, ist das Ergebnis beim Drücken der Codefensterschaltfläche 227, daß in der Anzeige 201 ein Codefenster 505 und ein zugeordnetes Rechteck 504 erscheint. Wenn das Rechteck 504 über einer Gruppe von Zeilendarstellungen 207 positioniert wird, zeigt das Codefenster 505 die Zeilen, die durch diese Zeilendarstellungen 207 dargestellt werden. Das Rechteck 504 und das Codefenster 505 bilden zusammen eine Codebetrachtungsvorrichtung. Die bevorzugte Ausführungsform kann bis zu drei Codebetrachtungsvorrichtungen aufweisen. Sie werden als ein Array von Codebetrachtungsvorrichtungs-Objekten implementiert. Fig. 14 zeigt die Daten, die verwendet werden, um ein Codebetrachtungsvorrichtungs-Objekt zu implementieren. Die Daten fallen in vier Kategorien: Codefensterinformationen 1403, die die Zeilen beschreiben, die in dem Codefenster 505 der Codebetrachtungsvorrichtung angezeigt werden, Dateiinformationen 1415, die die Datei beschreiben, aus der die Zeilen angezeigt werden, Rechteckinformationen 1431, die das Rechteck 504 für die Codebetrachtungsvorrichtung beschreiben, und den Codebetrachtungsvorrichtungs-Status 1439, der angibt, ob die Codebetrachtungsvorrichtung angebunden ist.
  • Beginnend mit den Codefensterinformationen 1403 sind die Daten wie folgt:
  • - Maximal-Zeilen 1405 zeigt die maximale Anzahl von Zeilen an, die in dem Fenster 505 angezeigt werden können;
  • - erstes-Anzeige-Zeilen-Offset 1407 ist das Offset der ersten Zeile, die in dem Fenster 505 angezeigt wird, von der ersten Zeile der Datei in den Codezeilen 809;
  • - letztes Anzeige-Zeilen-Offset 1409 ist das Offset der letzten Zeile, die in dem Fenster 505 angezeigt wird, von der ersten Zeile der Datei in den Codezeilen 809;
  • - Anzeigemoduszeiger 1411 ist ein Zeiger auf die Variable do split, die anzeigt, ob hinzugefügte Zeilen, gelöschte Zeilen oder beides angezeigt werden sollen; und
  • - letzter-Anzeigemodus 1413 zeigt den Anzeigemodus an, der beim letzten Neuzeichnen des Fensters 505 benutzt wurde.
  • Die Dateiinformationen 1415 enthalten die folgenden Daten:
  • - Dateizeilenzeiger 1417, einschließlich eines Erste-Datei-Zeilen-Zeigers (FFL) 1419 auf die erste Zeile in den Codezeilen 809 der Datei, aus der Zeilen gerade in dem Codefenster 505 angezeigt werden, eines Aktuelle-Datei-Zeilen- Zeigers (CFL) 1421 auf die Zeile, auf der sich die Mitte des Rechtecks 504 gerade befindet, und eines Letzte-Datei-Zeilen-Zeigers (LFL) 1423 auf die letzte Zeile der Datei.
  • - Der Erste-Hinzugefügte-Zeile-Array-Eintrag- Zeiger (Erste-ALAE) 425 zeigt auf den Eintrag für die erste Zeile der Datei in dem Hinzugefügte-Zeile-Array 1005; und
  • - der Erste-Gelöschte-Zeile-Array-Eintrag-Zeiger (Erste-ALAE) 1427 zeigt auf den Eintrag für die erste Zeile der Datei in dem Gelöschte-Zeilen- Array 1011.
  • Die Dateiinformationen 1415 liefern somit alle notwendigen Informationen, um die Zeilen in der Datei zu finden, die gerade in dem Codefenster angezeigt werden, und um die Zeilen in Farben anzuzeigen, die den Zeilendarstellungen 207 für die Zeilen entsprechen.
  • Die übrigen Informationen definieren das Rechteck 504 und geben an, ob die Codebetrachtungsvorrichtung angebunden ist. Die Rechteckinformationen 1431 bestehen aus den x- und y-Koordinaten 1433 und 1435 der Mitte des Rechtecks und der Farbe der Randlinie 1437, die für das Rechteck und für das zugeordnete Codefenster verwendet wird. Der Codebetrachtungsvorrichtungs-Status 1439 enthält den Wert WAHR, wenn die Codebetrachtungsvorrichtung angebunden ist, und andernfalls FALSCH.
  • Es werden nun die Einzelheiten der Erzeugung und der Funktionsweise einer Codebetrachtungsvorrichtung beschrieben. Wenn ein Entwickler die Schaltfläche 227 mit der Maus aktiviert, wenn weniger als drei Codebetrachtungsvorrichtungen in der Anzeige 210 vorliegen, ist das Ergebnis die Erzeugung einer neuen Codebetrachtungsvorrichtung. Im Verlauf der Erzeugung wird der Anzeigemodus 1411 auf den aktuellen Wert von do split 1003 und die Zeiger 1417 alle auf NULL gesetzt, die Farbe für die Ränder der neuen Codebetrachtungsvorrichtung wird bestimmt, Mindestgrößen für das Codefenster 505 und das Rechteck 504 eingerichtet und der Codebetrachtungsvorrichtungs- Status 1439 wird auf WAHR gesetzt. Der Entwickler verwendet dann die Maus, um die Größe des Fensters einzustellen, und die Größe des Rechtecks 504 wird proportional zu der Fenstergröße eingestellt.
  • Wenn sich Codebetrachtungsvorrichtungen in der Anzeige 207 befinden, muß jedesmal, wenn der Cursor bewegt wird, bestimmt werden, welche Beziehung zwischen dem Cursor und den Codebetrachtungsvorrichtungen vorliegt. Wenn eine angebundene Codebetrachtungsvorrichtung vorliegt, ist der Cursor 110 natürlich an diese Codebetrachtungsvorrichtung angebunden; andernfalls berechnet das Programm für jede Codebetrachtungsvorrichtung den Abstand zwischen dem Rechteck 504 der Codebetrachtungsvorrichtung und der aktuellen Position des Cursors 110 (enthalten in Rechteck-Infor 1431); wenn die ganz rechte Maustaste gedrückt wurde, wird die Codebetrachtungsvorrichtung, deren Rechteck 504 sich am nächsten bei der Cursorposition befindet, dann an den Cursor 110 angebunden. Wenn es eine angebundene Codebetrachtungsvorrichtung gibt, wenn die ganz rechte Maustaste gedrückt wird, wird diese Codebetrachtungsvorrichtung gelöst.
  • Der nächste Schritt besteht darin, die gerade angebundene Codebetrachtungsvorrichtung mit der aktuellen Cursorposition in Beziehung zu setzen. Wenn sich der Cursor in einer Spalte 205 befindet, dann hat das Programm zuvor bestimmt, welche Datei durch diese Spalte dargestellt wird. Um die Codebetrachtungsvorrichtung mit der aktuellen Cursorposition in Beziehung zu setzen, setzt das Programm FFL PTR 1419 so, daß es auf die erste Zeile in dieser Datei zeigt, LFL PTR 1423 so, daß es auf die letzte Zeile zeigt, und CFL PTR 1421 so, daß es auf die aktuelle Zeile in der Datei zeigt. Erste-ALAE 1425 und ERSTE-DLAE 1427 werden weiterhin so gesetzt, daß sie auf die ersten Einträge in dem Hinzugefügte-Zeile-Array 1005 und dem Gelöschte- Zeile-Array 1011 für die Datei zeigen. Als letztes werden die x- und y-Koordinaten 1433 und 1435 aus den Koordinaten der aktuellen Cursorposition gesetzt.
  • Im Schritt 1317 des Flußdiagramms 1201, in dem der Zustand für die Anzeige je nach Mauseingabe eingestellt wird, wird eine Codebetrachtungsvorrichtung erzeugt, sie wird angebunden und mit der aktuellen Cursorposition in Beziehung gesetzt. Wenn irgendetwas aufgetreten ist, um den Zustand einer Codebetrachtungsvorrichtung zu ändern, wird diese Codebetrachtungsvorrichtung im Schritt 1319, Zeilenanzeigefenster neu zeichnen, neu gezeichnet. Wie die Codebetrachtungsvorrichtung neu gezeichnet wird; hängt von dem Wert des Anzeigemodus 1411 ab. In allen Fällen ist der erste Schritt jedoch das Neuzeichnen des Rechtecks 504. Als nächstes werden die erforderlichen Zeilen in dem Codefenster 505 gezeichnet, indem die erste Zeile in dem Codefenster 505 bestimmt und dann Zeilen gezeichnet werden, bis die maximale Anzahl von Zeilen in dem Fenster erreicht wird. Beim Zeichnen jeder Zeile wird der Eintrag für die Zeile in dem Hinzugefügte-Zeile- Array 1005, dem Gelöschte-Zeile-Array 1011 oder beiden (im Fall einer aufgeteilten Anzeige) verwendet, um den Index für die Modifikationsanforderung in dem Farbplan 713 zu bestimmen, die Farbe für die Modifikationsanforderung wird dem Farbplan 713 entnommen, und die Farbe wird dann zum Zeichnen der Codezeile verwendet.
  • Verwendung der Anzeigetechniken zur Visualisierung von Programm-Slices
  • Die oben umrissenen Anzeigetechniken können auch in einer Vorrichtung zur Visualisierung von Programm- Slices verwendet werden. Eine bevorzugte Ausführungsform der Vorrichtung zur Visualisierung von Slices wird in dem in Fig. 1 gezeigten Computersystem implementiert.
  • Die folgende ausführliche Beschreibung dieser Vorrichtung gibt zunächst weitere Einzelheiten über Programm-Slices und beschreibt dann die bevorzugte Ausführungsform.
  • Programm-Slicing: Fig. 15 und 16
  • Programm-Slices werden im allgemeinen entlang von zwei Dimensionen klassifiziert. Erstens hat ein Slice eine Richtung: rückwärts oder vorwärts. Ein Rückwärts-Slice in bezug auf eine Komponente C identifiziert die Komponenten, die sich auf C auswirken, während ein Vorwärts-Slice in bezug auf C die Komponenten identifiziert, die von C beeinflußt werden. Zweitens kann ein Slice durch Analysieren des Quellcodes eines Programms berechnet werden (was als ein statisches Slice bezeichnet wird), oder durch Analysieren einer oder mehrerer Ausführungen eines Programms (dynamisches Slice). Statische und dynamische Slices können durch vielfältige Verfahren automatisch konstruiert werden. Einzelheiten findet man in der obigen Literaturstelle von Weiser und in Horwitz, S., Prins, J. und Reps, T., "Integrating non-interfering versions of programs", ACM Transactions on Programming Languages and Systems, Band 11(3), S. 345-387 (Juli 1989); Korel, B. und Laski, J., "Dynamic program slicing", Information Processing Letters, Band 29(10), S. 155-163 (Oktober 1988); und Ferrante, J., Ottenstein, K. und Warren, J., "The program dependence graph and its use in optimization", ACM Transactions on Programming Languages and Systems, Band 9(5), S. 319-349 (Juli 1987).
  • Alle in den obigen Literaturstellen beschriebenen Ansätze verwenden die Untersuchung der Daten- und Steuerabhängigkeiten eines Programms, für die hier formlose Beschreibungen angegeben werden sollen (strengere Definitionen findet man in Ferrante, supra). Fig. 15 zeigt einfache Beispiele für diese Abhängigkeiten. Anweisungen in den Figuren, die entweder von der hervorgehobenen "return (y);" Anweisung 1501 daten- oder steuerabhängig sind, sind dunkler als diejenigen, die nicht abhängig sind.
  • Die Anweisung s ist von der Anweisung r datenabhängig, wenn r in eine Variable V schreibt, aus der s anschließend liest (ohne dazwischenkommende Schreiboperationen in V). In der Funktion link 1507 in Fig. 15 ist die hervorgehobene Anweisung 1501 'return (y);' datenabhängig von der Anweisung 1503 'y = t;', die von der Anweisung 1505 'int t = x;' datenabhängig ist. Die Analyse von Datenabhängigkeiten bei Anwesenheit von Zeigern und Arrays ist eine schwierige Aufgabe, wenn nur der Quellcode eines Programms gegeben ist (das Problem ist im allgemeinen nicht entscheidbar). Die exakten Datenabhängigkeiten für eine bestimmte Ausführung eines Programms können jedoch leicht berechnet werden, indem die Adressenmitverfolgung der Ausführung untersucht wird (der Nachteil ist, daß möglicherweise nicht alle Abhängigkeiten in dem Programm bei einer gegebenen Ausführung auftreten). Datenabhängigkeiten können Prozedur- und Dateigrenzen überspannen.
  • Die Anweisung s ist von der Anweisung r steuerabhängig, wenn r ein Prädikat ist, das steuern kann, ob s ausgeführt wird oder nicht. Steuerabhängigkeiten überspannen Anweisungen aus derselben Prozedur, überschreiten aber keine Prozedur- oder Dateigrenzen. In Fig. 15 ist die Anweisung 1503 'y = t;' steuerabhängig von ihrer einschließenden if-Bedingung. Die return- Anweisung 1501 ist von keiner der if-Anweisungen steuerabhängig, da sie ungeachtet des Steuer-Fluß-Wegs durch die Prozedur link 1507 ausgeführt wird.
  • Bei Kombination bilden die Daten- und Steuerabhängigkeiten die Kanten eines gerichteten Graphen (des Programmabhängigkeitsgraphen), in dem die Ecken die Anweisungen des Programms sind. Das Rückwärts- oder Vorwärts-Slice in bezug auf eine Anweisung läßt sich durch einen transitiven Rückwärts- oder Vorwärts-Abschluß in diesem Graphen finden, wobei die Menge von Anweisungen in dem Slice identifiziert wird. Fig. 16 zeigt den Programmabhängigkeitsgraph 1601 der Funktion link 1507. Die gestrichelten gekrümmten Kanten 1603 stellen Datenabhängigkeiten und die durchgezogenen geraden Kanten 1605 stellen Steuerabhängigkeiten dar. Der Rückwärts-Abschluß aus 'return(y);' 1501 wird gefunden, indem man den Kanten in der den Pfeilen entgegengesetzten Richtung folgt; im Graph 1601 umfaßt er jede Ecke in dem Graph, mit Ausnahme von 'x = y;' 1609 und p[x] = y; 1611 entsprechend dem in Fig. 15 gezeigten Slice.
  • Erstellung des Abhängigkeitsgraphen: Fig. 21 Bei einer bevorzugten Ausführungsform ist der Abhängigkeitsgraph ein dynamischer Programmabhängigkeitsgraph auf der Anweisungsebene der Ausführung eines Programms. Der Graph wird wie in Fig. 21 gezeigt aufgebaut: als erstes verwendet man das QPT- Instrumentationswerkzeug (Quick Profiling and Tracing) 2109, um Programm-Verfolgungen der Ausführung zu erzeugen. Das Werkzeug 2109 instrumentiert eine ausführbare Codedatei 2103 durch Erzeugung einer instrumentierten ausführbaren Codedatei 2113, die zusätzlichen Code zur. Erzeugung einer Verfolgung von Ereignissen enthält, die den Benutzer des Werkzeugs interessieren. Eine solche Verfolgung könnte die Adressen im Speicher auflisten, in die das Programm geschrieben oder aus denen es gelesen hat. Die Ausführungsverfolgung 2123 wird durch Ausführung eines instrumentierten ausführbaren Codes 2113 im Computersystem 2121 erzeugt. Die Verfolgung 2123 wird dann während sie erzeugt wird über eine Pipeline des Betriebssystems UNIX in eine Verfolgungs- Analysierkomponente des QPT 2109 eingegeben. Der Verfolgungsanalysator 2111 analysiert die Verfolgung 2123 und entnimmt ihr die dynamischen Daten- und Steuerabhängigkeiten, um den Abhängigkeitsgraph 2117 auf Anweisungsebene zu erzeugen. Da QPT ausführbare Dateien instrumentiert, werden Abhängigkeiten zwischen Maschinenbefehlen, nicht Quellenanweisungen, gefunden. Um Abhängigkeiten zwischen Quellenanweisungen zu erhalten, verwendet QPT die Symboltabelle (ST) 2105 der ausführbaren Datei, um die Abhängigkeiten zwischen Maschinenbefehlen auf Abhängigkeiten zwischen ihren entsprechenden Anweisungen auf der Quellenebene abzubilden. Das Ergebnis der Analyse ist der dynamische Abhängigkeitsgraph 2117 der Anweisungsebene. Ein Vorteil der Durchführung der Ausführungsanalyse auf der Objektcodeebene besteht darin, daß der dynamische Abhängigkeitsgraph auf Anweisungsebene für Quellcode erzeugt werden kann, der in einer beliebigen höheren Programmiersprache geschrieben ist. Einzelheiten bezüglich des QPT-Werkzeugs findet man in Ball, T. und Larus, J. R., "Optimally profiling and tracing programs", Conference Record of the Nineteenth ACM Symposium onPrinciples of Programming Languages, (Albuquerque, NM, 19.-22. 1. 1992), S. 59-70, ACM, (1992), und in Larus, J. R., "Efficient program tracing", IEEE Computer, Band 26(5), S. 52-61 (Mai 1993). Wie der Abhängigkeitsgraph aus einer Verfolgung extrahiert wird, wird ausführlich in der obigen Literaturstelle von Korel und Laski erläutert.
  • Visualisierung des Slice: Fig. 17 Fig. 17 zeigt, wie die Visualisierungsvorrichtung einem Benutzer ein Slice anzeigt. Die Anzeige 1701 ist eine Abwandlung der Anzeige 201. Eine Programmdatei wird durch eine Spalte (1703) dargestellt, wobei sich der Name 1709 der Datei auf der obersten Position ihrer Spalte 1703 befindet. Die Spalte 1703 für eine Datei wird in Blöcke (1705 und 1707) aufgeteilt, die Prozeduren in der Datei darstellen. Ein Block, der eine Prozedur darstellt, kann entweder offen oder geschlossen sein. In einem offenen Block 1705 wird jede Zeile der Prozedur durch eine Zeilendarstellung 207 auf die oben offengelegte Weise dargestellt. Wenn kein Slice gezeigt wird, werden Zeilendarstellungen für Code, der bei der Verfolgung ausgeführt wurde, in Schwarz gezeigt, während Zeilendarstellungen für Code, der nicht ausgeführt wurde, in Grau gezeigt werden. Wie oben zeigt die Zeilendarstellung 207 die Einrückung und Länge der entsprechenden Codezeile. Ein geschlossener Block 1707 enthält keine einzelnen Zeilendarstellungen; stattdessen richtet sich die Größe des Blocks nach der Anzahl von Zeilen in der Prozedur, die er darstellt. Um einen geschlossenen Block 1705 zu öffnen, wird der Zeiger 1715 zu dem geschlossenen Block bewegt und die zweite Taste auf der Maus 103 gedrückt; das gleiche geschieht zum Schließen eines offenen Blocks 1705.
  • Der Benutzer führt folgendermaßen einen Dialog mit der Anzeige 1701. Als erstes richtet der Benutzer das Slice ein. Dies geschieht durch Menüs, die erscheinen, wenn das Slice-Menü 1723 und das Richtungsmenü 1725 gewählt werden. Die Auswahl des Slice-Menüs 1723 bewirkt, daß ein Menü erscheint, aus dem der Benutzer wählen kann, wieviel des Slice in der Anzeige erscheint. Das gezeigte Slice kann ein volles Slice sein, d. h. ein Slice, das den vollständigen transitiven Abschluß für den Slice-Punkt zeigt, oder ein teilweises Slice, das nur die Knoten zeigt, die zu der den Slice-Punkt enthaltenden stark verbundenen Komponente gehören.
  • Das Menü, das erscheint, wenn das Richtungsmenü 1725 gewählt wird, steuert, ob das gewählte Slice ein Vorwärts-Slice, ein Rückwärts-Slice oder bidirektional (d. h. der Abschluß folgt den Kanten in beiden Richtungen) ist. Wie später ausführlicher erläutert wird, kann der Benutzer außerdem bestimmen, wieviele Schritte des transitiven Abschlusses aus dem Slice- Punkt in dem Slice gezeigt werden.
  • Wenn Slicing eingeschaltet ist, erscheint das gewählte Slice für eine Komponente automatisch in Farbe in der Anzeige 1701, wenn der Zeiger 1715 auf die Komponente zeigt. Bei der bevorzugten Ausführungsform schaltet die linke Maustaste das Slicing ein und aus, wenn sich der Zeiger 1715 in dem Bereich der Anzeige 1701 befindet, der durch die Spalten von Dateien 1703 eingenommen wird. Die Vorgabe ist Eingeschaltet. Wenn Slicing eingeschaltet ist und die linke Maustaste gedrückt wird und der Zeiger 1715 so über die Komponenten "gezogen" wird, dann bleibt das Slice für die Komponente eingeschaltet, nachdem sich der Zeiger 1715 zur nächsten Komponente bewegt. Die Slices akkumulieren sich weiter, bis die linke Maustaste losgelassen wird, wodurch das Slicing ausgeschaltet wird. Wenn das Slicing ausgeschaltet ist, bleibt die Menge von Slices, die bei ihrem Ausschalten in der Anzeige 1701 angezeigt wird, auf der Anzeige, bis das Slicing wieder eingeschaltet wird.
  • Bei der bevorzugten Ausführungsform wird durch Öffnen des Prozedurblocks 1707 für die Prozedur gegebenenfalls und anschließendes Bewegen des Zeigers 1715 zu der Zeilendarstellung 207 für die Zeile eine Zeile als der Slice-Punkt gewählt. Die in Frage kommende Zeile muß natürlich bei der Verfolgung ausgeführt worden sein. Eine Prozedur wird gewählt, indem man den Zeiger 1715 zu einem geschlossenen Prozedurblock 1707 bewegt; eine Datei wird gewählt, indem man den Zeiger auf den Namen 1709 der Datei bewegt.
  • Wie eine Komponente eines Slice in Farbe angezeigt wird, hängt von der Komponente ab. Bei offenen Prozedurblöcken 1705 werden die Komponentenzeilen in Farbe angezeigt; bei geschlossenen Prozedurblöcken 1707 wird der Block hervorgehoben, wenn er eine Komponente des Slice ist, und der Block wird teilweise farbig gefüllt. Der Grad der Füllung zeigt den Anteil der ausgeführten Zeilen der Prozedur, die sich in dem Slice befinden. Wenn eine Prozedur in dem Slice nur einen Schritt von dem Slice-Punkt im transitiven Abschluß entfernt ist, wird der Name der Prozedur wie bei 1711 angezeigt. Bei Dateien wird der Dateiname in Farbe angezeigt.
  • Farbe wird in der Anzeige 1701 verwendet, um den kürzesten Abstand in dem transitiven Abschluß des Slice von einer Komponente eines Slice von dem Slice-Punkt zu zeigen. Wie bei dem Datum-Umfang in dem oben umrissenen Beispiel werden die Abstände auf ein Spektrum von Farben abgebildet. Bei der bevorzugten Ausführungsform ist der Slice-Punkt rot, und die Farben reichen von Rot über Orange, Gelb und Grün bis zu Blau mit zunehmendem Abstand vom Slice-Punkt. Der größte Abstand, der in dem Slice gezeigt wird, und die Abbildung von Farben auf den Abstand werden durch das Steuerfenster 1803 in Fig. 18 bestimmt. Der Abstand wird bestimmt, indem man die Maus 103 verwendet, um den Schieber 1804 zu bewegen, wobei der Abstand zunimmt, wenn sich der Schieber von links nach rechts bewegt. Mit zunehmendem Abstand ändert sich die Abbildung zwischen Farben und Abständen. Die aktuelle Abbildung wird in dem Farbbalken 1806 gezeigt. Wenn eine Komponente, wie zum Beispiel eine Datei oder eine Prozedur, selbst Komponenten enthält, dann gilt die Farbe der Komponente für den Abstand der nächstliegenden enthaltenen Komponente.
  • Fig. 18 zeigt zwei weitere interessante Komponenten in der Anzeige 701. Der Schieber 1805 skaliert die Größe geschlossener Prozedurblöcke 1707. Wenn sich der Schieber 1805 ganz oben befindet, sind alle geschlossenen Prozedurblöcke 1707 gleich groß; je weiter der Schieber 1805 heruntergedrückt wird, desto mehr gibt die Größe eines geschlossenen Prozedurblocks 1707 die Anzahl darin enthaltener Codezeilen wieder.
  • Die Code-Browser-Vorrichtung 1809 erscheint als Reaktion auf eine Menüauswahl, die von einem Menü erfolgt, das erscheint, wenn Widgets 1721 gewählt wird. Die Code-Browser-Vorrichtung 1809 verfolgt den Zeiger 1715 und zeigt die tatsächlichen Codezeilen, die die Zeilendarstellung 207, die gerade durch den Zeiger 1715 angegeben wird, umgeben. Die Hervorhebung 1811 markiert die Zeile an der Position des Zeigers 1715, und Komponenten des Slice in der Code-Browser-Vorrichtung 1809 haben die Farben, die durch ihren Abstand vom Slice-Punkt erfordert werden. Wenn das Slicing eingeschaltet ist und die Code-Browser-Vorrichtung 1809 angezeigt wird, dann ist die hervorgehobene Zeile in der Code-Browser-Vorrichtung 1809 der Slice-Punkt. Bei einer bevorzugten Ausführungsform gibt es nur eine einzige Code-Browser-Vorrichtung 1809 in der Anzeige 1701; die beschriebenen Techniken zur Verwendung mehrerer Codefenster 505, die oben skizziert wurden, könnten jedoch für mehrere Code-Browser-Vorrichtungen in der Anzeige 1701 verwendet werden.
  • Wenn das Slicing ausgeschaltet ist, kann man die Komponenten der Anzeige 1701 umordnen, um die Analyse des Slice zu erleichtern. Die Umordnung erfolgt mit einem Menü, das erscheint, wenn der Benutzer das edit- Menü 1719 wählt. Das edit-Menü 1719 enthält Wahlmöglichkeiten, die angeben, daß die Anzeige 1701 alle analysierten Komponenten zeigt (Vorgabe), daß sie nur die Dateien zeigt, die Komponenten des Slice oder der Slices enthalten, das bzw. die gerade angezeigt werden, oder daß sie nur die Prozeduren in einer Datei zeigt, die Komponenten des Slice bzw. der Slices enthält. Das Menü enthält außerdem eine Auswahl, die bewirkt, daß die Dateien und Prozedurblöcke in der Anzeige gemäß ihrem Abstand von dem Slice-Punkt umgeordnet werden. Dateien werden je nach ihrem Abstand vom Slice-Punkt von links nach rechts geordnet. In einer Datei werden Prozeduren gemäß ihrem Abstand vom Slice-Punkt von oben nach unten geordnet. Somit kommt der Slice-Punkt am Ende in die obere linke Ecke der Anzeige. Weitere Wahlmöglichkeiten in dem Menü geben an, daß alle Prozedurblöcke in der Anzeige 1701 geschlossene Blöcke 1707 und alle Prozedurblöcke in der Anzeige offene Blöcke 1705 sein sollen.
  • Beispiele für die Verwendung der Slice-Visualisierung: Fig. 18-20
  • Im folgenden wird die Verwendung der Slice- Visualisierung zur Analyse einer Ausführung des QPT- Profil-/Verfolgungswerkzeugs beschrieben. Das QPT ist in der Sprache C geschrieben und enthält etwa 300 Prozeduren und 12 000 Codezeilen, wobei Bibliotheken nicht eingeschlossen sind. Fig. 20 zeigt alle Dateien und Prozeduren in dem QPT-Programm in einer Anzeige 1701. Der Schieber 1805 ist so eingestellt, daß die Größe der Prozedurblöcke 1705 nicht sehr skaliert ist. Die Anzeige zeigt geschlossene Prozedurblöcke 1705 für alle Prozeduren in dem QPT und zeigt ein volles Vorwärts-Slice für die Prozedur write insts, dem durch den Zeiger 1715 gewählten Slice-Punkt 2003. Komponenten des Slice werden durch die Bezugszahl 2001 identifiziert. Die Prozedurblöcke 1705, die Komponenten sind, erscheinen in Fig. 20 mit fetten Rändern, wie auch die Namen der Dateien, die Komponenten des Slice enthalten. Schließlich sind die Prozedurnamen Namen von Prozeduren, die in dem transitiven Abschluß nur einen Schritt von dem Slice-Punkt entfernt sind. Wie aus Fig. 20 unmittelbar hervorgeht, sind an dem Vorwärts-Slice für write insts fünf andere Dateien in dem Programm beteiligt.
  • QPT umfaßt die prinzipielle Schritte:
  • 1. Lesen in einer ausführbaren Datei;
  • 2. Bestimmen von Punkten in der ausführbaren Datei, an denen Instrumentationscode hinzugefügt werden soll;
  • 3. Ausschreiben der instrumentierten ausführbaren Datei.
  • Das Slicing kann dazu dienen, um mehrere Fragen über die Beziehungen zwischen Komponenten von QPT zu beantworten, wie zum Beispiel:
  • - Welche Gruppen von Prozeduren und Dateien nehmen an einer Berechnung teil?
  • - Welcher Code und welche Variablen sind für die Berechnung des Programms wesentlich? (Veränderungen von solchem Code und solchen Variablen wirken sich auf das Verhalten vieler Teile des Programms aus.)
  • - Enthält eine Datei oder Prozedur mehrere unabhängige Berechnungen oder nur eine?
  • Was kann man aus dem Vorwärts-Slice 2001 in Fig. 20 erfahren? Das Vorwärts-Slice 2001 ist klein und überspannt vier Dateien. Die Prozeduren in dem Slice 2001 geben zusammen die instrumentierte ausführbare Datei aus. Die Prozeduren, die das Format der ausführbaren Datei behandeln, befinden sich in aout.c, diejenigen, die die maschinenunabhängige Instrumentation behandeln, in prof_trace.c und diejenigen, die maschinenabhängige Instrumentation behandeln, in machine_inst.c und machine_prof_trace.c. Dies ist eine natürliche Organisation zum Portieren des QPT-Werkzeugs auf verschiedene Plattformen, die aber mit Browsergestützten Slicing-Schnittstellen nur schwer zu entdecken ist. Durch die Slice-Visualisierung wird die Organisation sofort offensichtlich.
  • Fig. 19 zeigt, wie die Slice-Visualisierung weiterhin verwendet werden kann, um die Prozeduren in der Datei aout.c zu untersuchen. Fig. 19 ist ein Rückwärts-Slice 1901 an der Prozedur read_proc. Die Anzeige 1903 wurde so eingerichtet, daß sie nur Dateien anzeigt, die Komponenten des Slice 1901 enthalten. Ferner wurde der Schieber 1805 so eingestellt, daß er einen größeren Skalierungsgrad der Prozedurblöcke 1705 angibt. Das Rückwärts-Slice 1901 enthüllt sofort, daß die Komponenten des Slice in der Datei fünf Prozeduren 1905 sind, die alle um 1 von read_proc beabstandet sind, und daß es in nur zwei anderen Dateien Komponenten des Slice gibt: in machine_aout.c und machine_inst.c. Wenn Rückwärts-Slices an jeder der fünf Prozeduren 1905 ausgeführt werden, findet sich, daß ein Slice an einer beliebigen der fünf Prozeduren alle fünf Prozeduren enthält, und daß jedes Rückwärts-Slice relativ klein ist. Es stellt sich jedoch heraus, daß ein Vorwärts- Slice an einer beliebigen dieser fast alle Prozeduren in dem Programm enthält. Diese fünf Prozeduren 1905 (read_aout_info, find_proc_addresses, record_fnct_name, note_hidden_proc, read_proc) wirken beim Lesen in einer ausführbaren Datei und bei der Initialisierung von Datenstrukturen zusammen. Es überrascht nicht, daß die meisten der anderen Prozeduren in QPT von diesen Datenstrukturen abhängen.
  • Die Anzeige 1815 in Fig. 18 zeigt, wie das Programm- Slicing verwendet werden kann, um wichtige Variablen zu finden. Wenn man den Browser 1809 verwendet, um den Text der Prozedur read_aout_info zu untersuchen, findet man, daß sie eine Anzahl von globalen Variablen (text_start, text_size, data_start) initialisiert, die den Startadressen und Größen verschiedener Segmente in der ausführbaren Datei entsprechen. Die Größe des Vorwärts-Slice in bezug auf die Definition jeder Variablen gibt an, wie wichtig jede Variable für die Berechnung des Programms ist. Fig. 18 zeigt ein Vorwärts-Slice in bezug auf die Variable text start, die bei der bei 1811 hervorgehobenen Zuweisungsanweisung einen Wert erhält. Jede Prozedur, die in der Anzeige 1815 mit einem Namen angezeigt wird, referenziert direkt text_start. Andere Prozeduren in dem Slice werden indirekt durch den Wert von text_start beeinflußt. Obwohl in dieser Figur nur fünf Dateien gezeigt sind, beeinflußt das Vorwärts-Slice mit Bezug auf text_start den größten Teil des Codes in dem Programm.
  • Bei der obigen Analyse (die durch Slicing nur an Prozeduren und Anweisungen in der Datei aout.c erfolgte) hat man folgendes erfahren:
  • - Es gibt fünf stark voneinander abhängige Prozeduren in der Datei, die die Eingabe für QPT lesen, wovon der größte Teil des Programms abhängt.
  • - Es gibt eine Menge unabhängiger Prozeduren, die vier Dateien überspannen, die zusammen die instrumentierte Datei ausgeben.
  • - Die Variable text_start beeinflußt einen großen Teil des Programms.
  • Wie aus den obigen Beispielen hervorgeht, gibt es viele verschiedene mögliche Anwendungen für die Programm- Slice-Visualisierung. Als Teil eines Systems zum Verständnis des Programms und für ein Reverse- Engineering kann die Programm-Slice-Visualisierung verwendet werden, um verwandte Prozeduren und Dateien zu identifizieren und Code zu extrahieren und umzustrukturieren. Bei einer Anwendung auf das Debugging liefert die Programm-Slice-Visualisierung Hilfe bei der Identifizierung von Code, der zu einem anomalen Programmverhalten beiträgt. Zusätzlich werden durch die globale Übersicht eines gegebenen Programms, die durch die Programm-Slice-Visualisierung bereitgestellt wird, unerwartete Abhängigkeiten zwischen Programmkomponenten offensichtlich. Als letztes kann das Werkzeug bei der Leistungsoptimierung verwendet werden, um ausgeführten Code zu identifizieren, der nicht zu der Ausgabe eines Programms beiträgt.
  • Ausführliche Implementierung einer bevorzugten Ausführungsform
  • Die folgende Besprechung der ausführlichen Implementierung der bevorzugten Ausführungsform beschreibt zunächst die Haupt-Datenstrukturen, die bei der bevorzugten Ausführungsform verwendet werden, und legt dann offen, wie die Datenstrukturen verwendet werden, um zunächst den Abhängigkeitsgraph für das Slice oder die Menge von Slices, das bzw. die vom Benutzer gewählt wurde, zu bestimmen und dann das Slice anzuzeigen.
  • Bei der bevorzugten Ausführungsform verwendete Datenstrukturen: Fig. 22
  • Fig. 22 zeigt die Datenstrukturen, die bei der bevorzugten Ausführungsform verwendet werden, um die Dateien, Prozeduren und Zeilen der in der Anzeige 1701 angezeigten Programme darzustellen und um die Ecken und Kanten des Abhängigkeitsgraphen 1601 darzustellen. Der Dateivektor 2201 enthält ein Dateivektorelement (FVE) 2203 für jede Datei in dem angezeigten Programm. Die Dateivektorelemente 2203 liegen in der Reihenfolge von links nach rechts vor, in der die Dateien vor der Umordnung in der Anzeige 1701 angezeigt werden. Jedes Dateivektorelement 2203 enthält Felder für Informationen, die den Dateinamen (Fname) 2205 darstellen, Prozedurzeiger 2207 auf die Datenstrukturen für in der Datei enthaltene Prozeduren, die Anzahl von Ecken (oder Zeilen) in der Datei (Nverts 2209), den minimalen Abstand beliebiger der Zeilen in der Datei darstellenden Ecken von dem Slice-Punkt (Schritt 2211) und die Anzahl von Ecken in dem aktuellen Slice, die in der Datei enthaltene Zeilen darstellen (NVS) 2213. In Fig. 22 sind Felder der FVE 2203, die die Koordinaten der Spalte 1703 darstellen, die die Datei in der Anzeige 1701 darstellt, nicht gezeigt.
  • Für jede Datei liegt ein Prozedurvektor 2215 vor. Der Prozedurvektor 2215 enthält ein Prozedurvektorelement (PVE) 2231 für jede Prozedur in der Datei. Die Prozedurvektorelemente 2231 liegen in derselben Reihenfolge vor wie Prozeduren in der Datei, zu der sie gehören. Zu den relevanten Feldern in dem Prozedurvektorelement 2231 gehört der Prozedurname (Pname) 2217, der den Namen der Prozedur enthält, Zeilenzeiger 2219, die auf die Datenstrukturen für die in der Prozedur enthaltenen Zeilen zeigen, und der Dateizeiger 2221, der zurück auf das Dateivektorelement 2203 für die Datei zeigt, die die durch das Prozedurvektorelement 2231 dargestellte Prozedur enthält. Nverts 2223, Schritt 2225 und NVS 2227 sind jeweils analog zu dem Feld mit demselben Namen in dem Feldvektoreintrag 2203, mit der Ausnahme, daß sie Ecken und Abstände für Zeilen in der Prozedur betreffen. In Fig. 22 sind Felder von PVE 2231, die die Koordinaten des Prozedurblocks 1705 oder 1707 enthalten, der die Prozedur in der Anzeige 1701 darstellt, nicht gezeigt.
  • Für jede Prozedur in dem Programm liegt ein Zeilenvektor 2233 vor. Der Zeilenvektor 2233 enthält ein Zeilenvektorelement 2235 für jede Zeile in der Prozedur. Jedes Zeilenvektorelement (LVE) 2235 enthält drei Felder. Das erste Feld enthält Text 2237 für die Zeile; das zweite ist ein Zeiger (vertptr 2239) auf die Ecke in dem Abhängigkeitsgraph 1601 für die Zeile; das dritte ist ein Zeiger (proc ptr 241) zurück auf die Prozedur, die die Zeile enthält.
  • Der Eckenvektor 2243 enthält schließlich ein Eckenvektorelement (LVE) 2245 für jede Ecke in dem Abhängigkeitsgraph 1601. Es liegen soviele Ecken in dem Abhängigkeitsgraph vor wie Zeilen in dem Programm. Jedes Eckenvektorelement 2245 enthält vier Felder. Das erste Feld ist ein Zeiger (In Elist) 2253 auf eine Liste von Datenstrukturen 2247, die Kanten darstellen, die an der Ecke enden, die durch das Eckenvektorelement 2245 dargestellt wird. Das zweite Feld ist ein Zeiger (Out Elist) 2257 auf eine Liste von Datenstrukturen 2247, die Kanten darstellen, die an der Ecke beginnen. Jede Datenstruktur 2247 (ElistE) stellt eine Kante dar, und zwar mittels eines Zeigers (SrcPtr 2249) auf die Ecke, an der die Kante beginnt, und eines Zeigers (TargPtr 2251) auf die Ecke, an der die Kante endet. Bezüglich der übrigen Felder in dem Eckenvektor 2243 zeigt der Zeilenzeiger 2259 auf die Zeile, die der Ecke entspricht, die durch den Eckenvektoreintrag 2245 dargestellt wird, und Schritt 2261 enthält den kürzesten Abstand der Ecke von einem Slice-Punkt, für den das Slice gerade angezeigt wird.
  • Aus der obigen Beschreibung ist offensichtlich, daß die Haupt-Datenstrukturen 2202 von Fig. 22 eine einfache und schnelle Bestimmung der Beziehungen zwischen Ecken, Zeilen, Prozeduren und Dateien ermöglichen. Beginnend an dem Eckenvektoreintrag 2245 für eine Ecke ist es leicht, die entsprechende Zeile, die Prozedur, zu der die Zeile gehört, und die Datei, zu der die Prozedur gehört, zu finden. Ähnlich ist es, beginnend mit einer Datei oder Prozedur, leicht, zu bestimmen, welche Ecken Zeilen in der Datei oder Prozedur entsprechen. Das Fname-Feld 2205, das Schritt-Feld 2211, das NVS-Feld 2213 und die Koordinatenfelder enthalten die notwendigen Informationen, um die Datei richtig anzuzeigen, und das gleiche gilt für die entsprechenden Felder in dem Prozedurvektoreintrag 2231. Das Offen- Feld in diesem Eintrag gibt außerdem an, ob der entsprechende Prozedurblock offen oder geschlossen sein soll.
  • Die Umordnung von Dateispalten 1703 und Prozedurblöcken 1705 und 1707 in der Anzeige 701 wird mittels eines (nicht gezeigten) Dateianzeigevektors, der das Analog zu dem Dateivektor 2201 ist, und (ebenfalls nicht gezeigter) Prozeduranzeigevektoren, die das Analog zu jedem Prozedurvektor 2215 sind, behandelt. Der Dateianzeigevektor enthält einen Zeiger auf jeden der Dateivektoreinträge 2203; am Anfang liegen die Zeiger in derselben Reihenfolge wie die Dateivektoreinträge 2203 vor; das Umordnen der Anzeige von Dateispalten erfolgt durch Umordnen der Reihenfolge der Zeiger in dem Dateianzeigevektor und Anzeigen der Dateispalten in der Reihenfolge der Zeiger. Die Prozeduranzeigevektoren werden genauso verwendet, um die Umordnung der Anzeige von Prozedurblöcken zu behandeln.
  • Berechnen eines Slice in der bevorzugten Ausführungsform: Fig. 23
  • Wie bereits erwähnt wird ein Slice angegeben, indem man die Maus 103 verwendet, um folgendes zu wählen: 1) eine oder mehrere Zeilendarstellungen 207 in einem offenen Prozedurblock 1705, 2) einen Prozedurblock 1707 oder 1705 oder 3) einen Dateinamen 1709. Die Wirkung der Auswahl besteht darin, daß die Zeilen, die den gewählten Zeilendarstellungen entsprechen, oder alle Zeilen in der gewählten Prozedur oder Datei zu Slice- Punkten werden. Die bevorzugte Ausführungsform berechnet dann das Slice, indem die Eckenvektorelemente 2245 für die als Slice-Punkte gewählten Zeilen abgerufen werden und den Zeigern in den Eckenvektorelementen und den Eckenvektorelementen zu den VVEs 2295, auf die diese Zeiger zeigen, so gefolgt wird, wie es durch die Slice-Richtung vorgeschrieben wird. Das Ergebnis der Berechnung ist eine Liste von Eckenvektorelementen 2245, die nach zunehmendem Abstand von den Slice-Punkten bis zu dem für das Slice angegebenen maximalen Abstand geordnet werden.
  • Fig. 23 zeigt im einzelnen, wie ein Rückwärts-Slice mit einem maximalen Abstand von eins berechnet wird. Es gibt 6 Ecken 2245 in dem transitiven Rückwärts-Abschluß 2301, der das Slice enthält. Jede Ecke wird numeriert, und der Abstand der Ecke von der Ecke 1, die der Slice- Punkt ist, wird in Klammern unter der Knotennummer angegeben. Es gibt also vier Ecken 2245, nämlich 1, 2, 3 und 4, die sich in dem Slice befinden. 5 und 6 befinden sich nicht in dem Slice, da ihr Abstand größer als 1 ist. Die Zeiger, die auf jede Ecke zeigen, sind die Zielzeiger 2251 in der In Elist 2253 der Ecke. Die Quellenzeiger 2219 in der InElist können verwendet werden, um die Ecken zu finden. Es gibt zwei Warteschlangen, die Arbeitswarteschlange 2303, die Zeiger auf Ecken enthält, die durch den Algorithmus verarbeitet werden sollen, und Slice-Ergebnis 2305, die Zeiger auf die Ecken enthält, die verarbeitet worden sind.
  • Fig. 23 zeigt drei Stufen der Berechnung, den Start bei 2307, die zweite Iteration bei 2309 und das Ziel bei 2311. Am Start enthält die Arbeitswarteschlange 2303 einen Zeiger auf die Ecke 1 und Slice-Ergebnis 2305 ist leer. Schritt 2261 in der Ecke 1 wird auf 0 gesetzt und der Zeiger auf die Ecke 1 wird an das Ende von Slice- Ergebnis 2305 versetzt. Der Schritt 2261 der Ecke 1 befindet sich in weniger als dem maximalen Abstand, so daß für jede der Ecken, die auf die Ecke 1 zeigt, der Algorithmus prüft, ob die Ecke bereits in der Arbeitswarteschlange 2303 oder in Slice-Ergebnis 2305 vorliegt. Wenn nicht, wird die Ecke zu der Arbeitswarteschlange 2303 hinzugefügt, und ihr Feld Schritt 2261 wird auf eins mehr als den Wert des Schritts 2262 in der Ecke gesetzt, auf die die hinzugefügt Ecke zeigt. Am Ende der ersten Iteration enthält Slice-Ergebnis 2305 einen Zeiger auf die Ecke 1, während die Arbeitswarteschlange 2303 Zeiger auf die Ecken 2, 3 und 4 enthält. Schritt 2261 wurde in der Ecke 1 auf 0 gesetzt und in den Ecken 2, 3 und 4 auf 1.
  • Bei der zweiten Iteration befindet sich die Ecke 2 am Kopf der Arbeitswarteschlange 2303. Sie wird am Ende von Slice-Ergebnis 2305 hinzugefügt, aber ihr Schritt- Feld 2261 enthält einen Wert, der gleich dem maximalen Abstand ist, so daß die Ecke 5 nicht zu der Arbeitswarteschlange 2303 hinzugefügt wird. Am Ende der zweiten Iteration enthält die Arbeitswarteschlange 2303 Zeiger auf die Ecken 3 und 4, und Slice-Ergebnis enthält Zeiger auf die Ecken 1 und 2. Bei der nächsten Iteration ist die Ecke 3 der Kopfknoten in der Arbeitswarteschlange 2303; sie wird am Ende von Slice- Ergebnis 2305 hinzugefügt, aber keine der drei Ecken, die auf die Ecke drei zeigt, wird zu der Arbeitswarteschlange 2303 hinzugefügt. Die Ecken 2, 5 und 6 werden nicht hinzugefügt, da das Schritt-Feld von Ecke 3 einen Wert enthält, der gleich dem maximalen Abstand ist. Bei der letzten Iteration ist die Ecke 4 die Kopfecke; auf sie zeigen keine Ecken, so daß sie einfach am Ende von Slice-Ergebnis 2305 hinzugefügt wird. Da die Arbeitswarteschlange 2303 nun leer ist, ändert der Algorithmus und Slice-Ergebnis 2305 enthält Zeiger auf die Ecken 1, 2, 3 und 4. Die Ecken werden in Slice-Ergebnis 2305 nach Abstand vom Slice-Punkt geordnet.
  • Dieselben Techniken werden verwendet, um die Vorwärts- und bidirektionalen Slices zu berechnen, mit der Ausnahme, daß im Fall des Vorwärts-Slice den Zeigern in Out Elist 2257 gefolgt wird und im Fall des bidirektionalen Slice den Zeigern sowohl in In Elist 2253 als auch in Out Elist 2257 gefolgt wird.
  • Anzeigen des Slice
  • Bei der bevorzugten Ausführungsform wird eine erste Liste von Zeigern auf die Eckenvektoreinträge 2245, die Dateivektoreinträge 2203 und die Prozedurvektoreinträge 2231 für die Ecken, Dateien und Prozeduren in dem Slice geführt, das gerade angezeigt wird, und eine zweite Liste für die Ecken, Dateien und Prozeduren in dem neuen Slice. Wenn der Benutzer eine Komponente der Anzeige 1701 als einen Slice-Punkt wählt, bestimmt die bevorzugte Ausführungsform aus der Position des Zeigers 1715 in der Anzeige, auf welche Komponente gezeigt wird, berechnet das neue Slice wie gewünscht für diese Komponente und erstellt die Liste von Ecken, Dateien und Prozeduren für das neue Slice.
  • Als nächstes berechnet die bevorzugte Ausführungsform NVS 2213 für jede Datei und Prozedur in der Liste für das neue Slice. Dies geschieht für Prozeduren, indem der Eckenvektoreintrag 2245 für jede Ecke auf der Liste genommen wird, line ptr 2259 auf den Zeilenvektoreintrag 2235, der der Ecke entspricht, gefolgt wird und dem Prozedurzeiger 2241 auf den Prozedurvektoreintrag 2231 für die Prozedur, zu der die Zeile gehört, gefolgt wird. Jedesmal, wenn ein Prozedurvektoreintrag 2231 erreicht wird, wird sein NVS 2227 erhöht. Dasselbe geschieht bei Dateien, wobei dem Dateizeiger 2221 von dem Prozedurvektoreintrag 2231 aus zu dem Dateivektoreintrag 2203 gefolgt wird.
  • Die bevorzugte Ausführungsform berechnet dann Schritt 2211 für jede Datei und Prozedur in der Liste für das neue Slice. Dies geschieht im Fall von Prozeduren, indem den Zeilenzeigern 2219 in dem Prozedurvektoreintrag 2231 der Prozedur zu den Zeilenvektoreinträgen 2235 für die Zeilen und den Eckenzeigern 2239 in den Zeilenvektoreinträgen 2235 zu den Eckenvektoreinträgen gefolgt wird. Der kleinste Wert des Schritts 2261 in allen Eckenvektoreinträgen 2245, die den Zeilen in der Prozedur entsprechen, die sich in dem Slice befinden, wird dem Schritt 2225 in dem Prozedurvektoreintrag zugewiesen. Dasselbe geschieht mit Dateien, wobei der kleinste Wert des Schritts 2225 in den Prozedurvektoreinträgen 2231 für die Prozeduren in der Datei, die sich in dem Slice befinden, verwendet wird, um den Schritt 2211 in dem Dateivektoreintrag 2203 für die Datei zu setzen.
  • Die nächste Stufe besteht darin, die Anzeige des neuen Slice in der Anzeige 1701 einzurichten. Der erste Schritt besteht dabei darin, alle Dateinamen, Prozedurblöcke und Zeilendarstellungen für Dateien, Prozeduren und Zeilen, die sich nicht in dem neuen Slice befinden, in Grau anzuzeigen. Dies geschieht, indem bestimmt wird, welche Dateien sich in der ersten Liste befinden, aber nicht in der zweiten, und indem die Dateinamen, die diesen Dateien entsprechen, grau dargestellt werden. Dasselbe geschieht mit geschlossenen Prozedurblöcken 1707 für Prozeduren, die sich nicht in dem Slice befinden.
  • Danach wird die Anzeige des neuen Slice eingerichtet. Dies geschieht folgendermaßen: zuerst wird der Name jeder Datei in dem neuen Slice in der Farbe gezeichnet, die dem Wert von Schritt 2211 für die Datei entspricht. Dann wird jeder Prozedurblock gezeichnet. Wenn open 2229 in dem Prozedurvektoreintrag 2231 für die Prozedur anzeigt, daß die Prozedur geschlossen ist, wird ein geschlossener Block 1707 in der Farbe gezeichnet, die durch den Wert in Schritt 2225 in dem Prozedurvektoreintrag 2231 der Prozedur erfordert wird. Wenn open 2229 angibt, daß die Prozedur offen ist, wird den Zeilenzeigern 2219 und den Eckenzeigern 2239 gefolgt, um zu bestimmen, ob sich eine Zeile in dem Slice befindet, und wenn ja, was der Wert von Schritt 2261 für ihre Ecke ist. Wenn sich die Zeile nicht in dem Slice befindet, wird sie in Grau gezeichnet; wenn sie sich in dem Slice befindet, wird die Zeile in der Farbe gezeichnet, die durch den Wert von Schritt 2261 für die entsprechende Ecke bestimmt wird. Als letztes wird die zweite Liste zu der ersten Liste.
  • Die Anzeige, die auf die gerade beschriebene Weise eingerichtet wurde, wird im wesentlichen so angezeigt, wie es in dem obigen Abschnitt "Funktionsweise der bevorzugten Ausführungsform" beschrieben wird. Wenn geschlossene Prozedurblöcke 1707 angezeigt werden, werden sie so skaliert, wie es durch Nverts 2223 in den Prozedurvektoreinträgen 2232 für ihre Prozeduren angegeben ist, und die Prozedurblöcke 1707 für Prozeduren in dem Slice werden so gefüllt, wie es durch den Wert Anzahl-von-Ecken in dem Slice 2229 in ihren Prozedurvektoreinträgen 2231 bestimmt wird. Die Reihenfolge der Dateispalten und Prozedurblöcke in der Anzeige 1701 wird wie oben beschrieben durch die Anzeigelisten bestimmt.
  • Schlußbemerkungen
  • In der obigen Ausführlichen Beschreibung wurde Fachleuten auf dem Gebiet der Erfindung offengelegt, wie eine Vorrichtung zur Visualisierung von Programm- Slices hergestellt und verwendet werden kann. Die bei der Visualisierung von Programm-Slices verwendeten Techniken sind natürlich nicht auf diese Anwendung beschränkt, sondern können auf die Visualisierung von Abhängigkeiten zwischen Entitäten beliebiger Art angewandt werden. Zum Beispiel könnten die hier beschriebenen Techniken in dem System zur Anzeige von Informationen über Datenbasis-Schemata angewandt werden, das in der EP-A-0652665 offengelegt wird, und könnten außerdem verwendet werden, um Laufzeitmuster von Datensatzzugriffen in Datenbasis-Systemen zu untersuchen. Die Anzeige der Entitäten in solchen Systemen wäre natürlich je nach Art der Entität verschieden. Solche Systeme können ferner Techniken verwenden, die wie die bevorzugte Ausführungsform Farbe zur Anzeige des Abstands verwenden, Prozedur- und Dateidarstellungen und Zeilendarstellungen, Skalierung zur Anzeige der Anzahl von Zeilen in der Prozedurdarstellung verwenden, und in solchen Anwendungen kann man auch wie die bevorzugte Ausführungsform eine Füllung verwenden, um die Anzahl von Zeilen in einer Prozedur, die zu dem Slice gehört, anzuzeigen, und dem Benutzer ermöglichen, die Prozedurdarstellung zu öffnen, um Darstellungen der Zeilen selbst zu sehen. Ähnlich kann eine Betrachtungsvorrichtung vorliegen, durch die der Benutzer Einzelheiten einer Entität sehen kann und die Möglichkeit hat, die Entitätsdarstellungen gemäß ihrem Abstand vom Slice-Punkt umzuordnen.
  • Die hier ofengelegte bevorzugte Ausführungsform ist die beste, die den Erfindern zur Zeit bekannt ist. Für Fachleute ist jedoch sofort erkennbar, daß viele alternative Implementierungen möglich sind. Es können andere Datenstrukturen als die hier offengelegten verwendet werden, um den Abhängigkeitsgraph und die Entitäten, die zu dem Slice gehören können, darzustellen, und die Techniken, mit denen das Slice berechnet und angezeigt wird, hängen von diesen Darstellungen und von den Eigenschaften des grafischen Anzeigesystems ab.
  • Da die Anwendung der hier offengelegten Techniken sehr allgemein ist und viele alternative Implementierungen möglich sind, sollte die hier offengelegte Implementierung in jeder Hinsicht lediglich als veranschaulichend und beispielhaft angesehen werden, und die hier beanspruchte Erfindung wird nicht durch die offengelegte Implementierung, sondern durch die Ansprüche definiert.

Claims (15)

1. Vorrichtung (101), die Elemente eins Softwaresystems oder eines anderen Systems von Entitäten, für die ein Abhängigkeitsgraph erstellt werden kann, anzeigen kann, wobei die implementierte Vorrichtung ein Computersystem mit einem Prozessor (111) und einem Speicher (701) benutzt und folgendes umfaßt:
ein Anzeigegerät, das mehrere reduzierte Darstellungen anzeigen kann (107), wobei jede reduzierte Darstellung mindestens eines der Elemente des Software- oder anderen Systems darstellt;
ein Zeigegerät (103), das durch einen Benutzer der Vorrichtung (101) steuerbar ist, um eine der mehreren reduzierten Darstellungen zu wählen;
dadurch gekennzeichnet, daß
das mindestens eine Element des Software- oder anderen Systems, das durch die gewählte reduzierte Darstellung dargestellt wird, als ein Slice-Punkt (2003), z. B. ein Programm-Slice-Punkt im Fall eines Softwaresystems, gewählt wird; und daß
die Vorrichtung weiterhin ein auf dem Prozessor (111) ausführbares Slice-Anzeigesystem umfaßt, das auf der Grundlage des gewählten Slice-Punkts (2003) eine Teilmenge der Elemente des Software- oder anderen Systems bestimmt, die zu einem an dem Slice-Punkt (2003) genommenen Slice (1723) des Systems gehört, und das eine Erscheinung jeder reduzierten Darstellung, die mindestens eines der Teilmenge von Elementen darstellt, die zu dem Slice (1723) gehören, verändert.
2. Vorrichtung nach Anspruch 1, wobei
bestimmte der mehreren reduzierten Darstellungen mehrere der Elemente des Software- oder anderen Systems darstellen, die zu dem Slice gehören; und
der Abstand von dem Slice-Punkt jeder bestimmten reduzierten Darstellung ein Minimum der Slice-Abstände der mehreren zu dem Slice gehörenden Elemente ist, die durch diese bestimmte reduzierte Darstellung dargestellt werden.
3. Vorrichtung nach Anspruch 1, wobei das Anzeigegerät ein Farb-Anzeigegerät ist und das Slice- Anzeigesystem eine Farbe jeder reduzierten Darstellung gemäß dem Abstand jeder reduzierten Darstellung von dem Slice-Punkt ändert.
4. Vorrichtung nach einem der Ansprüche 1, 2 oder 3, wobei das Slice-Anzeigesystem weiterhin die zu dem Slice in der Anzeige gehörenden reduzierten Darstellungen gemäß dem Abstand jeder solchen reduzierten Darstellung von dem Slice-Punkt umordnet.
5. Vorrichtung nach Anspruch 1, wobei
bestimmte der mehreren reduzierten Darstellungen mehrere der Elemente des Software- oder anderen Systems darstellen;
der Benutzer das Zeigegerät steuern kann, um eine gesamte bestimmte reduzierte Darstellung zu wählen; und
das Slice-Anzeigegerät jede Entität in der bestimmten reduzierten Darstellung als Slice-Punkt verwendet.
6. Vorrichtung nach Anspruch 1, wobei
bestimmte der mehreren reduzierten Darstellungen mehrere der Elemente des Software- oder anderen Systems darstellen; und
die Erscheinungen der mehreren reduzierten Darstellungen in der Anzeige gemäß den Informationen über die mehreren durch die bestimmten reduzierten Darstellungen dargestellten Elemente variieren.
7. Vorrichtung nach Anspruch 6, wobei Formen der bestimmten reduzierten Darstellungen gemäß den Informationen variieren.
8. Vorrichtung nach Anspruch 7, wobei die Vorrichtung weiterhin eine in der Anzeige angezeigte Skalierungseinrichtung enthält, die verwendet werden kann, um einen Grad zu steuern, bis zu dem die Formen der bestimmten reduzierten Darstellungen gemäß den Informationen variieren, wobei das Zeigegerät vom Benutzer gesteuert werden kann, um die Skalierungseinrichtung zu steuern.
9. Vorrichtung nach Anspruch 6, wobei eine Füllung jeder der bestimmten reduzierten Darstellungen gemäß Informationen und/oder ob die bestimmten reduzierten Darstellungen zu dem Slice gehören, variiert.
10. Vorrichtung nach einem der Ansprüche 6, 7 oder 9, wobei es sich bei den Informationen um die Anzahl der durch jede bestimmte reduzierte Darstellung dargestellten Elemente handelt.
11. Vorrichtung nach einem der Ansprüche 6, 7 oder 9, wobei es sich bei den Informationen um die Anzahl der Elemente der mehreren durch jede bestimmte reduzierte Darstellung dargestellten Elemente handelt, die zu dem Slice gehören.
12. Vorrichtung nach Anspruch 1, wobei
die Vorrichtung Slices eines Programms anzeigt;
die reduzierten Darstellungen Prozeduren des Programms darstellen;
die reduzierten Darstellungen, die die Prozeduren in einer Datei des Programms darstellen, in einer die Datei darstellenden Spalte angezeigt werden; und
die Datei als ein Slice-Punkt wählbar ist.
13. Vorrichtung nach Anspruch 1, wobei
die Vorrichtung weiterhin eine in der Anzeige angezeigte Abstandsangabevorrichtung enthält, die verwendet werden kann, um einen maximalen Abstand des Slice anzugeben; und
das Slice-Anzeigesystem die zu dem Slice gehörenden Elemente auf der Grundlage eines durch die Abstandsangabevorrichtung angegebenen maximalen Abstands bestimmt.
14. Vorrichtung nach Anspruch 13, wobei
das Anzeigegerät ein Farb-Anzeigegerät ist;
das Slice-Bestimmungssystem die Abstände der zu dem Slice gehörenden, reduzierten Darstellungen auf Farben abbildet; und
die Anzeige jede reduzierte Darstellung in der abgebildeten Farbe anzeigt, die dem Abstand der reduzierten Darstellung von dem Slice-Punkt entspricht.
15. Vorrichtung nach Anspruch 1, wobei das Slice- Anzeigesystem die Erscheinung jeder reduzierten Darstellung gemäß einem Abstand von dem Slice-Punkt jeder reduzierten Darstellung in einem Abhängigkeitsgraph des Software- oder anderen Systems ändert.
DE69524930T 1994-10-03 1995-09-27 Vorrichtung zur visuellen Darstellung von Programmscheiben Expired - Lifetime DE69524930T2 (de)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US08/317,081 US5793369A (en) 1991-12-06 1994-10-03 Apparatus for visualizing program slices

Publications (2)

Publication Number Publication Date
DE69524930D1 DE69524930D1 (de) 2002-02-14
DE69524930T2 true DE69524930T2 (de) 2002-08-29

Family

ID=23232029

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69524930T Expired - Lifetime DE69524930T2 (de) 1994-10-03 1995-09-27 Vorrichtung zur visuellen Darstellung von Programmscheiben

Country Status (7)

Country Link
US (2) US5793369A (de)
EP (2) EP0714064B1 (de)
JP (1) JPH08227349A (de)
AU (1) AU699292B2 (de)
CA (1) CA2158499C (de)
DE (1) DE69524930T2 (de)
ES (1) ES2166805T3 (de)

Families Citing this family (48)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5793369A (en) * 1991-12-06 1998-08-11 Lucent Technologies Inc. Apparatus for visualizing program slices
US6211873B1 (en) * 1997-12-03 2001-04-03 Todd Moyer Method and apparatus for graphically representing information stored in electronic media
US6356285B1 (en) 1997-12-17 2002-03-12 Lucent Technologies, Inc System for visually representing modification information about an characteristic-dependent information processing system
US6275223B1 (en) * 1998-07-08 2001-08-14 Nortel Networks Limited Interactive on line code inspection process and tool
US7320105B1 (en) * 1998-12-01 2008-01-15 Intel Corporation Data display using multicolumn scrolling
DE19907328C2 (de) * 1999-02-20 2002-10-24 Johannes Reichardt Verfahren und System zur visuellen Programmierung
US7134093B2 (en) * 2001-04-18 2006-11-07 International Business Machines Corporation Graphical user interface for direct control of display of data
CA2385401C (en) * 2001-05-07 2012-09-25 Vizible.Com Inc. Method of representing information on a three-dimensional user interface
EP1331554B1 (de) * 2001-06-13 2017-03-08 Accenture Global Services Limited Verfahren zur Erzeugung von Softwareprodukten
US6928449B2 (en) * 2001-10-18 2005-08-09 Sun Microsystems, Inc. Mechanism for facilitating backtracking
US8046708B1 (en) * 2003-08-07 2011-10-25 The Mathworks, Inc. Reversed links from graphical diagram representation
US6914975B2 (en) * 2002-02-21 2005-07-05 Sbc Properties, L.P. Interactive dialog-based training method
US6928436B2 (en) * 2002-02-28 2005-08-09 Ilog Sa Interactive generation of graphical visualizations of large data structures
US7192283B2 (en) * 2002-04-13 2007-03-20 Paley W Bradford System and method for visual analysis of word frequency and distribution in a text
US7210128B2 (en) * 2002-10-14 2007-04-24 Fujitsu Limited Event-driven observability enhanced coverage analysis
US20050097536A1 (en) * 2003-09-11 2005-05-05 Bernstein David R. Method of graphically displaying and manipulating multiple workflow run instances of a software application
US20050091361A1 (en) * 2003-09-11 2005-04-28 Bernstein David R. Method of creating a virtual network topology for use in a graphical user interface
US20050108727A1 (en) * 2003-09-11 2005-05-19 Finisar Corporation Application binding in a network environment
US8276091B2 (en) * 2003-09-16 2012-09-25 Ram Consulting Haptic response system and method of use
EP1555599A1 (de) * 2004-01-19 2005-07-20 Matsushita Electric Industrial Co., Ltd. Feste Positionierung einer Anzeigefläche
US20070234238A1 (en) * 2005-03-10 2007-10-04 Kabushiki Kaisha Toshiba Document searching apparatus
US8365086B2 (en) * 2005-05-03 2013-01-29 The Mathworks, Inc. System and method for building graphical instrument panels
US20070006160A1 (en) * 2005-06-29 2007-01-04 Sue Kunz Software digital fingerprint
JP4876511B2 (ja) * 2005-09-29 2012-02-15 株式会社日立製作所 ロジック抽出支援装置
CA2543304A1 (en) * 2006-04-11 2007-10-11 Ibm Canada Limited - Ibm Canada Limitee Code highlight and intelligent location descriptor for programming shells
US7739622B2 (en) * 2006-10-27 2010-06-15 Microsoft Corporation Dynamic thumbnails for document navigation
KR101392166B1 (ko) * 2006-12-18 2014-05-08 삼성전자주식회사 휴대용 디스플레이 장치의 이미지 편집 방법, 편집 이미지생성 방법 및 편집된 이미지 저장 방법 및 장치
US8418149B2 (en) * 2006-12-28 2013-04-09 International Business Machines Corporation Differential comparison system and method
JP4919825B2 (ja) * 2007-01-30 2012-04-18 株式会社東芝 プログラム開発装置、プログラム開発方法およびプログラム
US20080196012A1 (en) * 2007-02-12 2008-08-14 Panaya Ltd. System and methods for static analysis of large computer programs and for presenting the results of the analysis to a user of a computer program
US7815341B2 (en) * 2007-02-14 2010-10-19 Permlight Products, Inc. Strip illumination device
US7735019B2 (en) * 2007-04-25 2010-06-08 International Business Machines Corporation Method for providing functional context within an actively scrolling view pane
US8683438B2 (en) * 2007-11-28 2014-03-25 International Business Machines Corporation System, computer program product and method for comparative debugging
US8832581B2 (en) * 2009-03-05 2014-09-09 Ming Zhang Gene expression browser for web-based search and visualization of characteristics of gene expression
US8612954B2 (en) * 2009-08-17 2013-12-17 International Business Machines Corporation Fine slicing: generating an executable bounded slice for program
US8543974B2 (en) 2009-08-31 2013-09-24 International Business Machines Corporation Plan-based program slicing
US8402444B2 (en) * 2009-10-09 2013-03-19 Microsoft Corporation Program analysis through predicate abstraction and refinement
US20110099468A1 (en) * 2009-10-22 2011-04-28 Braddock Gaskill Document display system
US8443343B2 (en) * 2009-10-28 2013-05-14 Intel Corporation Context-sensitive slicing for dynamically parallelizing binary programs
US20110154117A1 (en) * 2009-12-22 2011-06-23 General Electric Company, A New York Corporation Methods and apparatus to perform log file analyses
US8595707B2 (en) 2009-12-30 2013-11-26 Microsoft Corporation Processing predicates including pointer information
US9164742B2 (en) 2010-02-18 2015-10-20 Johan Kraft Method and a system for searching for parts of a computer program which affects a given symbol
US9383888B2 (en) * 2010-12-15 2016-07-05 Microsoft Technology Licensing, Llc Optimized joint document review
US9727678B2 (en) 2013-03-14 2017-08-08 Synopsys, Inc. Graphical view and debug for coverage-point negative hint
US9471211B2 (en) * 2013-03-18 2016-10-18 International Business Machines Corporation Chaining applications
US9740593B2 (en) 2015-01-08 2017-08-22 International Business Machines Corporation Comparative program execution through control of two or more debug sessions to automatically determine execution differences
US10831589B2 (en) * 2018-09-17 2020-11-10 Servicenow, Inc. Service portal diagnosis system providing issue resolution steps
US11157152B2 (en) * 2018-11-05 2021-10-26 Sap Se Interaction mechanisms for pointer control

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2544114A1 (fr) * 1983-04-08 1984-10-12 Gavilan Computer Corp Procede et dispositif pour l'affichage avec un effet de zoom sur un terminal d'ordinateur
US5187789A (en) * 1990-06-11 1993-02-16 Supercomputer Systems Limited Partnership Graphical display of compiler-generated intermediate database representation
CA2082848C (en) * 1991-12-06 2000-12-19 Stephen G. Eick Apparatus for selective simultaneous display of information about a plurality of events
US5793369A (en) * 1991-12-06 1998-08-11 Lucent Technologies Inc. Apparatus for visualizing program slices
US5847972A (en) 1993-09-24 1998-12-08 Eick; Stephen Gregory Method and apparatus for graphically analzying a log-file
US5596703A (en) 1993-10-22 1997-01-21 Lucent Technologies Inc. Graphical display of relationships

Also Published As

Publication number Publication date
EP1148418A2 (de) 2001-10-24
DE69524930D1 (de) 2002-02-14
AU3292895A (en) 1996-04-18
EP1148418A3 (de) 2007-06-27
EP0714064A1 (de) 1996-05-29
CA2158499A1 (en) 1996-04-04
US5793369A (en) 1998-08-11
EP0714064B1 (de) 2002-01-09
JPH08227349A (ja) 1996-09-03
US6125375A (en) 2000-09-26
AU699292B2 (en) 1998-11-26
CA2158499C (en) 2001-07-31
ES2166805T3 (es) 2002-05-01

Similar Documents

Publication Publication Date Title
DE69524930T2 (de) Vorrichtung zur visuellen Darstellung von Programmscheiben
DE69327948T2 (de) Bereich-layout in einer Sicht auf einem grafischen Anzeigeschirm
DE69031851T2 (de) Graphische Anordnung zur Anzeige von räumlich verteilten, zeitvarianten Daten
DE3787496T2 (de) Verfahren und Einrichtung zum Steuern von Mehrfenstern und Arbeitsstation mit Mehrfensterfunktion.
Eick Graphically displaying text
DE3689034T2 (de) Elektronisches System zur Text-Grafik-Aufbereitung.
DE69419993T2 (de) Verfahren und Einrichtung zur grafischen Analyse einer Log-Datei
DE69518123T2 (de) Visualisierung von objektorientierter Software
DE3751192T2 (de) Grafiksystem zum Modellieren eines Prozesses und dazugehöriges Verfahren.
DE69534331T2 (de) Verfahren und Vorrichtung zur Hervorhebung der Einzelheit einer Baumstruktur
DE69522684T2 (de) Statusanzeiger einer graphischen benutzerschnittstelle
US5710899A (en) Interactive selectors for selecting subsets of a set of values
DE69031005T2 (de) Formularverwalter
DE69600794T2 (de) Graphische entwicklungs- und verwaltungsumgebung für anwendungsprogramme
DE69230331T2 (de) Computervorrichtung und verfahren zur identifizierung von finite-elementen in der interaktiven modellierung
DE69527898T2 (de) Klassenbibliothek für die graphische Programmierung
DE69426281T2 (de) Verfahren zur dynamischen Beibehaltung mehrfacher struktureller Interpretationen in einem Grafiksystem
DE19957780A1 (de) Quellcode-Editierung in einer grafischen hierarchischen Umgebung
DE3851207T2 (de) Verfahren zur Bedienung eines Rechnergraphiksystems.
DE19959765B4 (de) Datei-Editor für mehrere Datenuntermengen
DE69416152T2 (de) Virtueller graphikprozessor und verfahren für eingebettete echtzeitanzeigesysteme
DE10144390A1 (de) Visualisierung eines Vergleichsergebnisses mindestens zweier in Verzeichnisbäumen organisierter Datenstrukturen
DE3854835T2 (de) Verfahren und Apparat zur Klassifizierung graphischer Segmente, um Auswahl- und Anzeigeoperation zu erleichtern
DE69710653T2 (de) Systemanalysewerkzeug für sequentielle Prozessereignisse
DE4135347C2 (de) Verfahren zur Aufrechterhaltung einer gegenseitigen Beziehung zwischen mehreren Objekten in einem für objekt-orientierte Sprache vorgesehenen Computer-System und Vorrichtung zur Durchführung eines derartigen Verfahrens

Legal Events

Date Code Title Description
8364 No opposition during term of opposition