Download Bug-Finder Enhanced E
Transcript
3.2. Heuristiken 3.1.4 14 Zustandsexpansion Der Zustandsraum des Programmes wird von StEAM mit den folgenden Schritten erzeugt: 1. Einen der laufenden Threads auswählen 2. Inhalte der CPU-Register, des Stacks und der Variablen-Bereiche wiederherstellen (Kontextwechsel) 3. Eine einzelne Anweisung (oder automaren Block) ausführen (Zustandstransition) 4. Inhalte der CPU-Register, des Stacks und der Variablen-Bereiche einlesen, um den Nachfolgezustand zu erzeugen 5. Neuen Zustand in Hash-Tabelle speichern, falls der Zustand neu ist 6. Die ersten fünf Schritte für alle laufenden Threads wiederholen 3.2 Heuristiken Einer der wichtigsten Ansatzpunkte für die Effizienz-Verbesserung von StEAM ist die Verbesserung der Such-Heuristiken. Eine Heuristik h gibt zu einem gegebenen Ausgangszustand s die geschätze Distanz h(s) zu einem Fehlerzustand e an. Ein Problem beim Model Checking ist die Tatsache, dass fast nie der gesamte Zustandsraum des Programms bekannt ist und deshalb nicht immer klar zu entscheiden ist, ob eine bestimmte Heuristik zulässig oder konsistent ist. 3.2.1 Fehlerspezifische Heuristiken Fehlerspezifische Heuristiken sind solche Heuristiken, die darauf zielen, einen Fehler eines bestimmten Typs zu finden. Most Blocked Die Most-Blocked-Heuristik schätzt die Distanz mit der Anzahl der nicht-blockierten Prozesse. [ELL01], [GV02] Lock and Block Die Lock-and-Block-Heuristik schätzt die Distanz als Anzahl der nicht-blockierten Prozesse plus Anzahl der nicht blockierten Ressourcen. Formelbasierte Heuristik Die formelbasierte Heuristik schätzt die Distanz als Anzahl der Transitionen, die nötig sind, um eine gegebene Formel wahr (falsch) werden zu lassen. Diese Heuristik kann von StEAM nicht ohne weiteres eingesetzt werden, weil es keine benannten Variablen(-namen), Funktionen(-namen) und Parameter(-namen) gibt, sondern nur Speicheradressen.