Dynamically Discovering Likely Program Invariants to Support Program Evolution by M.D. Ernst, Jake Cockrell, et al Vortrag „Proseminar Assertions“ SS 2007 Carsten Scharfe [email protected] Inhalt • Einleitung • Das Programm Daikon • Dynamische Ableitung von Invarianten • Teststudie • Weitere Forschung Einleitung Daikon Dynamische Ableitung Teststudie Weiteres Einleitung Invarianten spielen zentrale Rolle Entwicklung Evolution • Spezifikation (Weiterentwicklung) • Bewahrung der Korrektheit • Korrektheit • Verifizierung • Minimierung neuer Fehler Invarianten Einleitung Daikon Dynamische Ableitung Teststudie Weiteres Wie kommen Invarianten zustande? Bisher: • Annotation des Entwicklers – bei Entwurf eines Algorithmus/Änderung – Eigenarten der Programmiersprache beachten – zeitaufwendig Jetzt: • Dynamische Ableitung (nach M.D. Ernst) – automatisiertes Verfahren (Programm Daikon) – Analyse von Laufzeitverhalten Einleitung Daikon Dynamische Ableitung Teststudie Weiteres Das Daikon Programm (dynamic conjectures) 1. Phase: Vorbereitung Source Code Instrumenter erweiterter Code 2. Phase: Testläufe Compiler Programm 3. Phase: Analyse Invariante 1 Protokoll 1 ... ... Daikon Programm Invariante k Protokoll n Test Case 1 ... Test Case n Katalog von Invarianten Test-Suite Einleitung Daikon Dynamische Ableitung Teststudie Weiteres Ziele • Ableitung von Invarianten – prägnante Abstraktion von Datenmengen • Besseres Verständnis • Eigenschaften von Daten • Denken in Invarianten Einleitung Daikon Dynamische Ableitung Teststudie Weiteres Beispiel: Summe eines Arrays (Gries, Science of Programming) i=0; s=0; while (i <> n) do s = s + b[i]; i = i + 1; od Vorbedingung: Daikon-Ausgabe (verkürzt) n0 n 1 Nachbedingung: s b[ j ] j 0 Schleifeninvariante: 0 i n, s i 1 b[ j ] j 0 Einleitung Daikon Dynamische Ableitung Teststudie Weiteres Ein paar Fakten • in JAVA programmiert • C, C++, Perl und JAVA Vorteile • normales Debugging • Konzentration auf Teile des Programms • Plattformunabhängig Nachteile • Source-Code ist Voraussetzung • Beschränkt auf Invarianten im Katalog • schwierig in der Handhabung Einleitung Daikon Dynamische Ableitung Teststudie Weiteres Dynamische Ableitung • Instrumentierung • Testläufe – unter Verwendung von Test-Suites • Analyse erweitertes Programm Source Code Instrumenter Testlauf TestSuite Invarianten Protokoll Analyse Einleitung Daikon Dynamische Ableitung Teststudie Weiteres Instrumentierung des Source-Codes Code für Werte-Sampling einfügen • Source-Code parsen • Protokollier-Code einfügen – Prozedureinstieg – Schleifenkopf – Prozedurrückkehr • neuen Source-Code generieren • neuen Code compilieren Einleitung Daikon Dynamische Ableitung Teststudie Weiteres Protokollierung von Variablen • Variablen – alle sichtbaren (auch globale) – Parameter von Prozeduren – Rückgabewerte • Speichern in Tupel-Liste – Tupel enthält Variablenwerte – 1 Listeneintrag = 1 Aufruf Einleitung Daikon Dynamische Ableitung Teststudie Weiteres Ableitung der Invarianten • anhand protokollierter Werte: • an jedem Punkt • für alle sichtbaren Variablen • jede zutreffende Invariante potentieller Kanditat – bis Werte der Invariante widersprechen – dann nicht weiter betrachten • Falsche schnell aussortiert Einleitung Daikon Dynamische Ableitung Teststudie Weiteres Einige Invarianten im Katalog • eine Variable – z.B.: x = const, x {a,b,c} • eine numerische Variable – z.B. a ≤ x ≤ b, x ≠ 0 • mehrere numerische Variablen – x = ax+b, x < y, x = y, x = fn(y), x+y, x-y • Sequenzvariablen – minval, maxval, Elementordnung, Summe Einleitung Daikon Dynamische Ableitung Teststudie Weiteres Verwendung von Test-Suites • zufällig generiert – – – – – einfach, aber schlechte Abdeckung viele Test-Cases notwendig effektiv bei auffälligen Bugs versagt bei vielen Programmteilen zeigt Verhalten bei ungültigen Eingaben • generiert durch Grammatik – erzeugt repräsentative Testfälle – erzielt bessere Abdeckung – höhere Konfidenz der Invarianten Einleitung Daikon Dynamische Ableitung Teststudie Weiteres Eine Laufzeitanalyse • kubisch in Anzahl der sichtbaren Variablen – schnelle Falsifizierung von Invarianten • linear in Anzahl der Samples – Anzahl wie oft ein Programm ausgeführt wurde • linear in Anzahl der instrumentierten Punkte – kann begrenzt werden Zeit = O((|vars|³ x falsetime + |trueinvs| x |testsuite|) x |program|) Einleitung Daikon Dynamische Ableitung Teststudie Weiteres Eine Teststudie Aufgabe für Programmierer • Modifikation eines größeren Programms – Siemens replace Programm • Erweiterung um zusätzlichen regulären Ausdruck • 100 zufällige Testfälle mit Daikon analysiert • Ausgabe als Hilfe an Programmierer geliefert • Programmierer unabhängig Einleitung Daikon Dynamische Ableitung Teststudie Weiteres Ziele der Studie • Nützlichkeit von Daikon – bei welchen Punkten – in welchem Maße • Akzeptanz bei den Programmierern – Verwendung von Daikon Einleitung Daikon Dynamische Ableitung Teststudie Weiteres Ergebnisse der Studie • Bug gefunden – ursprüngliche Test-Suite inadäquat • Erwartungen bestätigt/widerlegt • Änderungen validiert – Seiteneffekte schneller entdeckt & behoben • in Invarianten denken • Aufmerksamkeit auf Code lenken Einleitung Daikon Dynamische Ableitung Teststudie Weiteres Fazit Software Evolution deutlich vereinfacht Aber: • • • • • Programm unhandlich erfordert tiefe JAVA-Kenntnisse keine erweiterten Typen Erweiterung um Invarianten schwierig Konfidenz abhängig von Test-Suites Einleitung Daikon Dynamische Ableitung Teststudie Weiteres Weitere Forschung zum Thema Industriell • Microsoft • Sun • Agitar Akademisch • • • • Stanford Brown Berkeley Colorado Einleitung Daikon Dynamische Ableitung Teststudie Weiteres Weitere Entwicklung seit 2001 • Mehr Invarianten • Unterstützte Sprachen – z.B. Perl, C++ • Steigerung von Performance • Inkrementelle Ansätze Einleitung Daikon Dynamische Ableitung Teststudie Weiteres Referenzen + Links • “The Daikon system for dynamic detection of likely invariants”, M.D.Ernst, 2007 • “Efficient incremental algorithms for dynamic detection of likely invariants”, Perkins, Ernst, 2004 • “Dynamically discovering likely program invariants to support program evolution”, M.D.Ernst et. al., 2001 • Daikon Website: http://pag.csail.mit.edu/daikon/