Statische Analyse Gero Leinemann
Statische Analyse Was ist das? Was mache ich damit? Wie funktioniert das? Wie benutze ich das? Demo FindBugs STAN4j IDA Pro Fragen?
Was ist das? Analyse eines Programms, ohne es auszuführen ( dynamische Analyse) Anwendung mathematischer Verfahren auf Programme-Code um Eigenschaften zu prüfen Zwei Arten: Analyse des Source-Codes Meist direkt auf dem AST der jeweiligen Sprache Analyse des Object-Codes Wird oft in WHILE-ähnliche Sprachen übersetzt
Was mache ich damit? Wird benutzt für: Optimierung (klassisch) Software-Qualität Sicherheit Reverse Engineering Korrektheit (-sbeweis) lint
Wie funktioniert das? Methoden: Denotationelle Semantik Abbildung von Zustandsräumen Operationelle Semantik Schrittweise Zustandsänderung Axiomatische Semantik Schlussregeln über Eingabe Abstrakte Interpretation Verallgemeinerung/Teilweise (abstrakte) Ausführung Möglichkeiten begrenzt durch das Halteproblem
Abstrakte Interpretation Nachverfolgen des Control-Flows Monotone Funktionen über Verbänden Praktisch: Mitführen eines Zustandsraumes durch das Programm Ziel: Minimaler (möglichst präziser) Zustandsraum Approximation von Fixpunkten bei Branches/Loops Beschränkung des Zustandsraumes ohne jede Iteration auszuführen z.B. durch Widening (aktuelle Forschung), abstrakte Domänen
Demo
Fragen?
Bildnachweise http://findbugs.sourceforge.net/umdFindbug s.png http://testlinkjavaapi.sourceforge.net/images /stan4j-88x31-o1.png http://www.di.ens.fr/~cousot/projects/DAED ALUS/synthetic_summary/POLYSPACE/imgs/l ogo_fond_blanc.gif http://findlogo.net/images/E/eclair%20logo.j pg http://amiga-dev.wdfiles.com/local-- files/tool%3Aida-pro/idapro.gif