DE202014010893U1 - Rufwegsucher - Google Patents

Rufwegsucher Download PDF

Info

Publication number
DE202014010893U1
DE202014010893U1 DE202014010893.5U DE202014010893U DE202014010893U1 DE 202014010893 U1 DE202014010893 U1 DE 202014010893U1 DE 202014010893 U DE202014010893 U DE 202014010893U DE 202014010893 U1 DE202014010893 U1 DE 202014010893U1
Authority
DE
Germany
Prior art keywords
node
function
child
call
child node
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.)
Active
Application number
DE202014010893.5U
Other languages
English (en)
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.)
Google LLC
Original Assignee
Google LLC
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 Google LLC filed Critical Google LLC
Publication of DE202014010893U1 publication Critical patent/DE202014010893U1/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3676Test management for coverage analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/74Reverse engineering; Extracting design information from source code
    • 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)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Stored Programmes (AREA)
  • Telephonic Communication Services (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Library & Information Science (AREA)

Abstract

Nichttemporäres computerlesbares Medium mit einer darauf verkörperten Datenstruktur, die den Funktionsrufgraphen für eine Codebasis repräsentiert, die Grafik umfassend: eine Vielzahl von Graphikknoten, jeder Graphikknoten anzeigend eine rufbare Funktion innerhalb der Codebasis, ein erster Graphikknoten aus der Vielzahl umfassend eine Funktionssignatur, eindeutig identifizierend die rufbaren Funktionen innerhalb der Codebasis; ein erster Graphikknoten des absoluten Pfades, der einen absoluten Ort von Datendateien, die rufbare Funktionen innerhalb eines Dateisystems einschließen, identifiziert; Informationen, identifizierend einen Kindknoten des ersten Grafikknotens, wobei die Information, die einen Kindknoten identifiziert, eine Repräsentation einer Kindknotensignatur umfasst, die eine Kindfunktion, zugehörig zu dem Kindknoten, und eine Kindknotenart, zugehörig zu dem Kindknoten, identifiziert, wobei die Kindfunktionssignatur zugehörig zu dem Kindknoten eine Grafik, eine Grafikkante repräsentiert, die den ersten Grafikknoten und den Kindknoten miteinander verbindet; und wobei der Kindknoten eines von einer direkten Rufart und einer exemplarischen Rufart umfasst, wobei die exemplarische Rufart indiziert, dass der Kindknoten eine Implementation einer Überschreibung eines Basisklassenverfahrens, geltend gemacht in der rufbaren Funktion, repräsentiert.

Description

  • Hintergrund:
  • Ein komplexes umfangreiches Softwareprodukt oder eine Softwareentwicklungsumgebung kann zunehmend erfordern, dass Programmierer, die Entwicklung oder Wartung durchführen, unbekannten Code lesen müssen. In solchen Situationen kann es schwierig und zeitraubend sein, den Steuerungsfluss von einer Funktion zur anderen zu verfolgen.
    Unter Schutz gestellt werden und Gegenstand des Gebrauchsmusters sind dabei, entsprechend den Vorschriften des Gebrauchsmustergesetzes, lediglich Vorrichtungen wie in den beigefügten Schutzansprüchen definiert, jedoch keine Verfahren. Soweit nachfolgend in der Beschreibung gegebenenfalls auf Verfahren Bezug genommen wird, dienen diese Bezugnahmen lediglich der beispielhaften Erläuterung der in den beigefügten Schutzansprüchen unter Schutz gestellten Vorrichtung oder Vorrichtungen.
  • Zusammenfassung
  • In einigen Ausführungsformen von Lösungen, die hierin diskutiert werden, gehört ein Verfahren zum Erzeugen eines Funktionsaufrufgraphen für eine Codebasis dazu, wobei das Verfahren folgendes umfasst: Identifizieren von Funktionen in der Codebasis durch eine Funktionssignatur; darstellen einer bestimmten identifizierten Funktion als ersten Knoten in dem Funktionsaufrufgraph; identifizieren von Aufruffunktionen, Abruffunktionen, Vererbungseltern und Vererbungskindern und einer Basisklasse, die mit der bestimmten Funktion verknüpft ist, basierend auf der Funktionssignatur dieser bestimmten Funktion; Hinzufügen erster Kindknoten zu dem ersten Knoten auf der Basis der identifizierten Call-To- und Abruffunktionen; Für einen Schnittstellenaufruf zu einem Basisklassenverfahren in der bestimmten Funktion, hinzufügen von zweiten Kindknoten zum ersten Knoten basierend auf Implementierungen einer Überbrückung des Basisklassenverfahrens; Für mindestens einen hinzugefügten zweiten Kindknoten: bestimmen, ob eine erste Quellcodedatei, die eine bestimmte hinzugefügte Implementierung einer Überbrückung enthält, und eine zweite Quellcodedatei, die die bestimmte Funktion enthält, mindestens eine gemeinsame Binärdatei gemeinsam nutzen; und in Erwiderung auf eine Bestimmung, dass die ersten und zweiten Quellcodedateien keine gemeinsame Binärdatei teilen, entfernen des hinzugefügten zweiten Kindknotens von dem ersten Knoten.
  • In einigen Ausführungsformen umfasst das Verfahren das Identifizieren von Graphenrändern zwischen dem ersten Knoten und den hinzugefügten zweiten Kindknoten für eine nachfolgende Klassifizierung. In einigen Ausführungsformen umfasst das Verfahren das Reduzieren eines Speicherabdrucks des Funktionsaufrufgraphen.
  • In einigen Ausführungsformen umfasst das Reduzieren eines Speicherabdrucks das Anwenden einer Hash-Funktion auf jede Funktionssignatur und das Speichern eines Ergebnisses der Hash-Funktion als eine Darstellung der Funktionssignatur.
  • In einigen Ausführungsformen muss die Bestimmung, ob eine erste Quellcodedatei, die eine bestimmte hinzugefügte Implementierung einer Überbrückung enthält, und eine zweite Quellcodedatei, die die bestimmte Funktion enthält, mindestens eine gemeinsame Binärdatei enthalten, folgendes beinhalten: Identifizieren von Abhängigkeiten, die mit der bestimmten Funktion assoziiert sind; erzeugen eines ersten Bloom-Filters zum Testen von Binärdateien für die identifizierten Abhängigkeiten, erzeugen eines Bloom-Filters, einschließlich dem Variieren einer Größe des ersten erzeugten Bloom-Filters basierend auf einer Anzahl von identifizierten Abhängigkeiten; und Anwenden des ersten erzeugten Bloom-Filters auf eine bestimmte Binärdatei, um zu bestimmen, ob die bestimmte Binärdatei die bestimmte Funktion enthält.
  • In einigen Ausführungsformen muss die Bestimmung, ob eine erste Quellcodedatei, die eine bestimmte hinzugefügte Implementierung einer Überbrückung enthält, und eine zweite Quellcodedatei, die die bestimmte Funktion enthält, mindestens eine gemeinsame Binärdatei enthalten, ferner folgendes umfassen: Anlegen eines zweiten erzeugten Bloom-Filters an der besonderen Binärdatei, um zu bestimmen, ob die bestimmte Binärdatei die bestimmte hinzugefügte Implementierung enthält; und bestimmen, dass die ersten und zweiten Quellcodedateien die spezielle Binärdatei als eine gemeinsame Binärdatei in Antwort auf die spezielle Binärdatei gemeinsam nutzen, die sowohl den ersten als auch den zweiten erzeugten Bloom-Filter passieren.
  • In einigen Ausführungsformen umfasst das Verfahren ferner das Erzeugen eines Bloom-Filters basierend auf binären Dateien der Codebasis, die unter Verwendung der zweiten Quellcodedatei kompiliert oder erzeugt werden; und Addieren des erzeugten Bloom-Filters zum ersten Knoten.
  • In einigen Ausführungsformen kann bestimmt werden, ob eine erste Quellcodedatei, die eine bestimmte hinzugefügte Implementierung einer Überbrückung enthält, und eine zweite Quellcodedatei, die die bestimmte Funktion enthält, mindestens eine gemeinsame Binärdatei enthält: Anlegen des Bloomfilters des ersten Knotens an die erste Quellcodedatei.
  • In einigen Ausführungsformen wird die Größe des Bloom-Filters dadurch bestimmt, wie viele Binärdateien der Codebasis unter Verwendung der zweiten Quellcodedatei kompiliert oder erzeugt werden, so dass eine häufig verwendete Quellcodedatei mit einem Bloom-Filter mit größerer Größe assoziiert ist.
  • In einigen Ausführungsformen von Lösungen, die hierin erläutert werden, wird auf ein Verfahren zum Bestimmen eines wahrscheinlichen Rufweges zwischen zwei Funktionen in einer Codebasis verwiesen, wobei das Verfahren folgendes umfasst: Empfangen einer Quellfunktion und einer Zielfunktion als Eingaben; identifizieren eines mit der Quellfunktion verknüpften Startknotens in einem Funktionsaufrufgraph und eines mit der Zielfunktion verbundenen Endknotens; suchen von möglichen Pfaden in dem Funktionsaufrufgraph zwischen dem Startknoten und dem Endknoten, wobei die Suche für jeden Knoten entlang eines Suchpfades den Knoten gegen eine Liste von gemeinsamen Abhängigkeiten auswertet, die von dem Startknoten und dem Endknoten gemeinsam genutzt werden; damit ein ausgewerteter Knoten eine Abhängigkeit hat, die in der Liste der gemeinsamen Abhängigkeiten enthalten ist, einschließlich des ausgewerteten Knotens in einem möglichen Pfad und dem Durchsuchen aller möglichen Pfade in dem Funktionsaufrufgraph zwischen jedweden Kindknoten des ausgewerteten Knotens und dem Startknoten oder dem Endknoten; damit ein ausgewerteter Knoten keine Abhängigkeit aufweist, die in der Liste der gemeinsamen Abhängigkeiten enthalten ist, mit Ausnahme des ausgewerteten Knotens von jedwedem möglichen Pfad; sortieren aller möglichen Pfade zwischen dem Startknoten und dem Endknoten, die als Ergebnis der Suchanzeige-Auswerteschritte erzeugt wurden; und als ein wahrscheinlicher Aufrufpfad Rückgabe wenigstens einer der sortierten möglichen Pfade.
  • In einigen Ausführungsformen umfasst das Sortieren aller möglichen Pfade folgendes: Ordnen aller möglichen Pfade von kürzesten zu längsten; von den geordneten Pfaden jene Pfade identifizieren die vollständig innerhalb einer einzelnen Codebasis sind; anwenden von Gewichtungsfaktoren auf die geordneten Pfade, damit alle möglichen Pfade vom höchstwahrscheinlich bis zum unwahrscheinlichsten auf der Grundlage von Pfadlänge und Gewichtungsfaktor geordnet sind, wobei der Gewichtungsfaktor die Wahrscheinlichkeit anzeigt, dass diese Pfade in einer einzigen Codebasis wahrscheinlicher sind; und als einen wahrscheinlichen Rufpfad wenigstens den wahrscheinlichsten Weg laut den angewandten Gewichtungsfaktoren zurückzugeben.
  • In einigen Ausführungsformen beinhaltet das Anwenden von Gewichtungsfaktoren das Erzeugen von Gewichtungsfaktoren auf der Basis von historischen Ablaufverfolgungsdaten, die aus früheren Funktionsausführungen erzeugt werden, wodurch Funktionsaufrufwege, die durch die historischen Ablaufverfolgungsdaten angezeigt werden, Gewichtungsfaktoren zugeordnet sind, die diese Pfade als wahrscheinlicher anzeigen.
  • In einigen Ausführungsformen umfasst das Anwenden von Gewichtungsfaktoren das Anwenden von klassenbasierten Gewichtungsfaktoren, so dass Anrufwege, die häufig verwendete Objektklassen umfassen, als wahrscheinlicher angegeben werden.
  • In einigen Ausführungsformen umfasst das Durchsuchen von möglichen Pfaden das Durchsuchen aller möglichen Pfade. In einigen Ausführungsformen umfasst das Durchsuchen von möglichen Pfaden das Durchführen einer bidirektionalen Suche, die sowohl von den Anfangs- als auch von den Endknoten ausgeht.
  • Einige Ausführungsformen von Lösungen, die hierin erläutert werden, beziehen sich auf eine Datenstruktur, die einen Funktionsaufrufgraphen für eine Codebasis darstellt, wobei der Graph folgendes umfasst: eine Vielzahl von Graphknoten, wobei jeder Graphknoten eine aufrufbare Funktion innerhalb der Codebasis darstellt; ein erster Graphknoten aus der Mehrzahl einschließlich einer Funktionssignatur, die die aufrufbare Funktion in der Codebasis eindeutig identifiziert; einen ersten absoluten Pfad des Graphknotens, der eine absolute Position einer Datei identifiziert, die die aufrufbare Funktion innerhalb eines Dateisystems enthält; Information, die einen Kindknoten des ersten Graphknotens identifiziert, wobei die Information einen Kindknoten kennzeichnet, der eine Darstellung einer Kindfunktionssignatur enthält, die eine Kindfunktion identifiziert, die dem Kindknoten zugeordnet ist, und eine Kindknotenart, die dem Kindknoten zugeordnet ist, wobei die Kinderfunktionssignatur, die mit dem Kindknoten assoziiert ist, eine Graphenflanke darstellt, die den ersten Graphknoten und den Kindknoten verbindet; und wobei die Kindknotenart eine Direktrufart und eine Instanzrufart umfasst, wobei die Instanzaufrufart anzeigt, dass der Kindknoten eine Implementierung einer Überbrückung eines Basisklassenverfahrens darstellt, das in der aufrufbaren Funktion aufgerufen wird.
  • In einigen Ausführungsformen enthalten Information, die einen Kindknoten identifizieren, ferner eine Markierung, die anzeigt, ob die Kindfunktion, die dem Kindknoten zugeordnet ist oder nicht, eine Fernprozeduraufruffunktion ist oder nicht.
  • In einigen Ausführungsformen ist die Funktionssignatur in dem ersten Graphknoten in einer Hash-Form enthalten, wobei die Hash-Form weniger Datenspeicherplatz im Medium einnimmt.
  • In einigen Ausführungsformen enthält der Kindknoten die Kindfunktionssignatur, die die Kinderfunktion in der Codebasis eindeutig identifiziert; einen absoluten Pfad für einen untergeordneten Knoten, der eine absolute Position einer Datei identifiziert, die die untergeordnete Funktion innerhalb eines Dateisystems enthält; Informationen, die einen Verbindungsknoten des Graphknotens identifizieren, wobei die Informationen einen Verbindungsknoten kennzeichnen, der eine Repräsentation einer Abruffunktionssignatur enthält, die eine Abruffunktion identifiziert, die die von dem Kindknoten repräsentierte Kindfunktion aufruft, wobei die Abruffunktionssignatur, die mit dem Verbindungsknoten verbunden ist, eine Graphenkante repräsentiert, die den Kindknoten und den Verbindungsknoten verbindet.
  • In einigen Ausführungsformen ist der erste Graphknoten ein Verbindungsknoten des Kindknotens.
  • Ausführungsformen von Lösungen, Techniken und Systemen, die hierin beschrieben werden, können ein System beinhalten, das folgendes umfasst: einen Prozessor und einen Prozessor-lesbaren Speicher, auf dem Anweisungen angeordnet sind, die konfiguriert sind, um dem Prozessor einige oder alle der oben beschriebenen Schritte oder Operationen zu veranlassen, und/oder um Darstellungen einer oder mehrerer der oben beschriebenen Datenstrukturen zu erzeugen.
  • Ausführungsformen von Lösungen, Techniken und Systemen, die hierin beschrieben werden, können ein transitorisches oder nicht-transitorisches computerlesbares Medium umfassen, das Anweisungen enthält, die bewirken, dass ein Computer einige oder alle der oben beschriebenen Schritte ausführt, und/oder Darstellungen einer oder mehrerer der oben beschriebenen Datenstrukturen erzeugt.
  • Ein weiterer Anwendungsbereich der beschriebenen Systeme und Verfahren wird aus der nachfolgenden detaillierten Beschreibung ersichtlich. Es versteht sich jedoch, dass die detaillierte Beschreibung und die spezifischen Beispiele, während sie Ausführungsformen der Systeme und Verfahren angeben, nur zur Veranschaulichung gegeben werden, da verschiedene Änderungen und Modifikationen innerhalb des Geistes und des Umfangs der hierin offenbarten Konzepte dem Fachmann mit Blick auf diese detaillierte Beschreibung offensichtlich werden.
  • Kurzbeschreibung der Zeichnungen
  • Die erörterten Systeme und Verfahren werden aus der nachfolgenden detaillierten Beschreibung und den beigefügten Zeichnungen, die lediglich zur Veranschaulichung dienen und daher nicht einschränkend sind, vollständiger verständlich.
  • 1a zeigt ein Blockdiagramm, das eine Ausführungsform einer Funktionsaufrufgraph-Erzeugungsoperation darstellt, wie hierin beschrieben,
  • 1b zeigt ein Blockdiagramm, das eine Ausführungsform einer gemeinsamen binären Identifikationsoperation darstellt, wie hier beschrieben,
  • 1c zeigt ein Blockdiagramm, das eine Ausführungsform eines Teils eines Funktionsaufrufgraphen darstellt, wie hierin beschrieben,
  • 2 zeigt ein Blockdiagramm, das eine Ausführungsform eines Graphknotens darstellt, wie hierin beschrieben,
  • 3 zeigt ein Blockdiagramm, das eine Ausführungsform einer Graphensuche und eines Anrufpfad-Erzeugungsvorgangs darstellt, wie hierin beschrieben,
  • 4 zeigt ein Blockdiagramm, das eine Ausführungsform eines Rufpfadsortiervorgangs oder eines Rechenvorgangs darstellt, wie hierin beschrieben; und
  • 5 zeigt ein Blockdiagramm, das eine Ausführungsform einer Rechenvorrichtung darstellt, die angeordnet ist, um einige oder alle der hier beschriebenen Grapherzeugungs- und Rufpfadidentifikationsoperationen auszuführen.
  • Die Zeichnungen werden im Detail in der detaillierten Beschreibung beschrieben.
  • Detaillierte Beschreibung
  • Die folgende detaillierte Beschreibung bezieht sich auf die beigefügten Zeichnungen. Die gleichen Bezugsziffern in verschiedenen Zeichnungen können die gleichen oder ähnliche Elemente identifizieren. Auch beschränkt sich die folgende detaillierte Beschreibung nicht auf die erläuterten Konzepte. Stattdessen wird der Umfang der hierin diskutierten Konzepte durch die beigefügten Ansprüche und Äquivalente davon definiert.
  • Ein komplexes, umfangreiches Softwareprodukt oder eine Softwareentwicklungsumgebung kann es erforderlich machen, dass Programmierer, die die Entwicklung und/oder Codewartungen durchführen, unbekannten Code lesen müssen. In solchen Situationen kann es schwierig und zeitraubend sein, den Steuerungsfluss von einer Funktion zur anderen zu verfolgen. Ein Anrufpfadsucher, der einen oder mehrere wahrscheinliche Pfade zwischen beliebigen zwei Funktionen in einer Codebasis finden kann, vereinfacht den Prozess des Verständnisses von Code und ermöglicht eine schnellere und einfachere Softwareentwicklung und Wartung.
  • Eine Ausführungsform eines Anrufpfadsuchers für eine bestimmte Codebasis kann durch Erzeugen und anschließendes Abfragen einer Graph- oder Baumdatenstruktur realisiert werden. In einigen Ausführungsformen kann ein solcher Graph jede Funktion der Codebasis als einen Graphknoten umfassen, wobei Verbindungsknoten alle anderen möglichen Funktionen und/oder Funktionsinstanzen darstellen, die von dieser Funktion aufgerufen werden oder werden könnten. Ferner können Verbindungsknoten auch Abruffunktionen darstellen, die Funktionen und/oder Funktionsinstanzen sind, die die von einem bestimmten Knoten repräsentierte Funktion ausführen oder aufrufen können.
  • In einer monolithischen Codebasis könnte beispielsweise ein solcher Graph als eine sortierte Schlüsselzuordnung in einer oder mehreren Datenbanktabellen aufgebaut sein. Jeder Graphknoten kann eine eindeutige Signatur enthalten, wie beispielsweise eine Funktionssignatur, die die spezielle Funktion identifiziert, die durch den Knoten repräsentiert wird. Um Aktualisierungen und Änderungen an der Codebasis Rechnung zu tragen, könnte ein solcher Graph wiederhergestellt und/oder in regelmäßigen Intervallen (z. B. nachts) aktualisiert werden.
  • In Ausführungsformen mit objektorientierten Technologien kann eine statische Analyse von eingehenden und ausgehenden Funktionsaufrufen unter Umständen jene Subtilitäten oder Variationen nicht erfassen, die durch Dinge wie Funktionsüberlastung oder Überbrückung verursacht werden. In einigen Ausführungsformen kann eine Funktion einen Schnittstellenaufruf zu einer Methode oder Funktion einer Basisklasse vornehmen. In einigen Fällen kann dies ein Aufruf einer Instanz der Basisklasse sein. In anderen Fällen kann es sich um einen Aufruf einer überladenen Instanz der Basisklassenmethode handeln. In einigen Ausführungsformen, die für überladene Funktionen verantwortlich sind, kann die Anzahl von Verbindungen zu einem gegebenen Knoten erweitert werden, um jede Implementierung einer Überbrückung des Basisklassenverfahrens als Kind- oder Verbindungsknoten zu umfassen.
  • Eine Ausführungsform eines Graphenaufbauprozesses für eine monolithische Codebasis ist in 1a aufgezeigt. In der dargestellten Ausführungsform kann jede Funktion in der Codebasis eine Funktionssignatur aufweisen. Dies kann eine Zahl, ein String oder eine andere Information sein, die die Funktion innerhalb der Codebasis eindeutig identifiziert. In einigen Ausführungsformen kann eine derartige Funktionssignatur für die Funktion als Teil des Graph-Konstruktionsprozesses erzeugt werden. In einigen Ausführungsformen können Quellenverwaltungsrichtlinien oder -praktiken für die Codebasis- oder Entwicklungsumgebung erfordern, dass jede Funktion und/oder jede Klasse mit einer eindeutigen Kennung verknüpft ist, die als Teil oder als Gesamtheit einer Funktionssignatur verwendet werden kann.
  • Ein Beispiel einer Funktionssignatur kann eine Klassensignatur in einer objektorientierten Programmiersprache, wie beispielsweise Java, enthalten. Ein weiteres Beispiel für eine Funktionssignatur kann ein Name sein, der aus einem Verzeichnispfad einer Quellcodedatei für eine bestimmte Klasse, dem Namen der Klasse und dem Namen der Funktion innerhalb der Klasse erstellt wird. Andere Ausführungsformen können andere Techniken verwenden, um eindeutige Kennungen zu erzeugen, die als Funktionssignaturen verwendet werden können.
  • Die Funktionssignatur kann als 1001 erzeugt oder gelesen werden und die durch die Signatur identifizierte Funktion kann dem Graphen 1070 als Knoten hinzugefügt werden. In einigen Ausführungsformen kann das Hinzufügen der Funktion zu dem Graphen 1070 als ein Knoten ein Parsing oder anderweitiges Durchqueren der Funktion zum Identifizieren von Anruf-zu und Abruffunktionen 1200 umfassen.
  • Aufruffunktionen sind die Funktionen, die innerhalb der hinzugefügten Funktion aufgerufen werden oder aufgerufen werden können. Solche Aufruffunktionen können ihre Funktionssignaturen in Form von Kind- oder Verbindungsknoten des Knotens enthalten, die die hinzugefügte Funktion darstellen. In einigen Ausführungsformen können Abruffunktionen, also diejenigen Funktionen, die die hinzugefügte Funktion anrufen oder aufrufen können, basierend auf der Funktionssignatur identifiziert werden.
  • In einigen Ausführungsformen können alle Funktionssignaturen einer Codebasis in einer oder mehreren Datenbanktabellen gespeichert sein. In einigen Ausführungsformen können die Signaturen in einer sortierten Zeichentabelle gespeichert werden, um die Datensuche einfacher zu machen. In einigen Ausführungsformen können die Funktionssignaturen als Schlüssel für den Zugriff auf den Aufruf, Abruf und alle damit zusammenhängenden Vererbungsinformationen für eine bestimmte Funktion angegeben werden oder als solcher dienen. In solchen Ausführungsformen kann das Abtasten solcher Datenbanktabellen die Aufruf- und Abrufdaten für eine bestimmte Funktion bereitstellen.
  • In anderen Ausführungsformen können Anruf-Informationen während des Graphenaufbaus rekursiv erzeugt werden. In solchen Ausführungsformen kann das Identifizieren einer Abruffunktion in einem bestimmten Knoten es ermöglichen, dass der bestimmte Knoten als ein Aufrufknoten für den Knoten identifiziert wird, der die Abruffunktion darstellt. In einigen solchen Ausführungsformen kann ein Masteraufruf oder -abruf aus der Tabelle oder Datenstruktur dynamisch in einer oder mehreren Datenbanktabellen als Teil des Graphgenerierungsprozesses erzeugt werden. In einigen Ausführungsformen können alle Graphknoten Aufrufwerte enthalten, um die Breitensuche zu erleichtern. In einigen Ausführungsformen können alle Graphenknoten Abrufwerte enthalten, um die Breitensuche zu erleichtern.
  • In einigen objektorientierten Ausführungsformen kann eine hinzugefügte Funktion einen Schnittstellenaufruf 1010 zu einem Basisklassenverfahren umfassen. Ein solcher Schnittstellenaufruf 1010 für ein Verfahren oder eine Funktion einer Basisklasse kann in manchen Fällen ein Aufruf einer Instanz der Basisklasse sein. In anderen Fällen kann ein solcher Schnittstellenaufruf 1010 ein Aufruf einer überladenen Instanz des Basisklassenverfahrens sein. Weil in einer statischen Analyseeinstellung nicht leicht bestimmt werden kann, ob der Schnittstellenaufruf 1010 einer überlasteten Instanz entspricht oder nicht, können einige Ausführungsformen eines Diagrammkonstruktionsverfahrens jede Implementierung einer Überbrückung des Basisklassenverfahrens als Aufruf zu einem Kind- oder Verbindungsknotens 1020 des der Funktion repräsentierenden Knotens hinzufügen.
  • In einigen Ausführungsformen kann eine solche Vererbungsexpansion dazu führen, dass die Anzahl von Knoten und Verbindungen in dem Graphen unüberschaubar groß wird. In einigen Ausführungsformen können solche Vererbungserweiterungen Kind- oder Verbindungsknoten hinzufügen, die auf unmögliche oder anderweitig ungleiche (z. B. falsch positive) Kanten des Graphen hindeuten.
  • In einigen Ausführungsformen kann die Funktion zusammen mit irgendwelchen potentiellen Kindknoten 1020 dem Aufrufgraph 1090 hinzugefügt werden. Der Graph kann auf diese Weise für die verschiedenen Anrufpfade 1050 aufgebaut werden, wobei jeder Graphknoten einem Filter, wie beispielsweise einem Bloom-Filter, zugeordnet ist. Der Bloom-Filter kann für ein bestimmtes Abruf-/Aufruf-Funktionspaar als 1040 basierend auf den Funktionen gemeinsamen Binärdateien erzeugt werden.
  • In einigen Ausführungsformen können Bloom-Filter basierend auf jeder Binärdatei erstellt werden, die kompiliert oder für die Kompilierung innerhalb der Codebasis angegeben wird. In einigen Ausführungsformen können solche Bloom-Filter basierend auf einem Dienstprogramm wie einem Versionskontrollwerkzeug erzeugt werden, das identifiziert, welche Quellcode-Dateien und welche Quellcode-Dateiversionen in einer bestimmten Version einer Anwendung oder eines Programms kompiliert werden sollen. Die Länge oder Datengröße eines bestimmten Bloom-Filters kann in einigen Ausführungsformen basierend auf einer Anzahl von Quellcodedateien und/oder Funktionen, die in einer bestimmten Binärdatei enthalten sind, die eine kompilierte Anwendung oder ein Programm repräsentiert, variieren.
  • In einigen Ausführungsformen kann der Graphaufbauprozess jede Funktion innerhalb der Codebasis lesen. In einigen derartigen Ausführungsformen kann es dann, sobald der Graphaufbauprozess anzeigt, dass alle Funktionen als 1060 gelesen worden sind und dem Graphen 1090 hinzugefügt worden, fortfahren, einen Speicherabdruck des erzeugten Graphen 1080 zu reduzieren. Ausführungsformen der Speicherabdruckverringerung können das Verwenden von Hash-Funktionssignaturen und Blitzfiltern mit variabler Länge, wie oben erläutert, umfassen.
  • In einigen Ausführungsformen kann das konstruierte Anrufdiagramm in einem flüchtigen Speicher oder Schnellzugriffsspeicher, wie z. B. dem Flash-Speicher, gespeichert sein, um einen schnelleren Zugang zu und eine Durchquerung des Graphen zu ermöglichen. In einigen solchen Ausführungsformen kann die Länge oder Datengröße eines Bloom-Filters in Abhängigkeit von einer gewünschten Toleranz für falsch positive Ergebnisse variiert werden. In einigen Ausführungsformen kann das Variieren einer Größe eines Bloom-Filters, um 0,01% falsch positive Ergebnisse zu ermöglichen, ein gutes Gleichgewicht zwischen der Datenqualität und der Datengröße ermöglichen. Bei Ausführungsformen, die funktionsbasierte Bloom-Filter verwenden, können Funktionen, deren Dateien in mehreren Binärdateien vorhanden sind, größere Bloom-Filter erhalten.
  • Ein Beispiel einer Ausführungsform eines gemeinsamen Binärdatei-Identifizierungsprozesses, um einen Anrufpfad zu finden, ist in 1B aufgezeigt. Beginnend mit einem Binärdatei-Filter 1100 wie einem Bloom-Filter und einem Startknoten 1170 und einem Endknoten 1180 in einem Graphen können die mit den Start- und Endknoten assoziierten Funktionssignaturen unter Verwendung des Filters 1110 ausgewertet werden. Wenn die durch die Funktionssignaturen identifizierten Funktionen nicht in den durch den Filter 1130 dargestellten Binärdateien angezeigt werden, stoppt der Filterprozess für diesen Bloom-Filter und ein Filterprozess für einen nachfolgenden Satz von Binärdateien kann initiiert werden.
  • Wenn die durch die Funktionssignaturen identifizierten Funktionen so dargestellt werden, dass sie in den in dem Bloom-Filter 1120 dargestellten Binärdateien enthalten sind, kann jede Implementierung einer Überbrückung des Basisklassenverfahrens, das als ein Kind- oder ein Verbindungsknoten hinzugefügt wird, unter Verwendung desselben Filters 1140 ausgewertet werden. Jede Implementierung einer Überbrückung des Basisklassenverfahrens, das den Filter passiert, wird so bestimmt, dass es in den Binärdateien 1150 enthalten ist und als potentieller Knoten in einem Funktionsaufrufpfad bestehen bleibt. Jede Implementierung einer Überbrückung des Basisklassenverfahrens, das den Filter nicht passiert, wird so bestimmt, dass diese Binärdatei nicht gemeinsam mit der Abruffunktion 1160 besteht und daher kein potentieller Knoten in einem Funktionsaufrufpfad ist.
  • In anderen Ausführungsformen kann ein Bloom-Filter für jede Graphknoten-/-Funktionssignatur erzeugt werden, die Kind- oder Verbindungsknoten aufweist, die hinzugefügt wurden, um die Vererbungserweiterung zu berücksichtigen. In solchen Ausführungsformen kann der Bloom-Filter basierend auf einem Dienstprogramm wie einem Versionskontrollwerkzeug erzeugt werden, das identifiziert, welche Quellcode-Dateien und welche Quellcode-Dateiversionen in einer bestimmten Version einer Anwendung oder eines Programms kompiliert werden sollen. Der Bloom-Filter für einen bestimmten Satz von Binärdateien, die auf Funktionen basieren, die durch die Funktionssignaturen von Graphknoten identifiziert werden, kann Informationen über alle Funktionen in jeder der Binärdateien enthalten, in denen die identifizierten Funktionen auftreten. In einer solchen Ausführungsform kann ein Bloom-Filter eine direkte Auswertung jeder Implementierung einer Überbrückung des Basisklassenverfahrens ermöglichen, das als Kind- oder Verbindungsknoten 1140 hinzugefügt wird, da der Bloom-Filter bereits spezifisch für die Binärdateien ist, die die Funktionen beinhalten, die im der Start- und Endknoten repräsentiert sind.
  • Eine Ausführungsform eines beispielhaften Funktionsaufruf-Graphen oder Graphenabschnitts ist in 1c dargestellt. In der gezeigten Ausführungsform sind die Funktionsaufrufpfade von einer Aktualisierungsanforderungsfunktion 1500 dargestellt. Eine Aktualisierungsanforderungsfunktion 1500, die in einem Klassenclient aufgerufen wird, kann eine Aktualisierungsanforderungshandlerfunktion 1510 in einem Klassenserver aufrufen. Die Aktualisierungsanforderungshandlerfunktion 1510 kann eine Anfragevalidierungsfunktion 1520, eine Anfrageverarbeitungsfunktion 1530 und eine Antworteinstellungsfunktion 1540 aufrufen. Die Anfrageverarbeitungsfunktion 1530 von der Klassenhandlung kann durch die Anfrageverarbeitungsfunktionen 1550 1560 1570 in den Klassen Action1, Action2 und Action3 überschrieben werden Diese Verbindungen sind durch gestrichelte Linien angedeutet, da sie in einigen Ausführungsformen innerhalb der Grafik während der Laufzeitanalyse statt durch statische Analyse aufgelöst werden müssen. Die Action2-Anforderungsverarbeitungsfunktion 1560 kann eine rekursive Berechnungsfunktion 1580 aufrufen, die sich selbst zurückruft. In den gezeigten Ausführungsformen repräsentiert jede der Funktionen einen Graphknoten.
  • Eine Ausführungsform einer Datenstruktur, die einen Knoten eines Funktionsaufrufgraphen darstellt, wie hierin erläutert, ist in 2 gezeigt. In der gezeigten Ausführungsform kann ein Graphknoten 2010 Informationen enthalten, die eine Funktionssignatur 20200 anzeigen, die die spezielle Funktion identifiziert, die durch den Knoten repräsentiert wird. Der Graphknoten 2010 kann auch Informationen enthalten, die einen absoluten Pfad der Quelldatei angeben, die die durch die Funktionssignatur 20190 identifizierte Funktion enthält. Ein solcher absoluter Pfad 20190 kann Informationen über einen bestimmten Dateispeicherpfad in einem oder beiden Verzeichnissen in einem virtuellen oder logischen Dateisystem und einen absoluten physikalischen Speicherpfad der Daten in einem bestimmten Speicherpfad eines oder mehrerer spezifischer Speichergeräte oder mit Speicher ausgestatteten Geräte enthalten.
  • Eine Ausführungsform eines Graphknotens 2010 kann auch Informationen enthalten, die einen Bloom-Filter 20210 darstellen, basierend auf allen binären Dateien, in die die durch den Graphknoten identifizierte Funktion kompiliert wird. Wie oben erläutert kann ein derartiger Bloom-Filter in der Länge variabel sein, basierend auf einem gewünschten oder annehmbaren Maß an Fehlertoleranz. In einigen Ausführungsformen, in denen falsch positive (oder falsch negative) Ergebnisse nicht toleriert werden oder anderweitig akzeptabel sind, kann ein anderer Filtertyp verwendet werden.
  • Eine Ausführungsform des Graphknotens 2010 kann auch eine Auflistung von Kind- oder Verbindungsknoten umfassen. Obwohl sie als untergeordnete Knoten aufgeführt sind, repräsentieren derartige Knoten Verbindungen vom Graphenknoten zu anderen Knoten und geben ansonsten keine Hierarchie oder eine Übertragung oder Gemeinsamkeit von Merkmalen oder Daten zwischen einem übergeordneten und einem untergeordneten Graphenknoten an. Der dargestellte beispielhafte Graphknoten 2010 umfasst eine potentiell beliebige Anzahl von Kindknoten 20100, 20130, 20160. Jeder Kindknoten 20100, 20130, 20160 kann im Graphknoten 2010 entsprechend den Funktionssignaturen der jeweiligen Kindknoten 20100, 20130, 20160 identifiziert werden. In Ausführungsformen, in denen jede Funktion mit einer einzigartigen Funktionssignatur ausgestattet ist oder identifiziert wird, ermöglichen diese Funktionssignaturen auch, dass jeder Graphknoten eindeutig identifiziert wird.
  • Jeder in dem Graphknoten 2010 dargestellte untergeordnete Knoten 20100, 20130, 20160 kann auch Informationen über eine Knotenart 20110, 20140, 20170 enthalten. In einigen Ausführungsformen umfasst eine Knotenart eine Direktrufart und eine Instanzrufart, wobei die Instanzrufart anzeigt, dass der Kindknoten eine Implementierung einer Überbrückung eines Basisklassenverfahrens darstellt, das in der aufrufbaren Funktion aufgerufen wird. Direkte Funktionsaufrufe können für die statische Analyse sichtbar sein oder anderweitig zur Verfügung stehen, ohne den Graphen durch die Bloom-Filter zu durchlaufen. Instanzanrufe können eine Laufzeitanalyse erfordern.
  • In einigen Ausführungsformen kann jeder in dem Graphknoten 2010 dargestellte untergeordnete Knoten 20100, 20130, 20160 auch eine Markierung enthalten, die angibt, ob dieser untergeordnete Knoten einen entfernten Prozeduraufruf 20120, 20150, 20180 darstellt. Eine solche Markierung kann die Identifikation von Funktionen ermöglichen, die sich auf Prozeduren oder Unterprogrammen beziehen, die Funktionen außerhalb der Codebasis aufrufen oder auslösen können. Ferner kann eine Funktion, die als Remoteprozeduraufruf markiert ist, in einigen Ausführungsformen keine Aufruffunktionen innerhalb der Codebasis aufweisen.
  • Sobald eine Ausführungsform eines Funktionsaufrufgraphen erzeugt wird, kann der Graph durchsucht werden, um einen oder mehrere mögliche Funktionsaufrufpfade zwischen einer Startfunktion und einer Endfunktion zu finden. Eine Ausführungsform einer Anrufpfad-Suchoperation ist in 3 dargestellt
  • In der gezeigten Ausführungsform kann ein Aufrufgraph-Suchwerkzeug eine Funktionssignatur als Eingaben empfangen, die einen Startgraphknoten 3001 identifiziert, und eine Funktionssignatur, die einen Endgraphknoten 3010 identifiziert. In einigen Ausführungsformen kann das Aufrufgraph-Suchwerkzeug auch eine Liste oder Datenbank aufbauen oder darauf zugreifen, die gemeinsame Abhängigkeiten des Start- und Endknotens zeigt. Solche Abhängigkeiten können beispielsweise alle Binärdateien enthalten, die eine bestimmte Klasse, Funktion oder Quelldatei als eine Abhängigkeit enthalten. In einigen derartigen Ausführungsformen sollte bei der Bestimmung eines Aufruf-Graphpfads von einer ersten Funktion zu einer zweiten Funktion, bei der beide Funktionen nur in einer bestimmten ausführbaren Datei existieren, alle Zwischengrafikknoten nur in dieser bestimmten ausführbaren Datei existieren. Dies kann die Graphensuche beschleunigen, indem von den Betrachtungsgrafikknoten, die mit Funktionen aus verschiedenen ausführbaren Dateien zusammenhängen, eliminiert wird.
  • Beginnend beim Startknoten 3001 oder dem Endknoten 3010 oder in einigen Ausführungsformen, die bidirektional sowohl vom Startknoten 3001 als auch dem Endknoten 3010 aus fortschreiten, kann eine zunächst breite Pfadsuche von allen Kind- oder Verbindungsknoten aus initiiert werden. In einigen Ausführungsformen kann dies verwirklicht werden, indem zuerst geprüft wird, ob entweder der Start- oder Endknoten einen Remoteprozeduraufruf (RPC) 3020 enthält. Diese Überprüfung kann in einigen Ausführungsformen durchgeführt werden, da sogar in einer monolithischen Codebasis eine Fernprozeduraufforderung auf Funktionen in einem Satz von Binärdateien jenseits derjenigen verweisen kann, die die Funktionen enthalten, die durch die Start- und Endknoten dargestellt werden.
  • In Ausführungsformen, in denen einer der Start- und Endknoten ein RPC 3020 ist, kann der verwendete Satz von Binärdateien alle Binärdateien enthalten, die sich auf einen der Start- oder Endknoten 3040 beziehen. In Ausführungsformen, in denen weder der Startknoten noch der Endknoten ein RPC ist, kann der verwendete Satz von Binärdateien nur diejenigen Binärdateien enthalten, die sich sowohl auf den Startknoten als auch den Endknoten 3030 beziehen.
  • Für jeden Knoten kann sein Bloom-Filter extrahiert und die Binärdateien gegen den Bloom-Filter 3080 getestet werden, um zu bestimmen, ob die mindestens eine der gemeinsamen Abhängigkeiten den Bloom-Filter für diesen Knoten 3080 übergibt.
  • Wenn die Binärdateien, die für die gemeinsamen Abhängigkeiten repräsentativ sind, den Bloom-Filter für diesen Knoten nicht übergeben, wird der Knoten 3070 verworfen, da er nicht Teil eines möglichen oder wahrscheinlichen Funktions aufrufpfades ist. Wenn die gemeinsamen Abhängigkeiten den Bloom-Filter für diesen Knoten übergibt, wird dieser Knoten dann der Auflistung oder der möglicher Anflug von dem Aufrufpfade 3090 hinzugefügt. Bei Ausführungsformen, die eine Breitensuche beschäftigen, kann eine derartige Auswertung für alle Knoten in einem gegebenen Ebene des Graphs 3110 oder für alle Knoten in einem gegebenen Ebene des Graphs, der innerhalb einer vorgegebenen Zeitspanne oder mit einer bestimmten Zuweisung von Rechenressourcen analysiert werden können, fortfahren. In solchen Ausführungsformen kann ein gegebener Knoten in der Graphenebene mit seinen zugeordneten Bloom-Filtern später ausgewertet wird, der nächste Knoten in der Ebene 3100 ähnlicher ausgewertet werden, bis entweder alle Knoten in der Ebene 3110 ausgewertet wurden oder in einigen Fällen bis eine vorbestimmte Zeitspanne verstreicht oder die Menge an Rechenressourcen verbraucht wird.
  • Die in der Pfadliste enthaltenen Knoten können dann gemäß einem Rangschema auf 3130 eingestuft werden, um einen sehr wahrscheinlichsten nächsten Knoten und einen am wenigsten möglichen nächsten Knoten zu bestimmen. In einigen Ausführungsformen kann die Rangfolge auf der Basis von Faktoren bestimmt werden, z. B. ob der Knoten ein direkter Funktionsaufruf oder ein überladener/übernommener Funktionsaufruf ist. In einigen solchen Ausführungsformen können direkte Funktionsaufrufe höher als überladene oder übernommene Funktionsaufrufe eingestuft werden. In einigen Ausführungsformen kann nur eine bestimmte Anzahl von Rangierknoten von Interesse sein. In einigen derartigen Ausführungsformen können nur die fünf höchstrangigen Knoten als Rangnoten gehalten werden, wobei die verbleibenden Knoten verworfen oder sonst nicht weiter ausgewertet werden. In einigen Ausführungsformen kann ein Knoten, der auf den Endknoten 3010 abstimmt, der höchstrangige Knoten sein.
  • Nachdem die Knoten auf 3130 eingestuft sind, können die Rangierknoten jeweils 3120 ausgehend von dem höchstrangigen Knoten erweitert werden, um zu bestimmen, ob sie untergeordnete Knoten 3060 aufweist, um in eine nachfolgende Breitensuche 3050 einzufügen. Eine solche Erweiterung kann für alle Rang-Knoten 3050 oder für alle Rang-Knoten, die innerhalb einer vorgegebenen Zeitspanne oder mit einer bestimmten Zuweisung von Rechenressourcen analysiert werden können, fortfahren.
  • In einigen Ausführungsformen setzt sich diese Such- und Auswertungsoperation fort, bis entweder der Suchpfad am Anfangknoten 3001 oder Endknoten 3010 beendet ist oder in bidirektionalen Ausführungsformen bis die Suchpfade sich treffen und es gibt Kein Kind- oder Verbindungsknoten, die 3140 übrig zu erweitern und zu durchsuchen sind. Sobald eine Liste möglicher Funktionsanrufpfade angelegt wurde, kann die Liste der Pfade 3150 sortiert oder eingestuft werden, um einen oder mehrere Funktionsanfrufpfade zu identifizieren, die als die wahrscheinlichsten oder hochwahrscheinlichsten angesehen werden. Das Graphsuchwerkzeug kann dann einige oder alle Anrufpfade 3160 einschließlich der hochwahrscheinlichsten Pfade zurückgeben.
  • In einigen Ausführungsformen kann das Graphsuchwerkzeug umfassen oder einen Teil einer graphischen Schnittstelle sein, die Funktionsanrufpfade als Darstellungen von Knoten aufzeigen kann, dass entlang eines einzigen oder Verzweigungspfade verbunden sind. In einigen Ausführungsformen können Graphenränder, die Knoten basierend auf einer Vererbungserweiterung verbinden, identifiziert oder anderweitig angezeigt werden, um sie im eigentlichen Sinn zu dentifizieren.
  • In einigen Ausführungsformen kann eine Pfadliste nach verschiedenen Kriterien sortiert werden, einschließlich Faktoren, wie etwa einer Gesamtpfadlänge (z. B. einer Anzahl von Knoten oder einer Anzahl von Graphkanten im Pfad), ob der Pfad Funktionen von bestimmten Objekten oder Objektklassen aufruft oder nicht und vorherige Laufzeitspuren, die häufiges Funktionsanrufverhalten zeigen. Eine Ausführungsform eines Pfadlistensortier- und wahrscheinlichkeites Bestimmungsprozesses ist in 4 dargestellt.
  • Am Anfang mit einer Pfadliste 4001, die basierend auf einer graphischen Suchoperation kompilieren wird, wie gezeigt in 3, kann ein Sortier- und Pfadwahrscheinlichkeitsprozess die kürzesten Pfade 4010 in der Liste identifizieren. In einigen Ausführungsformen kann eine Anzahl kürzester Pfade durch eine extern definierte oder extern gesteuerte Einstellung bestimmt werden, die eine Anzahl von zurückzugebenden Pfaden und/oder eine maximal zulässige Pfadlänge regelt. Eine Pfadlänge kann durch eine Anzahl von Knoten in dem Pfad, eine Anzahl von in dem Pfad enthaltenen Graphkanten oder eine Kombination davon bestimmt werden. In einigen Pfaden kann z. B. ein Knoten mehrfach durchlaufen werden, wodurch eine Anzahl von Graphkanten in dem Pfad größer als eine Anzahl von Knoten in dem Pfad erzeugt wird.
  • In einigen Ausführungsformen können Pfade identifiziert werden, basierend darauf, ob sie innerhalb einer Codebasis für ein bestimmtes Produkt oder eine Anwendung 4020 vollständig sind. In einigen Ausführungsformen können Pfade auf der Grundlage der Pfadlänge und auch basierend darauf, ob sie innerhalb einer einzigen Produktcodebasis 4020 bleiben, bevorzugt werden. In einigen solchen Ausführungsformen kann ein Pfad innerhalb einer Produkt- oder Anwendungscodebasis als hochwahrscheinlicher oder wahrscheinlicher als ein Pfad gleicher oder ähnlicher Länge vollständig sortiert werden, der innerhalb eines einzigen Produkts oder Anwendungscodebasis nicht vollständig ist.
  • In einigen Ausführungsformen können die Gewichtungsfaktoren der Objektklassen auch auf Pfade angewendet werden. Derartige Objektklassen-Gewichtungsfaktoren können in einigen Ausführungsformen basierend auf der Benutzungshäufigkeit, die mit bestimmten Objekten oder Objektklassen verbunden ist, bestimmt werden. In solchen Ausführungsformen können Funktionsanrufpfade, die einen Knoten enthalten, der eine Funktion von einem bestimmten Objekt oder einer Objektklasse repräsentiert, mit einem assoziierten Gewichtungsfaktor eine höheren Wahrscheinlichkeit oder Wahrscheinlichkeit als Funktionsanrufpfaden gleicher oder ähnlicher Länge gegeben werden, die dies nicht tun.
  • In einigen Ausführungsformen kann eine Wahrscheinlichkeit oder Wahrscheinlichkeit eines bestimmten Funktionsanrufpfade mit einem spezifischen Wahrscheinlichkeitsprozent assoziiert sein, der auf der Grundlage von Pfadlänge, Codebasis und Klassengewichtungsfaktoren berechnet wird. In anderen Ausführungsformen kann eine Hochwahrscheinlichkeit oder Wahrscheinlichkeit eines bestimmten Funktionsanrufpfades im vergleich zu anderen Anrufpfade relativ zueinander ausgedrückt werden, ohne einen spezifischen Prozentsatz vorzusehen. In einigen Ausführungsformen kann eine Hochwahrscheinlichkeit oder Wahrscheinlichkeit eines bestimmten Funktionsanrufpfades durch eine Rangfolge eines bestimmten Anrufpfades in der Anrufpfadliste angegeben werden. In einigen Ausführungsformen kann das Bestimmen einer Anrufpfadwahrscheinlichkeit 4040 die Neuanordnung oder Neuklassierung der Funktionsanrufpfaden basierend auf der Pfadlänge 4010, der Pfadlänge innerhalb einer Codebasis 4020 und/oder der Klassengewichtungsfaktoren 4030 umfassen.
  • In einigen Ausführungsformen kann eine solche Neuordnung oder Neuordnung von Funktionsanrufpfaden in einer Pfadliste zum Bestimmen der Pfadwahrscheinlichkeit 4040 auch das Auswerten der Funktionsanrufpfade gegen vergangene Laufzeitspuren 4050 umfassen. Solche Laufzeitspuren können historische Funktionsanrufdaten, die häufige und/oder wahrscheinliche Anrufpfade basierend auf dem historischen Anwendungsverhalten zeigen, enthalten. Wenn eine absolute oder relative Anrufwahrscheinlichkeit bestimmt wird, indem z. B. die Anrufpfade von den meisten bis zum wenigsten wahrscheinlich 4040 klassifiziert werden, kann eine gewisse Menge der hochwahrscheinlichsten Anrufpfade (z. B. die höchstrangigen Pfade) zur Präsentation an einen Benutzer des Pfadsuchwerkzeugs oder einer anderen informationsfordemden Entität (wie z. B. eine Anwendungsentwicklung oder ein Prototyping-Programm oder eine Programm-Suite) zurückgegeben oder anderweitig ausgewählt werden.
  • Obwohl oben in Bezug auf die Funktionalität diskutiert, können die Merkmale und Eigenschaften von Funktionsgraphenerzeugung und Anrufpfadsuche durch die Verwendung eines oder mehrerer spezialisierter, programmierbarer und/oder speziell programmierte Rechengeräte oder Teile davon realisieren werden.
  • 5 ist ein Blockdiagramm, das ein beispielhaftes Rechengerät 500 stellt dar, die eingerichtet ist, um Aufrufgraph-Erzeugungs- und Anrufpfad-Suchtechniken, wie beschrieben hierin, auszuführen. In einer sehr grundlegenden Konfiguration 501 umfasst das Rechengerät 500 typischerweise einen oder mehrere Prozessoren 510 und einen Systemspeicher 520. Ein Speicherbus 530 kann für die Kommunikation zwischen dem Prozessor 510 und dem Systemspeicher 520 verwendet werden.
  • Abhängig von der gewünschten Konfiguration kann der Prozessor 510 von irgendeinem Typ sein, einschließlich, aber es beschränkt nicht auf einen Mikroprozessor (μP), einen Mikrocontroller (μC), einen digitalen Signalprozessor (DSP) oder einen beliebigen Kombination davon. Der Prozessor 510 kann einen weiteren Cachepegel, wie einen Cache 511 einer Ebene 1 und einen Cache 512 einer Ebene 2, einen Prozessorkern 513 und Registers 514, umfassen. Der Prozessorkern 513 kann eine arithmetische Logikeinheit (ALU), eine Gleitkommaeinheit (FPU), einen digitalen Signalverarbeitungskern (DSP Core) oder eine beliebige Kombination davon umfassen. Eine Speichersteuerung 515 kann auch mit dem Prozessor 510 verwendet werden, oder in einigen Implementierungen kann die Speichersteuerung 515 ein interner Teil des Prozessors 510 sein.
  • Abhängig von der gewünschten Konfiguration kann der Systemspeicher 520 von irgendeinem Typ sein, einschließlich, aber es wird nicht auf flüchtigen Speicher (wie z. B. RAM), nichtflüchtigen Speicher (wie ROM, Flash-Speicher, usw.) oder irgendeine Kombination davon beschränkt. Der Systemspeicher 520 enthält typischerweise ein Betriebssystem 521, eine oder mehrere Anwendungen 522 und Programmdaten 524. Die Anwendung 522 kann eine Anrufgrapherzeugung und/oder ein Anrufpfadsuchmerkmal umfassen, wie diskutiert hierin. Die Programmdaten 524 umfassen Ortsdaten, wie beispielsweise eine oder mehrere Abhängigkeitslisten oder Objektnamenslisten 525, die zur Durchführung der gewünschten Operationen, wie oben beschrieben, nützlich sind. In einigen Ausführungsformen kann die Anwendung 522 so eingerichtet sein, dass sie mit Programmdaten 524 auf einem Betriebssystem 521 arbeitet, so dass das Gesamtsystem eine oder mehrere spezifische Variationen von Techniken ausführt, wie hierin diskutiert. Dies wird konzeptionell in 5 durch diese Komponenten innerhalb der Linie 501 dargestellt.
  • Das Rechengerät 500 kann zusätzliche Merkmale oder Funktionalität und zusätzliche Schnittstellen aufweisen, um die Kommunikation zwischen der Basiskonfiguration 501 und allen erforderlichen Geräte und Schnittstellen zu erleichtern. Beispielsweise kann eine Bus-/Schnittstellensteuerung 540 verwendet werden, um die Kommunikation zwischen der Basiskonfiguration 501 und einer oder mehreren Datenspeichergeräte 550 über einen Speicherschnittstellenbus 541 zu erleichtern. Die Datenspeichergeräte 550 können entfernbare Speichergeräte 551, nicht-entfernbare Speichergerät 552 oder eine Kombination davon sein. Beispiele für entfernbare Speichermedien und nicht-entfernbare Speichergeräte umfassen Magnetplattengeräte, wie z. B. flexible Plattentreibern und Festplattentreibern (HDD), optische Plattentreibern, wie beispielsweise CD-Treibern oder digitale Versatile DVD-Treibern, Solid-State-Treibern (SSD) und Bandtreibern, um nur einige zu nennen. Beispielhafte Computerspeichermedien können flüchtige und nichtflüchtige, entfernbare und nicht entfernbare Medien enthalten, die in irgendeinem Verfahren oder einer Technologie zum Speichern von Informationen implementiert sind, wie zum Beispiel computerlesbare Anweisungen, Datenstrukturen, Programmmodule oder andere Daten.
  • Der Systemspeicher 520, der entfernbare Speicher 551 und der nicht-entfernbare Speicher 552 sind alle Beispiele von Computerspeichermedien. Computerspeichermedien umfasst, ist aber nicht auf RAM, ROM, EEPROM, Flash-Speicher oder andere Speichertechnologie, CD-ROM, Digitalversatile-Platten (DVD) oder andere optische Speicher-, Magnetkassetten und Magnetbänder, Magnetplattenspeicher oder andere magnetische Speichergeräte oder irgendein anderes Medium nicht beschränkt, das verwendet werden kann, um die gewünschte Information zu speichern, und auf die durch das Rechengerät 500 zugegriffen werden kann. Jedes derartige Computerspeichermedium kann ein Teil der Gerät 500 sein.
  • Das Rechengerät 500 kann auch einen Schnittstellenbus 542 umfassen, um die Kommunikation von verschiedenen Schnittstellengeräte (z. B. Ausgabeschnittstellen, periphere Schnittstellen und Kommunikationsschnittstellen) zu der Basiskonfiguration 501 über den Bus-/Schnittstellekontroller 540 zu erleichtern. Beispielhafte Ausgabegeräte 560 umfassen eine Graphikverarbeitungseinheit 561 und eine Audioverarbeitungseinheit 562, die so konfiguriert werden können, dass sie über einen oder mehrere A/V-Anschlüsse 563 mit verschiedenen externen Geräte, wie beispielsweise einem Display oder Sprechern, kommunizieren können. Die Peripherieschnittstellen 570 umfassen einen seriellen Schnittstellenkontroller 571 oder einen Parallelschnittstellenkontroller 572, der so konfiguriert werden kann, dass er mit externen Geräten wie Eingabegeräten (z. B. Tastatur, Maus, Stift, Spracheingabegerät, Kamera, Berührungseingabegerät, usw.) oder andere Peripheriegeräte (z. B. Drucker, Scanner usw.) über einen oder mehrere I/O-Anschlüsse 573 kommunizieren werden kann. Ein Beispiel Kommunikationsgerät 580 Schließt einen Netzwerkkontrolleur 581 mit ein, welcher eingerichtet werden kann, um die Kommunikation mit einem oder mehreren Computergeräten zu unterstützen 590 über einer Netzwerkkommunikation über einen oder mehrere Kommunikationsports 582.
  • Die Kommunikationsverbindung ist ein Beispiel für ein Kommunikationsmedium. Kommunikationsmedien können typisch sein für die Darstellung von Computer lesbaren Anweisungen, Datenstrukturen, Programmmodulen oder anderen Daten mit einem angepassten Datensignal wie einer Trägerschwingung oder anderen Transportmechanismue und schließt jede Information der gelieferten Medien mit ein. Ein 'angepasstes Datensignal' kann ein Signal sein, dass eine oder mehrere Charakteristika setzt oder wechselt, um Informationen in den Signalen zu entschlüsseln. Zum Beispiel, und nicht begrenzt, Kommunikationsmedien können kabelgebundene Medien miteinschließen wie kabelgebundene Netzwerke oder direkt verkabelte Verbindung und kabellose Medien wie Akustik, Radiofrequenzen (RF), Infrarot (IR) und andere kabellose Medien. Das Computerprogramm lesbarer Medien wie es hier benutzt wird, kann beides miteinschließen, Speichermedien und Kommunikationsmedien.
  • Computer Gerät 500 kann implementiert sein als ein kleinformatiges tragbare (oder mobiles) elektrisches Gerät wie ein Telefon, ein personaler Datenassistent (PDA), ein persönlicher Mediaplayer, ein kabelloses Internetgerät, ein Kopfhörergerät, ein Appspezifisches Gerät oder ein Hybridgerät, dass jede der genannten Funktionen mit einschließt. Computergerät 500 kann auch als ein Computer implementiert werden einschließlich Laptop- und Standcomputer-Konfigurationen.
  • In einigen Fällen bleiben kleine Unterschiede zwischen der Hardware und Software Implementierung bei den Aspekten der Systeme, der Gebrauch von Hardware oder Software ist gewöhnlich (aber nicht immer, in diesem Zusammenhang die Wahl zwischen Hardware und Software kann signifikant werden) ein Design-Aussehen zeigt Kosten gegenüber effizienten Kompromissen. Es gibt dabei verschiedene Fahrzeuge, welche die Verfahren und Systeme und/oder andere Technologien beschreiben, die durchgeführt werden können (zum Beispiel Hardware, Software und/oder Firmware) und dass das bevorzugte Fahrzeug sich in dem Zusammenhang unterscheiden wird, in dem die Verfahren und/oder Systeme und/oder andere Technologien entwickelt werden. Zum Beispiel, wenn ein implementiertes bestimmt, dass die Geschwindigkeit und Genauigkeit entscheidend sind, der Überträger kann für eine Haupthardware und/oder Firmware-Fahrzeuge optieren; wenn er flexibel ist, kann er eine Hauptsoftware implementieren oder, wiederum, alternativ, der Überträger kann für eine Kombination optieren von Hardware, Software und/oder Firmware.
  • Die vorangegangene detaillierte Beschreibung hat weitere verschiedene Verkörperungen der der Geräte und/oder Prozesse über den Nutzen von Blockdiagrammen, Flußcharts und/oder Beispielen. Insoweit wie solche Blockdiagramme, Flußcharts und/oder Beispiele eine oder mehrere Funktionen und/oder Operatione beinhalten, werden sie verstanden von denen in der Wissenschaft, das jede Funktion und/oder Operation mit solchen Blockdiagrammen, Flußcharts oder Beispielen implementiert werden können, indviduell und/oder kollektiv, durch ein weites Angebot von Hardware, Software, Firmware der irgendeiner virtuellen Kombination davon. In einer Verkörperung, verschiedener Portionen subjektiver Art, die hier beschrieben wird, kann implementiert werden über App Specific integrierte Schaltungen (ASICs), Feldprogrammierung (FPGAs), digitale Signalprozessoren (DSPs) oder andere integrierte Formate. Wie auch immer, diese in der Wissenschaft eingerichteten werden erkennen, dass einige Aspekte der Verkörperung miteingeschlossen sind, im Ganzen oder in Teilen, können äquivalent implementiert im integrierten Kreislauf, als ein oder mehrere Computerprogramme laufen auf einem oder mehreren Computern (beispielsweise als ein oder mehrere Programme auf einem oder mehreren Computersystemen) wie auf einem oder mehreren Programmen laufen auf einem oder mehreren Prozessoren (beispielsweise als ein oder mehrere Programme laufen auf einem oder mehreren Mikroprozessoren) als Firmware oder virtuelle Kombinationen und dass die gestalteten Schaltkreise und/oder für die Software geschriebenen Codes und/oder Firmware würde gut mit den Fähigkeiten eines oder den Fähigkeiten in der Beleuchtungskunst zusammenpassen. In Ergänzung wird diese Kunst zu schätzen wissen, dass die Mechanismen der Subjekte, die hier beschrieben werden, hauptsächlich dazu dienen als ein Programm in verschiedenen Formen und dass ein illustrierter Inbegriff der Subjekte, die hier beschrieben werden, die einzelnen Arten von Signalen, die das Medium tragen, zur aktuellen Übertragung dienen. Beispiele von Signal übertragenden Medien eingeschlossen, aber nicht begrenzt, das Folgende: ein tragbarer Medientyp wie eine Floppydisk, eine Harddisk, eine Compactdisk (CD), eine Digitale Video Disk (DVD), ein digitales Band, ein Computer Memory etc; und ein Übertragungsmedium wie digitale und/oder analoge Kommunikationsmedien (beispielsweise einen Lichtwellenleiter, einen Wellenführer, eine verkabelte Kommunikationsverbindung, eine kabellose Kommunikationsverbindung etc).
  • Diejenigen, die in der Wissenschaft erfahren sind, werden erkennen, dass es gewöhnlich in der Kunst der Beschreibung der Geräte und/oder Prozesse in der Mode so ist, und nach dem Gebrauch des praktischen Einrichtens zu integrieren solche beschriebenen Geräte und/oder Prozesse in den entwickelten Daten-Systemen. Das ist wenigstens eine Menge der Geräte und/oder Prozesse, die beschrieben wurden, können integriert werden in das Datensystem über eine begründeten Betrag von Experimenten. Diese, die in der Wissenschaft befähigt sind, werden erkennen, dass ein typisches Datenprozesssystem gewöhnlich eine oder mehrere Systemeinheiten beinhaltet, ein Videodisplay-Gerät, ein Memory wie flüchtige und nichtflüchtige Memory, Prozessoren wie Mikroprozessoren und digitale Signalprozessoren, computerbasierte Einheiten, wie Operatorren, Treiber, graphische Nutzerkarten, und App-Programme, eine oder mehrere Interaktionsgeräte wie ein Touchpad oder Screen und/oder Kontrollsysteme einschließlich Rückkopplungsschleifen und Kontrollmotoren (beispielsweise Rückkopplung für Abtastpositionen und/oder Geschwindigkeit; Kontrollmotoren für Bewegung und/oder Ausrichtungskomponenten und/oder Mengen). Ein typisches Datenprozesssystem kann gewöhnliche kommerziell erhältliche Komponenten implementieren wie typische Datencomputerkommunikation und/oder Netzwerkcomputerkommunikationssysteme.
  • Mit Respekt zum Gebrauch von substantiellen pluralen oder einzelnen Begriffen hier, können die, die dazu befähigt sind, von der Mehrzahl zur Einzahl und/oder von der Einzahl zur Mehrzahl wie es im Zusammenhang und/oder Ergänzungen gegeben ist. Die verschiedenen Einzahl/Mehrzahl Permutationen können hier ausgedrückt werden aus Gründen der Klarheit.
  • Nur beispielhafte Verkörperungen der Systeme und Lösungen werden hier diskutiert, wurden gezeigt und beschrieben in der gegenwärtigen Weitergabe. Es muss verstanden werden, dass die Systeme und Lösungen, die hier diskutiert wurden, in verschiedenen anderen Kombinationen und Umgebungen verwendet werden und Wechsel oder Modifikationen mit einer Reihe von Konzepten, die hier vorgestellt wurden, übernehmen können. Einige Variationen können in Kombinationen mit Hardware, Firmware und/oder Software eingebettet werden. Einige Variationen sind eingebettet in wenigstens Teile von computerlesbaren Speichermedien wie Memory Chips, Treiber, Flash Memory, optischen Speichermedien, oder ganzen oder teilweisen kompilierten Programmen zur Übertragung zum herunterladen durch Installation auf verschiedenen Hardwaregeräten und oder Kombinationen Sammlungen von Hardware-Geräten. Solche Variationen sind nicht abhängig von der Abfahrt aus dem Geist und der Anordnung der Systeme und Lösungen, die hier diskutiert wurden und solchen Modifikationen wie sie ein in der Wissenschaft Befähigter beabsichtigt, eingeschlossen die Reihe der folgenden Forderungen.

Claims (8)

  1. Nichttemporäres computerlesbares Medium mit einer darauf verkörperten Datenstruktur, die den Funktionsrufgraphen für eine Codebasis repräsentiert, die Grafik umfassend: eine Vielzahl von Graphikknoten, jeder Graphikknoten anzeigend eine rufbare Funktion innerhalb der Codebasis, ein erster Graphikknoten aus der Vielzahl umfassend eine Funktionssignatur, eindeutig identifizierend die rufbaren Funktionen innerhalb der Codebasis; ein erster Graphikknoten des absoluten Pfades, der einen absoluten Ort von Datendateien, die rufbare Funktionen innerhalb eines Dateisystems einschließen, identifiziert; Informationen, identifizierend einen Kindknoten des ersten Grafikknotens, wobei die Information, die einen Kindknoten identifiziert, eine Repräsentation einer Kindknotensignatur umfasst, die eine Kindfunktion, zugehörig zu dem Kindknoten, und eine Kindknotenart, zugehörig zu dem Kindknoten, identifiziert, wobei die Kindfunktionssignatur zugehörig zu dem Kindknoten eine Grafik, eine Grafikkante repräsentiert, die den ersten Grafikknoten und den Kindknoten miteinander verbindet; und wobei der Kindknoten eines von einer direkten Rufart und einer exemplarischen Rufart umfasst, wobei die exemplarische Rufart indiziert, dass der Kindknoten eine Implementation einer Überschreibung eines Basisklassenverfahrens, geltend gemacht in der rufbaren Funktion, repräsentiert.
  2. Datenstruktur nach Anspruch 1, wobei die Information identifizierend einen Kindknoten weiter umfasst eine Flaggenindikation, ob die Kinderfunktion, zugehörig zu dem Kindknoten, eine entfernte Prozessruffunktion ist.
  3. Datenstruktur nach Anspruch 1, wobei die Funktionssignatur in dem ersten Graphikknoten beinhaltet ist, in einer gehashten Form, die weniger Datenspeicherplatz in dem Medium belegt.
  4. Datenstruktur nach Anspruch 1, der Kindknoten umfassend, dass die Kindfunktionssignatur eindeutig die die Kindfunktion innerhalb der Codebasis identifiziert; dass ein absoluter Kindknotenpfad einen absoluten Ort einer Datendatei identifiziert, die die Kindfunktion innerhalb eines Dateisystems beinhaltet; dass Information einen Verbindungsknoten des Graphikknotens identifiziert, wobei die Information einen Verbindungsknoten identifiziert, der eine Repräsentation einer Abruf-Funktionssignatur aufweist, die eine Abruffunktion identifiziert, die die Kindfunktion, die von dem Kindknoten repräsentiert wird, geltend macht, wobei die Abruffunktionssignatur, zugehörig zu dem Verbindungsknoten, die Graphikkante, die den Kindknoten mit dem Verbindungsknoten verbindet, repräsentiert.
  5. Datenstruktur nach Anspruch 1, wobei der erste Graphikknoten ein Verbindungsknoten des Kindknoten ist.
  6. Datenstruktur nach Anspruch 4, wobei jede Graphikkante wenigstens einen Teil eines Funktionsrufpfades repräsentiert, das Verfahren weiterhin umfassend: Durchführen des nachfolgenden Einstufens durch Evaluieren der Funktionsrufpfade gegen abgelaufene Zeitspuren.
  7. System, das Folgendes umfasst: System, umfassend: einen Prozessor; einen prozessorlesbaren Speicher mit darauf verkörperten Instruktionen, welche den Prozessor veranlassen, ein Verfahren zum Generieren einer Funktionsrufgraphik für eine Codebasis auszuführen, das Verfahren umfassend: Identifizieren (1001), mit einem Prozessor, Funktionen in der Codebasis mit einer Funktionssignatur; Zeigen einer partikularen identifizierten Funktion als einen ersten Knoten (1070) in der Funktionsrufgrafik; für die partikulare Funktion, Identifizieren (1200) von Aufruf- und Abruffunktionen, erbenden Eltern und Kinder, und einer angeschlossenen Basisklasse mit einzelnen Funktionen, basierend auf Funktionssignalen partikularer Funktionen; Ergänzen (1090) von ersten Kindknoten (1020) zu den ersten Knoten basierend auf den identifizierten Aufruf- und Abruf-Funktionen; für einen Schnittstellenruf (1010) zu einem Basisklassenverfahren in der partikularen Funktion, Ergänzen von zwei Kindknoten zum ersten Knoten basierend auf der Implementierung eines aufgehobenen Basisklassenverfahrens; für jeden Kindknoten (1020) des ersten Knotens, Generieren (1040) eines binären Dateifilters für die Elter-Kind-Beziehung, wobei der binäre Dateifilter auf binären Dateien basiert, die die partikulare Funktion und eine Funktion, repräsentiert von einem Kindknoten, aufweisen.
  8. System, das Folgendes umfasst: System, umfassend: einen Prozessor; System, umfassend: einen Prozessor; einen prozessorlesbaren Speicher mit darauf verkörperten Instruktionen, welche den Prozessor veranlassen, zum Bestimmen eines wahrscheinlichen Rufweges zwischen zwei Funktionen in einem Basiscode auszuführen, das Verfahren umfassend: Erhalten, als Eingabe, eine Stammfunktion und eine Zielfunktion; Erhalten, als Eingabe, eine Stammfunktion und eine Zielfunktion; Identifizieren, in einer Funktionsrufgrafik, einen Anfangsknoten (3001) verbunden mit der Stammfunktion und einem Endknoten (3010) verbunden mit der Zielfunktion; Suchen möglicher Wege (3050) in der Funktionsrufgraphik zwischen dem Anfangsknoten und dem Endknoten, das Suchen umfassend für jeden Knoten auf einem Niveau der Grafik, Bewerten des Knotens gegen eine Liste von allgemeinen Abhängigkeiten, die von dem Anfangsknoten und dem Endknoten (3080) geteilt werden; für einen bewerteten Knoten mit einer Abhängigkeit, die in der Liste von allgemeinen Abhängigkeiten enthalten ist, Einschließen des evaluierten Knotens in ein mögliches Pfadverzeichnis (3080, 3090). für einen bewerteten Knoten, der keine Abhängigkeit, die in der Liste von allgemeinen Abhängigkeiten enthalten ist, aufweist, Ausschließen des evaluierten Knotens von jedem möglichen Pfadverzeichnis (3080, 3070); Einstufen der Knoten, die in dem möglichen Pfadverzeichnis enthalten sind (3130); für jeden eingestuften Knoten, Expandieren des eingestuften Knotens um zu bestimmen, ob der eingestufte Knoten einen Kindknoten aufweist; reagierend auf eine Bestimmung, dass der eingestufte Knoten einen Kindknoten aufweist, Behandeln des eingestuften Knotens wie einen Startknoten, und Durchführen des Suchens möglicher Wege für jeden Kindknoten des eingestuften Knotens (3060); reagierend auf eine Bestimmung, dass der eingestufte Knoten keinen Kindknoten hat, Identifizieren eines Funktionsrufpfades, der den eingestuften Knoten als einen möglichen Funktionsrufpfad einschließt (3060, 3140); Sortieren der möglichen Funktionsrufpfade zwischen dem Startknoten und dem Endknoten (3150); und Zurückführen, als einen möglichen Rufpfad, wenigstens einen der sortierten möglichen Funktionsrufpfade (3160).
DE202014010893.5U 2013-11-19 2014-11-17 Rufwegsucher Active DE202014010893U1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/084,399 US9218169B2 (en) 2013-11-19 2013-11-19 Callpath finder
US14/084/399 2013-11-19

Publications (1)

Publication Number Publication Date
DE202014010893U1 true DE202014010893U1 (de) 2017-02-20

Family

ID=53174616

Family Applications (1)

Application Number Title Priority Date Filing Date
DE202014010893.5U Active DE202014010893U1 (de) 2013-11-19 2014-11-17 Rufwegsucher

Country Status (8)

Country Link
US (2) US9218169B2 (de)
EP (2) EP4369180A3 (de)
JP (1) JP6349395B2 (de)
KR (2) KR102154757B1 (de)
CN (1) CN105745647B (de)
BR (1) BR112016009391B1 (de)
DE (1) DE202014010893U1 (de)
WO (1) WO2015077175A1 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE112015003406B4 (de) 2014-07-24 2022-05-25 Ab Initio Technology Llc Datenherkunftssummierung

Families Citing this family (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9250891B1 (en) * 2014-10-28 2016-02-02 Amazon Technologies, Inc. Optimized class loading
US9483241B2 (en) * 2014-12-19 2016-11-01 Successfactors, Inc. Method ranking based on code invocation
US10229273B2 (en) * 2015-02-25 2019-03-12 Veracode, Inc. Identifying components for static analysis of software applications
US9569183B2 (en) * 2015-02-25 2017-02-14 Red Hat, Inc. Contract based builder
US9405906B1 (en) * 2015-02-25 2016-08-02 Veracode, Inc. System and method for enhancing static analysis of software applications
US9547478B1 (en) * 2015-09-30 2017-01-17 Semmle Limited Hierarchical dependency analysis enhancements using disjoint-or trees
US11650903B2 (en) 2016-01-28 2023-05-16 Codesignal, Inc. Computer programming assessment
US10303517B1 (en) 2016-01-28 2019-05-28 BrainFights, Inc. Automated evaluation of computer programming
US11593342B2 (en) 2016-02-01 2023-02-28 Smartshift Technologies, Inc. Systems and methods for database orientation transformation
US10585655B2 (en) 2016-05-25 2020-03-10 Smartshift Technologies, Inc. Systems and methods for automated retrofitting of customized code objects
CN106020848A (zh) * 2016-06-07 2016-10-12 北京信息科技大学 面向c#的函数调用路径生成方法
US10089103B2 (en) 2016-08-03 2018-10-02 Smartshift Technologies, Inc. Systems and methods for transformation of reporting schema
US10467229B2 (en) 2016-09-30 2019-11-05 Microsoft Technology Licensing, Llc. Query-time analytics on graph queries spanning subgraphs
US9792114B1 (en) * 2016-10-10 2017-10-17 Semmle Limited Source code element signatures
US10545945B2 (en) 2016-10-28 2020-01-28 Microsoft Technology Licensing, Llc Change monitoring spanning graph queries
US10445361B2 (en) 2016-12-15 2019-10-15 Microsoft Technology Licensing, Llc Caching of subgraphs and integration of cached subgraphs into graph query results
US10402403B2 (en) 2016-12-15 2019-09-03 Microsoft Technology Licensing, Llc Utilization of probabilistic characteristics for reduction of graph database traversals
US10891326B2 (en) * 2017-01-05 2021-01-12 International Business Machines Corporation Representation of a data analysis using a flow graph
US10242223B2 (en) 2017-02-27 2019-03-26 Microsoft Technology Licensing, Llc Access controlled graph query spanning
US10992729B2 (en) 2017-04-18 2021-04-27 Microsoft Technology Licensing, Llc Endpoint configuration for a communication session
US10388039B2 (en) 2017-05-31 2019-08-20 International Business Machines Corporation Accelerating data-driven scientific discovery
CN107479985B (zh) * 2017-06-30 2020-01-03 武汉斗鱼网络科技有限公司 一种远程过程调用的方法、装置及计算机设备
US11132180B2 (en) * 2018-01-05 2021-09-28 Microsoft Technology Licensing, Llc Neural-guided deductive search for program synthesis
US10698674B2 (en) 2018-02-06 2020-06-30 Smartshift Technologies, Inc. Systems and methods for entry point-based code analysis and transformation
US10740075B2 (en) * 2018-02-06 2020-08-11 Smartshift Technologies, Inc. Systems and methods for code clustering analysis and transformation
US10528343B2 (en) 2018-02-06 2020-01-07 Smartshift Technologies, Inc. Systems and methods for code analysis heat map interfaces
FR3078182B1 (fr) * 2018-02-19 2021-12-24 Bull Sas Systeme et procede informatique d'analyse de performance d'une application realisant des appels de fonction de communication entre plusieurs processus.
WO2019182191A1 (ko) 2018-03-21 2019-09-26 경북대학교 산학협력단 C0x2 아세틸화제를 유효성분으로 포함하는 퇴행성 신경질환의 예방 또는 치료용 약학적 조성물
US20200134482A1 (en) * 2018-10-29 2020-04-30 Walmart Apollo, Llc Scaling overrides in a rules engine using a streaming probabilistic data structure
WO2020174578A1 (ja) * 2019-02-26 2020-09-03 三菱電機株式会社 シーケンス図生成装置
CN110032394B (zh) * 2019-04-12 2022-05-31 深圳市腾讯信息技术有限公司 一种无源码文件的分析方法、装置和存储介质
US11782971B2 (en) * 2019-06-27 2023-10-10 Tencent America LLC Static and dynamic NBMP function image retrieval and scale ranking
KR20210012123A (ko) * 2019-07-24 2021-02-03 에스케이하이닉스 주식회사 메모리 시스템, 메모리 컨트롤러 및 동작 방법
CN111026467B (zh) * 2019-12-06 2022-12-20 合肥科大智能机器人技术有限公司 一种有限状态机的控制方法及有限状态机
US11360751B2 (en) 2020-03-19 2022-06-14 Codelogic, Inc. Systems and methods for dependency analysis
US11593255B2 (en) * 2020-07-31 2023-02-28 Bank Of America Corporation Mobile log heatmap-based auto testcase generation
CN112631935A (zh) * 2020-12-30 2021-04-09 中国农业银行股份有限公司 一种基于版本冲突的测试方法和装置
CN116028375B (zh) * 2023-02-21 2023-06-16 深圳大数信科技术有限公司 基于图论的代码测试方法

Family Cites Families (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1195990A (ja) * 1997-09-22 1999-04-09 Nippon Telegr & Teleph Corp <Ntt> プログラム構造表示方法および装置
JP3694872B2 (ja) * 1999-09-22 2005-09-14 日立ソフトウエアエンジニアリング株式会社 従属サブルーチン探索支援装置
US7120904B1 (en) * 2000-04-19 2006-10-10 Intel Corporation Data-flow method for optimizing exception-handling instructions in programs
US7003507B2 (en) * 2000-09-18 2006-02-21 International Business Machines Corporation Scalable propagation-based methods for call graph construction
US7174536B1 (en) * 2001-02-12 2007-02-06 Iowa State University Research Foundation, Inc. Integrated interactive software visualization environment
US6904590B2 (en) * 2001-05-25 2005-06-07 Microsoft Corporation Methods for enhancing program analysis
US20040154010A1 (en) * 2003-01-31 2004-08-05 Pedro Marcuello Control-quasi-independent-points guided speculative multithreading
US7661095B2 (en) * 2005-04-14 2010-02-09 Hewlett-Packard Development Company, L.P. System and method to build a callgraph for functions with multiple entry points
US7721269B2 (en) * 2005-12-23 2010-05-18 Sas Institute Inc. System and method for detecting redundant subroutine calls
US7774760B2 (en) * 2005-12-23 2010-08-10 Microsoft Corporation Tracing errors in software
US7739553B2 (en) * 2007-05-31 2010-06-15 Microsoft Corporation System crash analysis using path tracing technologies
CN101436192B (zh) * 2007-11-16 2011-03-16 国际商业机器公司 用于优化针对垂直存储式数据库的查询的方法和设备
US8990792B2 (en) * 2008-05-26 2015-03-24 Samsung Electronics Co., Ltd. Method for constructing dynamic call graph of application
US8347272B2 (en) * 2008-07-23 2013-01-01 International Business Machines Corporation Call graph dependency extraction by static source code analysis
US8332558B2 (en) * 2008-09-30 2012-12-11 Intel Corporation Compact trace trees for dynamic binary parallelization
US8996568B2 (en) * 2009-07-14 2015-03-31 Qualcomm Incorporated Methods and apparatus for efficiently processing multiple keyword queries on a distributed network
CN101876939B (zh) 2009-11-20 2011-12-21 北京信息科技大学 系统测试方法及装置
US8595709B2 (en) * 2009-12-10 2013-11-26 Microsoft Corporation Building an application call graph from multiple sources
WO2011081588A1 (en) * 2010-01-04 2011-07-07 Telefonaktiebolaget L M Ericsson (Publ) Method and apparatus for secure routing of data packets
EP2529516B1 (de) * 2010-01-29 2013-12-11 Telefonaktiebolaget LM Ericsson (publ) Paketrouting in einem netzwerk mittels änderung des paketinternen bloomfilters
EP2529578A1 (de) * 2010-01-29 2012-12-05 Telefonaktiebolaget LM Ericsson (publ) Paketweiterleitung in einem netzwerk
WO2011116988A1 (en) * 2010-03-26 2011-09-29 Software Diagnostics Technology Gmbh A method for automatically detecting and excluding a tracing instruction from further trace data generation for a software system, a computer system, and a computer program product
EP2390790A1 (de) 2010-05-27 2011-11-30 Fujitsu Limited Profiling von Softwareanwendungen
US9300471B2 (en) * 2011-07-07 2016-03-29 Nec Corporation Information processing apparatus, information processing method, and program
US8990243B2 (en) * 2011-11-23 2015-03-24 Red Hat, Inc. Determining data location in a distributed data store
CN102567200A (zh) * 2011-12-14 2012-07-11 北京航空航天大学 基于函数调用图的并行化安全漏洞检测方法
US8762396B2 (en) * 2011-12-22 2014-06-24 Sap Ag Dynamic, hierarchical bloom filters for network data routing
CN103186406B (zh) * 2011-12-30 2016-08-17 国际商业机器公司 用于控制流分析的方法和装置
US8527532B2 (en) * 2012-01-31 2013-09-03 Adobe Systems Incorporated Transforming function calls for interaction with hierarchical data structures
US9092568B2 (en) * 2012-04-30 2015-07-28 Nec Laboratories America, Inc. Method and system for correlated tracing with automated multi-layer function instrumentation localization
US8918766B2 (en) * 2012-12-12 2014-12-23 Microsoft Corporation Analysis of propagated information using annotated forests
US10685313B2 (en) * 2012-12-14 2020-06-16 Software Ag Systems and/or methods for path finding on model structures
CN103345472B (zh) * 2013-06-04 2016-08-10 北京航空航天大学 基于有限二叉树布隆过滤器的去冗文件系统及其构建方法
CN103336760B (zh) * 2013-07-11 2016-12-28 北京信息科技大学 一种基于逆向工程自动生成软件文档的方法及装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE112015003406B4 (de) 2014-07-24 2022-05-25 Ab Initio Technology Llc Datenherkunftssummierung

Also Published As

Publication number Publication date
EP3072070B1 (de) 2024-05-01
JP6349395B2 (ja) 2018-06-27
WO2015077175A1 (en) 2015-05-28
CN105745647B (zh) 2019-06-04
KR101841751B1 (ko) 2018-05-04
KR102154757B1 (ko) 2020-09-10
BR112016009391A2 (pt) 2017-08-01
JP2016539421A (ja) 2016-12-15
KR20160073402A (ko) 2016-06-24
EP4369180A2 (de) 2024-05-15
BR112016009391A8 (pt) 2022-08-30
US20160092350A1 (en) 2016-03-31
US10042746B2 (en) 2018-08-07
EP4369180A3 (de) 2024-05-22
CN105745647A (zh) 2016-07-06
US20150143339A1 (en) 2015-05-21
KR20180032669A (ko) 2018-03-30
BR112016009391B1 (pt) 2023-03-28
US9218169B2 (en) 2015-12-22
EP3072070A1 (de) 2016-09-28
EP3072070A4 (de) 2017-08-09

Similar Documents

Publication Publication Date Title
DE202014010893U1 (de) Rufwegsucher
DE112012005037B4 (de) Verwalten von redundanten unveränderlichen Dateien unter Verwendung von Deduplizierungen in Speicher-Clouds
DE202014010938U1 (de) Omega-Namen: Namenserzeugung und -ableitung
DE112016002120T5 (de) Entwicklungs- und Vetriebsplattform für Software
DE112019003833T5 (de) Schwachstellenanalyse von open-source-software
CN112564988B (zh) 告警处理方法、装置及电子设备
DE112018005167T5 (de) Aktualisieren von trainingsdaten
DE112011102073T5 (de) Dienstimplementierung von einem Dienstverzeichnis
DE112015005728T5 (de) Automatisches Auffinden von Konfigurationselementen
DE112014000976T5 (de) Garantieren der Anonymität von Linked Data-Graphen
DE202015009258U1 (de) Effizientes Anmerkungssystem für verteilte Versionsverwaltungssysteme
DE112019001433T5 (de) Datenanonymisierung
DE112016005266T5 (de) Schnelle Musterentdeckung für Protokollanalyse
DE102014116369A1 (de) Verwaltung von sprachmarkern bei internationaler datenspeicherung
DE112020000927T5 (de) Verwalten sensibler daten
DE202017105834U1 (de) Verwaltung von Anwendungsaktualisierungen
DE112014001997T5 (de) Kennzeichnen von Client-Zuständen
DE202014010885U1 (de) Beschleunigung basierend auf zwischengespeicherte Flüsse
DE102018010163A1 (de) Automatisches Generieren sinnvoller Nutzersegmente
DE112018004115T5 (de) Analyse von abhängigkeiten zwischen anwendungen zum verbessern einer computersystem-bedrohungserkennung
DE112021003401T5 (de) Schattenexperimente für serverlose multi-tenant-cloud-dienste
DE112020000554T5 (de) Verfahren zum zugreifen auf datensätze eines stammdatenverwaltungssystems
DE102012218699A1 (de) Passives überwachen virtueller systeme mittels agentenlosem offline-indexieren
DE112018001290T5 (de) Verfahren zum Schätzen der Löschbarkeit von Datenobjekten
DE112013000751T5 (de) Datenverarbeitung, Datensammlung

Legal Events

Date Code Title Description
R207 Utility model specification
R150 Utility model maintained after payment of first maintenance fee after three years
R081 Change of applicant/patentee

Owner name: GOOGLE LLC (N.D.GES.D. STAATES DELAWARE), MOUN, US

Free format text: FORMER OWNER: GOOGLE INC., MOUNTAIN VIEW, CALIF., US

R082 Change of representative

Representative=s name: BETTEN & RESCH PATENT- UND RECHTSANWAELTE PART, DE

R151 Utility model maintained after payment of second maintenance fee after six years
R079 Amendment of ipc main class

Free format text: PREVIOUS MAIN CLASS: G06F0017300000

Ipc: G06F0008750000

R152 Utility model maintained after payment of third maintenance fee after eight years