Programmanalyse
Die Entwicklung, Weiterentwicklung und Wartung von Programmen und Software-Systemen ist -- neben der optimierenden Transformation in Übersetzern -- das wichtigste Anwendungsgebiet für Programmanalysen. Hier geht es darum,
aus Programmen automatisch gewonnene Information so aufzubereiten, dass sie für den menschliche Entwickler eine Hilfe beim Verstehen von Programmen und eine Unterstützung für Modifikation und Weiterentwicklung
darstellen.
Eine der Voraussetzungen für solche Programmanalysen sind aktuelle
Analyseverfahren wie die Referenzziel-Analyse zur Bestimmung der Aufrufbeziehungen
in objekt-orientierten Sprachen wie Java. Solche Verfahren haben wir in die Software-Infrastruktur PAULI eingebettet, die wir zur Analyse von Java-Klassendateien
entwickeln. Die Anwendungsgebiete von PAULI sind vielfältig:
- Im Java-Umfeld ergeben sich wegen des Ausführungsmodells und der
Dynamik durch das Laden von Klassen zur Programmlaufzeit neue Herausforderungen
und Chancen für die Programmanalyse. Dieses Themengebiet wird in unserer
Gruppe derzeit im Kontext der
Analyse großer Software-Bibliotheken der Sprache Java untersucht. Grundidee
ist dabei die statische (Vor-) Analyse einzelner Java-Bibliotheken, die
in speziell annotierten Bytecode-Dateien resultiert. Zur Verwendungszeit
dieser Dateien durch die virtuelle Maschine können die darin enthaltenen
statischen Analyse-Ergebnisse mit Analyse-Informationen der konkreten Anwendung
kombiniert und zur dynamischen Programmoptimierung ausgenutzt werden. Dadurch
wird eine Analysegüte erreicht, die der einer erschöpfenden statische
Analyse des Quellprogramms entspricht, die im Java-Umfeld nicht mehr möglich
ist.
- Die automatische Verteilung mehrsträngiger Java-Programme ist ein weiteres Anwendungsfeld für Programmanalysen. Dazu müssen die Java-Programme für den Einsatz auf einem Rechner-Cluster aufbereitet werden. Außerdem muss das wahrscheinliche Kommunikationsverhalten ermittelt werden, um geschickte Verteilungsstrategien vorzubereiten.
- Einen neuer Forschungsschwerpunkt bildet die Validierung von Dataflussergebnissen. Ziel ist es, vorberechnete Analyserergebnisse sicher verwendbar zu machen. Dazu ist es notwendig, Ergebnisse von Programmanalysen effizient daraufhin zu überprüfen, ob sie zum dazugehörigen Programm passen.