DE102022129946A1 - Verfahren und vorrichtungen zum bestimmen eines verfeinerten kontexts für softwarefehlererkennung und - korrektur - Google Patents

Verfahren und vorrichtungen zum bestimmen eines verfeinerten kontexts für softwarefehlererkennung und - korrektur Download PDF

Info

Publication number
DE102022129946A1
DE102022129946A1 DE102022129946.5A DE102022129946A DE102022129946A1 DE 102022129946 A1 DE102022129946 A1 DE 102022129946A1 DE 102022129946 A DE102022129946 A DE 102022129946A DE 102022129946 A1 DE102022129946 A1 DE 102022129946A1
Authority
DE
Germany
Prior art keywords
error
context
circuit
software
code
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.)
Pending
Application number
DE102022129946.5A
Other languages
English (en)
Inventor
Shengtian Zhou
Justin Gottschlich
Fangke Ye
Celine Lee
Jesmin Jahan Tithi
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.)
Intel Corp
Original Assignee
Intel 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 Intel Corp filed Critical Intel Corp
Publication of DE102022129946A1 publication Critical patent/DE102022129946A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3608Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software
    • 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
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • G06F21/563Static detection by source code analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/567Computer malware detection or handling, e.g. anti-virus arrangements using dedicated hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Quality & Reliability (AREA)
  • General Health & Medical Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Computing Systems (AREA)
  • Molecular Biology (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Artificial Intelligence (AREA)
  • Biomedical Technology (AREA)
  • Computational Linguistics (AREA)
  • Mathematical Physics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biophysics (AREA)
  • Virology (AREA)
  • Stored Programmes (AREA)

Abstract

Verfahren, Vorrichtungen, Systeme und Herstellungsartikel zum Bestimmen eines verfeinerten Kontexts für Softwarefehlererkennung werden offenbart. Mindestens ein nichtflüchtiges maschinenlesbares Medium beinhaltet Anweisungen, die, wenn ausgeführt, mindestens einen Prozessor dazu veranlassen, mindestens einen Knoten auf einem Graphen zu klassifizieren, wobei der Graph ein Computerprogramm darstellen soll wobei der Knoten einen partiellen Fehlerkontext enthalten soll, der dem Computerprogramm entspricht; einen Ort eines Softwarefehlers in dem Computerprogramm zu identifizieren, wobei der Ort auf dem Knoten basiert; einen statischen Fehlerkontext des Softwarefehlers durch Verwenden des Orts des Softwarefehlers zu bestimmen; einen dynamischen Fehlerkontext des Softwarefehlers durch Verwenden des Orts des Softwarefehlers zu bestimmen; und einen verfeinerten Fehlerkontext basierend auf einer Zusammenführung des statischen Fehlerkontexts und des dynamischen Fehlerkontexts zu bestimmen.

Description

  • FELD DER OFFENBARUNG
  • Die vorliegende Offenbarung betrifft allgemein Computer, und insbesondere Verfahren und Vorrichtungen zum Bestimmen eines verfeinerten Kontexts für Softwarefehlererkennung und -Korrektur.
  • HINTERGRUND
  • In den letzten Jahren hat die Verwendung von Softwareentwicklung über eine breite Vielzahl von Industrien hinweg erheblich zugenommen. Softwareentwickler verwenden Programmiersprachen, um Softwarecode zu schreiben. Softwarecode, oder Code, beinhaltet computerlesbare Anweisungen, die durch einen Computer ausgeführt werden, um eine Aufgabe auszuführen. Wenn Code geschrieben wird, können Softwareentwickler unbeabsichtigt einen Softwarefehler einschließen. Ein Softwarefehler ist ein Fehler, Makel oder Defekt in dem Code, der den Code dazu veranlasst, ein falsches oder unerwartetes Ergebnis zu erzeugen, oder sich auf ungewollte Weisen zu verhalten.
  • Figurenliste
    • 1 ist ein beispielhafter Datensatz, der durch eine beispielhafte Fehlererkennungsschaltung verarbeitet wird, um einen verfeinerten Kontext für Softwarefehlererkennung und/oder -Korrektur zu bestimmen.
    • 2 ist ein Blockdiagramm eines beispielhaften Systems zum Ausführen einer Aufgabe durch Verwenden der beispielhaften Fehlererkennungsschaltung von 1.
    • 3 ist ein Blockdiagramm einer beispielhaften Implementierung der beispielhaften Fehlererkennungsschaltung von 1.
    • 4 ist ein veranschaulichendes Beispiel von grafischen Darstellungen von Code, das zeigt, wie die beispielhafte Knotenklassifizierungsschaltung von 3 ein Modell trainiert, um Knoten mit partiellem Fehlerkontext zu erkennen.
    • 5 ist ein veranschaulichendes Beispiel von grafischen Darstellungen von Code, das zeigt, wie die beispielhafte Kontextverifizierungsschaltung von 3 verifiziert, dass ein verfeinerter Fehlerkontext einen Softwarefehler enthält.
    • 6 ist ein veranschaulichendes Beispiel eines statischen Fehlerkontexts und von dynamischen Fehlerkontexten in Codeschnipseln.
    • 7 ist ein veranschaulichendes Beispiel eines verfeinerten Fehlerkontexts eines Codeschnipsels.
    • 8 ist ein Flussdiagramm, das beispielhafte maschinenlesbare Anweisungen darstellt, die durch eine beispielhafte Prozessorschaltung ausgeführt werden können, um die beispielhafte Fehlererkennungsschaltung von 1 zu implementieren, um Fehlerstatus und verfeinerte Fehlerkontexte zu bestimmen.
    • 9 ist ein Flussdiagramm, das beispielhafte maschinenlesbare Anweisungen darstellt, die durch eine beispielhafte Prozessorschaltung ausgeführt werden können, um die beispielhafte statische Analysatorschaltung und die beispielhafte dynamische Analysatorschaltung von 3 zu implementieren, um statische und dynamische Fehlerkontexte, wie in 8 beschrieben, zu bestimmen.
    • 10 ist ein Flussdiagramm, das beispielhafte maschinenlesbare Anweisungen darstellt, die durch eine beispielhafte Prozessorschaltung ausgeführt werden können, um die beispielhafte Kontextverfeinerungsschaltung von 3 zu implementieren, um Fehlerkontexte, wie in 8 beschrieben, zu verfeinern.
    • 11 ist ein Flussdiagramm, das beispielhafte maschinenlesbare Anweisungen darstellt, die durch eine beispielhafte Prozessorschaltung ausgeführt werden können, um die Fehlererkennungsschaltung von 1 zu implementieren, um verfeinerte Kontexte für Softwarefehlererkennung zu bestimmen.
    • 12 ist ein Blockdiagramm einer beispielhaften Verarbeitungsplattform, die eine Prozessorschaltung beinhaltet, die zum Ausführen der beispielhaften maschinenlesbaren Anweisungen der 7, 8, 9 und/oder 10 strukturiert ist, um die beispielhafte Fehlererkennungsschaltung von 1 zu implementieren.
    • 13 ist ein Blockdiagramm einer beispielhaften Implementierung der Prozessorschaltung von 12.
    • 14 ist ein Blockdiagramm einer anderen beispielhaften Implementierung der Prozessorschaltung von 12.
    • 15 ist ein Blockdiagramm einer beispielhaften Softwareverteilungsplattform (zum Beispiel ein oder mehrere Server) zum Verteilen von Software (zum Beispiel Software, die den beispielhaften maschinenlesbaren Anweisungen der 7, 8, 9 und/oder 10 entspricht) an Clientgeräte die mit Endbenutzern und/oder Verbrauchern (zum Beispiel für Lizenzierung, Verkauf und/oder Verwendung), Einzelhändlern (zum Beispiel für Verkauf, Wiederverkauf, Lizenzierung und/oder Sublizenzierung) und/oder Originalgeräteherstellern (OEM) (zum Beispiel zur Aufnahme in Produkte, die zum Beispiel an Einzelhändler und/oder an andere Endbenutzer, wie zum Beispiel Direktkaufkunden, verteilt werden sollen) assoziiert sind.
  • Im Allgemeinen werden über die Zeichnung(en) und die beigefügte schriftliche Beschreibung hinweg dieselben Bezugszeichen verwendet, um auf dieselben oder ähnliche Teile Bezug zu nehmen. Die Figuren sind nicht maßstabsgetreu.
  • Sofern nicht spezifisch anders angegeben, werden hierin Deskriptoren, wie zum Beispiel „erste/r/s“, „zweite/r/s“, „dritte/r/s“ usw., verwendet, ohne jegliche Bedeutung einer Priorität, physikalischen Reihenfolge, Anordnung in einer Liste und/oder Reihenfolge auf jegliche Weise zuzuschreiben oder anderweitig anzuzeigen, sondern werden lediglich als Kennzeichen und/oder willkürliche Namen verwendet, um Elemente zum einfachen Verstehen der offenbarten Beispiele zu unterscheiden. In einigen Beispielen kann der Deskriptor „erste/r/s“ verwendet werden, um sich auf ein Element in der detaillierten Beschreibung zu beziehen, während auf dasselbe Element in einem Anspruch mit einem unterschiedlichen Deskriptor, wie zum Beispiel „zweite/r/s“ oder „dritte/r/s“, Bezug genommen werden kann. In solchen Fällen versteht es sich, dass solche Deskriptoren lediglich zum eindeutigen Identifizieren jener Elemente verwendet werden, die zum Beispiel andernfalls einen gleichen Namen gemeinsam verwenden könnten.
  • Wie hierin verwendet, beziehen sich „ungefähr“ und „etwa“ auf Abmessungen, die aufgrund von Herstellungstoleranzen und/oder anderen Unzulänglichkeiten in der realen Welt nicht exakt sein können. Wie hierin verwendet, bezieht sich „im Wesentlichen Echtzeit“ auf ein nahezu augenblickliches Auftreten, wobei anerkannt wird, dass es in der realen Welt Verzögerungen für Datenverarbeitungszeit, Übertragung usw. geben kann. Somit bezieht sich „im Wesentlichen Echtzeit“, sofern nicht anders spezifiziert, auf Echtzeit +/- 1 Sekunde.
  • Wie hierin verwendet, umfasst der Ausdruck „in Kommunikation“, einschließlich Variationen davon, direkte Kommunikation und/oder indirekte Kommunikation durch eine oder mehrere Zwischenkomponenten, und erfordert keine direkte physikalische (zum Beispiel drahtgebundene) Kommunikation und/oder konstante Kommunikation, sondern beinhaltet zusätzlich eine selektive Kommunikation in periodischen Intervallen, geplanten Intervallen, aperiodischen Intervallen und/oder einmaligen Ereignissen.
  • Wie hierin verwendet, ist „Prozessorschaltung“ so definiert, dass sie (i) eine oder mehrere elektrische Spezialschaltungen beinhaltet, die so strukturiert sind, dass sie bestimmte Operationen ausführen, und ein oder mehrere halbleiterbasierte Logikgeräte (zum Beispiel elektrische Hardware, die durch einen oder mehrere Transistoren implementiert wird) beinhalten, und/oder (ii) eine oder mehrere halbleiterbasierte elektrische Mehrzweckschaltungen beinhaltet, die mit Anweisungen programmiert sind, um bestimmte Operationen auszuführen, und eine oder mehrere halbleiterbasierte Logikgeräte (zum Beispiel elektrische Hardware, die durch einen oder mehrere Transistoren implementiert wird) beinhalten. Beispiele für Prozessorschaltungen beinhalten programmierte Mikroprozessoren, Field Programmable Gate Arrays (FPGA), die Anweisungen instanziieren können, Central Processor Units (CPU), Graphics Processor Units (GPU), Digital Signal Processors (DSP), XPU oder Mikrosteuerungen und integrierte Schaltungen, wie zum Beispiel Application Specific Integrated Circuits (ASIC). Zum Beispiel kann eine XPU durch ein heterogenes Datenverarbeitungssystem implementiert sein, das mehrere Typen von Prozessorschaltung (zum Beispiel ein oder mehrere FPGA, eine oder mehrere CPU, eine oder mehrere GPU, einen oder mehrere DSP usw. und/oder eine Kombination davon) und eine oder mehrere Application Programming Interfaces (API) beinhaltet, die eine oder mehrere Datenverarbeitungsaufgaben einem oder mehreren der mehreren Typen der am besten zum Ausführen der einen oder mehreren Datenverarbeitungsaufgaben geeigneten Verarbeitungsschaltung zuweisen können.
  • DETAILLIERTE BESCHREIBUNG
  • Da die Verwendung von Softwareentwicklung über Industrien hinweg zugenommen hat, ist das Feld der Maschinenprogrammierung zunehmend relevant geworden. Im Allgemeinen beschreibt die Maschinenprogrammierung die Entwicklung und Aufrechterhaltung von Software. Durch die Automatisierung der Softwareentwicklung zielt die Maschinenprogrammierung darauf ab, Computerprogramme effektiver und effizienter zu machen als Computerprogramme, die durch herkömmliche Mittel entwickelt wurden, die sich stärker auf die Benutzereingabe verlassen.
  • Ein Verfahren, durch das die Maschinenprogrammierung die Aufrechterhaltung der Software automatisiert, erfolgt durch Fehlererkennung. Fehlererkennungssysteme können einen Abschnitt von Code (zum Beispiel Software, Firmware, ein Computerprogramm, Codezeilen eines Computerprogramms usw.) akzeptieren, und das Vorhandensein und den Ort eines oder mehrerer syntaktischer, Design- oder logischer Fehler in einem Programm identifizieren. Die Genauigkeit eines Fehlererkennungssystems hängt von dem Fehlerkontext ab, der durch den Eingabeabschnitt von Code dargestellt wird. Ein Fehlerkontext ist ein Abschnitt eines Computerprogramms, der sich auf das Bestimmen der Ursache eines Fehlers bezieht.
  • Vorherige Lösungen, die versuchen, einen Fehlerkontext zu bestimmen, identifizieren oft einen partiellen Fehlerkontext. Ein partieller Fehlerkontext ist ein Abschnitt eines Computerprogramms, der einen Fehler betreffen kann, aber zu klein ist, um die Ursache eines Fehlers zu bestimmen. Hierin offenbarte Beispiele können verwendet werden, um einen verfeinerten Fehlerkontext zu bestimmen. Ein verfeinerter Fehlerkontext eines beispielhaften Fehlers kann größer als ein partieller Fehlerkontext für den durch vorherige Lösungen erhaltenen beispielhaften Fehler sein. Daher können Fehlererkennungssysteme, die gemäß hierin offenbarten Beispielen implementiert werden, verfeinerte Fehlerkontexte verwenden, um bei der Bestimmung der Ursache des beispielhaften Fehlers genauer zu sein. Im Gegenzug kann die Zeitdauer reduziert werden, die benötigt wird, um Softwarefehler zu korrigieren.
  • 1 ist ein beispielhafter Datensatz, der durch beispielhafte Fehlererkennungsschaltung 104 verarbeitet wird, um verfeinerte Kontexte für Softwarefehlerkorrektur zu bestimmen. 1 beinhaltet Benutzer 100, beispielhaftes Eingabecomputerprogramm 102, beispielhafte Fehlererkennungsschaltung 104, beispielhafte Fehlerinformationen 106 und korrigiertes Computerprogramm 108. Der Benutzer 100 von 1 kann jegliches Individuum sein, das Code schreibt. In einigen Beispielen kann der Benutzer 100 Code als ein Softwareentwickler, ein Student, ein Hobbyist usw. schreiben
  • Das beispielhafte Eingabecomputerprogramm 102 von 1 ist eine durch den Benutzer 100 geschriebene Menge an Code. Das beispielhafte Eingabecomputerprogramm 102 ist in Beispielen hierin der Einfachheit halber als ein Codeschnipsel von 10 Codezeilen veranschaulicht. Ein Codeschnipsel bezieht sich allgemein auf einen kleinen Abschnitt von Code. Ein Codeschnipsel kann, muss jedoch nicht, Teil einer größeren Menge an Code sein, wie zum Beispiel eines Computerprogramms, einer Software, Firmware usw. In einigen Beispielen kann das Eingabecomputerprogramm 102 jegliche Anzahl von Codezeilen sein. In ähnlicher Weise ist das Eingabecomputerprogramm 102 in 1 der Einfachheit halber als eine Datei veranschaulicht. In einigen Beispielen kann das Eingabecomputerprogramm 102 mehrere Dateien sein.
  • Das beispielhafte Eingabecomputerprogramm 102 kann in jeglicher Programmiersprache geschrieben sein. Eine Programmiersprache ist ein Satz von Befehlen, Anweisungen und anderer Syntax, die zum Erzeugen eines Softwareprogramms verwendet werden. Beispielhafte Programmiersprachen beinhalten, sind jedoch nicht beschränkt auf Java, C, Python, C++, Visual Basic, C#, JavaScript, Perl, R, Hypertext Preprocessor (PHP), Structured Query Language (SQL) usw.
  • In dem veranschaulichten Beispiel enthält das Eingabecomputerprogramm 102 einen Softwarefehler. In dem Beispiel von FIG. In 1 beinhaltet das Eingabecomputerprogramm 102 eine Variable „self.res“. Der Softwarefehler (in 1 als „# BUG‟ kommentiert) ergibt sich daraus, dass die Variable „self.res“ in einem Initialisierungsverfahren (DEF_INIT) anstatt in einem Summenverfahren (DEF_SUM) definiert wird. In einigen Beispielen kann der Softwarefehler andere Codezeilen beinhalten, und kann anderen Inhalt haben. Der Softwarefehler kann bewirken, dass das Eingabecomputerprogramm 102 nicht ausgeführt wird, ein falsches oder unerwartetes Ergebnis erzeugt, oder sich auf unbeabsichtigte Weisen verhält.
  • Die beispielhafte Fehlererkennungsschaltung 104 empfängt das Eingabecomputerprogramm 102, und bestimmt beispielhafte Fehlerinformationen 106. Die beispielhaften Fehlerinformationen 106 beinhalten Fehlerstatus 106A, und können bedingt Fehlerkontext 106B beinhalten. Der beispielhafte Fehlerstatus 106A zeigt an, ob ein Softwarefehler innerhalb des Eingabecomputerprogramms 102 vorhanden ist. In einigen Beispielen kann der beispielhafte Fehlerstatus 106A zusätzlich den Schweregrad eines Softwarefehlers anzeigen, indem Kennzeichnungen, wie zum Beispiel „Warnung“ oder „Fehler“, an den Softwarefehler zugewiesen werden. Der Fehlerkontext 106B ist ein Abschnitt des Eingabecomputerprogramms 102, der verwendet wird, um die Ursache des Softwarefehlers zu bestimmen. In einigen Beispielen kann, falls das Eingabecomputerprogramm 102 keinen Softwarefehler hat, die beispielhafte Fehlererkennungsschaltung 104 keinen Fehlerkontext 106B bereitstellen, da es keinen Softwarefehler gibt, für den eine Ursache bestimmt werden soll. Die beispielhaften Fehlerinformationen 106 werden gemäß hierin offenbarten Beispielen bestimmt.
  • Der Benutzer 100 verwendet die beispielhaften Fehlerinformationen 106, um die Ursache des Softwarefehlers innerhalb des Eingabecomputerprogramms 102 zu bestimmen, und den Fehler zu korrigieren. Die korrigierte Version des Eingabecomputerprogramms 102 ohne Softwarefehler ist als ein beispielhaftes korrigiertes Computerprogramm 108 gezeigt. In dem veranschaulichten Beispiel korrigiert der Benutzer 100 das beispielhafte Eingabecomputerprogramm 102, indem er die Deklaration der Variablen „seif.res“ (das heißt „res“) in die Summenfunktion bewegt, um das korrigierte Computerprogramm 108 zu erzeugen. In einigen Beispielen kann der Benutzer 100 jegliche Anzahl von Änderungen vornehmen, um den Softwarefehler zu korrigieren, und das korrigierte Computerprogramm 108 zu erzeugen. Das beispielhafte korrigierte Computerprogramm 108 erzeugt eine Ausgabe, oder führt eine Aufgabe aus, für die der Benutzer 100 beabsichtigte, dass das Eingabecomputerprogramm 102 sie erzeugt oder ausführt.
  • Das beispielhafte Eingabecomputerprogramm 102 von 1 ist zu veranschaulichenden Zwecken in ersten Codeabschnitt 110 und zweiten Codeabschnitt 112 unterteilt. Der beispielhafte zweite Codeabschnitt 112 stellt einen partiellen Fehlerkontext dar, der sich auf den Softwarefehler in dem Eingabecomputerprogramm 102 bezieht, aber nicht genügend Informationen bereitstellen kann, um die Ursache des Softwarefehlers zu bestimmen. Vorherige Lösungen, die versuchen, den Fehlerkontext 106B zu bestimmen, bestimmen oft nur einen partiellen Fehlerkontext. Im Gegensatz dazu bestimmt die beispielhafte Fehlererkennungsschaltung 104 von 1 einen verfeinerten Fehlerkontext. In dem Beispiel von 1 stellen der erste Codeabschnitt 110 und der zweite Codeabschnitt 112 gemeinsam den verfeinerten Fehlerkontext für den Softwarefehler in dem Eingabecomputerprogramm 102 dar. Ein verfeinerter Fehlerkontext kann sich auf einen größeren Abschnitt des beispielhaften Eingabecomputerprogramms 102 als der partielle Fehlerkontext beziehen. Der verfeinerte Fehlerkontext ermöglicht dem Benutzer 100, die Ursache des Softwarefehlers genauer zu bestimmen, und den Softwarefehler effizienter zu korrigieren, als ein partieller Fehlerkontext. Zum Beispiel kann der Benutzer 100 von 1 bestimmen, dass zum Korrigieren des Softwarefehlers die Deklaration der „res“-Variablen von dem beispielhaften ersten Codeabschnitt 110 innerhalb der „sum“-Funktion des zweiten Codeabschnitts 112 platziert werden sollte.
  • Der verfeinerte Fehlerkontext ist in 1 so veranschaulicht, dass er acht der zehn Codezeilen des Eingabecomputerprogramms 102 darstellt. In einigen Beispielen kann der verfeinerte Fehlerkontext einen kleineren Abschnitt des Eingabecomputerprogramms 102 darstellen. Die Größe des verfeinerten Fehlerkontextes relativ zu dem Eingabecomputerprogramm 102 kann sich basierend auf der Gesamtanzahl von Zeilen in dem Eingabecomputerprogramm 102 ändern.
  • 2 ist ein Blockdiagramm von beispielhaftem System 200 zum Ausführen einer Aufgabe durch Verwenden der beispielhaften Fehlererkennungsschaltung von 1. 2 beinhaltet den Benutzer 100, beispielhaften Eingabecode 201, beispielhaften Referenzcode 202, beispielhaftes Netzwerk 204, beispielhaftes Coderepositorium 206 und beispielhaften Computer 208. Der beispielhafte Computer 208 beinhaltet beispielhafte Softwareschnittstellenschaltung 210, eine beispielhafte Fehlererkennungsschaltung 104, beispielhafte Compilerschaltung 212 und beispielhafte Codeausführungsschaltung 214. Der beispielhafte Computer 208 in 2 bestimmt, ob der Eingabecode 201 Softwarefehler enthält, behebt die Softwarefehler, um korrigierten Code zu erzeugen, und führt den korrigierten Code ohne Softwarefehler aus, um Aufgaben auszuführen. Der beispielhafte Computer 208 kann zusätzliche und/oder unterschiedliche Komponenten haben, und zusätzliche und/oder unterschiedliche Funktionen als jene in Verbindung mit 2 beschriebenen ausführen. Zum Beispiel kann der beispielhafte Computer 208 durch Prozessorplattform 1200 von 12 implementiert werden.
  • In dem veranschaulichten Beispiel greift die Softwareschnittstellenschaltung 210 auf den Eingabecode 201 zu. Zum Beispiel kann der Eingabecode 201 durch den Benutzer 100 bereitgestellt werden, und/oder die Softwareschnittstellenschaltung 210 kann den Eingabecode 201 von Speicher abrufen. Der Eingabecode 201 kann einen oder mehrere Softwarefehler enthalten. Der Eingabecode 201 kann jegliche Länge haben, und kann in jeglicher Programmiersprache geschrieben sein. In einigen Beispielen kann der Benutzer 100 beispielhafte Fehlerinformationen 106 von dem beispielhaften Computer 208 empfangen, nachdem der Eingabecode 201 bereitgestellt wurde. In einigen solchen Beispielen kann der Benutzer 100 einen oder mehrere Softwarefehler korrigieren. Zum Beispiel ist das Eingabecomputerprogramm 102 von 1 ein Beispiel für Eingabecode 201, da der Softwarefehler noch nicht entdeckt ist, wenn der beispielhafte Computer 208 anfänglich auf den Eingabecode 201 zugreift.
  • Das beispielhafte Netzwerk 204 von 2 verbindet das Coderepositorium 206 und den Computer 208, und ermöglicht die Kommunikation zwischen diesen. In diesem Beispiel ist das beispielhafte Netzwerk 204 das Internet. Das beispielhafte Netzwerk 204 kann jedoch durch Verwenden irgendeines oder mehrerer geeigneter drahtgebundener und/oder drahtloser Netzwerke implementiert werden, einschließlich zum Beispiel eines oder mehrerer Datenbusse, eines oder mehrerer Local Area Networks (LAN), eines oder mehrerer drahtloser LAN (WLAN), eines oder mehrerer Mobilfunknetzwerke, eines oder mehrerer Koaxialkabelnetzwerke, eines oder mehrerer Satellitennetzwerke, eines oder mehrerer privater Netzwerke, eines oder mehrerer öffentlicher Netzwerke usw. Wie oben und hierin verwendet, beinhaltet der Begriff „kommunizieren“ Varianten davon (zum Beispiel sichere oder nicht sichere Kommunikationen, komprimierte oder nicht komprimierte Kommunikationen usw.), umfasst direkte Kommunikation und/oder indirekte Kommunikation durch eine oder mehrere Zwischenkomponenten, und erfordert keine direkte physikalische (zum Beispiel drahtgebundene) Kommunikation und/oder konstante Kommunikation, sondern beinhaltet stattdessen selektive Kommunikation in periodischen oder aperiodischen Intervallen, sowie einmalige Ereignisse.
  • Das beispielhafte Coderepositorium 206 ist ein Datenspeicherungssystem, das Dateien in einer Verzeichnisstruktur speichert. Das beispielhafte Coderepositorium 206 enthält auch Metadaten, die die Dateien und Verzeichnisse in einem Versionssteuerungssystem beschreiben. In einigen Beispielen sind einige oder alle der Dateien und Verzeichnisse in dem Coderepositorium 206 öffentlich. Auf öffentliche Dateien und Verzeichnisse in einem Coderepositorium kann durch jeden zugegriffen werden. In anderen Beispielen sind einige oder alle der Dateien und Verzeichnisse in dem Coderepositorium 206 privat. Auf private Dateien und Verzeichnisse in einem Coderepositorium kann nur durch bestimmte Benutzer oder Gruppen zugegriffen werden. Beispiele für Coderepositorien beinhalten, sind jedoch nicht beschränkt auf GitHub®, GitLAB®, Bitbucket® usw.
  • Das beispielhafte Coderepositorium 206 wird durch jeglichen Speicher, jegliches Speicherungsgerät und/oder jegliche Speicherungsplatte zum Speichern von Daten, wie zum Beispiel Flash-Speicher, magnetische Medien, optische Medien, Festkörperspeicher, Festplatte(n), USB-Stick(s) usw., implementiert. Darüber hinaus können die in dem beispielhaften Coderepositorium 206 gespeicherten Daten in jeglichem Datenformat, wie zum Beispiel Binärdaten, kommabegrenzte Daten, Tab-begrenzte Daten, Structured Query Language (SQL) -Strukturen usw., vorliegen. Während in dem veranschaulichten Beispiel das Coderepositorium 206 als ein einzelnes Gerät veranschaulicht ist, können das Coderepositorium 206 und/oder jegliche anderen hierin beschriebenen Datenspeicherungsgeräte durch jegliche Anzahl und/oder Typ(en) von Speichern implementiert werden.
  • In dem veranschaulichten Beispiel greift die Softwareschnittstellenschaltung 210 von 2 auf den Eingabecode 201 zu. In einigen Beispielen können Softwareanwendungen, wie zum Beispiel ein Quellcodeeditor und/oder Softwarecompiler (zum Beispiel eine Integrated Development Environment (IDE)), die durch die Softwareschnittstellenschaltung 210 implementiert werden, dem Benutzer 100 zusätzlich ermöglichen, Code zu schreiben, Code zu bearbeiten, Befehle oder Anforderungen zum Prüfen von Code auf Softwarefehler zu übermitteln, und/oder Ausführung von Code zum Ausführen einer Aufgabe zu instanziieren. In anderen Beispielen kann der Benutzer 100 Code auf einer unterschiedlichen Maschine, die von dem Computer 208 getrennt ist, schreiben oder bearbeiten. In einigen solchen Beispielen kann der Benutzer 100 den Code über ein Netzwerk oder ein Speicherungsgerät an die Softwareschnittstellenschaltung 210 bereitstellen. Die Softwareschnittstellenschaltung 210 stellt auch beispielhafte Fehlerinformationen 106 bereit. In einigen Beispielen kann die Softwareschnittstellenschaltung 210 zusätzlich die Ausgabe einer Aufgabe zum Zugriff durch den Benutzer 100 bereitstellen.
  • Die beispielhafte Fehlererkennungsschaltung 104 empfängt den Eingabecode 201 von der Softwareschnittstellenschaltung 210. Die beispielhafte Fehlererkennungsschaltung 104 bestimmt den Fehlerstatus 106A (1). Falls die beispielhafte Fehlererkennungsschaltung 104 bestimmt, dass ein Softwarefehler in dem Eingabecode 201 vorhanden ist, bestimmt die beispielhafte Fehlererkennungsschaltung 104 zusätzlich den Fehlerkontext 106B (1). Um den Fehlerstatus 106A und den Fehlerkontext 106B zu bestimmen, greift die beispielhafte Fehlererkennungsschaltung 104 über das beispielhafte Netzwerk 204 auf Daten von dem Coderepositorium 206 zu. Die beispielhafte Fehlererkennungsschaltung 104 kann die beispielhaften Fehlerinformationen 106 über die Softwareschnittstellenschaltung 210 bereitstellen. Die beispielhafte Fehlererkennungsschaltung 104 kann zusätzlich Referenzcode 202 an die Compilerschaltung 212 bereitstellen. Der Referenzcode 202 ist der Eingabecode 201, der durch die beispielhafte Fehlererkennungsschaltung 104 verarbeitet wurde, und der beispielhafte Fehlerinformationen 106 beinhaltet, die durch die beispielhafte Fehlererkennungsschaltung 104 erzeugt werden. In einigen Beispielen stellt die beispielhafte Fehlererkennungsschaltung 104 Referenzcode 202 an die Compilerschaltung 212 bereit, als Reaktion auf eine Bestimmung, dass der enthaltene Fehlerstatus 106A anzeigt, dass der Referenzcode 202 keinen Softwarefehler enthält. Der Referenzcode 202, der keinen Softwarefehler enthält, kann als verifizierter Code bezeichnet werden. Zum Beispiel wird, nachdem auf das beispielhafte korrigierte Programm 108 von 1 durch den Computer 208 zugegriffen wird, und die beispielhafte Fehlererkennungsschaltung 104 einen Fehlerstatus 106A erzeugt, der anzeigt, dass das beispielhafte korrigierte Programm 108 keinen Softwarefehler enthält, das beispielhafte korrigierte Programm 108 zu einem Beispiel für verifizierten Code. In anderen Beispielen wird der Referenzcode 202 unabhängig von dem beispielhaften Fehlerstatus 106A an die Compilerschaltung 212 bereitgestellt. In einigen solchen Beispielen kann der Referenzcode 202 immer noch einen Softwarefehler enthalten. Die beispielhafte Fehlererkennungsschaltung 104 ist unten in Verbindung mit den 3-14 detaillierter beschrieben.
  • Die beispielhafte Compilerschaltung 212 von 2 empfängt verifizierten Code von der beispielhaften Fehlererkennungsschaltung 104, die keine Softwarefehler hat. Die Compilerschaltung 212 übersetzt den verifizierten Code von seiner ursprünglichen Programmiersprache in Maschinenanweisungen, die zum Ausführen einer Aufgabe verwendet werden können. In einigen Beispielen können die Maschinenanweisungen als Maschinencode bezeichnet werden. Die beispielhafte Compilerschaltung 212 stellt die Maschinenanweisungen an die Codeausführungsschaltung 214 bereit. In einigen Beispielen kann die beispielhafte Compilerschaltung 212 eine Übersetzerfunktionalität beinhalten, sodass hierin offenbarte Beispiele in Verbindung mit übersetztem Code (zum Beispiel Programmiercode, der zu einem Zeitpunkt der Ausführung in Maschinencode übersetzt wird) implementiert werden können, die vor der Ausführung nicht vollständig kompiliert werden können. Während zum Beispiel das Kompilieren eines Programms vor der Ausführungszeit durch Kompilieren aller Anweisungen dieses Programms in Maschinencode und Speichern des Maschinencodes als eine ausführbare Datei für eine zukünftige Ausführung ausgeführt wird, übersetzt Übersetzerfunktionalität Programmiersprachencode in Maschinenanweisungen zu einem Zeitpunkt der Ausführung (zum Beispiel in Echtzeit, gleichzeitig mit der Programmausführung), ohne ein ganzes Programm kompilieren und den gesamten Maschinencode für dieses Programm vor der Ausführung speichern zu müssen.
  • Die beispielhafte Codeausführungsschaltung 214 von 2 führt die Maschinenanweisungen aus, um die durch den verifizierten Code beschriebene Aufgabe ohne Softwarefehler auszuführen. In einigen Beispielen kann die Aufgabe eine Ausgabe erzeugen. In einigen solchen Beispielen kann die Ausgabe über die Softwareschnittstellenschaltung 210 an den Benutzer 100 bereitgestellt werden.
  • Falls der Eingabecode 201 einen Softwarefehler enthält, kann die durch den Eingabecode 201 beschriebene Aufgabe nicht ausgeführt werden, ein falsches oder unerwartetes Ergebnis erzeugen, oder sich auf unbeabsichtigte Weisen verhalten. Die beispielhafte Fehlererkennungsschaltung 104 erkennt und/oder korrigiert solche Softwarefehler, bevor die Codeausführungsschaltung 214 den Eingabecode 201 ausführt. Die beispielhafte Fehlererkennungsschaltung 104 erzeugt einen verfeinerten Fehlerkontext, der einen größeren Abschnitt von relevantem Code enthält, der verwendet werden kann, um die Ursache eines Softwarefehlers zu bestimmen, als ein Abschnitt von relevantem Code, der durch vorherige Lösungen bereitgestellt wird, um den Fehlerkontext 106B zu identifizieren. Infolgedessen ermöglicht die beispielhafte Fehlererkennungsschaltung 104 dem Benutzer 100, den Softwarefehler effizienter als vorherige Lösungen zu korrigieren.
  • 3 ist Blockdiagramm der beispielhaften Fehlererkennungsschaltung 104, um einen verfeinerten Kontext für Softwarefehlererkennung und/oder -Korrektur zu bestimmen. Die beispielhafte Fehlererkennungsschaltung 104 von 3 kann durch Prozessorschaltung, wie zum Beispiel eine zentrale Verarbeitungseinheit, die Anweisungen ausführt, instanziiert werden (zum Beispiel Erzeugen einer Instanz, Realisieren für jegliche Zeitdauer, Verwirklichen, Implementieren usw.). Zusätzlich oder alternativ kann die beispielhafte Fehlererkennungsschaltung 104 von 3 durch eine ASIC oder ein FPGA instanziiert werden (zum Beispiel Erzeugen einer Instanz, Realisieren für jegliche Zeitdauer, Verwirklichen, Implementieren usw.), die/das strukturiert ist, Operationen auszuführen, die den Anweisungen entsprechen. Es versteht sich, dass einige oder alle Schaltungen von 2 somit zur selben Zeit oder zu unterschiedlichen Zeiten instantiiert werden können. Einige oder alle Schaltungen können zum Beispiel in einem oder mehreren Threads instantiiert werden, die gleichzeitig auf Hardware und/oder in Reihe auf Hardware ausgeführt werden. Darüber hinaus können in einigen Beispielen einige oder alle Schaltungen von 3 durch eine oder mehrere virtuelle Maschinen und/oder Container implementiert werden, die auf dem Mikroprozessor ausgeführt werden.
  • Die beispielhafte Fehlererkennungsschaltung 104 von 3 beinhaltet beispielhafte Schnittstellenschaltung 300, beispielhafte Graphenschaltung 302A, beispielhafte Knotenklassifizierungsschaltung 304, beispielhafte Ortidentifizierungsschaltung 306, beispielhafte statische Analysatorschaltung 308, beispielhafte dynamische Analysatorschaltung 310, beispielhafte Kontextverfeinerungsschaltung 312, beispielhafte Graphenschaltung 302B, beispielhafte Kontextverifizierungsschaltung 314 und Datenbereitstellungsschaltung 316.
  • Die beispielhafte Schnittstellenschaltung 300 von 3 greift über die Softwareschnittstellenschaltung 210 (2) auf den Eingabecode 201 zu. Die beispielhafte Schnittstellenschaltung 300 stellt den Eingabecode 201 an die beispielhafte Graphenschaltung 302A bereit.
  • Die beispielhafte Graphenschaltung 302A von 3 erzeugt einen Graphen, um den Eingabecode 201 darzustellen. Ein Graph ist ein Datentyp, der nichtlineare Beziehungen zwischen Objekten darstellen kann. Ein Graph beinhaltet Knoten, die auch als Eckpunkte bezeichnet werden können. Ein Knoten ist ein Objekt, das Daten oder Informationen enthält. Knoten sind durch Kanten, die auch als Bögen bezeichnet werden können, miteinander verbunden. Eine gegebene Kante hat einen Startknoten und einen Endknoten. Ein gegebener Knoten kann mehrere Kanten haben, die mit mehreren Knoten verbunden sind.
  • Ein Graph, der durch die beispielhafte Graphenschaltung 302A erzeugt wird, stellt den Eingabecode 201 dar. Ein Knoten in dem Graphen, der durch die beispielhafte Graphenschaltung 302A erzeugt wird, enthält Daten, die Codezeilen von dem Eingabecode 201 darstellen. Die Anzahl von Zeilen, die durch einen ersten beispielhaften Knoten dargestellt werden, kann sich von der Anzahl von Zeilen unterscheiden, die durch einen zweiten beispielhaften Knoten dargestellt werden. Die Knoten sind dahingehend verbunden, wie Codezeilen, die durch den ersten beispielhaften Knoten dargestellt werden, mit Codezeilen zusammenhängen, die durch den zweiten beispielhaften Knoten dargestellt werden. Die durch jeden Knoten dargestellten Codezeilen enthalten Punkte von Interesse. Ein Punkt von Interesse ist Teil einer Programmiersprachenarchitektur, die für einen Softwarefehler relevant sein kann. Beispielhafte Punkte von Interesse beinhalten, sind jedoch nicht beschränkt auf Funktionsaufrufe usw. In dem Eingabecomputerprogramm 102 ist die Variable „self.res“ ein Punkt von Interesse.
  • Die beispielhafte Graphenschaltung 302A kann jegliches Format oder jegliche Prozedur zum Erzeugen von Graphen verwenden. In einigen Beispielen erzeugt die Graphenschaltung 302A einen Graphen als Aufrufgraphen. Ein Aufrufgraph ist ein Graph, der Beziehungen zwischen Subroutinen in einem Computerprogramm oder Codeschnipsel darstellt. In einigen Beispielen verwendet die beispielhafte Graphenschaltung 302A eine Context Aware Semantic Structure (CASS), um Graphen zu erzeugen.
  • Die beispielhafte Knotenklassifizierungsschaltung 304 von 3 greift auf einen Graphen zu, der durch die beispielhafte Graphenschaltung 302A erzeugt wird, und klassifiziert Knoten, die fehlerrelevant sind. Ein als fehlerrelevant klassifizierter Knoten enthält einen Softwarefehler, oder ist potenziell mit diesem in Zusammenhang. Die beispielhafte Knotenklassifizierungsschaltung 304 implementiert ein neuronales Netzwerk zum Klassifizieren von Knoten. Das neuronale Netzwerk kann jegliche Architektur haben. Beispielhafte neuronale Netzwerkarchitekturen beinhalten, sind jedoch nicht beschränkt auf Vorwärtskopplungsnetzwerke, Restnetzwerke, neuronale Faltungsnetzwerke, Generative Adversarial Networks usw. Vor dem Klassifizieren von Knoten, die den Eingabecode 201 darstellen, trainiert die beispielhafte Knotenklassifizierungsschaltung 304 das neuronale Netzwerk durch Verwenden von Codeschnipseln von dem Coderepositorium 206.
  • Die beispielhafte Knotenklassifizierungsschaltung 304 stellt ein Ergebnis bereit, das anzeigt, ob jegliche der Knoten als fehlerrelevant für die Datenbereitstellungsschaltung 316 klassifiziert wurden. Das Ergebnis kann als der Fehlerstatus 106A (1) des Eingabecodes 201 bezeichnet werden. Die beispielhafte Knotenklassifizierungsschaltung 304 stellt jegliche Knoten bereit, die als fehlerrelevant für die beispielhafte Ortidentifizierungsschaltung 306 klassifiziert werden. Die beispielhafte Knotenklassifizierungsschaltung 304 ist unten in Verbindung mit 4 detaillierter beschrieben.
  • Die beispielhafte Ortidentifizierungsschaltung 306 von 3 greift auf Knoten zu, die als fehlerrelevant klassifiziert wurden, und identifiziert einen Ort eines Softwarefehlers. Der Ort eines Softwarefehlers basiert auf den Codeschnipseln und Punkten von Interesse, die durch die klassifizierten Knoten dargestellt werden. Die beispielhafte Ortidentifizierungsschaltung 306 identifiziert den Ort basierend auf Abbildungsregeln. Eine Abbildungsregel ist ein Satz von Anweisungen oder ein Algorithmus, der einen Knoten akzeptiert, und identifiziert, welche Codezeilen in dem Eingabecode 201 durch Daten in dem Knoten dargestellt werden. Abbildungsregeln sind hilfreich, da die in einem Knoten gespeicherten Daten zum Darstellen von Codezeilen keine Zeilenzahl direkt anzeigen können. Zum Beispiel sei angenommen, dass ein erster beispielhafter Knoten eine beispielhafte Variable in einem beispielhaften Programm darstellt, und dass sich der erste beispielhafte Knoten an einem ersten Ort innerhalb des Graphen befindet. Darüber hinaus sei angenommen, dass der zweite beispielhafte Knoten dieselbe beispielhafte Variable, aber an einem zweiten, unterschiedlichen Ort innerhalb des Graphen darstellt. Die beispielhafte Ortidentifizierungsschaltung 306 kann eine Abbildungsregel verwenden, um einen Satz von Codezeilen in dem beispielhaften Programm zu bestimmen, der die beispielhafte Variable beinhaltet, und um ferner zu bestimmen, welche Codezeilen von dem Satz durch den ersten beispielhaften Knoten dargestellt werden, und welche Codezeilen von dem Satz durch den zweiten beispielhaften Knoten dargestellt werden. In einigen Beispielen können die Abbildungsregeln als Teil eines Programmiersprachenanalysierungswerkzeugs vordefiniert sein. Beispiele für Programmiersprachenanalysierungswerkzeuge beinhalten, sind jedoch nicht beschränkt auf ein Source Markup Language (srcML™) -Werkzeug und Clang™-Werkzeuge.
  • In einigen Beispielen klassifiziert die beispielhafte Knotenklassifizierungsschaltung 304 mehr als einen Knoten als relevant für einen Fehler. In einigen solchen Beispielen bestimmt die beispielhafte Ortidentifizierungsschaltung 306 den Ort des Softwarefehlers als eine Vereinigung von Codeorten. Eine Vereinigung von Codeorten bezieht sich auf die gesamte Sammlung eindeutiger Codezeilen an den mehr als einem Codeorten, die durch den mehr als einen Knoten identifiziert werden. Zum Beispiel sei angenommen, dass ein Codeort eines ersten beispielhaften Knotens die Zeilen 1, 3 und 5 eines beispielhaften Computerprogramms beinhaltet, und dass ein Codeort eines zweiten beispielhaften Knotens die Zeilen 4, 5 und 6 des beispielhaften Computerprogramms beinhaltet. In diesem Beispiel würde die Vereinigung von Codeorten die Zeilen 1, 3, 4, 5 und 6 des beispielhaften Computerprogramms sein. Der Ort des Softwarefehlers kann als der partielle Fehlerkontext bezeichnet werden, da er keinen ausreichenden Kontext bereitstellen kann, um die Ursache des Softwarefehlers zu bestimmen.
  • Die beispielhafte statische Analysatorschaltung 308 von 3 verwendet den Ort des Softwarefehlers und den Eingabecode 201, um einen statischen Fehlerkontext zu bestimmen. Ein statischer Fehlerkontext identifiziert die Abschnitte des Eingabecodes 201, die das Verhalten des an dem Ort des Softwarefehlers identifizierten Codes beeinflussen. Die beispielhafte statische Analysatorschaltung 308 extrahiert einen überschätzten Codekontext von dem Eingabecode 201, und zerschneidet den überschätzten Fehlerkontext, um den statischen Fehlerkontext zu bestimmen. Die beispielhafte statische Analysatorschaltung 308 stellt den statischen Fehlerkontext an die beispielhafte Kontextverfeinerungsschaltung 312 bereit. Programm-Slicing wird unten in Verbindung mit 6 detaillierter beschrieben.
  • Die beispielhafte dynamische Analysatorschaltung 310 von 3 verwendet den Ort des Softwarefehlers und den Eingabecode 201, um einen oder mehrere dynamische Fehlerkontexte zu bestimmen. Ein dynamischer Fehlerkontext ist ein Ausführungspfad entlang des Eingabecodes 201, der den partiellen Fehlerkontext beinhaltet. Die beispielhafte dynamische Analysatorschaltung 310 führt ein Programm aus, das den partiellen Fehlerkontext an einer Reihe unterschiedlicher Eingaben enthält, um die dynamischen Fehlerkontexte zu bestimmen. Die beispielhafte dynamische Analysatorschaltung 310 stellt den einen oder die mehreren dynamischen Fehlerkontexte an die beispielhafte Kontextverfeinerungsschaltung 312 bereit. Die beispielhafte dynamische Analysatorschaltung 310 wird unten in Verbindung mit den 5 und 8 detaillierter beschrieben.
  • Die beispielhafte Kontextverfeinerungsschaltung 312 von 3 führt den statischen Fehlerkontext und den dynamischen Fehlerkontext in einen verfeinerten Fehlerkontext zusammen. In einigen Beispielen kann die beispielhafte Kontextverfeinerungsschaltung 312 einen dynamischen Fehlerkontext von dem einen oder den mehreren dynamischen Fehlerkontexten, die die größte Überlappung mit dem statischen Fehlerkontext haben, identifizieren. Überlappung bezieht sich auf die Codezeilen, die sowohl durch den statischen Fehlerkontext als auch durch einen dynamischen Fehlerkontext identifiziert werden. Falls zum Beispiel der statische Fehlerkontext die Zeilen 2, 3 und 5 eines beispielhaften Computerprogramms identifiziert, und ein dynamischer Fehlerkontext die Zeilen 3, 4 und 5 des beispielhaften Computerprogramms identifiziert, würde die Überlappung zwischen den Kontexten die Zeilen 3 und 5 sein, was eine Größe von zwei Codezeilen ist. In einigen solchen Beispielen betrachtet die beispielhafte Kontextverfeinerungsschaltung 312 die Überlappung des identifizierten dynamischen Fehlerkontexts und des statischen Fehlerkontexts als den verfeinerten Fehlerkontext. In anderen Beispielen führt die beispielhafte Kontextverfeinerungsschaltung 312 von 3 den statischen Fehlerkontext und den dynamischen Fehlerkontext durch Verwenden anderer Techniken in einen verfeinerten Fehlerkontext zusammen. Die beispielhafte Kontextverfeinerungsschaltung 312 stellt den verfeinerten Fehlerkontext an die beispielhafte Graphenschaltung 302B bereit. Die beispielhafte Kontextverfeinerungsschaltung 312 wird unten in Verbindung mit den 6 und 9 detaillierter beschrieben.
  • Die beispielhafte Graphenschaltung 302B von 3 bildet einen Graphen der in dem verfeinerten Fehlerkontext identifizierten Abschnitte des Eingabecodes 201. Die Prozedur, die durch die beispielhafte Graphenschaltung 302B zum Erzeugen des Graphen des verfeinerten Fehlerkontexts verwendet wird, kann, muss jedoch nicht, mit der Prozedur übereinzustimmen, die durch die beispielhafte Graphenschaltung 302A verwendet wird, um einen Graphen des Eingabecodes 201 zu erzeugen. Während die beispielhafte Graphenschaltung 302B getrennt von der Graphenschaltung 302A in 4 veranschaulicht ist, kann die beispielhafte Fehlererkennungsschaltung 104 die beispielhafte Graphenschaltungen 302A und 302B zusammen als eine einzelne Komponente implementieren, oder kann sie als mehrere separate Komponenten implementieren. Die beispielhafte Graphenschaltung 302B stellt den Graphen des verfeinerten Fehlerkontexts an die beispielhafte Kontextverifizierungsschaltung 314 bereit.
  • Die beispielhafte Kontextverifizierungsschaltung 314 von 3 verifiziert, dass der verfeinerte Fehlerkontext einen Softwarefehler enthält. Die beispielhafte Kontextverifizierungsschaltung 314 kann durch Verwenden eines neuronalen Netzwerks implementiert werden, das trainiert ist, verfeinerte Fehlerkontexte zu analysieren, und zu bestätigen, dass Softwarefehler in den verfeinerten Fehlerkontexten vorhanden sind. In einigen Beispielen setzt die beispielhafte Kontextverifizierungsschaltung 314 eine neuronale Netzwerkarchitektur ein, die ein neuronales Graphennetzwerkmodell beinhaltet, das in einer Machine Inferred Code Similarity (MISIM) -Engine verwendet wird. In einigen solchen Beispielen kann die MISIM-Engine einen Binärklassifizierer implementieren, der durch Verwenden von festgelegtem Code von dem Coderepositorium 206 trainiert wird. In anderen Beispielen setzt die beispielhafte Kontextverifizierungsschaltung 314 eine andere neuronale Netzwerkarchitektur ein. Das Ergebnis der Bestimmung, ob der verfeinerte Fehlerkontext einen Softwarefehler enthält, kann den Fehlerstatus 106A bestätigen, der ursprünglich durch die beispielhafte Knotenklassifizierungsschaltung 304 bestimmt wurde, oder kann den Fehlerstatus 106A aktualisieren, um die Anzeige eines Softwarefehlers zu entfernen. Die beispielhafte Kontextverifizierungsschaltung 314 stellt den Fehlerstatus 106A und den verfeinerten Fehlerkontext an die Datenbereitstellungsschaltung 316 bereit.
  • Die Datenbereitstellungsschaltung 316 von 3 stellt beispielhafte Fehlerinformationen 106 (1) an den Benutzer 100 bereit (zum Beispiel über die Softwareschnittstellenschaltung 210 (2)). Die Inhalte der beispielhaften Fehlerinformationen 106 können davon abhängen, ob die beispielhafte Knotenklassifizierungsschaltung 304 irgendwelche fehlerrelevanten Knoten klassifiziert hat, und ob die beispielhafte Kontextverifizierungsschaltung 314 erfolgreich verifiziert hat, dass der verfeinerte Fehlerkontext einen Softwarefehler enthält. In einigen Beispielen kann die Datenbereitstellungsschaltung 316 zusätzlich den Referenzcode 202 an die Compilerschaltung 212 bereitstellen.
  • Die beispielhafte Fehlererkennungsschaltung 104 extrahiert statischen Fehlerkontext und einen oder mehrere dynamische Fehlerkontexte, um den durch die beispielhafte Ortidentifizierungsschaltung 306 bestimmten partiellen Fehlerkontext zu verbessern. Die beispielhafte statische Analysatorschaltung 308 kann jedoch Code enthalten, der für den Softwarefehler aufgrund der begrenzten Leistungsfähigkeit von Werkzeugen, die zum Extrahieren statischen Fehlerkontexts von dem überschätzten Fehlerkontext verwendet werden, irrelevant ist. Darüber hinaus kann, falls die Länge des Eingabecodes 201 keine ausreichende Anzahl von Codezeilen enthält, die beispielhafte dynamische Analysatorschaltung 310 einen oder mehrere dynamische Fehlerkontexte bestimmen, die unvollständig sind, oder falsch negative Ergebnisse enthalten. Die Anzahl von Codezeilen, die erforderlich sind, um auszureichen, kann sich basierend auf den Punkten von Interesse in dem Eingabecode 201 ändern. Um solche Ungenauigkeiten zu überwinden, bestimmt die beispielhafte Kontextverfeinerungsschaltung 312 einen verfeinerten Fehlerkontext durch Verwenden einer Zusammenführung des statischen Fehlerkontexts und eines dynamischen Fehlerkontextes. Der verfeinerte Fehlerkontext ist größer als der partielle Fehlerkontext, und schwächt auch die Einbeziehung von Code ab, der für den Softwarefehler irrelevant ist. Infolgedessen stellt die beispielhafte Fehlererkennungsschaltung 104 Fehlerkontexte bereit, die helfen können, die Ursache des Softwarefehlers genauer zu identifizieren, und den Softwarefehler in kürzerer Zeit zu korrigieren als vorherige Lösungen.
  • In einigen Beispielen beinhaltet die beispielhafte Fehlererkennungsschaltung 104 Mittel zum Zugreifen auf ein Computerprogramm. Zum Beispiel können die Mittel zum Zugreifen auf ein Computerprogramm durch die beispielhafte Schnittstellenschaltung 300 implementiert werden. In einigen Beispielen kann die beispielhafte Schnittstellenschaltung 300 durch eine Prozessorschaltung, wie zum Beispiel beispielhafte Prozessorschaltung 1212 von 12, instanziiert werden. Beispielsweise kann die beispielhafte Schnittstellenschaltung 300 durch beispielhafte Mehrzweckprozessorschaltung 1300 von 13 instanziiert werden, die maschinenausführbare Anweisungen, wie zum Beispiel jene, die durch mindestens den Block 802 von 8 implementiert werden, ausführt. In einigen Beispielen kann die beispielhafte Schnittstellenschaltung 300 durch eine Hardwarelogikschaltung instanziiert werden, die durch eine ASIC oder FPGA-Schaltung 1400 von 14 implementiert werden kann, die dazu strukturiert ist, Operationen auszuführen, die den maschinenlesbaren Anweisungen entsprechen. Zusätzlich oder alternativ kann die beispielhafte Schnittstellenschaltung 300 durch jegliche andere Kombination von Hardware, Software und/oder Firmware instanziiert werden. Zum Beispiel kann die beispielhafte Schnittstellenschaltung 300 durch mindestens eine oder mehrere Hardwareschaltungen (zum Beispiel eine Prozessorschaltung, eine spezielle und/oder integrierte analoge und/oder digitale Schaltung, ein FPGA, eine Application Specific Integrated Circuit (ASIC), einen Komparator, einen Operationsverstärker (Op-Amp), eine Logikschaltung usw.) implementiert werden, die dazu strukturiert sind, einige oder alle der maschinenlesbaren Anweisungen auszuführen, und/oder einige oder alle der Operationen auszuführen, die den maschinenlesbaren Anweisungen entsprechen, ohne Software oder Firmware auszuführen, jedoch sind andere Strukturen gleichermaßen geeignet.
  • In einigen Beispielen beinhaltet die beispielhafte Fehlererkennungsschaltung 104 Mittel zum Erzeugen eines Graphen. Zum Beispiel können die Mittel zum Erzeugen eines Graphen durch die beispielhafte Graphenschaltung 302A implementiert werden. In einigen Beispielen kann die beispielhafte Graphenschaltung 302A durch eine Prozessorschaltung, wie zum Beispiel die beispielhafte Prozessorschaltung 1212 von 12, instanziiert werden. Beispielsweise kann die beispielhafte Graphenschaltung 302A durch die beispielhafte Mehrzweckprozessorschaltung 1300 von 13 instanziiert werden, die maschinenausführbare Anweisungen, wie zum Beispiel jene, die durch mindestens den Block 804 von 8 implementiert werden, ausführt. In einigen Beispielen kann die beispielhafte Graphenschaltung 302A durch eine Hardwarelogikschaltung instanziiert werden, die durch eine ASIC oder die FPGA-Schaltung 1400 von 14 implementiert werden kann, die dazu strukturiert ist, Operationen auszuführen, die den maschinenlesbaren Anweisungen entsprechen. Zusätzlich oder alternativ kann die beispielhafte Graphenschaltung 302A durch jegliche andere Kombination von Hardware, Software und/oder Firmware instanziiert werden. Zum Beispiel kann die beispielhafte Graphenschaltung 302A durch mindestens eine oder mehrere Hardwareschaltungen (zum Beispiel eine Prozessorschaltung, eine spezielle und/oder integrierte analoge und/oder digitale Schaltung, ein FPGA, eine Application Specific Integrated Circuit (ASIC), einen Komparator, einen Operationsverstärker (Op-Amp), eine Logikschaltung usw.) implementiert werden, die dazu strukturiert sind, einige oder alle der maschinenlesbaren Anweisungen auszuführen, und/oder einige oder alle der Operationen auszuführen, die den maschinenlesbaren Anweisungen entsprechen, ohne Software oder Firmware auszuführen, jedoch sind andere Strukturen gleichermaßen geeignet.
  • In einigen Beispielen beinhaltet die beispielhafte Fehlererkennungsschaltung 104 Mittel zum Klassifizieren eines Knotens an einem Graphen. Zum Beispiel können die Mittel zum Klassifizieren eines Knotens durch die beispielhafte Knotenklassifizierungsschaltung 304 implementiert werden. In einigen Beispielen kann die beispielhafte Knotenklassifizierungsschaltung 304 durch eine Prozessorschaltung, wie zum Beispiel die beispielhafte Prozessorschaltung 1212 von 12, instanziiert werden. Beispielsweise kann die beispielhafte Knotenklassifizierungsschaltung 304 durch die beispielhafte Mehrzweckprozessorschaltung 1300 von 13 instanziiert werden, die maschinenausführbare Anweisungen, wie zum Beispiel jene, die durch mindestens die Blöcke 806, 808 und 810 von 8 implementiert werden, ausführt. In einigen Beispielen kann die beispielhafte Knotenklassifizierungsschaltung 304 durch eine Hardwarelogikschaltung instanziiert werden, die durch eine ASIC oder die FPGA-Schaltung 1400 von 14 implementiert werden kann, die dazu strukturiert ist, Operationen auszuführen, die den maschinenlesbaren Anweisungen entsprechen. Zusätzlich oder alternativ kann die beispielhafte Knotenklassifizierungsschaltung 304 durch jegliche andere Kombination von Hardware, Software und/oder Firmware instanziiert werden. Zum Beispiel kann die beispielhafte Knotenklassifizierungsschaltung 304 durch mindestens eine oder mehrere Hardwareschaltungen (zum Beispiel eine Prozessorschaltung, eine spezielle und/oder integrierte analoge und/oder digitale Schaltung, ein FPGA, eine Application Specific Integrated Circuit (ASIC), einen Komparator, einen Operationsverstärker (Op-Amp), eine Logikschaltung usw.) implementiert werden, die dazu strukturiert sind, einige oder alle der maschinenlesbaren Anweisungen auszuführen, und/oder einige oder alle der Operationen auszuführen, die den maschinenlesbaren Anweisungen entsprechen, ohne Software oder Firmware auszuführen, jedoch sind andere Strukturen gleichermaßen geeignet.
  • In einigen Beispielen beinhaltet die beispielhafte Fehlererkennungsschaltung 104 Mittel zum Identifizieren eines Orts eines Softwarefehlers. Zum Beispiel können die Mittel zum Identifizieren eines Orts eines Softwarefehlers durch die beispielhafte Ortidentifizierungsschaltung 306 implementiert werden. In einigen Beispielen kann die beispielhafte Ortidentifizierungsschaltung 306 durch eine Prozessorschaltung, wie zum Beispiel die beispielhafte Prozessorschaltung 1212 von 12, instanziiert werden. Beispielsweise kann die beispielhafte Ortidentifizierungsschaltung 306 durch die beispielhafte Mehrzweckprozessorschaltung 1300 von 13 instanziiert werden, die maschinenausführbare Anweisungen, wie zum Beispiel jene, die durch mindestens den Block 812 von 8 implementiert werden, ausführt. In einigen Beispielen kann die beispielhafte Ortidentifizierungsschaltung 306 durch eine Hardwarelogikschaltung instanziiert werden, die durch eine ASIC oder die FPGA-Schaltung 1400 von 14 implementiert werden kann, die dazu strukturiert ist, Operationen auszuführen, die den maschinenlesbaren Anweisungen entsprechen. Zusätzlich oder alternativ kann die beispielhafte Ortidentifizierungsschaltung 306 durch jegliche andere Kombination von Hardware, Software und/oder Firmware instanziiert werden. Zum Beispiel kann die beispielhafte Ortidentifizierungsschaltung 306 durch mindestens eine oder mehrere Hardwareschaltungen (zum Beispiel eine Prozessorschaltung, eine spezielle und/oder integrierte analoge und/oder digitale Schaltung, ein FPGA, eine Application Specific Integrated Circuit (ASIC), einen Komparator, einen Operationsverstärker (Op-Amp), eine Logikschaltung usw.) implementiert werden, die dazu strukturiert sind, einige oder alle der maschinenlesbaren Anweisungen auszuführen, und/oder einige oder alle der Operationen auszuführen, die den maschinenlesbaren Anweisungen entsprechen, ohne Software oder Firmware auszuführen, jedoch sind andere Strukturen gleichermaßen geeignet.
  • In einigen Beispielen beinhaltet die beispielhafte Fehlererkennungsschaltung 104 Mittel zum Erkennen eines statischen Fehlerkontexts. Zum Beispiel können die Mittel zum Erkennen eines statischen Fehlerkontexts durch die beispielhafte statische Analysatorschaltung 308 implementiert werden. In einigen Beispielen kann die beispielhafte statische Analysatorschaltung 308 durch eine Prozessorschaltung, wie zum Beispiel die beispielhafte Prozessorschaltung 1212 von 12, instanziiert werden. Beispielsweise kann die beispielhafte statische Analysatorschaltung 308 durch die beispielhafte Mehrzweckprozessorschaltung 1300 von 13 instanziiert werden, die maschinenausführbare Anweisungen, wie zum Beispiel jene, die durch mindestens die Blöcke 816, 900, 902 der 7, 8 implementiert werden, ausführt. In einigen Beispielen kann die beispielhafte statische Analysatorschaltung 308 durch eine Hardwarelogikschaltung instanziiert werden, die durch eine ASIC oder die FPGA-Schaltung 1400 von 14 implementiert werden kann, die dazu strukturiert ist, Operationen auszuführen, die den maschinenlesbaren Anweisungen entsprechen. Zusätzlich oder alternativ kann die beispielhafte statische Analysatorschaltung 308 durch jegliche andere Kombination von Hardware, Software und/oder Firmware instanziiert werden. Zum Beispiel kann die beispielhafte statische Analysatorschaltung 308 durch mindestens eine oder mehrere Hardwareschaltungen (zum Beispiel eine Prozessorschaltung, eine spezielle und/oder integrierte analoge und/oder digitale Schaltung, ein FPGA, eine Application Specific Integrated Circuit (ASIC), einen Komparator, einen Operationsverstärker (Op-Amp), eine Logikschaltung usw.) implementiert werden, die dazu strukturiert sind, einige oder alle der maschinenlesbaren Anweisungen auszuführen, und/oder einige oder alle der Operationen auszuführen, die den maschinenlesbaren Anweisungen entsprechen, ohne Software oder Firmware auszuführen, jedoch sind andere Strukturen gleichermaßen geeignet.
  • In einigen Beispielen beinhaltet die beispielhafte Fehlererkennungsschaltung 104 Mittel zum Erkennen eines dynamischen Fehlerkontexts. Zum Beispiel können die Mittel zum Erkennen eines dynamischen Fehlerkontexts durch die beispielhafte dynamische Analysatorschaltung 310 implementiert werden. In einigen Beispielen kann die beispielhafte dynamische Analysatorschaltung 310 durch eine Prozessorschaltung, wie zum Beispiel die beispielhafte Prozessorschaltung 1212 von 12, instanziiert werden. Beispielsweise kann die beispielhafte dynamische Analysatorschaltung 310 durch die beispielhafte Mehrzweckprozessorschaltung 1300 von 13 instanziiert werden, die maschinenausführbare Anweisungen, wie zum Beispiel jene, die durch mindestens die Blöcke 816, 904, 906 der 7, 8 implementiert werden, ausführt. In einigen Beispielen kann die beispielhafte dynamische Analysatorschaltung 310 durch eine Hardwarelogikschaltung instanziiert werden, die durch eine ASIC oder die FPGA-Schaltung 1400 von 14 implementiert werden kann, die dazu strukturiert ist, Operationen auszuführen, die den maschinenlesbaren Anweisungen entsprechen. Zusätzlich oder alternativ kann die beispielhafte dynamische Analysatorschaltung 310 durch jegliche andere Kombination von Hardware, Software und/oder Firmware instanziiert werden. Zum Beispiel kann die beispielhafte dynamische Analysatorschaltung 310 durch mindestens eine oder mehrere Hardwareschaltungen (zum Beispiel eine Prozessorschaltung, eine spezielle und/oder integrierte analoge und/oder digitale Schaltung, ein FPGA, eine Application Specific Integrated Circuit (ASIC), einen Komparator, einen Operationsverstärker (Op-Amp), eine Logikschaltung usw.) implementiert werden, die dazu strukturiert sind, einige oder alle der maschinenlesbaren Anweisungen auszuführen, und/oder einige oder alle der Operationen auszuführen, die den maschinenlesbaren Anweisungen entsprechen, ohne Software oder Firmware auszuführen, jedoch sind andere Strukturen gleichermaßen geeignet.
  • In einigen Beispielen beinhaltet die beispielhafte Fehlererkennungsschaltung 104 Mittel zum Erkennen eines verfeinerten Fehlerkontexts. Zum Beispiel können die Mittel zum Erkennen eines verfeinerten Fehlerkontexts durch die beispielhafte Kontextverfeinerungsschaltung 312 implementiert werden. In einigen Beispielen kann die beispielhafte Kontextverfeinerungsschaltung 312 durch eine Prozessorschaltung, wie zum Beispiel die beispielhafte Prozessorschaltung 1212 von 12, instanziiert werden. Beispielsweise kann die beispielhafte Kontextverfeinerungsschaltung 312 durch die beispielhafte Mehrzweckprozessorschaltung 1300 von 13 instanziiert werden, die maschinenausführbare Anweisungen, wie zum Beispiel jene, die durch mindestens den Block 820 von 8 implementiert werden, ausführt. In einigen Beispielen kann die beispielhafte Kontextverfeinerungsschaltung 312 durch eine Hardwarelogikschaltung instanziiert werden, die durch eine ASIC oder die FPGA-Schaltung 1400 von 14 implementiert werden kann, die dazu strukturiert ist, Operationen auszuführen, die den maschinenlesbaren Anweisungen entsprechen. Zusätzlich oder alternativ kann die beispielhafte Kontextverfeinerungsschaltung 312 durch jegliche andere Kombination von Hardware, Software und/oder Firmware instanziiert werden. Zum Beispiel kann die beispielhafte Kontextverfeinerungsschaltung 312 durch mindestens eine oder mehrere Hardwareschaltungen (zum Beispiel eine Prozessorschaltung, eine spezielle und/oder integrierte analoge und/oder digitale Schaltung, ein FPGA, eine Application Specific Integrated Circuit (ASIC), einen Komparator, einen Operationsverstärker (Op-Amp), eine Logikschaltung usw.) implementiert werden, die dazu strukturiert sind, einige oder alle der maschinenlesbaren Anweisungen auszuführen, und/oder einige oder alle der Operationen auszuführen, die den maschinenlesbaren Anweisungen entsprechen, ohne Software oder Firmware auszuführen, jedoch sind andere Strukturen gleichermaßen geeignet.
  • In einigen Beispielen beinhaltet die beispielhafte Fehlererkennungsschaltung 104 Mittel zum Verifizieren eines verfeinerten Fehlerkontexts. Zum Beispiel können die Mittel zum Verifizieren eines verfeinerten Fehlerkontexts durch die beispielhafte Kontextverifizierungsschaltung 314 implementiert werden. In einigen Beispielen kann die beispielhafte Kontextverifizierungsschaltung 314 durch eine Prozessorschaltung, wie zum Beispiel die beispielhafte Prozessorschaltung 1212 von 12, instanziiert werden. Beispielsweise kann die beispielhafte Kontextverifizierungsschaltung 314 durch die beispielhafte Mehrzweckprozessorschaltung 1300 von 13 instanziiert werden, die maschinenausführbare Anweisungen, wie zum Beispiel jene, die durch mindestens den Block 822 von 8 implementiert werden, ausführt. In einigen Beispielen kann die beispielhafte Kontextverifizierungsschaltung 314 durch eine Hardwarelogikschaltung instanziiert werden, die durch eine ASIC oder die FPGA-Schaltung 1400 von 14 implementiert werden kann, die dazu strukturiert ist, Operationen auszuführen, die den maschinenlesbaren Anweisungen entsprechen. Zusätzlich oder alternativ kann die beispielhafte Kontextverifizierungsschaltung 314 durch jegliche andere Kombination von Hardware, Software und/oder Firmware instanziiert werden. Zum Beispiel kann die beispielhafte Kontextverifizierungsschaltung 314 durch mindestens eine oder mehrere Hardwareschaltungen (zum Beispiel eine Prozessorschaltung, eine spezielle und/oder integrierte analoge und/oder digitale Schaltung, ein FPGA, eine Application Specific Integrated Circuit (ASIC), einen Komparator, einen Operationsverstärker (Op-Amp), eine Logikschaltung usw.) implementiert werden, die dazu strukturiert sind, einige oder alle der maschinenlesbaren Anweisungen auszuführen, und/oder einige oder alle der Operationen auszuführen, die den maschinenlesbaren Anweisungen entsprechen, ohne Software oder Firmware auszuführen, jedoch sind andere Strukturen gleichermaßen geeignet.
  • In einigen Beispielen beinhaltet die beispielhafte Datenbereitstellungsschaltung Mittel zum Bereitstellen von Fehlerinformationen. Zum Beispiel können die Mittel zum Bereitstellen von Fehlerinformationen durch die Datenbereitstellungsschaltung 316 implementiert werden. In einigen Beispielen kann die Datenbereitstellungsschaltung 316 durch eine Prozessorschaltung, wie zum Beispiel beispielhafte Prozessorschaltung 1212 von 12, instanziiert werden. Beispielsweise kann die Datenbereitstellungsschaltung 316 durch die beispielhafte Mehrzweckprozessorschaltung 1300 von 13 instanziiert werden, die maschinenausführbare Anweisungen, wie zum Beispiel jene, die durch mindestens Block 824 von 8 implementiert werden, ausführt. In einigen Beispielen kann die Datenbereitstellungsschaltung 316 durch eine Hardwarelogikschaltung instanziiert werden, die durch eine ASIC oder die FPGA-Schaltung 1400 von 14 implementiert werden kann, die dazu strukturiert ist, Operationen auszuführen, die den maschinenlesbaren Anweisungen entsprechen. Zusätzlich oder alternativ kann die Datenbereitstellungsschaltung 316 durch jegliche andere Kombination von Hardware, Software und/oder Firmware instanziiert werden. Zum Beispiel kann die Datenbereitstellungsschaltung 316 durch mindestens eine oder mehrere Hardwareschaltungen (zum Beispiel eine Prozessorschaltung, eine spezielle und/oder integrierte analoge und/oder digitale Schaltung, ein FPGA, eine Application Specific Integrated Circuit (ASIC), einen Komparator, einen Operationsverstärker (Op-Amp), eine Logikschaltung usw.) implementiert werden, die dazu strukturiert sind, einige oder alle der maschinenlesbaren Anweisungen auszuführen, und/oder einige oder alle der Operationen auszuführen, die den maschinenlesbaren Anweisungen entsprechen, ohne Software oder Firmware auszuführen, jedoch sind andere Strukturen gleichermaßen geeignet.
  • 4 ist ein veranschaulichendes Beispiel von grafischen Darstellungen von Code, das zeigt, wie die beispielhafte Knotenklassifizierungsschaltung 304 von 3 ein Modell trainiert, um Knoten mit einem partiellen Fehlerkontext zu erkennen. 4 beinhaltet Codeschnipsel vor der Festlegung 402, Graph vor der Festlegung 404, Schnipsel nach der Festlegung 406, Graph nach der Festlegung 408, fehlerrelevante Knoten 410 und Datenpunkt 412.
  • Die beispielhafte Knotenklassifizierungsschaltung 304 verwendet Versionssteuerungsmetadaten von dem Coderepositorium 206. Versionssteuerungsmetadaten sind Informationen, die historische Änderungen an Dateien innerhalb des Coderepositoriums 206 darstellen und/oder beschreiben. In einem Versionssteuerungssystem können die Änderungen, die an einer Datei über die Zeit und über Benutzer mit Zugriff auf die Datei vorgenommen wurden, durch Verwenden von Festlegungen verfolgt werden. Eine Festlegung stellt einen Zeitpunkt dar, zu dem ein Benutzer Code in der Datei geändert und die Änderungen in dem Coderepositorium 206 gespeichert hat. Anstatt die Änderungen in der Festlegung zu verwenden, um die alten Inhalte der Datei zu überschreiben, verwendet das Coderepositorium 206 eine Versionssteuerung, um eine erste Kopie der Datei zu speichern, die die Änderungen nicht beinhaltet, was als die Datei vor der Festlegung (zum Beispiel eine Vorfestlegungsdatei) bezeichnet werden kann, und eine Kopie der Datei, die die Änderungen beinhaltet, was als die Datei nach der Festlegung (zum Beispiel eine Nachfestlegungsdatei) bezeichnet werden kann. Zusätzlich kann das beispielhafte Coderepositorium 206 Versionssteuerungsmetadaten in Verbindung mit der geänderten Datei speichern, um die in der Datei vorgenommenen Änderungen zu beschreiben.
  • Benutzer können eine Festlegung aus jeglichem Grund vornehmen. In vielen Beispielen kann ein Benutzer Festlegungen zum Korrigieren eines Softwarefehlers vornehmen. Das Versionssteuerungssystem in dem beispielhaften Coderepositorium 206 beinhaltet auch Techniken für Benutzer, um anzuzeigen, dass eine Festlegung vorgenommen wurde, um einen Softwarefehler zu korrigieren. Beispielhafte Techniken beinhalten, sind jedoch nicht beschränkt auf Setzen einer Flagvariablen oder Einschließen von Schlüsselwörtern in einer Kettenbeschreibung der Festlegung. Beispielhafte Schlüsselwörter beinhalten, sind jedoch nicht beschränkt auf „Bug“, „Fehler“, „Reparatur“ und „Korrektur“. Informationen, die anzeigen, dass eine Festlegung vorgenommen wurde, um einen Softwarefehler zu korrigieren, können in den Versionssteuerungsmetadaten gespeichert werden.
  • Das Codeschnipsel vor der Festlegung 402 von 4 ist Teil oder Gesamtheit einer Datei in dem Coderepositorium 206 vor einer Festlegung, die einen Softwarefehler korrigiert. Umgekehrt ist das Codeschnipsel nach der Festlegung 406 von 4 Teil oder Gesamtheit derselben Datei wie das Codeschnipsel vor der Festlegung 402 nach der Festlegung, die den Softwarefehler korrigiert. Um das Modell zu trainieren, das zum Klassifizieren unbekannter Knoten als fehlerrelevant verwendet wird, identifiziert die beispielhafte Knotenklassifizierungsschaltung 304 das Codeschnipsel vor der Festlegung 402 und das Codeschnipsel nach der Festlegung 406 von dem Coderepositorium 206.
  • Die beispielhafte Knotenklassifizierungsschaltung 304 kann das Codeschnipsel vor der Festlegung 402 und das Codeschnipsel nach der Festlegung 406 durch Verwenden von Versionssteuerungsmetadaten identifizieren, die anzeigen, dass eine Festlegung vorgenommen wurde, um einen Softwarefehler zu korrigieren. Nach dem Verwenden der Versionssteuerungsmetadaten, um zu bestimmen, dass eine beispielhafte Festlegung zum Korrigieren eines Softwarefehlers vorgenommen wurde, kann die beispielhafte Knotenklassifizierungsschaltung 304 eine Datei identifizieren, die mit der beispielhaften Festlegung assoziiert ist, eine neueste Version der Datei, die in dem Coderepositorium 206 gespeichert wurde, bevor die beispielhafte Festlegung ausgeführt wurde, identifizieren, und eine neue Version der Datei, die in dem Coderepositorium 206 gespeichert wurde, als die beispielhafte Festlegung vorgenommen wurde, identifizieren. Die beispielhafte Knotenklassifizierungsschaltung 304 kann einen Teil oder die gesamte kürzliche Version der Datei identifizieren, die in dem Coderepositorium 206 gespeichert wurde, bevor die beispielhafte Festlegung das Codeschnipsel vor der Festlegung 402 sein soll. In ähnlicher Weise kann die beispielhafte Knotenklassifizierungsschaltung 304 das Codeschnipsel nach der Festlegung 406 als Teil oder Gesamtheit der neuen Version der Datei identifizieren, die aufgrund der beispielhaften Festlegung in dem Coderepositorium 206 gespeichert wurde. Während der Einfachheit halber eine einzelne Instanz des Codeschnipsels vor der Festlegung 402 in 4 veranschaulicht ist, identifiziert die beispielhafte Knotenklassifizierungsschaltung 304 ein Codeschnipsel vor der Festlegung 402 für jeden erzeugten Datenpunkt 412. Die beispielhafte Knotenklassifizierungsschaltung 304 kann jegliche Anzahl von Datenpunkten 412 identifizieren.
  • Die beispielhafte Knotenklassifizierungsschaltung 304 stellt das Codeschnipsel vor der Festlegung 402 und das Codeschnipsel nach der Festlegung 406 an die beispielhafte Graphenschaltung 302A (3) bereit. Die beispielhafte Graphenschaltung 302A verwendet das Codeschnipsel vor der Festlegung 402, um den Graph vor der Festlegung 404 herzustellen, und das Codeschnipsel nach der Festlegung 406, um den Graph nach der Festlegung 408 herzustellen. Die beispielhafte Graphenschaltung 302A stellt den Graph vor der Festlegung 404 und den Graph nach der Festlegung 408 an die beispielhafte Knotenklassifizierungsschaltung 304 bereit.
  • Die beispielhafte Knotenklassifizierungsschaltung 304 vergleicht den Graph vor der Festlegung 404 mit dem Graph nach der Festlegung 408, um fehlerrelevante Knoten 410 zu identifizieren. Ein fehlerrelevanter Knoten ist ein Knoten, der sich zwischen dem Graph vor der Festlegung 404 und dem Graph nach der Festlegung 408 geändert hat. Da der Graph vor der Festlegung 404 eine Datei darstellt, die einen Softwarefehler beinhaltet, und der Graph nach der Festlegung 408 dieselbe Datei nach der Korrektur des Softwarefehlers darstellt, kann jeglicher Knoten, der sich zwischen den Graphen geändert hat (zum Beispiel ein fehlerrelevanter Knoten), Codezeilen innerhalb der Datei darstellen, die hinzugefügt, entfernt oder allgemein bearbeitet wurden, um einen Softwarefehler zu korrigieren. Zum Beispiel sind in dem veranschaulichenden Beispiel von 4 die fehlerrelevanten Knoten 410 als ‚F‘ und `G` gekennzeichnet, da die Knoten in dem Graph vor der Festlegung 404 enthalten waren, aber nicht in dem Graph nach der Festlegung 408 enthalten waren, und daher Codezeilen darstellen, die möglicherweise entfernt wurden, um einen Softwarefehler zu korrigieren. Darüber hinaus kann ein Knoten, der nicht in dem ersten Graph enthalten war, aber in dem Graph nach der Festlegung 408 enthalten war, als ein fehlerrelevanter Knoten angesehen werden, da er Codezeilen darstellt, die hinzugefügt worden sein können, um einen Softwarefehler zu korrigieren.
  • Die beispielhafte Knotenklassifizierungsschaltung 304 betrachtet den Graph vor der Festlegung 404 und die fehlerrelevanten Knoten 410 als einen gemeinsam Datenpunkt 412. Mehrere Instanzen von Datenpunkten 412 können durch die beispielhafte Knotenklassifizierungsschaltung 304 erzeugt werden, um Trainingsdaten zu erzeugen. Die beispielhafte Knotenklassifizierungsschaltung 304 verwendet die Trainingsdaten in einem neuronalen Netzwerk, um ein Modell zu erzeugen, das den Eingabecode 201, der in den Trainingsdaten durch den Graph vor der Festlegung 404 dargestellt wird, akzeptiert, um fehlerrelevante Knoten 410 zu identifizieren.
  • Die beispielhafte Knotenklassifizierungsschaltung 304 verwendet die Trainingsdaten, um ein neuronales Netzwerk zu trainieren. Das neuronale Netzwerk kann jegliche Architektur haben. In einigen Beispielen ist das neuronale Netzwerk eine Sequenz zum Sequenzieren eines neuronalen Netzwerks. In einigen solchen Beispielen implementiert die beispielhafte Knotenklassifizierungsschaltung 304, nachdem das Training des neuronalen Netzwerks abgeschlossen ist, die Sequenz zum Sequenzieren eines neuronalen Netzwerks, um eine Sequenz von Knoten von einem Graphen, der den Eingabecode 201 darstellt, zu nehmen. Die Sequenz von Knoten kann durch jegliche Graphentraversierungstechnik erhalten werden. Beispiele für Graphentraversierungstechniken beinhalten, sind jedoch nicht beschränkt auf tiefe erste Traversierung, breite erste Traversierung usw. Die Sequenz von Knoten wird als eine Eingabe in das neuronale Netzwerk verwendet, was eine Sequenz von Werten zwischen 0 und 1 erzeugt. In einigen solchen Beispielen stellt eine gegebene Zahl in der Sequenz eine Wahrscheinlichkeit dar, dass der entsprechende Knoten einen Softwarefehler enthält, oder für diesen relevant ist. In einigen solchen Beispielen wird die Sequenz von Werten mit einem Schwellenwert verglichen, um zu bestimmen, welche Knoten fehlerrelevant sind. Die beispielhafte Knotenklassifizierungsschaltung 304 ist unten in Verbindung mit 8 detaillierter beschrieben.
  • 5 ist ein veranschaulichendes Beispiel von grafischen Darstellungen von Code, das zeigt, wie die beispielhafte Kontextverifizierungsschaltung 314 von 3 verifiziert, dass ein verfeinerter Fehlerkontext einen Softwarefehler enthält. 5 beinhaltet beispielhaften verfeinerten Fehlerkontext 502, beispielhaften Graphen 504, beispielhaften Binärklassifizierer 506 und beispielhafte Ausgabe 508.
  • Der beispielhafte verfeinerte Fehlerkontext 502 von 5 wird durch die beispielhafte Kontextverfeinerungsschaltung 312 (3) erzeugt. In einigen Beispielen enthält der verfeinerte Fehlerkontext 502 einen Softwarefehler. Jedoch können die Werkzeuge, die zum Erzeugen des verfeinerten Fehlerkontextes 502 verwendet werden, falsch positive Ergebnisse für einige Eingaben erzeugen. Daher enthält in anderen Beispielen der verfeinerte Fehlerkontext 502 keinen Softwarefehler.
  • Die beispielhafte Kontextverfeinerungsschaltung 312 stellt den verfeinerten Fehlerkontext 502 an die beispielhafte Graphenschaltung 302B bereit, um den Graph 504 zu erzeugen. Der beispielhafte Graph 504 stellt die Abschnitte des Eingabecodes 201 dar, die in dem verfeinerten Fehlerkontext 502 enthalten sind.
  • Die beispielhafte Kontextverifizierungsschaltung 314 verwendet den Graph 504 als Eingabe in einen Binärklassifizierer 506. Der beispielhafte Binärklassifizierer 506 analysiert den Graph 504, um die Ausgabe 508 zu erzeugen. Die beispielhafte Ausgabe 508 ist ein Binärwert, der beschreibt, ob der verfeinerte Fehlerkontext 502 einen Softwarefehler enthält. Die Ausgabe 508 kann irgendein oder mehrere Binärwerte sein, die den Fehlerstatus des verfeinerten Fehlerkontextes 502 beschreiben. Beispielhafte Binärwerte können Ja und Nein, Wahr und Falsch usw. sein
  • Bevor die beispielhafte Fehlererkennungsschaltung 104 ( 1-3) den Eingabecode 201 akzeptiert, trainiert die beispielhafte Kontextverifizierungsschaltung 314 ein neuronales Netzwerk, um den Binärklassifizierer 506 zu implementieren. Ähnlich der beispielhaften Knotenklassifizierungsschaltung 304 kann die beispielhafte Kontextverifizierungsschaltung 314 Versionssteuerungssysteme in dem Coderepositorium 206 wie oben beschrieben verwenden, um das neuronale Netzwerk zu trainieren, das zum Implementieren des Binärklassifizierers verwendet wird.
  • Das neuronale Netzwerk, das zum Implementieren des beispielhaften Binärklassifizierers 506 verwendet wird, kann jegliche Architektur haben. In einigen Beispielen beinhaltet die neuronale Netzwerkarchitektur ein neuronales Graphennetzwerk, das in einer MISIM-Engine verwendet wird. Wenn der beispielhafte Binärklassifizierer 506 ausgeführt wird, kann das neuronale Graphennetzwerk den Graph 504 akzeptieren, um eine realwertige Vektordarstellung des Graphen 504 zu erzeugen. Die realwertige Vektordarstellung kann durch ein einzelnes Neuron, das eine Sigmoid-Aktivierungsfunktion verwendet, verwendet werden, um die Ausgabe 508 zu erzeugen. In einigen Beispielen bildet die Sigmoid-Aktivierungsfunktion die realwertige Vektordarstellung auf einen Skalarwert zwischen 0 und 1 ab. In einigen solchen Beispielen wird der Skalarwert mit einem Schwellenwert verglichen, um die Ausgabe 508 zu erzeugen.
  • 6 ist ein veranschaulichendes Beispiel eines statischen Fehlerkontexts und von dynamischen Fehlerkontexten in Codeschnipseln. 6 beinhaltet das Eingabecomputerprogramm 102, beispielhaften statischen Fehlerkontext 600, beispielhaften ersten dynamischen Fehlerkontext 602 und beispielhaften zweiten dynamischen Fehlerkontext 604.
  • Der beispielhafte statische Fehlerkontext 600 stellt die Abschnitte des Eingabecomputerprogramms 102 dar, die das Verhalten des Codes, der als der Ort des Softwarefehlers identifiziert wird, beeinflussen. Die beispielhafte statische Analysatorschaltung 308 bestimmt den statischen Fehlerkontext, indem sie zuerst einen überschätzten Fehlerkontext bestimmt. Ein überschätzter Fehlerkontext bezieht sich auf den gesamten Code innerhalb jeglicher der Funktionen, die Code an dem Ort des Softwarefehlers beeinflussen. Zum Beispiel kann der fehlerrelevante Knoten des Eingabecomputerprogramms 102 die Variable „self.res“ als einen Punkt von Interesse identifizieren. Da self.res sowohl in der Initialisierungsfunktion als auch in der Summenfunktion referenziert wird, kann der überschätzte Fehlerkontext des Eingabecomputerprogramms 102 die Zeilen 3-5 und die Zeilen 7-10 sein. In einigen Beispielen kann die beispielhafte statische Analysatorschaltung 308 (3) den überschätzten Fehlerkontext durch Verwenden von Werkzeugen, wie zum Beispiel des statischen Clang™- Analyseprogramms oder des statischen CppDepend™-Analyseprogramms, identifizieren.
  • Die beispielhafte statische Analysatorschaltung 308 zerschneidet den überschätzten Fehlerkontext, um einen statischen Fehlerkontext zu bestimmen. Der überschätzte Fehlerkontext wird zerschnitten, um Abschnitte von Code zu entfernen, die einen Punkt von Interesse innerhalb des partiellen Fehlerkontexts nicht beeinflussen. In einigen Beispielen kann die beispielhafte statische Analysatorschaltung 308 jegliche geeigneten Programm-Slicing-Werkzeuge verwenden, um den überschätzten Fehlerkontext zu zerschneiden. In anderen Beispielen kann die beispielhafte statische Analysatorschaltung 308 andere Werkzeuge verwenden, um den überschätzten Fehlerkontext zu zerschneiden.
  • In Beispielen, in denen die Zeilen 3-5 und die Zeilen 7-10 als der überschätzte Fehlerkontext des Eingabecomputerprogramms 102 identifiziert werden, kann die beispielhafte statische Analysatorschaltung 308 ferner die Zeilen 3,4, 6 und 7 von dem überschätzten Fehlerkontext zerschneiden, da sie die Variable „self.res“ nicht direkt beeinflussen. Daher ist der statische Fehlerkontext 600 des Eingabecomputerprogramms 102 in 6 als die Zeilen 3, 8, 9 und 10 veranschaulicht. In anderen Beispielen kann der statische Fehlerkontext eine unterschiedliche Anzahl von Zeilen an unterschiedlichen Orten in dem Eingabecomputerprogramm 102 sein.
  • Ein dynamischer Fehlerkontext stellt die Abschnitte des Eingabecomputerprogramms 102 dar, die unter einer einzelnen Testbedingung ausgeführt werden. Eine Testbedingung bezieht sich auf den Satz von variablen Zuständen und Eingaben, die, wenn innerhalb eines Programms implementiert, bewirken, dass das Programm auf einem spezifizierten Ausführungspfad ausgeführt wird. Die beispielhafte dynamische Analysatorschaltung 310 erzeugt eine oder mehrere Testbedingungen, mit dem Ziel, alle möglichen Ausführungspfade aufzuzeichnen, die den Ort des Softwarefehlers in dynamische Fehlerkontexte aufnehmen. In einigen Beispielen kann die beispielhafte dynamische Analysatorschaltung 310 automatische Testfallerzeugungswerkzeuge, wie zum Beispiel Fuzz Driver Generation at Scale (FUDGE) implementieren, um die eine oder die mehreren Testbedingungen zu erzeugen. Die beispielhafte dynamische Analysatorschaltung 310 verwendet jede der einen oder der mehreren Testbedingungen als Eingaben in das Eingabecomputerprogramm 102. Die beispielhafte dynamische Analysatorschaltung 310 zeichnet den Ausführungspfad auf, wenn das Eingabecomputerprogramm 102 mit einer gegebenen Testbedingung ausgeführt wird. Ein Ausführungspfad bezieht sich auf eine Sequenz von Codezeilen innerhalb eines Programms, die durch eine Prozessorschaltung ausgeführt wurden, als das Programm ausgeführt wurde. Die Codezeilen, die aufgezeichnet werden, um den Ausführungspfad zu bilden, können als ein dynamischer Fehlerkontext betrachtet werden.
  • Ein Beispiel für die beispielhafte dynamische Analysatorschaltung 310 ist in 6 veranschaulicht. Der beispielhafte erste dynamische Fehlerkontext 602 verwendet einen ersten Satz von Testbedingungen als eine Eingabe. Der erste Satz von Testbedingungen wird so eingestellt, dass die Variablen „item“ und „number -list“ den Ausführungsablauf dazu veranlassen, in die For-Schleife der Zeilen 8 und 9 einzutreten. Infolgedessen wird jede Zeile des Eingabecomputerprogramms 102 mit dem ersten Satz von Testbedingungen ausgeführt, und der erste dynamische Fehlerkontext 602 beinhaltet die Zeilen 1-10. Der zweite dynamische Fehlerkontext 604 verwendet einen zweiten Satz von Testbedingungen als eine Eingabe. Im Gegensatz zu dem ersten Satz von Testbedingungen wird der zweite Satz von Testbedingungen so eingestellt, dass die Variablen „item“ und „number -list“ den Ausführungsablauf dazu veranlassen, nicht in die For-Schleife der Zeilen 8 und 9 einzutreten. Infolgedessen werden die Zeilen 8 und 9 nicht in dem Eingabecomputerprogramm 102 ausgeführt, wenn sie mit dem zweiten Satz von Testbedingungen ausgeführt werden, und der zweite dynamische Fehlerkontext 604 beinhaltet die Zeilen 1-7 und 10.
  • 7 ist ein veranschaulichendes Beispiel eines verfeinerten Fehlerkontexts eines Codeschnipsels. 7 beinhaltet das Eingabecomputerprogramm 102 und einen verfeinerten Fehlerkontext 502.
  • Die beispielhafte Kontextverfeinerungsschaltung 312 (3) greift auf den statischen Fehlerkontext von der beispielhaften statischen Analysatorschaltung 308 (3) und den einen oder die mehreren dynamischen Fehlerkontexte von dem dynamischen Fehlerkontext von der beispielhaften dynamischen Analysatorschaltung 310 (3) zu. Die beispielhafte Kontextverfeinerungsschaltung 312 führt den statischen Fehlerkontext und den dynamischen Fehlerkontext zusammen, um einen verfeinerten Fehlerkontext durch jegliche Technik zu bestimmen. In einigen Beispielen vergleicht die beispielhafte Kontextverfeinerungsschaltung 312 den statischen Fehlerkontext mit dem einen oder den mehreren dynamischen Fehlerkontexten, um einen Überlappungsfehlerkontext für jeden dynamischen Fehlerkontext zu erzeugen. In einigen solchen Beispielen kann der überlappende Fehlerkontext, der den größten Abschnitt von Code enthält, als der verfeinerte Fehlerkontext bezeichnet werden.
  • Ein Beispiel für einen verfeinerten Fehlerkontext findet sich in 7, wobei die beispielhafte statische Analysatorschaltung 308 (3) den statischen Fehlerkontext 600, den ersten dynamischen Fehlerkontext 602 und den zweiten dynamischen Fehlerkontext 604 von 6 verwendet. Wie in dem Beispiel von 7 gezeigt, beinhaltet die Überlappung des statischen Fehlerkontextes 600 und des ersten dynamischen Fehlerkontextes 602 die Zeilen 5, 8, 9 und 10. Im Gegensatz dazu ist die Überlappung des statischen Fehlerkontexts 600 und des zweiten dynamischen Fehlerkontexts 604 nur die Zeilen 5 und 10, da der Ausführungsablauf die For-Schleife wie in 6 beschrieben übersprungen hat. Infolgedessen wählt die beispielhafte Kontextverfeinerungsschaltung 312 die Zeilen 5, 8, 9 und 10 als verfeinerten dynamischen Fehlerkontext 700 aus.
  • Während eine beispielhafte Weise des Implementierens der beispielhaften Fehlererkennungsschaltung 104 von 1 in 3 veranschaulicht ist, können ein oder mehrere der Elemente, Prozesse und/oder Geräte, die in 3 veranschaulicht sind, kombiniert, geteilt, neu geordnet, weggelassen, eliminiert, und/oder auf jegliche andere Art implementiert werden. Ferner können die beispielhafte Schnittstellenschaltung 300, die beispielhafte Graphenschaltung 302, die beispielhafte Knotenklassifizierungsschaltung 304, die beispielhafte Ortidentifizierungsschaltung 306, die beispielhafte statische Analysatorschaltung 308, die beispielhafte dynamische Analysatorschaltung 310, die beispielhafte Kontextverfeinerungsschaltung 312, die beispielhafte Kontextverifizierungsschaltung 314, die beispielhafte Datenbereitstellungsschaltung 316 und/oder allgemeiner die beispielhafte Fehlererkennungsschaltung 104 von 1 durch Hardware allein oder durch Hardware in Kombination mit Software und/oder Firmware implementiert werden. Dementsprechend könnte zum Beispiel jegliche der beispielhaften Schnittstellenschaltung 300, der beispielhaften Graphenschaltung 302, der beispielhaften Knotenklassifizierungsschaltung 304, der beispielhaften Ortidentifizierungsschaltung 306, der beispielhaften statischen Analysatorschaltung 308, der beispielhaften dynamischen Analysatorschaltung 310, der beispielhaften Kontextverfeinerungsschaltung 312, der beispielhaften Kontextverifizierungsschaltung 314, der beispielhaften Datenbereitstellungsschaltung 316 und/oder allgemeiner der beispielhaften Fehlererkennungsschaltung 104 von 1 durch eine Prozessorschaltung, eine oder mehrere analoge Schaltungen, eine oder mehrere digitale Schaltungen, eine oder mehrere Logikschaltungen, einen oder mehrere programmierbare Prozessoren, einen oder mehrere programmierbare Mikrocontroller, eine oder mehrere Grafikverarbeitungseinheiten (GPU), einen oder mehrere digitale Signalprozessoren (DSP), eine oder mehrere anwendungsspezifische integrierte Schaltungen (ASIC), ein oder mehrere programmierbare Logikgeräte (PLD) und/oder ein oder mehrere feldprogrammierbare Logikgeräte (FPLD), wie zum Beispiel feldprogrammierbare Gate-Arrays (FPGA), implementiert werden. Darüber hinaus kann die beispielhafte Fehlererkennungsschaltung 104 von 1 ein oder mehrere Elemente, Prozesse und/oder Geräte zusätzlich zu den oder anstelle der in 3 veranschaulichten beinhalten, und/oder kann mehr als eines von jeglichen oder allen der veranschaulichten Elemente, Prozesse und Geräte beinhalten.
  • Flussdiagramme, die beispielhafte Hardwarelogikschaltungen, maschinenlesbare Anweisungen, hardwareimplementierte Statusautomatik und/oder jegliche Kombination davon zum Implementieren der Fehlererkennungsschaltung 104 von 1 darstellen, sind in den 7-11 gezeigt. Die maschinenlesbaren Anweisungen können ein oder mehrere ausführbare Programme oder einen oder mehrere Abschnitte eines ausführbaren Programms zur Ausführung durch eine Prozessorschaltung sein, wie zum Beispiel die Prozessorschaltung 1212, die in der beispielhaften Prozessorplattform 1200, die unten in Verbindung mit 12 diskutiert wird, und/oder die beispielhafte Prozessorschaltung, die unten in Verbindung mit 13 und/oder 14 diskutiert wird, gezeigt ist. Das Programm kann in Software verkörpert sein, die auf einem oder mehreren nichtflüchtigen computerlesbaren Speicherungsmedien, wie zum Beispiel einer Compact Disk (CD), einer Floppy Disk, einem Festplattenlaufwerk (HDD), einem Solid-State-Laufwerk (SSD), einer Digital Versatile Disk (DVD), einer Blu-Ray-Disk, einem flüchtigen Speicher (zum Beispiel Random Access Memory (RAM) jeglichen Typs usw.) oder einem nichtflüchtigen Speicher (zum Beispiel Electrically Erasable Programmable Read-Only Memory (EEPROM), Flash-Speicher, einem HDD, einem SSD usw.) gespeichert ist, der mit einer Prozessorschaltung assoziiert ist, die in einem oder mehreren Hardwaregeräten platziert ist, jedoch könnten das gesamte Programm und/oder Teile davon alternativ durch ein oder mehrere andere Hardwaregeräte als die Prozessorschaltung ausgeführt werden, und/oder in Firmware oder fest zugeordneter Hardware verkörpert sein. Die maschinenlesbaren Anweisungen können über mehrere Hardwaregeräte hinweg verteilt und/oder durch zwei oder mehr Hardwaregeräte (zum Beispiel ein Server- und ein Client-Hardwaregerät) ausgeführt werden. Das Client-Hardwaregerät kann zum Beispiel durch ein Endpunkt-Client-Hardwaregerät (zum Beispiel ein Hardwaregerät, das mit einem Benutzer assoziiert ist) oder ein Zwischen-Client-Hardwaregerät (zum Beispiel ein Funkzugangsnetzwerk (RAN-) - Gateway, das Kommunikation zwischen einem Server und einem Endpunkt-Client-Hardwaregerät ermöglichen kann) implementiert werden. In ähnlicher Weise können die nichtflüchtigen computerlesbaren Speicherungsmedien ein oder mehrere Medien beinhalten, die in einem oder mehreren Hardwaregeräten platziert sind. Obwohl das beispielhafte Programm unter Bezugnahme auf die in den 7-11 veranschaulichten Flussdiagramme beschrieben ist, können alternativ viele andere Verfahren zum Implementieren der beispielhaften Fehlererkennungsschaltung 104 von 1 verwendet werden. Zum Beispiel kann die Ausführungsreihenfolge der Blöcke geändert werden, und/oder einige der beschriebenen Blöcke können geändert, eliminiert oder kombiniert werden. Zusätzlich oder alternativ können jegliche oder alle Blöcke durch eine oder mehrere Hardwareschaltungen (zum Beispiel eine Prozessorschaltung, eine spezielle und/oder integrierte analoge und/oder digitale Schaltung, ein FPGA, eine ASIC, einen Komparator, einen Operationsverstärker (Op-Amp), eine Logikschaltung usw.) implementiert werden, die dazu strukturiert sind, die entsprechende Operation auszuführen, ohne Software oder Firmware auszuführen. Die Prozessorschaltung kann auf unterschiedliche Netzwerkstandorte und/oder lokal auf ein oder mehrere Hardwaregeräte (zum Beispiel einen Einzelkernprozessor (zum Beispiel eine Einzelkern-CPU) usw.), einen Mehrkernprozessor (zum Beispiel eine Mehrkern-CPU) usw.) in einer einzelnen Maschine, mehrere Prozessoren, die über mehrere Server eines Server-Racks hinweg verteilt sind, mehrere Prozessoren, die über ein oder mehrere Server-Racks hinweg verteilt sind, eine CPU und/oder ein FPGA, die in demselben Package platziert sind (zum Beispiel demselben integrierten Schaltungs (IC) -Package oder in zwei oder mehr separaten Packages usw.) verteilt sein.
  • Die hierin beschriebenen maschinenlesbaren Anweisungen können in einem komprimierten Format und/oder einem verschlüsselten Format und/oder einem fragmentierten Format und/oder einem kompilierten Format und/oder einem ausführbaren Format und/oder einem gepackten Format usw. gespeichert werden. Maschinenlesbare Anweisungen, wie hierin beschrieben, können als Daten oder eine Datenstruktur (zum Beispiel als Abschnitte von Anweisungen, Code, Darstellungen von Code usw.) gespeichert werden, die verwendet werden können, um maschinenausführbare Anweisungen zu erzeugen, herzustellen und/oder zu produzieren. Die maschinenlesbaren Anweisungen können zum Beispiel fragmentiert und in einem oder mehreren Speicherungsgeräten und/oder Datenverarbeitungsgeräten (zum Beispiel Servern) gespeichert werden, die an denselben oder unterschiedlichen Orten eines Netzwerks oder einer Sammlung von Netzwerken (zum Beispiel in der Cloud, in Edge-Geräten usw.) platziert sind. Die maschinenlesbaren Anweisungen können Installation und/oder Modifikation und/oder Anpassung und/oder Aktualisierung und/oder Kombination und/oder Ergänzung und/oder Konfiguration und/oder Entschlüsselung und/oder Dekomprimierung und/oder Entpacken und/oder Verteilung und/oder Neuzuweisung und/oder Kompilierung usw. erfordern, um sie durch ein Datenverarbeitungsgerät und/oder eine andere Maschine direkt lesbar, interpretierbar und/oder ausführbar zu machen. Zum Beispiel können die maschinenlesbaren Anweisungen in mehreren Teilen gespeichert werden, die einzeln komprimiert, verschlüsselt und/oder auf separaten Datenverarbeitungsgeräten gespeichert werden, wobei die Teile, wenn sie entschlüsselt, dekomprimiert und/oder kombiniert werden, einen Satz von maschinenausführbaren Anweisungen bilden, die eine oder mehrere Operationen implementieren, die zusammen ein Programm, wie zum Beispiel das hierin beschriebene, bilden können.
  • In einem anderen Beispiel können die maschinenlesbaren Anweisungen in einem Zustand gespeichert werden, in dem sie durch eine Prozessorschaltung gelesen werden können, jedoch das Hinzufügen einer Bibliothek (zum Beispiel einer Dynamic Link Library (DLL)), eines Softwareentwicklungskits (SDK), einer Anwendungsprogrammierschnittstelle (API) usw. erfordern, um die maschinenlesbaren Anweisungen in einem bestimmten Datenverarbeitungsgerät oder einem anderen Gerät auszuführen. In einem anderen Beispiel kann es nötig sein, dass die maschinenlesbaren Anweisungen konfiguriert (zum Beispiel Einstellungen gespeichert, Daten eingegeben, Netzwerkadressen aufgezeichnet usw.) werden, bevor die maschinenlesbaren Anweisungen und/oder das eine oder die mehreren entsprechenden Programme insgesamt oder teilweise ausgeführt werden können. Somit können maschinenlesbare Medien, wie hierin verwendet, maschinenlesbare Anweisungen und/oder eines oder mehrere Programme unabhängig von dem bestimmten Format oder Zustand der maschinenlesbaren Anweisungen und/oder des einen oder der mehreren Programme beinhalten, wenn sie gespeichert oder anderweitig in Ruhe oder in einem Übergang sind.
  • Die hierin beschriebenen maschinenlesbaren Anweisungen können durch jegliche frühere, aktuelle oder zukünftige Anweisungssprache, Skriptsprache, Programmiersprache usw. dargestellt werden. Zum Beispiel können die maschinenlesbaren Anweisungen durch Verwenden jeglicher der folgenden Sprachen dargestellt werden: C, C++, Java, C#, Perl, Python, JavaScript, HyperText Markup Language (HTML), Structured Query Language (SQL), Swift usw.
  • Wie oben erwähnt, können die beispielhaften Operationen der 7, 8, 9, 10 und 11 durch Verwenden von ausführbaren Anweisungen (zum Beispiel von computer- und/oder maschinenlesbaren Anweisungen) implementiert werden, die in einem oder mehreren nichtflüchtigen computer- und/oder maschinenlesbaren Medien gespeichert sind, wie zum Beispiel optischen Speicherungsgeräten, magnetischen Speicherungsgeräten, einem HDD, einem Flash-Speicher, einem Read Only Memory (ROM), einer CD, einer DVD, einem Cache, einem RAM jeglichen Typs, einem Register und/oder jeglichem anderen Speicherungsgerät oder jeglicher anderen Speicherungsplatte, wo Informationen für jegliche Dauer gespeichert werden (zum Beispiel für ausgedehnte Zeiträume, permanent, für kurze Zeiträume, zum vorübergehenden Puffern und/oder zum Zwischenspeichern der Informationen). Wie hierin verwendet, sind die Begriffe nichtflüchtiges computerlesbares Medium und nichtflüchtiges computerlesbares Speicherungsmedium ausdrücklich so definiert, dass sie jeglichen Typ von computerlesbarem Speicherungsgerät und/oder Speicherungsplatte beinhalten, und sich verbreitende Signale und Übertragungsmedien ausschließen.
  • „Beinhaltend" und „umfassend“ (und alle Formen und Zeiten davon) werden hierin als offene Begriffe verwendet. Somit versteht es sich, wann immer ein Anspruch jegliche Form von „beinhalten“ oder „umfassen“ (zum Beispiel umfasst, beinhaltet, umfassend, beinhaltend, aufweisend usw.) als eine Präambel oder innerhalb einer Anspruchsrezitation jeglicher Art einsetzt, dass zusätzliche Elemente, Begriffe usw. vorhanden sein können, ohne außerhalb des Umfangs des entsprechenden Anspruchs oder der entsprechenden Rezitation zu fallen. Wie hierin verwendet, wenn der Ausdruck „mindestens“ als der Übergangsausdruck zum Beispiel in einer Präambel eines Anspruchs verwendet wird, ist er auf dieselbe Weise offen, wie die Begriffe „umfassend“ und „beinhaltend“ offen sind. Der Begriff „und/oder“ betrifft, wenn zum Beispiel in einer Form, wie zum Beispiel A, B und/oder C verwendet, jegliche Kombination oder jeglichen Untersatz von A, B, C, wie zum Beispiel (1) A allein, (2) B allein, (3) C allein, (4) A mit B, (5) A mit C, (6) B mit C oder (7) A mit B und mit C. Wie hierin im Zusammenhang mit der Beschreibung von Strukturen, Komponenten, Gegenständen, Objekten und/oder Dingen verwendet, soll der Ausdruck „mindestens eines von A und B“ auf Implementierungen verweisen, die jegliches von (1) mindestens einem A, (2) mindestens einem B oder (3) mindestens einem A und mindestens einem B beinhalten. Ähnlich, wie hierin im Zusammenhang des Beschreibens von Strukturen, Komponenten, Gegenständen, Objekten und/oder Dingen verwendet, soll der Ausdruck „mindestens eines von A oder B“ auf Implementierungen verweisen, die jegliches von (1) mindestens einem A, (2) mindestens einem B oder (3) mindestens einem A und mindestens einem B beinhalten. Wie hierin im Zusammenhang der Beschreibung der Leistung oder Ausführung von Prozessen, Anweisungen, Aktionen, Aktivitäten und/oder Schritten verwendet, soll der Ausdruck „mindestens eines von A und B“ auf Implementierungen verweisen, die jegliches von (1) mindestens einem A, (2) mindestens einem B, oder (3) mindestens einem A und mindestens einem B beinhalten. In ähnlicher Weise, wie hierin im Zusammenhang mit der Beschreibung der Leistung oder Ausführung von Prozessen, Anweisungen, Aktionen, Aktivitäten und/oder Schritten verwendet, soll der Ausdruck „mindestens eines von A oder B“ auf Implementierungen verweisen, die jegliches von (1)mindestens einem A, (2) mindestens einem B, oder (3) mindestens einem A und mindestens einem B beinhalten.
  • Wie hierin verwendet, schließen Bezugnahmen im Singular (zum Beispiel „ein“, „erste/r/s“, „zweite/r/s“ usw.) eine Mehrzahl nicht aus. Der Ausdruck „ein“ Objekt, wie hierin verwendet, bezieht sich auf eines oder mehrere dieses Objekts. Die Begriffe „ein“, „ein oder mehrere“ und „mindestens ein“ werden hierin austauschbar verwendet. Darüber hinaus können, obwohl individuell aufgelistet, mehrere Mittel, Elemente oder Verfahrensaktionen durch zum Beispiel dieselbe Entität oder dasselbe Objekt implementiert werden. Zusätzlich können, obwohl individuelle Merkmale in unterschiedlichen Beispielen oder Ansprüchen enthalten sein können, diese möglicherweise kombiniert werden, und das Aufnehmen in unterschiedliche Beispiele oder Ansprüche impliziert nicht, dass eine Kombination von Merkmalen nicht möglich und/oder vorteilhaft ist.
  • 8 ist ein Flussdiagramm, das beispielhafte maschinenlesbare Anweisungen darstellt, die durch eine beispielhafte Prozessorschaltung ausgeführt werden können, um die beispielhafte Fehlererkennungsschaltung 104 der 1, 2 und 3 zu implementieren, um Fehlerstatus und verfeinerten Fehlerkontext zu bestimmen. Beispielhafter Prozess 800 beginnt, wenn die beispielhafte Schnittstellenschaltung 300 ( 3) auf den Eingabecode 201 (2) zugreift. (Block 802). Zum Beispiel wird der Eingabecode 201 durch die Softwareschnittstellenschaltung 210 (2) bereitgestellt.
  • Die beispielhafte Graphenschaltung 302A (3) analysiert den Eingabecode 201, um einen Graphen zu erzeugen. (Block 804). Zum Beispiel beinhaltet der Graph Knoten, die Codeabschnitte von dem unbekannten Code enthalten, und Kanten, die die Knoten verbinden, und beschreiben, wie die Codeabschnitte innerhalb der Knoten miteinander innerhalb des Eingabecodes 201 in Beziehung stehen. Die beispielhafte Graphenschaltung 302A kann jegliches Format oder jegliche Prozedur zum Erzeugen von Graphen verwenden. In einigen Beispielen verwendet die beispielhafte Graphenschaltung 302A eine Context Aware Semantic Structure (CASS), um Graphen zu erzeugen.
  • Die beispielhafte Knotenklassifizierungsschaltung 304 (3) bestimmt die Wahrscheinlichkeit fehlerrelevanter Knoten durch Verwenden des bei Block 804 erzeugten Graphen. (Block 806). Bevor zum Beispiel der beispielhafte Prozess 800 beginnt, und die beispielhafte Fehlererkennungsschaltung 104 auf den Eingabecode 201 zugreift, trainiert die beispielhafte Knotenklassifizierungsschaltung 304 ein neuronales Netzwerkmodell, um Knoten als fehlerrelevant zu klassifizieren, wie oben beschrieben. Während des beispielhaften Prozesses 800 wendet die beispielhafte Knotenklassifizierungsschaltung 304 das neuronale Netzwerkmodell an, um eine fehlerrelevante Wahrscheinlichkeit für jeden der Knoten zu bestimmen. Die fehlerrelevante Wahrscheinlichkeit für einen gegebenen Knoten beschreibt die Wahrscheinlichkeit, dass ein Abschnitt von Code in dem Knoten einen Softwarefehler enthält, oder für diesen relevant ist. In einigen Beispielen wird die fehlerrelevante Wahrscheinlichkeit als ein Skalarwert zwischen 0 und 1 ausgedrückt.
  • Die beispielhafte Knotenklassifizierungsschaltung 304 bestimmt, ob die fehlerrelevanten Wahrscheinlichkeiten einen Schwellenwert einhalten. (Block 808). Zum Beispiel ist der Schwellenwert von Block 808 eingehalten, wenn eine oder mehrere der fehlerrelevanten Wahrscheinlichkeiten größer oder gleich einem Wahrscheinlichkeitsschwellenwert sind. Ein beispielhafter Wahrscheinlichkeitsschwellenwert kann basierend auf einer gewünschten Sensibilität gegenüber Fehlererkennung ausgewählt werden. Zum Beispiel kann ein niedrigerer Schwellenwert die beispielhafte Knotenklassifizierungsschaltung 304 dazu veranlassen, eine größere Anzahl von Codeschnipseln, die keine Softwarefehler haben, als fehlerrelevant zu identifizieren, wodurch mehr falsch positive Ergebnisse erzeugt werden. Im Gegensatz dazu kann ein höherer Schwellenwert die beispielhafte Knotenklassifizierungsschaltung 304 dazu veranlassen, weniger falsch positive Ergebnisse zu erzeugen. Jedoch kann der höhere Schwellenwert die beispielhafte Knotenklassifizierungsschaltung 304 auch dazu veranlassen, Codeschnipsel, die Softwarefehler enthalten, fälschlicherweise als nicht fehlerrelevant zu identifizieren.
  • In einigen Beispielen kann die beispielhafte Knotenklassifizierungsschaltung 304 den Schwellenwert in einer Konfigurationsdatei in Speicher speichern. Der Wahrscheinlichkeitsschwellenwert kann jeglicher Wert sein. In einigen Beispielen ist der Wahrscheinlichkeitsschwellenwert 0,5. In anderen Beispielen ist der Wahrscheinlichkeitsschwellenwert ein unterschiedlicher Wert. Falls bei Block 808 die beispielhafte Knotenklassifizierungsschaltung 304 bestimmt, dass die fehlerrelevanten Wahrscheinlichkeiten den Schwellenwert nicht einhalten, gehen die beispielhaften Anweisungen oder der beispielhafte Prozess 800 weiter zu Block 824.
  • Falls bei Block 808 die beispielhafte Knotenklassifizierungsschaltung 304 bestimmt, dass die fehlerrelevanten Wahrscheinlichkeiten den Schwellenwert einhalten, klassifiziert die beispielhafte Knotenklassifizierungsschaltung 304 Knoten, die den Schwellenwert einhalten, als fehlerrelevant. (Block 810). Um Knoten zu klassifizieren, die den Schwellenwert einhalten, klassifiziert die beispielhafte Knotenklassifizierungsschaltung 304 Knoten, deren fehlerrelevante Wahrscheinlichkeit größer oder gleich dem Wahrscheinlichkeitsschwellenwert von Block 808 war. Ein als fehlerrelevant klassifizierter Knoten zeigt an, dass der dem Knoten entsprechende Code potenziell einen Softwarefehler enthalten oder für diesen relevant sein kann.
  • Die beispielhafte Ortidentifizierungsschaltung 306 (3) identifiziert den Ort des Softwarefehlers. (Block 812). Die beispielhafte Ortidentifizierungsschaltung 306 verwendet fehlerrelevante Knoten von Block 810, um den Ort des Softwarefehlers zu bestimmen. In Beispielen, in denen mehr als ein Knoten als fehlerrelevant klassifiziert werden, wird die Vereinigung von Codeorten, die durch die fehlerrelevanten Knoten dargestellt werden, als der Ort des Softwarefehlers betrachtet. Die identifizierten Abschnitte des Eingabecodes 201 können als ein partieller Fehlerkontext bezeichnet werden. Die beispielhafte Ortidentifizierungsschaltung 306 kann die Abschnitte des unbekannten Codes durch Verwenden von Abbildungsregeln identifizieren.
  • Die beispielhafte Ortidentifizierungsschaltung 306 bestimmt, ob der Eingabecode 201 einen ausreichenden Fehlerkontext enthält. (Block 814). Ein ausreichender Fehlerkontext bezieht sich auf einen Abschnitt des Codes, der ausreicht, um die Ursache eines Softwarefehlers zu bestimmen. In einigen Beispielen kann die beispielhafte Ortidentifizierungsschaltung 306 die Bestimmung vornehmen, indem sie bestimmt, ob die Gesamtanzahl von Codezeilen in dem Eingabecode 201 um einen Zielwert größer als die Anzahl von Codezeilen ist, die durch den partiellen Fehlerkontext identifiziert werden. In anderen Beispielen kann die beispielhafte Ortidentifizierungsschaltung 306 die Bestimmung vornehmen, indem sie bestimmt, ob die Anzahl von Funktionen, Verfahren oder Dateien innerhalb des Eingabecodes 201 einen Zielwert einhält oder überschreitet. Falls die beispielhafte Ortidentifizierungsschaltung 306 bestimmt, dass der unbekannte Code keinen ausreichenden Fehlerkontext enthält, gehen die beispielhaften Anweisungen und/oder der beispielhafte Prozess 800 weiter zu Block 824.
  • Falls die beispielhafte Ortidentifizierungsschaltung 306 bei Block 814 bestimmt, dass der Eingabecode 201 einen ausreichenden Fehlerkontext enthält, bestimmt die beispielhafte statische Analysatorschaltung 308 (3) einen statischen Fehlerkontext, und die beispielhafte dynamische Analysatorschaltung 310 (3) bestimmt einen oder mehrere dynamische Fehlerkontexte. (Block 816). Die beispielhafte statische Analysatorschaltung 308 und die beispielhafte dynamische Analysatorschaltung 310 bestimmen die jeweiligen Kontexte durch Verwenden des Orts des in Block 812 identifizierten Softwarefehlers. Block 816 wird unten in Verbindung mit 9 detaillierter diskutiert.
  • Die beispielhafte Kontextverfeinerungsschaltung 312 (3) bestimmt einen verfeinerten Fehlerkontext. (Block 818). Um den verfeinerten Fehlerkontext zu bestimmen, führt die beispielhafte Kontextverfeinerungsschaltung 312 den statischen Fehlerkontext und den einen oder die mehreren dynamischen Fehlerkontexte, die bei Block 816 erzeugt werden, zusammen. Block 818 wird unten in Verbindung mit 10 detaillierter diskutiert.
  • Die beispielhafte Graphenschaltung 302B erzeugt einen Graphen, um den verfeinerten Fehlerkontext von Block 818 darzustellen. (Block 820). Die beispielhafte Graphenschaltung 302B kann, muss jedoch nicht, mit dem Format oder der Prozedur übereinstimmen, die verwendet wird, um den Graphen von Block 804 zu erstellen, wenn der Graph von Block 820 erzeugt wird.
  • Die beispielhafte Kontextverifizierungsschaltung 314 (3) verifiziert das Vorhandensein eines Softwarefehlers in dem verfeinerten Fehlerkontext. (Block 822). Bevor der beispielhafte Prozess 800 beginnt, und die beispielhafte Fehlererkennungsschaltung 104 auf den Eingabecode 201 zugreift, trainiert die beispielhafte Kontextverifizierungsschaltung 314 ein neuronales Netzwerkmodell, um zu bestimmen, ob Knoten Softwarefehler enthalten, wie in 5 beschrieben. Während der beispielhaften Anweisungen oder des beispielhaften Prozesses 800 implementiert die beispielhafte Kontextverifizierungsschaltung 314 das neuronale Netzwerkmodell, um zu verifizieren, dass der verfeinerte Fehlerkontext einen Softwarefehler enthält.
  • Die beispielhafte Kontextverifizierungsschaltung 314 stellt beispielhafte Fehlerinformationen 106 (1) an die Datenbereitstellungsschaltung 316 (3) basierend auf der Verifizierung bereit. Falls zum Beispiel die beispielhafte Kontextverifizierungsschaltung 314 erfolgreich verifiziert, dass es einen Softwarefehler in dem verfeinerten Fehlerkontext gibt, kann die beispielhafte Kontextverifizierungsschaltung 314 den Fehlerstatus 106A bereitstellen, der anzeigt, dass der Eingabecode 201 einen Softwarefehler enthält, und stellt den verfeinerten Fehlerkontext als den Fehlerkontext 106B an die Datenbereitstellungsschaltung 316 bereit. Falls zum Beispiel die beispielhafte Kontextverifizierungsschaltung 314 nicht erfolgreich verifizieren kann, dass es einen Softwarefehler in dem verfeinerten Fehlerkontext gibt, kann die beispielhafte Kontextverifizierungsschaltung 314 den Fehlerstatus 106A bereitstellen, der anzeigt, dass der Eingabecode 201 keinen Softwarefehler enthält, und kann keinen Fehlerkontext 106B an die Datenbereitstellungsschaltung 316 bereitstellen.
  • Die Datenbereitstellungsschaltung 316 gibt beispielhafte Fehlerinformationen 106 zurück. (Block 824). Die Fehlerinformationen 106 beinhalten den Fehlerstatus 106A, und können bedingt einen Fehlerkontext 106B beinhalten. Zum Beispiel kann die Datenbereitstellungsschaltung 316 unterschiedliche Ergebnisse basierend auf den Inhalten der Fehlerinformationen 106 bereitstellen, die durch die beispielhafte Kontextverifizierungsschaltung 314 in Block 822 bereitgestellt werden. In Beispielen, in denen die fehlerrelevanten Wahrscheinlichkeiten den Schwellenwert von Block 808 nicht einhalten, kann die Datenbereitstellungsschaltung 316 den Fehlerstatus 106A bereitstellen, der anzeigt, dass der Eingabecode 201 keinen Softwarefehler hat, und kann keinen Fehlerkontext 106B bereitstellen. In ähnlicher Weise kann, in Beispielen, in denen der Eingabecode 201 keinen ausreichenden Fehlerkontext, wie in Block 814 beschrieben, enthält, die Datenbereitstellungsschaltung 316 den Fehlerstatus 106A bereitstellen, der anzeigt, dass der Eingabecode 201 einen Softwarefehler enthält, und den partiellen Fehlerkontext von Block 812 als den Fehlerkontext 106B anstelle eines verfeinerten Fehlerkontexts bereitstellen.
  • Die beispielhafte Datenbereitstellungsschaltung 316 stellt Fehlerinformationen 106 an die beispielhafte Softwareschnittstellenschaltung 210 bereit. Nachdem die beispielhafte Fehlererkennungsschaltung 104 den Fehlerstatus 106A für den Eingabecode 201 bestimmt hat, kann der Eingabecode 201 dann als Referenzcode 202 angesehen werden. In einigen Beispielen kann die Datenbereitstellungsschaltung 316 zusätzlich den Referenzcode 202 an die Compilerschaltung 212 in Block 824 bereitstellen. In einigen Beispielen basiert eine Bestimmung, ob der Referenzcode 202 bereitgestellt werden soll, auf den beispielhaften Fehlerinformationen 106. In anderen Beispielen kann die Datenbereitstellungsschaltung 316 den Referenzcode 202 unabhängig von den beispielhaften Fehlerinformationen 106 an die Compilerschaltung 212 bereitstellen. Die beispielhaften Anweisungen oder der beispielhafte Prozess 800 enden nach Block 824.
  • 9 ist ein Flussdiagramm, das beispielhafte maschinenlesbare Anweisungen darstellt, die durch eine beispielhafte Prozessorschaltung ausgeführt werden können, um die beispielhafte statische Analysatorschaltung 308 und die beispielhafte dynamische Analysatorschaltung 310 von 3 zu implementieren, um statische und dynamischer Fehlerkontexte zu bestimmen. Die beispielhaften Anweisungen von 9 können verwendet werden, um Block 816 von 8 zu implementieren. Der Ausführungsablauf der beispielhaften Anweisungen 816 beginnt, wenn die beispielhafte statische Analysatorschaltung 308 einen überschätzten Fehlerkontext von einem Ort eines Softwarefehlers bestimmt. (Block 900). Zum Beispiel bestimmt die statische Analysatorschaltung 308 den überschätzten Fehlerkontext von dem in Block 812 von 8 identifizierten Ort des Softwarefehlers. In dem Beispiel von 9 bezieht sich der überschätzte Fehlerkontext auf den gesamten Code innerhalb jeglicher der Funktionen, die den einen oder die mehreren fehlerrelevanten Knoten von Block 810 von 8 beeinflussen. Die beispielhafte statische Analysatorschaltung 308 kann Werkzeuge, wie zum Beispiel statisches Clang ™ -Analyseprogramm oder das statische CppDepend™-Analyseprogramm, verwenden, um den überschätzten Fehlerkontext zu bestimmen.
  • Die beispielhafte statische Analysatorschaltung 308 zerschneidet den überschätzten Fehlerkontext, um einen statischen Fehlerkontext zu bestimmen. (Block 902). Der überschätzte Fehlerkontext wird zerschnitten, sodass der statische Fehlerkontext Abschnitte des Eingabecodes 201 ausschließt, die nicht direkt mit dem einen oder den mehreren Punkten von Interesse, die in dem einen oder den mehreren fehlerrelevanten Knoten angezeigt werden, in Beziehung stehen.
  • Die beispielhafte dynamische Analysatorschaltung 310 erzeugt eine oder mehrere Testbedingungen. (Block 904). Eine Testbedingung bezieht sich auf den Satz von Eingaben, die, wenn mit dem Eingabecode 201 ausgeführt, einen spezifischen Ausführungsablauf haben. Die beispielhafte dynamische Analysatorschaltung 310 kann automatische Testfallerzeugungswerkzeuge, wie zum Beispiel FUDGE implementieren, um die eine oder die mehreren Testbedingungen zu erzeugen.
  • Die beispielhafte dynamische Analysatorschaltung 310 zeichnet den Ausführungspfad einer oder mehrerer Testbedingungen auf, um einen oder mehrere dynamische Fehlerkontexte zu bestimmen. (Block 906). Die während der Ausführung aufgezeichneten Codezeilen können als ein dynamischer Fehlerkontext angesehen werden. Die Anweisungen 816 enden, und die Steuerung kehrt zu den Anweisungen von 8 zurück.
  • 10 ist ein Flussdiagramm, das beispielhafte maschinenlesbare Anweisungen darstellt, die durch eine beispielhafte Prozessorschaltung ausgeführt werden können, um die beispielhafte Kontextverfeinerungsschaltung 312 von 3 zu implementieren, um Fehlerkontext zu verfeinern. Die beispielhaften Anweisungen von 10 können verwendet werden, um Block 818 von 8 zu implementieren. Die beispielhaften Anweisungen 818 beginnen, wenn die beispielhafte Kontextverfeinerungsschaltung 312 einen dynamischen Fehlerkontext auswählt. (Block 1000). Der ausgewählte dynamische Fehlerkontext ist Teil des einen oder der mehreren dynamischen Fehlerkontexte, die durch die beispielhafte dynamische Analysatorschaltung 310 in Block 816 von 8 bereitgestellt werden.
  • Die beispielhafte Kontextverfeinerungsschaltung 312 zählt überlappende Zeilen zwischen dem statischen Fehlerkontext und dem ausgewählten dynamischen Fehlerkontext. (Block 1002). Der statische Fehlerkontext wird durch die beispielhafte statische Analysatorschaltung 308 in Block 816 von 8 bereitgestellt.
  • Die beispielhafte Kontextverfeinerungsschaltung 312 bestimmt, ob alle dynamischen Fehlerkontexte ausgewählt wurden. (Block 1004). Zum Beispiel kann die Kontextverfeinerungsschaltung 312 bestimmen, ob alle dynamischen Fehlerkontexte ausgewählt wurden, indem jedem dynamischen Fehlerkontext von Block 906 ein Index zugewiesen wird, und bestimmt wird, ob der Index des ausgewählten dynamischen Fehlerkontexts gleich der Gesamtanzahl dynamischer Fehlerkontexte ist. Falls die beispielhafte Kontextverfeinerungsschaltung 312 bei Block 1004 bestimmt, dass nicht alle dynamischen Fehlerkontexte ausgewählt sind, kehrt die Steuerung zu Block 1000 zurück, wo die beispielhafte Kontextverfeinerungsschaltung 312 einen dynamischen Fehlerkontext der nicht ausgewählt wurde, auswählt. Falls die beispielhafte Kontextverfeinerungsschaltung 312 jedoch bei Block 1004 bestimmt, dass alle dynamischen Fehlerkontexte ausgewählt wurden, geht die Steuerung weiter zu Block 1006.
  • Die beispielhafte Kontextverfeinerungsschaltung 312 bestimmt einen verfeinerten Fehlerkontext durch Verwenden des dynamischen Fehlerkontexts mit der größten Überlappung. (Block 1006). Zum Beispiel bestimmt die beispielhafte Kontextverfeinerungsschaltung 312, welcher des einen oder der mehreren dynamischen Fehlerkontexte die größte Überlappungsanzahl von Block 1002 hatte. Die überlappenden Zeilen mit der größten Überlappungsanzahl können gemeinsam als der verfeinerte Fehlerkontext bezeichnet werden. Die Anweisungen 818 von 10 enden, und die Steuerung kehrt zu Block 820 zurück.
  • 11 ist ein Flussdiagramm, das beispielhafte maschinenlesbare Anweisungen darstellt, die durch eine beispielhafte Prozessorschaltung ausgeführt werden können, um die Fehlererkennungsschaltung 104 der 1, 2 und 3 zu implementieren, um verfeinerten Kontext für Softwarefehlererkennung zu bestimmen.
  • Die beispielhafte Fehlererkennungsschaltung 104 greift auf ein Computerprogramm zu. (Block 1100). Zum Beispiel greift die beispielhafte Schnittstellenschaltung 300 auf einen Programmiercode des Computerprogramms zu.
  • Die beispielhafte Fehlererkennungsschaltung 104 klassifiziert einen Knoten in einem Aufrufgraphen. (Block 1102). Zum Beispiel erzeugt die beispielhafte Graphenschaltung 302A einen Aufrufgraphen, um das Computerprogramm darzustellen, und die beispielhafte Knotenklassifizierungsschaltung 304 klassifiziert den Knoten, der den dem Computerprogramm entsprechenden partiellen Fehlerkontext beinhaltet.
  • Die beispielhafte Fehlererkennungsschaltung 104 identifiziert einen Ort eines Softwarefehlers in dem Computerprogramm. (Block 1104). Zum Beispiel identifiziert die beispielhafte Ortidentifizierungsschaltung 306 den Ort des Softwarefehlers in dem Computerprogramm basierend auf dem bei Block 1102 klassifizierten Knoten.
  • Die beispielhafte Fehlererkennungsschaltung 104 bestimmt einen statischen Fehlerkontext des Softwarefehlers durch Verwenden des Orts des Softwarefehlers. (Block 1106). Zum Beispiel bestimmt die beispielhafte statische Analysatorschaltung 308 einen überschätzten Fehlerkontext, und verwendet Programm-Slicing-Werkzeuge, um einen statischen Fehlerkontext von dem überschätzten Fehlerkontext zu bestimmen, wie in den 6 und 9 beschrieben.
  • Die beispielhafte Fehlererkennungsschaltung 104 bestimmt einen dynamischen Fehlerkontext des Softwarefehlers durch Verwenden des Orts des Softwarefehlers. (Block 1108). Zum Beispiel erzeugt die beispielhafte dynamische Analysatorschaltung 310 eine oder mehrere Testbedingungen, und verwendet Programm-Slicing-Werkzeuge, um einen statischen Fehlerkontext von dem überschätzten Fehlerkontext zu bestimmen, wie in den 6 und 9 beschrieben.
  • Die beispielhafte Fehlererkennungsschaltung 104 bestimmt einen verfeinerten Fehlerkontext basierend auf einer Zusammenführung des statischen Fehlerkontexts und des dynamischen Fehlerkontexts. (Block 1110). Zum Beispiel bestimmt die beispielhafte Kontextverfeinerungsschaltung 312 einen verfeinerten Fehlerkontext durch Identifizieren, welcher dynamische Fehlerkontext die größte Überlappung mit dem statischen Fehlerkontext hat, wie in Block 1006 beschrieben.
  • 12 ist ein Blockdiagramm einer beispielhaften Prozessorplattform 1200, die dazu strukturiert ist, die maschinenlesbaren Anweisungen und/oder Operationen der 8-11 auszuführen und/oder zu instanziieren, um die beispielhafte Fehlererkennungsschaltung 104 der 1-3 zu implementieren. Die Prozessorplattform 1200 kann zum Beispiel ein Server, ein Personal Computer, eine Workstation, eine selbstlernende Maschine (zum Beispiel ein neuronales Netzwerk), ein mobiles Gerät (zum Beispiel ein Mobiltelefon, ein Smartphone, ein Tablet, wie zum Beispiel ein iPad™), ein Personal Digital Assistant (PDA), ein Internetapparat, eine Set-Top-Box, ein Headset (zum Beispiel ein Augmented-Reality (AR) -Headset, ein Virtual-Reality (VR) -Headset usw.) oder ein anderes tragbares Gerät oder jeglicher andere Typ von Datenverarbeitungsgerät sein.
  • Die Prozessorplattform 1200 des veranschaulichten Beispiels beinhaltet Prozessorschaltung 1212. Die Prozessorschaltung 1212 des veranschaulichten Beispiels ist Hardware. Zum Beispiel kann die Prozessorschaltung 1212 durch eine oder mehrere integrierte Schaltungen, Logikschaltungen, FPGA, Mikroprozessoren, CPU, GPU, DSP und/oder Mikrosteuerungen jeglicher gewünschten Familie oder jeglichen gewünschten Herstellers implementiert werden. Die Prozessorschaltung 1212 kann durch eine oder mehrere halbleiterbasierte (zum Beispiel siliziumbasierte) Geräte implementiert werden. In diesem Beispiel implementiert die beispielhafte Prozessorschaltung 1212 die Softwareschnittstellenschaltung 210, die beispielhafte Fehlererkennungsschaltung 104, die Compilerschaltung 212, die Codeausführungsschaltung 214, die beispielhafte Schnittstellenschaltung 300, die beispielhafte Graphenschaltung 302A, die beispielhafte Knotenklassifizierungsschaltung 304, die beispielhafte Ortidentifizierungsschaltung 306, die beispielhafte statische Analysatorschaltung 308, die beispielhafte dynamische Analysatorschaltung 310, die beispielhafte Kontextverfeinerungsschaltung 312, die beispielhafte Graphenschaltung 302B, die beispielhafte Kontextverifizierungsschaltung 314 und die beispielhafte Datenbereitstellungsschaltung 316.
  • Die Prozessorschaltung 1212 des veranschaulichten Beispiels beinhaltet lokalen Speicher 1213 (zum Beispiel einen Cache, Register usw.). Die Prozessorschaltung 1212 des veranschaulichten Beispiels ist durch Bus 1218 in Kommunikation mit einem Hauptspeicher, der flüchtigen Speicher 1214 und nichtflüchtigen Speicher 1216 beinhaltet. Der flüchtige Speicher 1214 kann durch Synchronous Dynamic Random Access Memory (SDRAM), Dynamic Random Access Memory (DRAM), RAMBUS® Dynamic Random Access Memory (RDRAM®) und/oder jeglichen anderen Typ von RAM-Gerät implementiert werden. Der nichtflüchtige Speicher 1216 kann durch einen Flash-Speicher und/oder jeglichen anderen gewünschten Typ eines Speichergeräts implementiert werden. Der Zugriff auf den Hauptspeicher 1214, 1216 des veranschaulichten Beispiels wird durch Speichersteuerung 1217 gesteuert.
  • Die Prozessorplattform 1200 des veranschaulichten Beispiels beinhaltet auch Schnittstellenschaltung 1220. Die Schnittstellenschaltung 1220 kann durch Hardware gemäß jeglichem Typ von Schnittstellenstandard, wie zum Beispiel einer Ethernet-Schnittstelle, einer Universal-Serial-Bus (USB) - Schnittstelle, einer Bluetooth®-Schnittstelle, einer Near Field Communication (NFC) -Schnittstelle, einer Peripheral Component Interconnect PCI) -Schnittstelle und/oder einer Peripheral Component Interconnect Express PCIe) -Schnittstelle, implementiert werden.
  • In dem veranschaulichten Beispiel sind ein oder mehrere Eingabegeräte 1222 mit der Schnittstellenschaltung 1220 verbunden. Das eine oder sie mehreren Eingabegeräte 1222 ermöglichen es einem Benutzer, Daten und/oder Befehle in die Prozessorschaltung 1212 einzugeben. Das eine oder die mehreren Eingabegeräte 1222 können zum Beispiel durch einen Audiosensor, ein Mikrofon, eine Kamera (Standbild oder Video), eine Tastatur, einen Druckknopf, eine Maus, einen Touchscreen, ein Trackpad, einen Trackball, ein Isopointgerät und/oder ein Spracherkennungssystem implementiert werden.
  • Ein oder mehrere Ausgabegeräte 1224 sind auch mit der Schnittstellenschaltung 1220 des veranschaulichten Beispiels verbunden. Das eine oder die mehreren Ausgabegeräte 1224 können zum Beispiel durch Anzeigegeräte (zum Beispiel eine Leuchtdiode (Light Emitting Diode - LED), eine organische Leuchtdiode (Organic LED - OLED), eine Flüssigkristallanzeige (Liquid Crystal Display - LCD), eine Kathodenstrahlröhren (Cathode Ray Tube - CRT) -Anzeige, eine In-Place-Switching (IPS) -Anzeige, einen Touchscreen usw.), ein haptisches Ausgabegerät, einen Drucker und/oder Lautsprecher implementiert werden. Die Schnittstellenschaltung 1220 des veranschaulichten Beispiels beinhaltet somit typischerweise eine Grafiktreiberkarte, einen Grafiktreiberchip und/oder eine Grafikprozessorschaltung, wie zum Beispiel eine GPU.
  • Die Schnittstellenschaltung 1220 des veranschaulichten Beispiels beinhaltet auch ein Kommunikationsgerät, wie zum Beispiel einen Sender, einen Empfänger, einen Transceiver, ein Modem, ein Haus-Gateway, einen drahtlosen Zugangspunkt und/oder eine Netzwerkschnittstelle, um den Austausch von Daten mit externen Maschinen (zum Beispiel Datenverarbeitungsgeräten jeglicher Art) durch Netzwerk 1226 zu ermöglichen. Die Kommunikation kann zum Beispiel durch eine Ethernet-Verbindung, eine Digital Subscriber Line (DSL) -Verbindung, eine Telefonleitungsverbindung, ein Koaxialkabelsystem, ein Satellitensystem, ein drahtloses Sichtliniensystem, ein Mobiltelefonsystem, eine optische Verbindung usw. erfolgen.
  • Die Prozessorplattform 1200 des veranschaulichten Beispiels beinhaltet auch ein oder mehrere Massenspeicherungsgeräte 1228 zum Speichern von Software und/oder Daten. Beispiele für solche Massenspeicherungsgeräte 1228 beinhalten magnetische Speicherungsgeräte, optische Speicherungsgeräte, Diskettenlaufwerke, HDD, CD, Blu-Ray-Disk-Laufwerke, Redundant Array of Independent Disks (RAID) -Systeme, Festkörperspeicherungsgeräte, wie zum Beispiel Flash-Speichergeräte und/oder SSD, und DVD-Laufwerke.
  • Maschinenausführbare Anweisungen 1232, die durch die maschinenlesbaren Anweisungen von 12 implementiert werden können, können in dem Massenspeicherungsgerät 1228, in dem flüchtigen Speicher 1214, in dem nichtflüchtigen Speicher 1216 und/oder auf einem entfernbaren nichtflüchtigen computerlesbaren Speicherungsmedium, wie zum Beispiel einer CD oder DVD, gespeichert werden.
  • 13 ist ein Blockdiagramm einer beispielhaften Implementierung der Prozessorschaltung 1212 von 12. In diesem Beispiel wird die Prozessorschaltung 1212 von 12 durch Mehrzweckmikroprozessor 1300 implementiert. Die Mehrzweckmikroprozessorschaltung 1300 führt einige oder alle der maschinenlesbaren Anweisungen der Flussdiagramme der 8, 9, 10 und 11 aus, um die Schaltung von 1 als Logikschaltungen zum Ausführen der diesen maschinenlesbaren Anweisungen entsprechenden Operationen effektiv zu instanziieren. In einigen solchen Beispielen wird die Schaltung von 1 durch die Hardwareschaltungen des Mikroprozessors 1300 in Kombination mit den Anweisungen instanziiert. Zum Beispiel kann der Mikroprozessor 1300 eine Mehrkernhardwareschaltung, wie zum Beispiel eine CPU, einen DSP, eine GPU, eine XPU usw., implementieren. Obwohl er jegliche Anzahl von beispielhaften Kernen 1302 (zum Beispiel 1 Kern) beinhalten kann, ist der Mikroprozessor 1300 dieses Beispiels ein Mehrkernhalbleitergerät, das N Kerne beinhaltet. Die Kerne 1302 des Mikroprozessors 1300 können unabhängig arbeiten, oder können zusammenarbeiten, um maschinenlesbare Anweisungen auszuführen. Zum Beispiel kann ein Maschinencode, der einem Firmwareprogramm, einem eingebetteten Softwareprogramm oder einem Softwareprogramm entspricht, durch einen der Kerne 1302 ausgeführt werden, oder kann durch mehrere der Kerne 1302 zur selben Zeit oder zu unterschiedlichen Zeiten ausgeführt werden. In einigen Beispielen wird der Maschinencode, der dem Firmwareprogramm, dem eingebetteten Softwareprogramm oder dem Softwareprogramm entspricht, in Threads aufgeteilt, und parallel durch zwei oder mehr der Kerne 1302 ausgeführt. Das Softwareprogramm kann einem Abschnitt oder allen der durch die Flussdiagramme der 8-11 beschriebenen maschinenlesbaren Anweisungen und/oder Operationen entsprechen.
  • Die Kerne 1302 können durch ersten beispielhaften Bus 1304 kommunizieren. In einigen Beispielen kann der erste Bus 1304 einen Kommunikationsbus implementieren, um eine mit einem oder mehreren der Kerne 1302 assoziierte Kommunikation zu bewirken. Zum Beispiel kann der erste Bus 1304 einen Inter-Integrated Circuit (I2C) -Bus und/oder einen Serial Peripheral Interface (SPI) -Bus und/oder einen PCI-Bus und/oder einen PCIe-Bus implementieren. Zusätzlich oder alternativ kann der erste Bus 1304 jeglichen anderen Typ von Datenverarbeitungs- oder elektrischem Bus implementieren. Die Kerne 1302 können Daten, Anweisungen und/oder Signale von einem oder mehreren externen Geräten durch beispielhafte Schnittstellenschaltung 1306 erhalten. Die Kerne 1302 können Daten, Anweisungen und/oder Signale durch die Schnittstellenschaltung 1306 an das eine oder die mehreren externen Geräte ausgeben. Obwohl die Kerne 1302 dieses Beispiels beispielhaften lokalen Speicher 1320 (zum Beispiel Level-1 (L1) -Cache, der in einen L1-Daten-Cache und einen L1-Anweisungs-Cache aufgeteilt sein kann) beinhalten, beinhaltet der Mikroprozessor 1300 auch beispielhaften gemeinsam genutzten Speicher 1310 (zum Beispiel Level-2 (L2) -Cache), der durch die Kerne für einen Hochgeschwindigkeitszugriff auf Daten und/oder Anweisungen gemeinsam genutzt werden kann. Daten und/oder Anweisungen können durch Schreiben in den und/oder Lesen von dem gemeinsam genutzten Speicher 1310 übertragen (zum Beispiel gemeinsam genutzt) werden. Der lokale Speicher 1320 jedes der Kerne 1302 und der gemeinsam genutzte Speicher 1310 können Teil einer Hierarchie von Speicherungsgeräten sein, die mehrere Ebenen von Cache-Speicher und den Hauptspeicher (zum Beispiel den Hauptspeicher 1214, 1216 von 12) beinhaltet. Typischerweise weisen höhere Speicherebenen in der Hierarchie eine niedrigere Zugriffszeit auf, und haben eine kleinere Speicherungskapazität als niedrigere Speicherebenen. Änderungen in den verschiedenen Ebenen der Cache-Hierarchie werden durch eine Cache-Kohärenzrichtlinie verwaltet (zum Beispiel koordiniert).
  • Jeder Kern 1302 kann als eine CPU, ein DSP, eine GPU usw. oder jeglicher andere Typ von Hardwareschaltung bezeichnet werden. Jeder Kern 1302 beinhaltet Steuereinheitsschaltung 1314, Arithmetik-und-Logik (AL) -Schaltung (manchmal als eine ALU bezeichnet) 1316, mehrere Register 1318, den L1-Cache 1320 und zweiten beispielhaften Bus 1322. Andere Strukturen können vorhanden sein. Zum Beispiel kann jeder Kern 1302 eine Vektoreinheitsschaltung, eine Single Instruction Multiple Data (SIMD) -Einheitsschaltung, eine Lade-/Speichereinheit (LSU)-Schaltung, eine Verzweigungs-/Sprungeinheitsschaltung, eine Floating-Point Unit (FPU) - Schaltung usw. beinhalten Die Steuereinheitsschaltung 1314 beinhaltet halbleiterbasierte Schaltungen, die dazu strukturiert sind, eine Datenbewegung innerhalb des entsprechenden Kerns 1302 zu steuern (zum Beispiel zu koordinieren). Die AL-Schaltung 1316 beinhaltet halbleiterbasierte Schaltungen, die dazu strukturiert sind, eine oder mehrere mathematische und/oder logische Operationen an den Daten innerhalb des entsprechenden Kerns 1302 auszuführen. Die AL-Schaltung 1316 einiger Beispiele führt ganzzahlbasierte Operationen aus. In anderen Beispielen führt die AL-Schaltung 1316 auch Gleitkommaoperationen aus. In noch anderen Beispielen kann die AL-Schaltung 1316 eine erste AL-Schaltung, die ganzzahlbasierte Operationen ausführt, und eine zweite AL-Schaltung, die Gleitkommaoperationen ausführt, beinhalten. In einigen Beispielen kann die AL-Schaltung 1316 als eine arithmetische Logikeinheit (ALU) bezeichnet werden. Die Register 1318 sind halbleiterbasierte Strukturen zum Speichern von Daten und/oder Anweisungen, wie zum Beispiel Ergebnissen einer oder mehrerer der Operationen, die durch die AL-Schaltung 1316 des entsprechenden Kerns 1302 ausgeführt werden. Die Register 1318 können zum Beispiel ein oder mehrere Vektorregister, ein oder mehrere SIMD-Register, ein oder mehrere Mehrzweckregister, ein oder mehrere Flag-Register, ein oder mehrere Segmentregister, ein oder mehrere maschinenspezifische Register, ein oder mehrere Anweisungszeigerregister, ein oder mehrere Steuerregister, ein oder mehrere Debug-Register, ein oder mehrere Speicherverwaltungsregister, ein oder mehrere Maschinenprüfregister usw. beinhalten. Die Register 1318 können in einer Bank angeordnet sein, wie in 13 gezeigt. Alternativ können die Register 1318 in jeglicher anderen Anordnung, jeglichem anderen Format oder jeglicher anderen Struktur organisiert sein, die bzw. das über den Kern 1302 hinweg verteilt ist, um die Zugriffszeit zu verkürzen. Der zweite Bus 1322 kann einen I2C-Bus und/oder einen SPI-Bus und/oder einen PCI-Bus und/oder einen PCIe-Bus implementieren
  • Jeder Kern 1302 und/oder allgemeiner der Mikroprozessor 1300 kann zusätzliche und/oder alternative Strukturen zu den oben gezeigten und beschriebenen beinhalten. Zum Beispiel können eine oder mehrere Taktschaltungen, eine oder mehrere Leistungsversorgungen, ein oder mehrere Leistungsgatter, ein oder mehrere Cache-Home-Agents (CHA), ein oder mehrere Converged/Common Mesh Stops (CMS), ein oder mehrere Schieber (zum Beispiel Barrel Shifter) und/oder eine andere Schaltung vorhanden sein. Der Mikroprozessor 1300 ist ein Halbleitergerät, das so gefertigt ist, dass es viele Transistoren beinhaltet, die miteinander verbunden sind, um die oben beschriebenen Strukturen in einer oder mehreren integrierten Schaltungen (IC), die in einem oder mehreren Packages enthalten sind, zu implementieren. Die Prozessorschaltung kann einen oder mehrere Beschleuniger beinhalten und/oder mit diesen zusammenarbeiten. In einigen Beispielen werden Beschleuniger durch Logikschaltungen implementiert, um bestimmte Aufgaben schneller und/oder effizienter auszuführen, als dies mit einem Mehrzweckprozessor möglich ist. Beispiele für Beschleuniger beinhalten ASIC und FPGA, wie zum Beispiel die hierin diskutierten. Eine GPU oder ein anderes programmierbares Gerät kann auch ein Beschleuniger sein. Beschleuniger können sich auf der Prozessorschaltung, in demselben Chip-Package wie die Prozessorschaltung und/oder in einem oder mehreren von der Prozessorschaltung getrennten Packages befinden.
  • 14 ist ein Blockdiagramm einer anderen beispielhaften Implementierung der Prozessorschaltung 1212 von 12. In diesem Beispiel wird die Prozessorschaltung 1212 durch FPGA-Schaltung 1400 implementiert. Die FPGA-Schaltung 1400 kann zum Beispiel zum Ausführen von Operationen verwendet werden, die andernfalls durch den beispielhaften Mikroprozessor 1300 von 13, der entsprechende maschinenlesbare Anweisungen ausführt, ausgeführt werden könnten. Nach der Konfiguration instanziiert die FPGA-Schaltung 1400 jedoch die maschinenlesbaren Anweisungen in Hardware, und kann somit die Operationen häufig schneller ausführen, als dies mit einem die entsprechende Software ausführenden Mehrzweckmikroprozessor möglich wäre.
  • Insbesondere beinhaltet, im Gegensatz zu dem oben beschriebenen Mikroprozessor 1300 von 13 (der ein Mehrzweckgerät ist, das programmiert sein kann, einige oder alle der maschinenlesbaren Anweisungen auszuführen, die durch die Flussdiagramme der 8-11 dargestellt werden, dessen Verbindungen und Logikschaltung jedoch nach der Herstellung fest sind), die FPGA-Schaltung 1400 des Beispiels von 14 Zwischenverbindungen und Logikschaltungen, die nach der Fertigung auf unterschiedliche Weisen konfiguriert und/oder miteinander verbunden werden können, um zum Beispiel einige oder alle der durch die Flussdiagramme der 8-11 dargestellten maschinenlesbaren Anweisungen zu instanziieren. Insbesondere kann das FPGA 1400 als ein Array von Logikgattern, Zwischenverbindungen und Schaltern betrachtet werden. Die Schalter können so programmiert werden, dass sie die Art und Weise ändern, wie die Logikgatter durch die Verbindungen miteinander verbunden sind, wodurch effektiv eine oder mehrere fest zugeordnete Logikschaltungen gebildet werden (sofern und solange die FPGA-Schaltung 1400 nicht neu programmiert wird). Die konfigurierten Logikschaltungen ermöglichen es den Logikgattern, auf unterschiedliche Weisen zusammenzuarbeiten, um unterschiedliche Operationen an den durch die Eingabeschaltung empfangenen Daten auszuführen. Diese Operationen können einem Teil der oder der gesamten durch die Flussdiagramme der 8-11 beschriebenen Software entsprechen. Daher kann die FPGA-Schaltung 1400 dazu strukturiert sein, einige oder alle der maschinenlesbaren Anweisungen der Flussdiagramme der 8-11 effektiv als fest zugeordnete Logikschaltungen zu instanziieren, um die diesen Softwareanweisungen entsprechenden Operationen auf eine fest zugeordnete Weise analog zu einem ASIC auszuführen. Daher kann die FPGA-Schaltung 1400 die Operationen, die den einigen oder allen der maschinenlesbaren Anweisungen von 12 entsprechen, schneller ausführen, als der Mehrzweckmikroprozessor diese ausführen kann.
  • In dem Beispiel von 14 ist die FPGA-Schaltung 1400 so strukturiert, dass sie durch einen Endbenutzer durch eine Hardwarebeschreibungssprache (Hardware Description Language - HDL), wie zum Beispiel Verilog, programmiert (und/oder einmal oder mehrere Male umprogrammiert) wird. Die FPGA-Schaltung 1400 von 14 beinhaltet beispielhafte Eingabe-/Ausgabe (I/O) -Schaltung 1402, um Daten von beispielhafter Konfigurationsschaltung 1404 und/oder externer Hardware (zum Beispiel externer Hardwareschaltung) 1406 zu erhalten und/oder an diese auszugeben. Zum Beispiel kann die Konfigurationsschaltung 1404 eine Schnittstellenschaltung implementieren, die maschinenlesbare Anweisungen zum Konfigurieren der FPGA-Schaltung 1400 oder eines oder mehrerer Abschnitte davon erhalten kann. In einigen solchen Beispielen kann die Konfigurationsschaltung 1404 die maschinenlesbaren Anweisungen von einem Benutzer, einer Maschine (zum Beispiel einer Hardwareschaltung (zum Beispiel einer programmierten oder fest zugeordneten Schaltung), die ein Modell einer künstlichen Intelligenz/maschinellen Lernens (AI-/ML-Modell) implementieren kann, um die Anweisungen zu erzeugen) usw. erhalten. In einigen Beispielen kann die externe Hardware 1406 den Mikroprozessor 1300 von 13 implementieren. Die FPGA-Schaltung 1400 beinhaltet auch ein Array von beispielhaften Logikgatterschaltungen 1408, mehrere beispielhafte konfigurierbare Zwischenverbindungen 1410 und beispielhafte Speicherungsschaltung 1412. Die Logikgatterschaltung 1408 und die Zwischenverbindungen 1410 sind dazu auslegbar, eine oder mehrere Operationen zu instanziieren, die mindestens einigen der maschinenlesbaren Anweisungen von 12 und/oder anderen gewünschten Operationen entsprechen können. Die in 14 gezeigte Logikgatterschaltung 1408 ist in Gruppen oder Blöcken gefertigt. Jeder Block beinhaltet halbleiterbasierte elektrische Strukturen, die zu Logikschaltungen konfiguriert sein können. In einigen Beispielen beinhalten die elektrischen Strukturen Logikgatter (zum Beispiel And-Gatter, Or-Gatter, Nor-Gatter usw.), die Basisbausteine für Logikschaltungen bereitstellen. Elektrisch steuerbare Schalter (zum Beispiel Transistoren) sind innerhalb jeder der Logikgatterschaltungen 1408 vorhanden, um eine Konfiguration der elektrischen Strukturen und/oder der Logikgatter zu ermöglichen, um Schaltungen zum Ausführen gewünschter Operationen zu bilden. Die Logikgatterschaltung 1408 kann andere elektrische Strukturen beinhalten, wie zum Beispiel Nachschlagetabellen (Look-Up Tables - LUT), Register (zum Beispiel Flip-Flops oder Latches), Multiplexer usw.
  • Die Zwischenverbindungen 1410 des veranschaulichten Beispiels sind leitfähige Pfade, Spuren, Vias, oder dergleichen, die elektrisch steuerbare Schalter (zum Beispiel Transistoren) beinhalten können, deren Zustand durch Programmieren (zum Beispiel durch Verwenden einer HDL-Anweisungssprache) geändert werden kann, um eine oder mehrere Verbindungen zwischen einer oder mehreren der Logikgatterschaltungen 1408 zu aktivieren oder zu deaktivieren, um gewünschte Logikschaltungen zu programmi eren.
  • Die Speicherungsschaltung 1412 des veranschaulichten Beispiels ist dazu strukturiert, ein oder mehrere Ergebnisse der einen oder der mehreren durch entsprechende Logikgatter ausgeführten Operationen zu speichern. Die Speicherungsschaltung 1412 kann durch Register oder dergleichen implementiert werden. In dem veranschaulichten Beispiel ist die Speicherungsschaltung 1412 über die Logikgatterschaltung 1408 verteilt, um einen Zugriff zu vereinfachen, und eine Ausführungsgeschwindigkeit zu erhöhen.
  • Die beispielhafte FPGA-Schaltung 1400 von 14 beinhaltet auch beispielhafte fest zugeordnete Operationsschaltung 1414. In diesem Beispiel beinhaltet die fest zugeordnete Operationsschaltung 1414 Spezialschaltung 1416, die aufgerufen werden kann, um üblicherweise verwendete Funktionen zu implementieren, um die Notwendigkeit zu vermeiden, diese Funktionen in dem Feld zu programmieren. Beispiele für eine solche Spezialschaltung 1416 beinhalten eine Speicher (zum Beispiel DRAM) -Steuerschaltung, PCIe-Steuerschaltung, Taktschaltung, Transceiverschaltung, Speicher und Multiplikator-Akkumulatorschaltung. Andere Typen von Spezialschaltung können vorhanden sein. In einigen Beispielen kann die FPGA-Schaltung 1400 auch beispielhafte programmierbare Mehrzweckschaltung 1418, wie zum Beispiel beispielhafte CPU 1420 und/oder beispielhaften DSP 1422, beinhalten. Eine andere programmierbare Mehrzweckschaltung 1418 kann zusätzlich oder alternativ vorhanden sein, wie zum Beispiel eine GPU, eine XPU usw., die dazu programmiert sein können, andere Operationen auszuführen.
  • Obwohl die 13 und 14 zwei beispielhafte Implementierungen der Prozessorschaltung 1212 von 12 veranschaulichen, werden viele andere Ansätze in Erwägung gezogen. Zum Beispiel kann, wie oben erwähnt, eine moderne FPGA-Schaltung eine interne CPU, wie zum Beispiel eine oder mehrere der beispielhaften CPU 1420 von 14, beinhalten. Deshalb kann die Prozessorschaltung 1212 von 12 zusätzlich durch Kombinieren des beispielhaften Mikroprozessors 1300 von 13 und der beispielhaften FPGA-Schaltung 1400 von 14 implementiert werden. In einigen solchen hybriden Beispielen kann ein erster Abschnitt der durch die Flussdiagramme der 8-11 dargestellten maschinenlesbaren Anweisungen durch einen oder mehrere der Kerne 1302 von 13 ausgeführt werden, ein zweiter Abschnitt der durch die Flussdiagramme der 8-11 dargestellten maschinenlesbaren Anweisungen kann durch die FPGA-Schaltung 1400 von 14 ausgeführt werden, und/oder ein dritter Abschnitt der durch die Flussdiagramme der 8-11 dargestellten maschinenlesbaren Anweisungen kann durch eine ASIC ausgeführt werden. Es versteht sich, dass einige oder alle der Schaltungen von 2 somit zur selben Zeit oder zu unterschiedlichen Zeiten instanziiert werden können. Einige oder alle der Schaltungen können zum Beispiel in einem oder mehreren Threads instanziiert werden, die gleichzeitig und/oder in Reihe ausgeführt werden. Außerdem können in einigen Beispielen einige oder alle der Schaltungen von 2 durch eine oder mehrere virtuelle Maschinen und/oder Container, die auf dem Mikroprozessor ausgeführt werden, implementiert werden.
  • In einigen Beispielen kann sich die Prozessorschaltung 1212 von 12 in einem oder mehreren Packages befinden. Zum Beispiel können sich die Prozessorschaltung 1300 von 13 und/oder die FPGA-Schaltung 1400 von 14 in einem oder mehreren Packages befinden. In einigen Beispielen kann eine XPU durch die Prozessorschaltung 1212 von 12 implementiert werden, die sich in einem oder mehreren Packages befinden kann. Zum Beispiel kann die XPU eine CPU in einem Package, ein DSP in einem anderen Package, eine GPU in noch einem anderen Package und ein FPGA in noch einem anderen Package beinhalten.
  • Ein Blockdiagramm, das beispielhafte Softwareverteilungsplattform 1505 zum Verteilen von Software, wie zum Beispiel der beispielhaften maschinenlesbaren Anweisungen 1232 von 12, auf Hardwaregeräte veranschaulicht, die Eigentum von Drittparteien sind und/oder durch diese betrieben werden, ist in 15 veranschaulicht. Die beispielhafte Softwareverteilungsplattform 1505 kann durch jeglichen Computerserver, jegliche Datenanlage, jeglichen Cloud-Dienst usw. implementiert werden, der/die geeignet ist, Software zu speichern und zu anderen Datenverarbeitungsgeräten zu übertragen. Die Drittparteien können Kunden der Entität sein, die im Besitz der Softwareverteilungsplattform 1505 sind und/oder diese betreiben. Zum Beispiel kann die Entität, die die Softwareverteilungsplattform 1505 besitzt und/oder betreibt, ein Entwickler, ein Verkäufer und/oder ein Lizenzgeber einer Software, wie zum Beispiel der beispielhaften maschinenlesbaren Anweisungen 1232 von 12, sein. Die Drittparteien können Verbraucher, Benutzer, Einzelhändler, OEM usw. sein, die die Software zur Verwendung und/oder zum Weiterverkauf und/oder zum Unterlizenzieren kaufen und/oder lizenzieren. In dem veranschaulichten Beispiel beinhaltet die Softwareverteilungsplattform 1505 einen oder mehrere Server und ein oder mehrere Speicherungsgeräte. Die Speicherungsgeräte speichern die maschinenlesbaren Anweisungen 1232, die den beispielhaften maschinenlesbaren Anweisungen der 8-11 entsprechen können, wie oben beschriebenen. Der eine oder die mehreren Server der beispielhaften Softwareverteilungsplattform 1505 sind in Kommunikation mit Netzwerk 1510, das dem Internet und/oder jeglichen der oben beschriebenen beispielhaften Netzwerke 204 entsprechen kann. In einigen Beispielen reagieren der eine oder die mehreren Server auf Anforderungen zur Übertragung der Software an eine anfordernde Partei als Teil einer kommerziellen Transaktion. Die Zahlung für die Lieferung, den Verkauf und/oder die Lizenzierung der Software kann durch den einen oder die mehreren Server der Softwareverteilungsplattform und/oder durch eine Zahlungsentität einer Drittpartei gehandhabt werden. Die Server ermöglichen es Käufern und/oder Lizenzgebern, die maschinenlesbaren Anweisungen 1232 von der Softwareverteilungsplattform 1505 herunterzuladen. Zum Beispiel kann die Software, die den beispielhaften maschinenlesbaren Anweisungen der 8-11 entspricht, auf die beispielhafte Prozessorplattform 1200 heruntergeladen werden, die die maschinenlesbaren Anweisungen 1232 ausführen soll, um die beispielhafte Fehlererkennungsschaltung 104 zu implementieren. In einem Beispiel bieten ein oder mehrere Server der Softwareverteilungsplattform 1505 periodisch Aktualisierungen an der Software (zum Beispiel den beispielhaften maschinenlesbaren Anweisungen 1232 von 12) an, übertragen und/oder erzwingen diese, um zu gewährleisten, dass Verbesserungen, Patches, Aktualisierungen usw. verteilt und auf die Software an den Endbenutzergeräten angewendet werden.
  • Von dem Vorstehenden versteht es sich, dass beispielhafte Systeme, Verfahren, Vorrichtungen und Herstellungsartikel offenbart wurden, die einen verfeinerten Kontext für Softwarefehlerkorrektur bestimmen. Offenbarte Systeme, Verfahren, Vorrichtungen und Herstellungsartikel verbessern die Effizienz der Verwendung eines Datenverarbeitungsgeräts, indem sie einen größeren Abschnitt des Fehlerkontexts als vorherige Lösungen bereitstellen, was eine genauere und effizientere Softwarefehlerkorrektur ermöglicht. Offenbarte Systeme, Verfahren, Vorrichtungen und Herstellungsartikel sind dementsprechend auf eine oder mehrere Verbesserungen des Betriebs einer Maschine, wie zum Beispiel eines Computers oder eines anderen elektronischen und/oder mechanischen Geräts, ausgerichtet.
  • Beispielhafte Verfahren, Vorrichtungen, Systeme und Herstellungsartikel zum Bestimmen eines verfeinerten Kontexts für Softwarefehlererkennung und/oder -Korrektur werden hierin offenbart. Weitere Beispiele und Kombinationen davon beinhalten das folgende.
  • Beispiel 1 beinhaltet eine Vorrichtung zum Bestimmen eines verfeinerten Kontexts zur Softwarefehlererkennung, die eine Schnittstellenschaltung zum Zugreifen auf ein Computerprogramm umfasst, und eine Prozessorschaltung, die eine Zentralverarbeitungseinheit und/oder eine Grafikverarbeitungseinheit und/oder einen digitalen Signalprozessor beinhaltet, wobei die Zentralverarbeitungseinheit und/oder die Grafikverarbeitungseinheit und/oder der digitale Signalprozessor eine Steuerschaltung zum Steuern einer Datenbewegung innerhalb der Prozessorschaltung hat, eine Arithmetik- und Logikschaltung zum Ausführen einer oder mehrerer erster Operationen, die Anweisungen entsprechen, und ein oder mehrere Register zum Speichern eines Ergebnisses der einen oder mehreren ersten Operationen, die Anweisungen in der Vorrichtung, ein Field Programmable Gate Array (FPGA), wobei das FPGA eine Logikgatterschaltung, mehrere konfigurierbare Zwischenverbindungen und eine Speicherungsschaltung beinhaltet, wobei die Logikgatterschaltung und die Zwischenverbindungen eine oder mehrere zweite Operationen ausführen sollen, wobei die Speicherungsschaltung ein Ergebnis des einen oder der mehreren zweiten Operationen speichern soll, oder eine Application Specific Integrated Circuitry (ASIC), die eine Logikgatterschaltung zum Ausführen einer oder mehrerer dritter Operationen beinhaltet, wobei die Prozessorschaltung die erste Operationen und/oder die zweite Operationen und/oder die dritte Operationen ausführen soll, um eine Knotenklassifizierungsschaltung zum Klassifizieren eines Knotens auf einem Graphen zu instanziieren, wobei der Graph das Computerprogramm darstellen soll, wobei der Knoten einen partiellen Fehlerkontext darstellen soll, der dem Computerprogramm entspricht, eine Ortidentifizierungsschaltung zum Identifizieren eines Orts eines Softwarefehlers in dem Computerprogramm, wobei der Ort auf dem Knoten basiert, eine statische Analysatorschaltung zum Bestimmen eines statischen Fehlerkontexts des Softwarefehlers durch Verwenden des Orts des Softwarefehlers, eine dynamische Analysatorschaltung zum Bestimmen eines dynamischen Fehlerkontexts des Softwarefehlers durch Verwenden des Orts des Softwarefehlers, und eine Kontextverfeinerungsschaltung zum Bestimmen eines verfeinerten Fehlerkontexts basierend auf einer Zusammenführung des statischen Fehlerkontexts und des dynamischen Fehlerkontexts.
  • Beispiel 2 beinhaltet die Vorrichtung von Beispiel 1, wobei die Knotenklassifizierungsschaltung eine Wahrscheinlichkeit erzeugen soll, dass der Knoten den Softwarefehler enthält, wobei die Wahrscheinlichkeit auf einem neuronalen Netzwerk basiert, wobei das neuronale Netzwerk durch Verwenden von festgelegtem Code in einem Coderepositorium trainiert wird.
  • Beispiel 3 beinhaltet die Vorrichtung von Beispiel 2, wobei die Knotenklassifizierungsschaltung den Knoten als den Softwarefehler enthaltend klassifizieren soll, falls die Wahrscheinlichkeit einen Schwellenwert einhält.
  • Beispiel 4 beinhaltet die Vorrichtung von Beispiel 1, wobei die Ortidentifizierungsschaltung den Ort basierend auf Abbildungsregeln identifizieren soll.
  • Beispiel 5 beinhaltet die Vorrichtung von Beispiel 1, wobei die Knotenklassifizierungsschaltung mehrere Knoten als den Softwarefehler enthaltend klassifizieren soll, und die Ortidentifizierungsschaltung eine Vereinigung von Codeorten als den Ort des Softwarefehlers bestimmen soll, wobei die Vereinigung von Codeorten die mehreren Knoten darstellt.
  • Beispiel 6 beinhaltet die Vorrichtung von Beispiel 1, wobei der statische Fehlerkontext ein Abschnitt des Computerprogramms ist, der das Verhalten des Orts des Softwarefehlers beeinflusst.
  • Beispiel 7 beinhaltet die Vorrichtung von Beispiel 1, wobei die dynamische Analysatorschaltung das Computerprogramm mit einer Testbedingung ausführen soll, wobei der dynamische Fehlerkontext einen Ausführungspfad der Testbedingung darstellen soll, wobei der Ausführungspfad den Ort des Softwarefehlers beinhalten soll.
  • Beispiel 8 beinhaltet die Vorrichtung von Beispiel 1, wobei die dynamische Analysatorschaltung einen ersten dynamischen Fehlerkontext und einen zweiten dynamischen Fehlerkontext bestimmen soll, wobei die Kontextverfeinerungsschaltung den dynamischen Fehlerkontext von dem ersten dynamischen Fehlerkontext und dem zweiten dynamischen Fehlerkontext bestimmen soll, wobei der dynamische Fehlerkontext basierend darauf bestimmt wird, dass eine erste Überlappung zwischen dem ersten dynamischen Fehlerkontext und dem statischen Fehlerkontext größer ist als eine zweite Überlappung zwischen dem zweiten dynamischen Fehlerkontext und dem statischen Fehlerkontext.
  • Beispiel 9 beinhaltet die Vorrichtung von Beispiel 1, die ferner eine Kontextverifizierungsschaltung beinhaltet, um zu verifizieren, dass der verfeinerte Fehlerkontext den Softwarefehler enthält, wobei die Verifizierung auf einem Binärklassifizierer basiert, wobei der Binärklassifizierer durch Verwenden von festgelegtem Code in einem Coderepositorium trainiert wird.
  • Beispiel 10 beinhaltet mindestens ein nichtflüchtiges maschinenlesbares Medium, das Anweisungen umfasst, die, wenn ausgeführt, mindestens einen Prozessor dazu veranlassen, mindestens einen Knoten auf einem Graphen zu klassifizieren, wobei der Graph ein Computerprogramm darstellen soll, wobei der Knoten einen partiellen Fehlerkontext darstellen soll, der dem Computerprogramm entspricht, einen Ort eines Softwarefehlers in dem Computerprogramm zu identifizieren, wobei der Ort auf dem Knoten basiert, einen statischen Fehlerkontext des Softwarefehlers durch Verwenden des Orts des Softwarefehlers zu bestimmen, einen dynamischen Fehlerkontext des Softwarefehlers durch Verwenden des Orts des Softwarefehlers zu bestimmen, und einen verfeinerten Fehlerkontext basierend auf einer Zusammenführung des statischen Fehlerkontexts und des dynamischen Fehlerkontexts zu bestimmen.
  • Beispiel 11 beinhaltet das mindestens eine nichtflüchtige maschinenlesbare Medium von Beispiel 10, wobei die Anweisungen, wenn ausgeführt, den mindestens einen Prozessor dazu veranlassen, eine Wahrscheinlichkeit zu erzeugen, dass der Knoten den Softwarefehler enthält, wobei die Wahrscheinlichkeit auf einem neuronalen Netzwerk basiert, wobei das neuronale Netzwerk durch Verwenden eines festgelegten Codes in einem Coderepositorium trainiert wird.
  • Beispiel 12 beinhaltet das mindestens eine nichtflüchtige maschinenlesbare Medium von Beispiel 11, wobei die Anweisungen, wenn ausgeführt, den mindestens einen Prozessor dazu veranlassen, den Knoten als den Softwarefehler enthaltend zu klassifizieren, falls die Wahrscheinlichkeit einen Schwellenwert einhält.
  • Beispiel 13 beinhaltet das mindestens eine nichtflüchtige maschinenlesbare Medium des Beispiels 10, wobei die Anweisungen, wenn ausgeführt, den mindestens einen Prozessor dazu veranlassen, den Ort basierend auf Abbildungsregeln zu identifizieren.
  • Beispiel 14 beinhaltet das mindestens eine nichtflüchtige maschinenlesbare Medium von Beispiel 10, wobei die Anweisungen, wenn ausgeführt, den mindestens einen Prozessor dazu veranlassen, mehrere Knoten als den Softwarefehler enthaltend zu klassifizieren, und eine Vereinigung von Codeorten als den Ort des Softwarefehlers zu bestimmen, wobei die Vereinigung von Codeorten die mehreren Knoten darstellt.
  • Beispiel 15 beinhaltet das mindestens eine nichtflüchtige maschinenlesbare Medium von Beispiel 10, wobei der statische Fehlerkontext ein Abschnitt des Computerprogramms ist, der das Verhalten des Orts des Softwarefehlers beeinflusst.
  • Beispiel 16 beinhaltet das mindestens eine nichtflüchtige maschinenlesbare Medium von Beispiel 10, wobei die Anweisungen, wenn ausgeführt, den mindestens einen Prozessor dazu veranlassen, das Computerprogramm mit einer Testbedingung auszuführen, wobei der dynamische Fehlerkontext einen Ausführungspfad der Testbedingung darstellen soll, wobei der Ausführungspfad den Ort des Softwarefehlers beinhalten soll.
  • Beispiel 17 beinhaltet das mindestens eine nichtflüchtige maschinenlesbare Medium von Beispiel 10, wobei die Anweisungen, wenn ausgeführt, den mindestens einen Prozessor dazu veranlassen, einen ersten dynamischen Fehlerkontext und einen zweiten dynamischen Fehlerkontext zu bestimmen, wobei der dynamische Fehlerkontext von dem ersten dynamischen Fehlerkontext und dem zweiten dynamischen Fehlerkontext bestimmt wird, wobei der dynamische Fehlerkontext basierend darauf bestimmt wird, dass eine erste Überlappung zwischen dem ersten dynamischen Fehlerkontext und dem statischen Fehlerkontext größer ist als eine zweite Überlappung zwischen dem zweiten dynamischen Fehlerkontext und dem statischen Fehlerkontext.
  • Beispiel 18 beinhaltet das mindestens eine nichtflüchtige maschinenlesbare Medium von Beispiel 10, wobei die Anweisungen, wenn ausgeführt, den mindestens einen Prozessor dazu veranlassen, zu verifizieren, dass der verfeinerte Fehlerkontext den Softwarefehler enthält, wobei die Verifizierung auf einem Binärklassifizierer basiert, wobei der Binärklassifizierer durch Verwenden von festgelegtem Code in einem Coderepositorium trainiert wird.
  • Beispiel 19 beinhaltet ein Verfahren zum Bestimmen eines verfeinerten Kontexts für Softwarefehlererkennung, wobei das Verfahren Folgendes umfasst: Klassifizieren eines Knotens auf einem Graphen, wobei der Graph ein Computerprogramm darstellen soll, wobei der Knoten einen partiellen Fehlerkontext darstellen soll, der dem Computerprogramm entspricht, Identifizieren eines Orts eines Softwarefehlers in dem Computerprogramm, wobei der Ort auf dem Knoten basiert, Bestimmen eines statischen Fehlerkontexts des Softwarefehlers durch Verwenden des Orts des Softwarefehlers, Bestimmen eines dynamischen Fehlerkontexts des Softwarefehlers durch Verwenden des Orts des Softwarefehlers, und Bestimmen eines verfeinerten Fehlerkontexts basierend auf einer Zusammenführung des statischen Fehlerkontexts und des dynamischen Fehlerkontexts.
  • Beispiel 20 beinhaltet das Verfahren von Beispiel 19, das ferner Erzeugen einer Wahrscheinlichkeit beinhaltet, dass der Knoten den Softwarefehler enthält, wobei die Wahrscheinlichkeit auf einem neuronalen Netzwerk basiert, wobei das neuronale Netzwerk durch Verwendung von festgelegtem Code in einem Coderepositorium trainiert wird.
  • Beispiel 21 beinhaltet das Verfahren von Beispiel 20, das ferner Klassifizieren des Knotens als den Softwarefehler enthaltend beinhaltet, falls die Wahrscheinlichkeit einen Schwellenwert einhält.
  • Beispiel 22 beinhaltet das Verfahren von Beispiel 19, das ferner Identifizieren des Orts basierend auf Abbildungsregeln beinhaltet.
  • Beispiel 23 beinhaltet das Verfahren von Beispiel 19, das ferner Klassifizieren mehrerer Knoten als den Softwarefehler enthaltend und Bestimmen einer Vereinigung von Codeorten als den Ort des Softwarefehlers beinhaltet, wobei die Vereinigung von Codeorten die mehreren Knoten darstellt.
  • Beispiel 24 beinhaltet das Verfahren von Beispiel 19, wobei der statische Fehlerkontext ein Abschnitt des Computerprogramms ist, der das Verhalten des Orts des Softwarefehlers beeinflusst.
  • Beispiel 25 beinhaltet das Verfahren von Beispiel 19, das ferner Ausführen des Computerprogramms mit einer Testbedingung beinhaltet, wobei der dynamische Fehlerkontext einen Ausführungspfad der Testbedingung darstellen soll, wobei der Ausführungspfad den Ort des Softwarefehlers beinhalten soll.
  • Beispiel 26 beinhaltet das Verfahren von Beispiel 19, das ferner Bestimmen eines ersten dynamischen Fehlerkontexts und eines zweiten dynamischen Fehlerkontexts beinhaltet, wobei der dynamische Fehlerkontext von dem ersten dynamischen Fehlerkontext und dem zweiten dynamischen Fehlerkontext bestimmt wird, wobei der dynamische Fehlerkontext basierend darauf bestimmt wird, dass eine erste Überlappung zwischen dem ersten dynamischen Fehlerkontext und dem statischen Fehlerkontext größer ist als eine zweite Überlappung zwischen dem zweiten dynamischen Fehlerkontext und dem statischen Fehlerkontext.
  • Beispiel 27 beinhaltet das Verfahren von Beispiel 19, das ferner Verifizieren beinhaltet, dass der verfeinerte Fehlerkontext den Softwarefehler enthält, wobei die Verifizierung auf einem Binärklassifizierer basiert, wobei der Binärklassifizierer durch Verwenden von festgelegtem Code in einem Coderepositorium trainiert wird.
  • Beispiel 28 beinhaltet eine Vorrichtung zum Bestimmen eines verfeinerten Kontexts für Softwarefehlererkennung, die Folgendes umfasst: Mittel zum Klassifizieren eines Knotens auf einem Graphen, wobei der Graph ein Computerprogramm darstellen soll, wobei der Knoten einen partiellen Fehlerkontext enthalten soll, der dem Computerprogramm entspricht, Mittel zum Identifizieren eines Orts eines Softwarefehlers in dem Computerprogramm, wobei der Ort auf dem Knoten basiert, Mittel zum Bestimmen eines statischen Fehlerkontexts des Softwarefehlers durch Verwenden des Orts des Softwarefehlers, Mittel zum Bestimmen eines dynamischen Fehlerkontexts des Softwarefehlers durch Verwenden des Orts des Softwarefehlers, und Mittel zum Bestimmen eines verfeinerten Fehlerkontexts basierend auf einer Zusammenführung des statischen Fehlerkontexts und des dynamischen Fehlerkontexts.
  • Beispiel 29 beinhaltet die Vorrichtung von Beispiel 28, die ferner Mittel zum Erzeugen einer Wahrscheinlichkeit beinhalten soll, dass der Knoten den Softwarefehler enthält, wobei die Wahrscheinlichkeit auf einem neuronalen Netzwerk basiert, wobei das neuronale Netzwerk durch Verwendung von festgelegtem Code in einem Coderepositorium trainiert wird.
  • Beispiel 30 beinhaltet die Vorrichtung von Beispiel 29, die ferner Mittel zum Klassifizieren des Knotens als den Softwarefehler enthaltend beinhaltet, falls die Wahrscheinlichkeit einen Schwellenwert einhält.
  • Beispiel 31 beinhaltet die Vorrichtung von Beispiel 28, die ferner Mittel zum Identifizieren des Orts basierend auf Abbildungsregeln beinhaltet.
  • Beispiel 32 beinhaltet die Vorrichtung von Beispiel 28, die ferner Mittel zum Klassifizieren mehrerer Knoten als den Softwarefehler enthaltend und Bestimmen einer Vereinigung von Codeorten als den Ort des Softwarefehlers beinhaltet, wobei die Vereinigung von Codeorten die mehreren Knoten darstellt.
  • Beispiel 33 beinhaltet die Vorrichtung von Beispiel 28, wobei der statische Fehlerkontext ein Abschnitt des Computerprogramms ist, der das Verhalten des Orts des Softwarefehlers beeinflusst.
  • Beispiel 34 beinhaltet die Vorrichtung von Beispiel 28, die ferner Mittel zum Ausführen des Computerprogramms mit einer Testbedingung beinhaltet, wobei der dynamische Fehlerkontext einen Ausführungspfad der Testbedingung darstellen soll, wobei der Ausführungspfad den Ort des Softwarefehlers beinhalten soll.
  • Beispiel 35 beinhaltet die Vorrichtung von Beispiel 28, die ferner Mittel zum Bestimmen eines ersten dynamischen Fehlerkontexts und eines zweiten dynamischen Fehlerkontexts beinhaltet, wobei der dynamische Fehlerkontext von dem ersten dynamischen Fehlerkontext und dem zweiten dynamischen Fehlerkontext bestimmt wird, wobei der dynamische Fehlerkontext basierend darauf bestimmt wird, dass eine erste Überlappung zwischen dem ersten dynamischen Fehlerkontext und dem statischen Fehlerkontext größer ist als eine zweite Überlappung zwischen dem zweiten dynamischen Fehlerkontext und dem statischen Fehlerkontext.
  • Beispiel 36 beinhaltet die Vorrichtung von Beispiel 28, die ferner Mittel zum Verifizieren beinhaltet, dass der verfeinerte Fehlerkontext den Softwarefehler enthält, wobei die Verifizierung auf einem Binärklassifizierer basiert, wobei der Binärklassifizierer durch Verwenden von festgelegtem Code in einem Coderepositorium trainiert wird.
  • Die folgenden Ansprüche werden hiermit durch diese Bezugnahme in diese detaillierte Beschreibung aufgenommen. Obwohl bestimmte beispielhafte Systeme, Verfahren, Vorrichtungen und Herstellungsartikel hierin offenbart worden sind, ist der Umfang der Abdeckung dieses Patents nicht darauf beschränkt. Vielmehr deckt dieses Patent alle Systeme, Verfahren, Vorrichtungen und Herstellungsartikel ab, die in angemessener Weise in den Umfang der Ansprüche dieses Patents fallen.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Nicht-Patentliteratur
    • C, C++, Java, C#, Perl, Python, JavaScript, HyperText Markup Language (HTML), Structured Query Language (SQL), Swift [0083]

Claims (25)

  1. Vorrichtung zum Bestimmen eines verfeinerten Kontexts für Softwarefehlererkennung, wobei die Vorrichtung Folgendes umfasst: eine Schnittstellenschaltung zum Zugreifen auf ein Computerprogramm; und eine Prozessorschaltung, die eines oder mehrere von Folgendem beinhaltet: eine Zentralverarbeitungseinheit und/oder eine Grafikverarbeitungseinheit und/oder einen digitalen Signalprozessor, wobei die Zentralverarbeitungseinheit und/oder die Grafikverarbeitungseinheit und/oder der digitale Signalprozessor eine Steuerschaltung zum Steuern von Datenbewegungen innerhalb der Prozessorschaltung, eine Arithmetik- und Logikschaltung zum Ausführen einer oder mehrerer erster Operationen, die Anweisungen entsprechen, und ein oder mehrere Register zum Speichern eines Ergebnisses der einen oder der mehreren ersten Operationen hat, wobei sich die Anweisungen in der Vorrichtung befinden; ein Field Programmable Gate Array (FPGA), wobei das FPGA eine Logikgatterschaltung, mehrere konfigurierbare Zwischenverbindungen und Speicherungsschaltungen beinhaltet, wobei die Logikgatterschaltung und die Zwischenverbindungen eine oder mehrere zweite Operationen ausführen sollen, wobei die Speicherungsschaltung ein Ergebnis der einen oder der mehreren zweiten Operationen speichern soll; oder eine Application Specific Integrate Circuitry (ASIC), die eine Logikgatterschaltung zum Ausführen einer oder mehrerer dritter Operationen beinhaltet; wobei die Prozessorschaltung zum Ausführen der ersten Operationen und/oder der zweiten Operationen und/oder der dritten Operationen Folgendes instanziieren soll: eine Knotenklassifizierungsschaltung zum Klassifizieren eines Knotens auf einem Graphen, wobei der Graph das Computerprogramm darstellen soll, wobei der Knoten einen partiellen Fehlerkontext darstellen soll, der dem Computerprogramm entspricht; eine Ortidentifizierungsschaltung zum Identifizieren eines Orts eines Softwarefehlers in dem Computerprogramm, wobei der Ort auf dem Knoten basiert; eine statische Analysatorschaltung zum Bestimmen eines statischen Fehlerkontexts des Softwarefehlers durch Verwenden des Orts des Softwarefehlers; Eine dynamische Analysatorschaltung zum Bestimmen eines dynamischen Fehlerkontexts des Softwarefehlers durch Verwenden des Orts des Softwarefehlers; und Eine Kontextverfeinerungsschaltung zum Bestimmen eines verfeinerten Fehlerkontexts basierend auf einer Zusammenführung des statischen Fehlerkontexts und des dynamischen Fehlerkontexts.
  2. Vorrichtung nach Anspruch 1, wobei die Knotenklassifizierungsschaltung eine Wahrscheinlichkeit erzeugen soll, dass der Knoten den Softwarefehler enthält, wobei die Wahrscheinlichkeit auf einem neuronalen Netzwerk basiert, wobei das neuronale Netzwerk durch Verwendung von festgelegtem Code in einem Coderepositorium trainiert wird.
  3. Vorrichtung nach Anspruch 2, wobei die Knotenklassifizierungsschaltung den Knoten als den Softwarefehler enthaltend klassifizieren soll, falls die Wahrscheinlichkeit einen Schwellenwert einhält.
  4. Vorrichtung nach einem der Ansprüche 1 oder 2, wobei die Ortidentifizierungsschaltung den Ort basierend auf Abbildungsregeln identifizieren soll.
  5. Vorrichtung nach einem der Ansprüche 1 oder 4, wobei die Knotenklassifizierungsschaltung mehrere Knoten als den Softwarefehler enthaltend klassifizieren soll, und die Ortidentifizierungsschaltung eine Vereinigung von Codeorten als den Ort des Softwarefehlers bestimmen soll, wobei die Vereinigung von Codeorten die mehreren Knoten darstellt.
  6. Vorrichtung nach Anspruch 1, wobei der statische Fehlerkontext ein Abschnitt des Computerprogramms ist, der das Verhalten des Orts des Softwarefehlers beeinflusst.
  7. Vorrichtung nach Anspruch 1, wobei die dynamische Analysatorschaltung das Computerprogramm mit einer Testbedingung ausführen soll, wobei der dynamische Fehlerkontext einen Ausführungspfad der Testbedingung darstellen soll, wobei der Ausführungspfad den Ort des Softwarefehlers beinhalten soll.
  8. Vorrichtung nach Anspruch 1, wobei die dynamische Analysatorschaltung einen ersten dynamischen Fehlerkontext und einen zweiten dynamischen Fehlerkontext bestimmen soll, wobei die Kontextverfeinerungsschaltung den dynamischen Fehlerkontext von dem ersten dynamischen Fehlerkontext und dem zweiten dynamischen Fehlerkontext bestimmen soll, wobei der dynamische Fehlerkontext basierend darauf bestimmt wird, dass eine erste Überlappung zwischen dem ersten dynamischen Fehlerkontext und dem statischen Fehlerkontext größer als ist eine zweite Überlappung zwischen dem zweiten dynamischen Fehlerkontext und dem statischen Fehlerkontext.
  9. Vorrichtung nach Anspruch 1, die ferner eine Kontextverifizierungsschaltung beinhaltet, um zu verifizieren, dass der verfeinerte Fehlerkontext den Softwarefehler enthält, wobei die Verifizierung auf einem Binärklassifizierer basiert, wobei der Binärklassifizierer durch Verwenden von festgelegtem Code in einem Coderepositorium trainiert wird.
  10. Verfahren zum Bestimmen eines verfeinerten Kontexts für Softwarefehlererkennung, wobei das Verfahren Folgendes umfasst: Klassifizieren eines Knotens auf einem Graphen, wobei der Graph ein Computerprogramm darstellen soll, wobei der Knoten einen partiellen Fehlerkontext darstellen soll, der dem Computerprogramm entspricht; Identifizieren eines Orts eines Softwarefehlers in dem Computerprogramm, wobei der Ort auf dem Knoten basiert; Bestimmen eines statischen Fehlerkontexts des Softwarefehlers durch Verwenden des Orts des Softwarefehlers; Bestimmen eines dynamischen Fehlerkontexts des Softwarefehlers durch Verwenden des Orts des Softwarefehlers; und Bestimmen eines verfeinerten Fehlerkontexts basierend auf einer Zusammenführung des statischen Fehlerkontexts und des dynamischen Fehlerkontexts.
  11. Verfahren nach Anspruch 10, das ferner Erzeugen einer Wahrscheinlichkeit beinhaltet, dass der Knoten den Softwarefehler enthält, wobei die Wahrscheinlichkeit auf einem neuronalen Netzwerk basiert, wobei das neuronale Netzwerk durch Verwenden von festgelegtem Code in einem Coderepositorium trainiert wird.
  12. Verfahren nach Anspruch 11, das ferner Klassifizieren des Knotens als den Softwarefehler enthaltend beinhaltet, falls die Wahrscheinlichkeit einen Schwellenwert einhält.
  13. Verfahren nach einem der Ansprüche 10 oder 11, das ferner Identifizieren des Orts basierend auf Abbildungsregeln beinhaltet.
  14. Verfahren nach einem der Ansprüche 10 oder 13, das ferner Klassifizieren mehrerer Knoten als den Softwarefehler enthaltend und Bestimmen einer Vereinigung von Codeorten als den Ort des Softwarefehlers beinhaltet, wobei die Vereinigung von Codeorten die mehreren Knoten darstellt.
  15. Verfahren nach Anspruch 10, wobei der statische Fehlerkontext ein Abschnitt des Computerprogramms ist, der das Verhalten des Orts des Softwarefehlers beeinflusst.
  16. Verfahren nach Anspruch 10, das ferner Ausführen des Computerprogramms mit einer Testbedingung beinhaltet, wobei der dynamische Fehlerkontext einen Ausführungspfad der Testbedingung darstellen soll, wobei der Ausführungspfad den Ort des Softwarefehlers beinhalten soll.
  17. Verfahren nach Anspruch 10, das ferner Bestimmen eines ersten dynamischen Fehlerkontexts und eines zweiten dynamischen Fehlerkontexts beinhaltet, wobei der dynamische Fehlerkontext von dem ersten dynamischen Fehlerkontext und dem zweiten dynamischen Fehlerkontext bestimmt wird, wobei der dynamische Fehlerkontext basierend darauf bestimmt wird, dass eine erste Überlappung zwischen dem ersten dynamischen Fehlerkontext und dem statischen Fehlerkontext größer ist als eine zweite Überlappung zwischen dem zweiten dynamischen Fehlerkontext und dem statischen Fehlerkontext.
  18. Verfahren nach Anspruch 10, das ferner Verifizieren beinhaltet, dass der verfeinerte Fehlerkontext den Softwarefehler enthält, wobei die Verifizierung auf einem Binärklassifizierer basiert, wobei der Binärklassifizierer durch Verwenden von festgelegtem Code in einem Coderepositorium trainiert wird.
  19. Mindestens ein maschinenlesbares Medium, das Anweisungen umfasst, die, wenn ausgeführt, eine programmierbare Schaltung dazu veranlassen, mindestens Folgendes auszuführen: Klassifizieren eines Knotens auf einem Graphen, wobei der Graph ein Computerprogramm darstellen soll, wobei der Knoten einen partiellen Fehlerkontext darstellen soll, der dem Computerprogramm entspricht; Identifizieren eines Orts eines Softwarefehlers in dem Computerprogramm, wobei der Ort auf dem Knoten basiert; Bestimmen eines statischen Fehlerkontexts des Softwarefehlers durch Verwenden des Orts des Softwarefehlers; Bestimmen eines dynamischen Fehlerkontexts des Softwarefehlers durch Verwenden des Orts des Softwarefehlers; und Bestimmen eines verfeinerten Fehlerkontexts basierend auf einer Zusammenführung des statischen Fehlerkontexts und des dynamischen Fehlerkontexts.
  20. Mindestens ein maschinenlesbares Medium nach Anspruch 19, wobei die Anweisungen die programmierbare Schaltung dazu veranlassen sollen, eine Wahrscheinlichkeit zu erzeugen, dass der Knoten den Softwarefehler enthält, wobei die Wahrscheinlichkeit auf einem neuronalen Netzwerk basiert, wobei das neuronale Netzwerk durch Verwenden von festgelegtem Code in einem Coderepositorium trainiert wird.
  21. Mindestens ein maschinenlesbares Medium nach Anspruch 20, wobei die Anweisungen die programmierbare Schaltung dazu veranlassen sollen, den Knoten als den Softwarefehler enthaltend zu klassifizieren, falls die Wahrscheinlichkeit einen Schwellenwert einhält.
  22. Mindestens ein maschinenlesbares Medium nach Anspruch 19, wobei die Anweisungen die programmierbare Schaltung dazu veranlassen sollen, den Ort basierend auf Abbildungsregeln zu identifizieren.
  23. Vorrichtung zum Bestimmen eines verfeinerten Kontexts für Softwarefehlererkennung, wobei die Vorrichtung Folgendes umfasst: Mittel zum Klassifizieren eines Knotens auf einem Graphen, wobei der Graph ein Computerprogramm darstellen soll, wobei der Knoten einen partiellen Fehlerkontext enthalten soll, der dem Computerprogramm entspricht; Mittel zum Identifizieren eines Orts eines Softwarefehlers in dem Computerprogramm, wobei der Ort auf dem Knoten basiert; Mittel zum Bestimmen eines statischen Fehlerkontexts des Softwarefehlers durch Verwenden des Orts des Softwarefehlers; Mittel zum Bestimmen eines dynamischen Fehlerkontexts des Softwarefehlers durch Verwenden des Orts des Softwarefehlers; und Mittel zum Bestimmen eines verfeinerten Fehlerkontexts basierend auf einer Zusammenführung des statischen Fehlerkontexts und des dynamischen Fehlerkontexts.
  24. Vorrichtung nach Anspruch 23, die ferner Mittel zum Erzeugen einer Wahrscheinlichkeit beinhaltet, dass der Knoten den Softwarefehler enthält, wobei die Wahrscheinlichkeit auf einem neuronalen Netzwerk basiert, wobei das neuronale Netzwerk durch Verwenden von festgelegtem Code in einem Coderepositorium trainiert wird.
  25. Vorrichtung nach Anspruch 24, die ferner Mittel zum Klassifizieren des Knotens als den Softwarefehler enthaltend beinhaltet, falls die Wahrscheinlichkeit einen Schwellenwert einhält.
DE102022129946.5A 2021-12-17 2022-11-11 Verfahren und vorrichtungen zum bestimmen eines verfeinerten kontexts für softwarefehlererkennung und - korrektur Pending DE102022129946A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/554,918 US11782813B2 (en) 2021-12-17 2021-12-17 Methods and apparatus to determine refined context for software bug detection and correction
US17/554,918 2021-12-17

Publications (1)

Publication Number Publication Date
DE102022129946A1 true DE102022129946A1 (de) 2023-06-22

Family

ID=81079021

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102022129946.5A Pending DE102022129946A1 (de) 2021-12-17 2022-11-11 Verfahren und vorrichtungen zum bestimmen eines verfeinerten kontexts für softwarefehlererkennung und - korrektur

Country Status (3)

Country Link
US (1) US11782813B2 (de)
CN (1) CN116266229A (de)
DE (1) DE102022129946A1 (de)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11455566B2 (en) * 2018-03-16 2022-09-27 International Business Machines Corporation Classifying code as introducing a bug or not introducing a bug to train a bug detection algorithm
US11983097B2 (en) 2021-07-26 2024-05-14 EMC IP Holding Company LLC Ranking tests based on code change and coverage
US11513944B1 (en) * 2021-07-26 2022-11-29 EMC IP Holding Company LLC Ranking tests based on code change and coverage

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04350737A (ja) * 1991-05-29 1992-12-04 Nec Corp マイクロコンピュータ
US5699507A (en) * 1995-01-17 1997-12-16 Lucent Technologies Inc. Method of identifying similarities in code segments
US6990612B2 (en) * 2002-07-18 2006-01-24 Hewlett-Packard Development Company, L.P. System and method for preventing software errors
US7975257B2 (en) * 2006-06-13 2011-07-05 Microsoft Corporation Iterative static and dynamic software analysis
US20080244536A1 (en) * 2007-03-27 2008-10-02 Eitan Farchi Evaluating static analysis results using code instrumentation
US8527965B2 (en) * 2008-04-14 2013-09-03 Oracle America, Inc. Layered static program analysis framework for software testing
US8139864B2 (en) * 2008-12-19 2012-03-20 L3 Communications Integrated Systems, L.P. System for non-uniformity correction for image processing
US8522226B2 (en) * 2009-02-09 2013-08-27 Nec Laboratories America, Inc. Control structure refinement of loops using static analysis
EP2261802A1 (de) * 2009-06-10 2010-12-15 ITI Scotland Limited Automatisches Fehlerbeseitigungssystem und Verfahren
WO2012168755A1 (en) * 2011-06-08 2012-12-13 The Mathworks, Inc Identifying and triaging software bugs through backward propagation of under-approximated values and empiric techniques
US9081595B1 (en) * 2011-12-06 2015-07-14 The Mathworks, Inc. Displaying violated coding rules in source code
US10275333B2 (en) * 2014-06-16 2019-04-30 Toyota Jidosha Kabushiki Kaisha Risk analysis of codebase using static analysis and performance data
US10437702B2 (en) * 2016-02-29 2019-10-08 B. G. Negev Technologies And Applications Ltd., At Ben-Gurion University Data-augmented software diagnosis method and a diagnoser therefor
US10360004B2 (en) * 2017-02-27 2019-07-23 International Business Machines Corporation Using dynamic information to refine control flow graphs
US11288592B2 (en) * 2017-03-24 2022-03-29 Microsoft Technology Licensing, Llc Bug categorization and team boundary inference via automated bug detection
US10713145B2 (en) * 2018-01-05 2020-07-14 International Business Machines Corporation Automated debugging with combined static and dynamic analysis
US10733075B2 (en) * 2018-08-22 2020-08-04 Fujitsu Limited Data-driven synthesis of fix patterns
US11003568B2 (en) * 2018-09-22 2021-05-11 Manhattan Engineering Incorporated Error recovery
US10915435B2 (en) * 2018-11-28 2021-02-09 International Business Machines Corporation Deep learning based problem advisor
US10936478B2 (en) * 2019-01-10 2021-03-02 Oracle International Corporation Fast change impact analysis tool for large-scale software systems
US11379221B2 (en) * 2020-02-14 2022-07-05 International Business Machines Corporation Version control mechanisms augmented with semantic analysis for determining cause of software defects
US11550923B2 (en) * 2020-03-30 2023-01-10 Software Ag Systems and/or methods for static-dynamic security testing using a test configurator to identify vulnerabilities and automatically repair defects
US11762758B2 (en) * 2021-03-29 2023-09-19 International Business Machines Corporation Source code fault detection

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
C, C++, Java, C#, Perl, Python, JavaScript, HyperText Markup Language (HTML), Structured Query Language (SQL), Swift

Also Published As

Publication number Publication date
CN116266229A (zh) 2023-06-20
US20220114076A1 (en) 2022-04-14
US11782813B2 (en) 2023-10-10

Similar Documents

Publication Publication Date Title
DE102022129946A1 (de) Verfahren und vorrichtungen zum bestimmen eines verfeinerten kontexts für softwarefehlererkennung und - korrektur
DE102020110536A1 (de) Verfahren, Systeme, Herstellungsgegenstände und Vorrichtungen für ein kontext- und komplexitätsbewusstes Empfehlungssystem zur verbesserten Softwareentwicklungseffizienz
DE102018001229A1 (de) Beschleunigerschaltung mit variabler Wortlänge für ein neuronales Netzwerk
DE202016008042U1 (de) Infrastruktur für Hosting und Publishing von Softwarepaketen
DE102014003689A1 (de) Verfolgung des kontrollflusses von befehlen
DE112011100258T5 (de) Durchführen von aggressiven Codeoptimierungen mit einer Fähigkeit zum Annulieren derdurch die aggressiven Optimierungen vorgenommenen Änderungen
DE102022133809A1 (de) Verfahren, systeme, herstellungsartikel und einrichtungen zur identifizierung von codesemantik
DE102020108374A1 (de) Verfahren und vorrichtung zur laufzeitmehrfachplanung von software, die in einem heterogenen system ausgeführt wird
DE102022105725A1 (de) Verfahren und einrichtungen zur durchführung von gewichtungs- und aktivierungskomprimierung und -dekomprimierung
DE112018004660T5 (de) Verwenden von kommentaren zum bereitstellen von optimierungen
US20120084750A1 (en) Method for Efficiently Managing Property Types and Constraints In a Prototype Based Dynamic Programming Language
DE102022133799A1 (de) Verfahren, einrichtungen und herstellungsartikel zum erzeugen verwendungsabhängiger codeeinbettungen
DE102022107480A1 (de) Verfahren und einrichtungen zum implementieren paralleler architekturen für neuronale netzwerkklassifikatoren
DE102020110542A1 (de) Verfahren und einrichtungen zum ver walten von tickets
DE112016004324T5 (de) Heterogene Kompressionsarchitektur für optimiertes Kompressionsverhältnis
DE102021126598A1 (de) Verfahren, Systeme, Erzeugnisse und Vorrichtungen zur Erzeugung von Codesemantik
DE102022126248A1 (de) Verfahren und Einrichtungen zum Trainieren von Modellen zur Programmsynthese
DE102022126604A1 (de) Einrichtung und verfahren für codeempfehlungen für einen industrieroboter
DE102022133747A1 (de) Vorrichtungen, systeme und verfahren für das intelligente abstimmen von übertaktungsfrequenz
DE102022108108A1 (de) Zwischenspeicherung von kompilierten shader-programmen in einer cloud-computing-umgebung
DE102021129845A1 (de) Verfahren und einrichtung zum konstruieren programmabgeleiteter semantischer graphen
DE102022109136A1 (de) Maschinelles lernen (ml) modellbasierter compiler
DE102022129219A1 (de) Verfahren und Vorrichtung für durch maschinelles Lernen gesteuerte Kompiliereroptimierungen für registerbasierte Hardwarearchitekturen
DE112013007703T5 (de) Befehl und Logik zum Kennzeichnen von Befehlen zur Rückordnung in einem mehrsträngigen Out-of-order-Prozessor
DE102022130788A1 (de) Verfahren, einrichtungen und herstellungsartikel zur erzeugung von befehlslisten zur auslagerung an beschleunigerschaltungsanordnung