Datenflussanalyse
Eine Datenflussanalyse ist eine statische Code-Analyse eines Computerprogramms, die untersucht, zwischen welchen Teilen eines Programms Daten weitergegeben werden und welche Abhängigkeiten daraus resultieren. Ziele solcher Analysen sind Optimierungen des Codes hinsichtlich der Ausführungszeit (durch Löschen überflüssigen Codes, Restrukturierung oder Parallelisierung) und der Speichernutzung.
Datenflussanalysen werden in folgende Arten unterteilt:
- Vorwärtsanalysen, bei denen der Programmcode mit Hilfe des Kontrollflussgraphen untersucht wird und
- Rückwärtsanalysen, bei denen der Programmcode mit Hilfe des umgekehrten Kontrollflussgraphen untersucht wird.
Grundprinzip
Datenflussanalysen arbeiten meist auf dem Kontrollflussgraphen, dessen Knoten sog. Blöcke bilden, manche auch auf dem Dominator-Baum. Diese Blöcke enthalten eine oder mehrere Anweisungen. Datenflussanalysen untersuchen, wie sich Daten durch einen Block verändern. Enthält ein Block beispielsweise den Code x:=5, so verändern sich die Daten des Programms so, dass die Variable x nach dem Durchlaufen dieses Blocks den Wert 5 enthält, unabhängig davon, welchen bzw. ob sie vorher einen Wert enthalten hat.
Außerdem wird untersucht, wie sich die Daten zwischen den Blöcken verändern. Im einfachsten Fall werden sie einfach nur weitergegeben. Fließen jedoch mehrere Kontrollflüsse (respektive Kanten des Kontrollflussgraphen) zusammen (bspw. bei Schleifen), werden die Informationen aus den vorangegangenen Blöcken entweder zusammengefasst oder geschnitten. Danach unterscheidet man Analysen auch in must- (bei Schnittmengen) und may-Analysen (bei Vereinigungsmengen).
Siehe auch
Literatur
- Flemming Nielson, Hanne R. Nielson, Chris Hankin: Principles of Program Analysis. Springer, 1999, ISBN 3-540-65410-0, Webseite zum Buch
- Uday Khedker, Amitabha Sanyal, Bageshri Karkare: Data Flow Analysis: Theory and Practice. CRC Press, ISBN 978-0849328800