HOME | ENGLISH | IMPRESSUM | KIT

Studienarbeit (abgeschlossen): Datenflussanalyse: Präziserer Kontrollfluss für Exceptions

In Java kann nahezu jede Anweisung eine Exception werfen. Da jede geworfene Exception einen Sprung im Kontrollfluss bedeutet, sehen Kontrollflussgraphen die diesen Effekt berücksichtigen sehr unübersichtlich aus. Dabei können viele Exceptions in Wirklichkeit nicht auftreten und müssten nicht berücksichtigt werden.

Ziel dieser Studienarbeit ist es eine Datenflussanalyse zu entwickeln, welche Exceptions erkennt die garantiert nicht auftreten können. Mit Hilfe dieser Information kann dann ein verbesserter präziserer Kontrollflussgraph erstellt werden. Dieser kann dann in unsere bestehende Sicherheitsanalyse integriert werden und somit auch deren Präzision erhöhen.

Ein einfaches Beispiel für Exceptions die nicht auftreten können ist wie folgt:

class A {

      private int i;

      public static void foo(boolean param) {

       	     A a = new A();

	     a.i = 10;

	     if (param) {
	     	a.i = 20;
	     }

	     System.out.println(a);
       }

}

Die Methode foo erstellt eine neue Instanz der Klasse A und speichert die Referenz in der lokalen Variable a. Beim Erzeugen dieser Instanz kann z.B. ein OutOfMemory Fehler auftreten und die Methode wird über die entsprechende Exception sofort verlassen. Im nächsten Schritt wird der Wert 10 in das Feld i der Objektinstanz a geschrieben. Hierbei könnte erneut eine Exception auftreten, wenn a == null ist. Aufgrund der Struktur der Methode ist das aber auszuschliessen, da direkt zuvor a einen neue Instanz zugewiesen bekommen hat. Wäre das Erzeugen dieser Instanz fehlgeschlagen, dann hätte dieser Programmpunkt garnicht erreicht werden können. Somit kann die Anweisung a.i = 10 keine NullPointerException werfen. Ähnliches gilt für die zweite Zuweisung a.i = 20 innerhalb des if-Blocks. Diese Zuweisung wird nur ausgeführt, nachdem a.i = 10 erfolgreich ausgeführt wurde. Da in der Zwischenzeit a keinen neue Instanz zugewiesen bekommen hat, kann auch a.i = 20 keine NullPointerException werfen.

Bisher ist in unserer Analyse der konservative Ansatz verwendet, welcher jede mögliche Exception modelliert. Dies führt zu dem Kontrollflussgraph, wie er auf der linken Seite abgebildet ist. Durch die Erweiterungen die bei dieser Studienarbeit durchgeführt werden sollen, wird es möglich sein den Kontrollflussgraph, wie in der rechten Seite dargestellt, zu vereinfachen. Der kreative Teil dieser Arbeit wird sein, dass man sich möglichst viele und sinnvolle Situationen überlegt in denen garantiert keine Exception geworfen werden kann um diese dann mit Hilfe einer Datenflussanalyse erkennen zu können.

Aufgabe:

  • Identifikation von Situationen in denen keine Exception auftreten kann
  • Umsetzung einer Datenflussanalyse zum Erkennen dieser Situationen
  • Evaluierung des Verfahrens

Voraussetzungen

  • Gute Java Kenntnisse
  • Erfahrung im Compilerbau / mit Datenflussanalysen

Schlüsselworte

Datenflussanalyse, Java, Exceptions, Kontrollfluss, Joana 

Veröffentlichungen

Veröffentlichung
Präziser Kontrollfluss für Exceptions durch interprozedurale Datenflussanalyse

Betreuer

Ehemalige Mitarbeiter
Dr.-Ing. Jürgen Graf

Studenten

Ehemalige Studenten
Markus Herhoffer