Philipp Dominik Schubert promovierte erfolgreich zum Thema "Scaling Static Whole-Program Analysis to Modern C and C++ Software Development" bei Prof. Dr. Eric Bodden.
Zusammenfassung der Arbeit:
Statische Analysen mit dem Ziel Bugs und Sicherheitslücken zu finden, müssen präzise und inter-prozedural, d.h. das gesamte Programm umfassend, sein, um Ergebnisse berechnen zu können, die Entwickler:innen tatsächlich helfen. Analysen, die das gesamte Programm überspannen, führen jedoch leider oftmals zu unzureichender Performanz.
Traditionelle inter-prozedurale Analysen passen leider auch nicht mit den modernen Arbeitsabläufen in der Softwareentwicklung zusammen, welche insbesondere durch die häufige Verwendung von Bibliotheken und den Einsatz von continuous integration/continuous deployment Ansätzen gekennzeichnet sind. Hierdurch wird die Performanz soweit reduziert, dass solche Whole-Program-Analysen praktisch undurchführbar werden.
Um das herausfordernde Problem der Skalierbarkeit von präziser, statischer Whole-Program-Analyse zu adressieren, machen wir uns den Umstand zu nutze, dass nahezu jedes ernsthafte Softwareprojekt mit Hilfe eines Systems zur Versionsverwaltung wie etwa Git, Mercurial oder Apache Subversion organisiert wird. Ausgehend von einem “rohen” Repository, welches nur den zu analysierenden Source Code enthält, reichern wir dieses mit zusätzlichen persistierten statischen Analyseinformation an, um Whole-Program-Analysen in der Praxis doch zu ermöglichen.
Das erste Problem, welches bei der Analyse von C und C++ Software gelöst werden muss, ist, dass jedes nicht-triviale Programm auf Grund des Präprozessors in einer gemischten Sprache geschrieben ist und dadurch eine Software-Produktlinie darstellt. Aus diesem Grund präsentieren wir VarAlyzer, einen varabilitäts-bewussten statischen Analyseansatz, der Software-Produktlinien stattdessen als Ganzes analysiert.
Um die unnötige wiederholte Analyse von Bibliothekskomponenten, die sich von einem Analyselauf zum nächsten nicht ändern, zu vermeiden, führen wir den kompositionalen Analyseansatz ModAlyzer ein, der Bibliothekskomponenten analysiert und zusammenfasst. Die Analysezusammenfassungen können dann eingesetzt werden, wenn die eigentliche Anwendung analysiert wird, um die Analysezeiten siginifikant zu reduzieren.
Um weitere unnötige, wiederholte Analysen für Programmteile zu vermeiden, die häufigen Änderungen unterliegen stellen wir IncAlyzer vor. IncAlyzer nutzt die Informationen zu den Commits eines Projekts aus, die durch die Versions-Kontrollsysteme der Zielprojekte bereit gestellt werden. Mit diesen Informationen werden Analysen lediglich für die Programmteile erneut berechnet, die sich tatsächlich geändert haben. Dies reduziert die Laufzeiten auch für tiefe, semantische Programmanalysen auf ein Minimum.
Wir haben unsere Analyseansätze in PhASAR implementiert. PhASAR ist unser neues statisches Analyserahmenwerk, welches auf die Analyse von real-welt C und C++ Programmen abzielt und dies ermöglicht, indem es präzise Gesammtprogrammanalysen auf moderne Softwareentwicklung abstimmt. Wir zeigen, dass PhASAR---der Host von VarAlyzer, ModAlyzer und IncAlyzer---nicht nur auf dem Papier gut assieht, sondern einen tatsächlichen Nutzen aufweist und echte Probleme lösen kann. Dazu stellen wir zwei interessante Projekte aus dem akademischen Umfeld und einem großen Industrieprojekt mit einem führenden Telekommunikationskonzern vor in denen PhASAR erfolgreich eingesetzt werden konnte.
(gekürzte Fassung des Abstracts, entnommen aus der Dissertationsschrift von Philipp Dominik Schubert)