Abstrakte Auslegung

In der Informatik ist abstrakte Interpretation einer Theorie der Schall Angleichung der Semantik von Computerprogrammen, basierend auf monotone Funktionen über geordnete Mengen, insbesondere Gitter. Es kann als eine teilweise Ausführung eines Computerprogramms, das Informationen über die Semantik gewinnt, ohne alle die Berechnungen betrachtet werden.

Seine Haupt konkrete Anwendung ist die formale statische Analyse, die automatische Gewinnung von Informationen über die möglichen Ausführungen von Computerprogrammen; Solche Analysen haben zwei Hauptverwendungen:

  • Innen Compiler, um Programme, um zu entscheiden, ob bestimmte Optimierungen oder Transformationen gelten zu analysieren;
  • für die Fehlersuche oder auch die Zertifizierung von Programmen gegen Klassen von Bugs.

Abstrakte Interpretation wurde von Patrick Cousot und Radhia Cousot in den späten 1970er Jahren formalisiert.

Intuition

Dieser Abschnitt zeigt, abstrakte Interpretation mit Hilfe von realen, nicht-Rechenbeispiele.

Betrachten Sie die Personen in einem Konferenzraum. Angenommen, eine eindeutige Kennung für jede Person im Raum, wie eine Sozialversicherungsnummer in den Vereinigten Staaten. Um zu beweisen, dass jemand nicht vorhanden ist, ist alles, was man tun muss sehen, ob ihre Sozialversicherungsnummer ist nicht auf der Liste. Da zwei verschiedene Personen können die gleiche Nummer nicht haben, ist es einfach, indem man seine oder ihre Anzahl möglich, beweisen oder widerlegen die Anwesenheit eines Teilnehmers.

Es ist jedoch möglich, dass nur die Namen der Teilnehmer registriert. Wenn der Name einer Person ist nicht in der Liste gefunden, so können wir sicher schließen, dass diese Person nicht anwesend war; aber wenn es ist, können wir nicht auf jeden Fall beenden, ohne weitere Untersuchungen, aufgrund der Möglichkeit der Homonyme. Beachten Sie, dass ungenaue Informationen werden noch ausreichend für die meisten Zwecke, weil Homonyme sind selten in der Praxis. Doch in allen Strenge, können wir nicht mit Sicherheit sagen, dass jemand in dem Raum vorhanden war; alles, was wir sagen können ist, dass er oder sie möglicherweise hier war. Wenn die Person, die wir schauen oben ist ein Verbrecher, werden wir einen Alarm auszugeben; aber es ist selbstverständlich die Möglichkeit der Ausgabe eines falschen Alarms. Ähnliche Erscheinungen werden in der Analyse von Programmen auftreten.

Wenn wir daran interessiert sind nur in einigen spezifischen Informationen gibt, sagen wir, "war es eine Person im Alter von n im Zimmer?", Halten eine Liste aller Namen und Daten der Geburten ist nicht erforderlich. Wir können sicher und ohne Verlust der Genauigkeit beschränken uns auf das Führen einer Liste der Teilnehmer Alter. Wenn dies schon zu viel zu handhaben, könnten wir nur das Alter des jüngsten, m und älteste Person zu halten, M. Wenn die Frage ist, über eine Alters strikt geringer als m oder streng höher als M, dann können wir mit Sicherheit zu reagieren, dass keine wie Teilnehmer anwesend. Andernfalls können wir nur in der Lage zu sagen, dass wir nicht wissen können.

Im Fall von Datenverarbeitung, Beton, ist präzise Informationen im Allgemeinen nicht berechenbar innerhalb endlicher Zeit und Speicher. Abstraktion wird verwendet, um für die generalisierte Antworten auf Fragen, die präzise Antwort mit Sicherheit nicht zu berechnen) zu ermöglichen; Dies vereinfacht die Probleme, dass sie zugänglich sind, um die automatische Lösungen. Eine entscheidende Voraussetzung ist, um genügend Vagheit hinzuzufügen, um so Probleme handhabbar zu machen, aber behalten genug Präzision für die Beantwortung der wichtigsten Fragen.

Abstrakte Interpretation von Computerprogrammen

Bei einer Programmierung oder Spezifikationssprache, abstrakte Interpretation besteht aus mehreren geben Semantik durch die Beziehungen der Abstraktion verbunden. Eine Semantik ist eine mathematische Charakterisierung eines möglichen Verhalten des Programms. Die genaue Semantik, sehr genau die tatsächliche Ausführung des Programms zu beschreiben, werden die konkreten Semantik genannt. Zum Beispiel können die konkreten Semantik eines imperativen Programmiersprache zu jedem Programm die Menge der Ausführung Spuren kann es produzieren zu verknüpfen - eine Ausführungs Spur als eine Folge von möglichen aufeinanderfolgenden Zustände der Durchführung des Programms; ein Zustand besteht typischerweise aus dem Wert des Programmzählers und der Speicherplätze. Mehr abstrakten Semantik werden dann abgeleitet wird; zum Beispiel, kann man nur die Menge der erreichbaren Zustände in den Ausführungen zu betrachten.

Das Ziel der statischen Analyse ist es, eine berechenbare semantische Interpretation irgendwann abzuleiten. Zum Beispiel kann man wählen, den Zustand einer Programm Manipulieren ganzzahlige Variablen durch das Vergessen der tatsächlichen Werte der Variablen und nur halten ihre Zeichen darzustellen. Für einige elementare Operationen wie Multiplikation, wie eine Abstraktion verliert nicht an Präzision: um das Vorzeichen des Produkts zu erhalten, ist es ausreichend, das Vorzeichen der Operanden zu kennen. Für einige andere Operationen kann die Abstraktion Präzision zu verlieren: zum Beispiel, ist es unmöglich, die Zeichen für eine Summe, deren Operanden jeweils positiven und negativen kennen.

Manchmal ist ein Verlust an Präzision erforderlich, die Semantik entscheidbar zu machen. Im Allgemeinen gibt es einen Kompromiss zwischen der Genauigkeit der Analyse und ihrer decidability oder Lenkbarkeit erfolgen.

In der Praxis die Abstraktionen, die definiert sind, um sowohl den Programmeigenschaften zugeschnitten man wünscht, zu analysieren und zu dem Satz von Zielprogrammen. Die erste groß angelegte automatisierte Analyse von Computerprogrammen mit abstrakten Auslegung kann zu einem Unfall, die in der Zerstörung der erste Flug der Ariane 5 Rakete im Jahr 1996 führte zu zugeschrieben werden.

Formalisierung

Sei L eine geordnete Menge sein, eine so genannte Betonsatz und lassen Sie L 'ist eine weitere geordnete Menge, nannte ein abstraktes Set. Diese beiden sind miteinander durch Definieren Gesamtfunktionen, die Elemente von der einen zur anderen Karte zusammen.

Eine Funktion α wird als eine Abstraktion Funktion, wenn es Pläne ein Element x in der konkreten Menge L an ein Element α in der abstrakten Satz L '. Dh Element α in L 'ist die Abstraktion von x in L.

Eine Funktion γ wird als Konkretisierung Funktion, wenn es ein Element x 'in der abstrakten Satz L' abbildet, um ein Element γ in den Beton einge L. Das heißt, Element γ in L ist eine Konkretisierung der x 'in L'.

Lassen Sie L1, L2, L'1 und L'2 bestellt werden Sätze. Der Beton Semantik f eine monotone Funktion von L1 zu L2. Eine Funktion f 'von L'1 bis L'2 wird gesagt, dass ein gültiger Abstraktion von f, wenn für alle x sein' in L'1, ≤.

Programmsemantik werden im allgemeinen unter Verwendung von festen Punkten in der Gegenwart von Schlaufen oder rekursive Prozeduren beschrieben. Nehmen wir an, L ist ein vollständiger Verband und f eine monotone Funktion von L in L. Dann jede x sein ', so daß f' ≤ x 'ist eine Abstraktion des dest Festnetz-Nummer von f, die vorhanden ist, nach die Knaster-Tarski-Theorem.

Die Schwierigkeit besteht nun darin, eine derartige x 'zu erhalten. Wenn L 'von endlicher Höhe oder zumindest überprüft die Teilerketten, so kann eine solche x' kann als stationäre Grenze der aufsteigender Reihenfolge erhalten x'n durch Induktion wie folgt definiert werden: x '0 = ⊥ und x' n + 1 = f '.

In anderen Fällen ist es immer noch möglich, eine solche x 'durch eine Verbreiterung des Bedieners ∇ erhalten: für alle x und y, x ∇ y sollte größer oder gleich x und y ist, und für jede Folge y'n die Sequenz von x'0 = ⊥ und x'n + 1 = x'n ∇ y'n definiert ist letztlich stationär. Wir können dann y'n = f '.

In einigen Fällen ist es möglich, unter Verwendung von Abstraktionen Galois Verbindungen, wobei α von L auf L 'und γ ist von L' auf L Dies setzt die Existenz besten Abstraktionen, was nicht unbedingt der Fall zu definieren. Zum Beispiel, wenn wir abstract Sätze von Paaren von reellen Zahlen durch Einschließen konvexen Polyeder, gibt es keinen optimalen Abstraktion zu der von x + y ≤ 1 definiert Disc.

Beispiele für abstrakte Domains

Man kann an jede Variable x an einer bestimmten Programmstelle ein Intervall zuweisen. Ein Zustand, Zuweisen des Werts V auf die Variable x wird eine Konkretisierung dieser Intervalle sein, wenn für alle x, v Ab den Intervallen und für die Variablen x und y, kann man leicht erhalten Intervalle für x + y und x-y. beachten Sie, dass es sich um genaue Abstraktionen, da die Menge der möglichen Ergebnisse für, sagen wir, x + y, ist genau das Intervall. Komplexere Formeln für Multiplikation, Division, usw. abgeleitet werden, wodurch sogenannte Intervallarithmetik.

Betrachten wir nun die folgende sehr einfaches Programm:

Mit vernünftigen arithmetische Typen, sollte das Ergebnis für z gleich Null sein. Aber wenn wir das tun Intervallarithmetik ausgehend von x in, bekommt man z in. Während jede der Operationen einzeln genommen wurde genau abstrahiert, ist ihre Zusammensetzung nicht.

Das Problem ist offensichtlich: wir keine Spur des Gleichheitsbeziehung zwischen x und y zu halten; tatsächlich geht diese Domäne von Intervallen berücksichtigen nicht irgendwelche Beziehungen zwischen Variablen, und ist somit ein nicht-relationale Domäne. Nicht-relationale Domains sind in der Regel schnell und einfach zu implementieren, aber ungenau zu sein.

Einige Beispiele für relationale numerischen abstrakte Domains:

  • Kongruenzrelationen auf ganzen Zahlen
  • konvexe Polyeder - mit einigen hohen Rechenaufwand
  • "Achtecke"
  • Unterschied gebundenen Matrizes
  • linearen Gleichungen

und Kombinationen davon.

Wenn man eine abstrakte Domain wählt, hat man in der Regel ein Gleichgewicht zwischen halten feinkörnigem Beziehungen und hohen Rechenaufwand zu schlagen.

Tools

Sound-Tools

Sound-Tools garantieren, dass die Überprüfung führen sie richtig und vollständig sind. Sie können niemals ergeben falsche Negative, sondern durch Unentscheidbarkeit können Fehlalarme signalisiert eine mögliche Fehler ohne weise während jeder Ausführung zu produzieren.

  • Astrée
  • CodeContracts statische checker
  • CPAchecker
  • Codesonar
  • ECLAIR
  • Fluctuat
  • Frama-C Wertanalyse
  • Julia Static Analyzer für Java, Android und Java-Bytecode
  • Penjili
  • Polyspace
  • Raubtier

Unsound Tools

Unsound-Tools garantieren nicht, dass die Überprüfung führen sie richtig und vollständig sind. Sie können Fehlalarme Ausbeute / positive als auch falsch-negative, einen Fehler, der für mindestens einen Programmausführung auftreten, weil die statische Analyse, die sie ausführen ist falsch nicht signalisiert. Als Folge können sie fälschlicherweise behaupten, dass ein unsicherer Programm ist sicher.

  • Coverity Prevent
  • Klocwork Insight
  • Parasoft Jtest
  • Parasoft C / C ++ Test
  • Rote Eidechse Goanna
  0   0
Vorherige Artikel Billy Cundiff

Kommentare - 0

Keine Kommentare

Fügen Sie einen Kommentar

smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile
Zeichen übrig: 3000
captcha