184.703 Programmanalyse
Diese Lehrveranstaltung ist in allen zugeordneten Curricula Teil der STEOP.
Diese Lehrveranstaltung ist in mindestens einem zugeordneten Curriculum Teil der STEOP.

2020W, VU, 2.0h, 3.0EC

Merkmale

  • Semesterwochenstunden: 2.0
  • ECTS: 3.0
  • Typ: VU Vorlesung mit Übung
  • Format der Abhaltung: Online

Lernergebnisse

Nach positiver Absolvierung der Lehrveranstaltung sind Studierende in der Lage...

- statische Codeanalyse anzuwenden (für Kompilerbau und Programmverifikation),
- neue statische Analysen zu entwickeln,
- die Korrektheit einer Codeanalyse zu beweisen,
- aktuelle Forschungsliteratur aus der Programmanalyse zu rezipieren und zu präsentieren.

Inhalt der Lehrveranstaltung

Die Vorlesung führt in die automatische Programmanalyse ein (wobei wir uns vor allem mit der statischen Codeanalyse auseinandersetzen). Statische Analysen finden sich traditionell im Kompilerbau und werden zur Optimierung des erzeugten Codes eingesetzt. Moderne Entwicklungsumgebungen wie Visual Studio (Aufruf mit dem /analyze flag) und dem Clang Project (Clang Static Analyzer) benützen statische Analysen um mögliche Fehler schon zur Compilezeit zu finden. Dieses Vorgehen wurde beispielweise mit Erfolg in den Entwicklungsprozess von facebook integriert (https://fbinfer.com/). Desweiteren ist statische Analyse ist eine erfolgreiche Methodologie zur Verifikation von Programmen für sicherheitskritische Anwendungen, zum Beispiel um für Flugkontrollsoftware nachzuweisen das bestimmte Laufzeitfehler nicht auftreten können (https://www.absint.com/astree/index.htm).

In der Vorlesung besprechen wir
- einfache statische Analysen, die standardmäßig in Compilern eingesetzt werden, wie Reaching Definitions, Live Variable Analysis und Constant Propagation, sowie komplexere Analysen, wie Pointer Analysis und Call Graph Analysis,
- statische Analysen, die numerische Programminvarianten erzeugen und zur Programmverfikation eingesetzt werden, wie Interval-, Octagon-, Polyederanalyse, sowie Techniken zur Erzeugung disjunktiver Invarianten,
- das mathematische Framework der Abstrakten Interpretation, mit welchem wir sowohl die Semantik einer einfachen Programmsprache als auch von statischen Analysen präzise definieren können, sowie die Korrektheit der statischen Analyse in Bezug auf die zu analysierende Programmiersprachen genau fassen können.

Methoden

Die Lehrveranstaltung setzt sich zusammen aus 8 Vorlesungen und 4 Übungseinheiten, in denen die StudentInnen Aufgaben aus den Übungsblättern präsentieren, sowie Abschlusspräsentationen, in denen die StudentInnen jeweils einen Artikel aus der aktuellen Forschungsliteratur vorstellen.

Liste der Artikel für die Abschlusspräsentation (weitere Artikel werden je nach Teilnehmeranzahl hinzugefügt):

Stefan Schulze Frielinghaus, Michael Petter, Helmut Seidl:
Inter-procedural Two-Variable Herbrand Equalities. Logical Methods in Computer Science 13(2) (2017) - Alem Župa

Gagandeep Singh, Markus Püschel, Martin T. Vechev:
A practical construction for decomposing numerical abstract domains. PACMPL 2(POPL): 55:1-55:28 (2018)

Pavol Bielik, Veselin Raychev, Martin T. Vechev:
Learning a Static Analyzer from Data. CAV (1) 2017: 233-253 - Johannes Lindner

Yue Li, Tian Tan, Anders Møller, Yannis Smaragdakis:
A Principled Approach to Selective Context Sensitivity for Pointer Analysis. ACM Trans. Program. Lang. Syst. 42(2): 10:1-10:40 (2020)

Valentin Touzeau, Claire Maïza, David Monniaux, Jan Reineke:
Fast and exact analysis for LRU caches. Proc. ACM Program. Lang. 3(POPL): 54:1-54:29 (2019)

Oana Fabiana Andreescu, Thomas Jensen, Stéphane Lescuyer, Benoît Montagu:
Inferring frame conditions with static correlation analysis. PACMPL 3(POPL): 47:1-47:29 (2019) - Matthias Hetzenberger

Thomas Gawlitza, Helmut Seidl:
Precise Fixpoint Computation Through Strategy Iteration. ESOP 2007: 300-315 - Lukas Grassauer

Parosh Aziz Abdulla, Bengt Jonsson, Cong Quy Trinh:
Fragment Abstraction for Concurrent Shape Analysis. ESOP 2018: 442-471

WhoHugo Illous, Matthieu Lemerre, Xavier Rival:
Interprocedural Shape Analysis Using Separation Logic-based Transformer Summaries. SAS 2020
(https://conf.researchr.org/details/sas-2020/sas-2020-papers/14/Interprocedural-Shape-Analysis-Using-Separation-Logic-based-Transformer-Summaries)

Prüfungsmodus

Schriftlich und Mündlich

Weitere Informationen

Organisation der Vorlesung:

Aufgrund von Covid-19 wird der Kurs dieses Jahr via distance learning abgehalten. Das Setup ist folgendermaßen:
- die Vorlesungen werden vorab aufgezeichnet und von den StudentInnen selbständig angesehen (es wird 7-8 solcher Vorlesungen geben)
- die aufgezeichneten Videos werden komplementiert durch live Q&A session via ZOOM in welchen die StudentInnen Fragen zu dem Material der Vorlesung stellen können (die erste Q&A session dient auch zu Fragen bezüglich des Vorlesungsmodus)
- es wird 3-4 Übungsblätter geben welche von den StudentInnen bearbeitet und dann in einer live ZOOM session präsentiert werden; die StudentInnen kreuzen an welche Übungen sie präsentieren möchten; für ein erfolgreiches Bestehen des Kurses sind mindestens 50% an angekreuzten Übungsaufgaben erforderlich
- Evaluierung: jede(r) StudentIn hält einen Vortrag zu einem aktuellen Forschungsartikel; die Abschlussnote ensteht nur aus dem Vortrag (das Datum für die Präsentation wird im Januar sein und zusammen mit den Vorlesungsteilnehmern festgelegt)

ZOOM Q&A sessions: 6.10,20.10,3.11.,17.11,1.12., 13:00-15:00

ZOOM Exercise sessions: 27.10.,10.11.24.11,15.12., 13:00-15:00

Die ZOOM links werden über die Vorlesungsnews bekannt gegeben.

Weiterführende Literatur:

Static Analylsis Course and Script by Michael Schwartzbach, http://cs.au.dk/~mis/static/
Course on Abstract Interpretation by Patrick Cousot, http://web.mit.edu/afs/athena.mit.edu/course/16/16.399/www/
The Book Principles of Program Analysis by Flemming Nielson, Hanne Riis Nielson, Chris Hankin

"Term Rewriting and All That", Franz Baader, Tobias Nipkow, Kapitel 4.8 enthält eine Beschreibung des Unifikationsalgorithmus aus der ersten Vorlesung

"Introduction to lattices and order", B. A. Davey and H. A. Priestley ist eine Einführung in Verbandstheorie (lattice theory)

ECTS Breakdown (3ECTS = 75h): 25h Vorlesung, 25h Übung, 25h Vortrag

Vortragende Personen

Institut

LVA Termine

TagZeitDatumOrtBeschreibung
Mi.14:00 - 16:0007.10.2020 - 27.01.2021Seminarraum FAV EG B (Seminarraum von Neumann) Programmanalyse - Vorlesung
Mi.12:30 - 14:0027.01.2021Seminarraum FAV EG B (Seminarraum von Neumann) Programmanalyse - Vorträge
Do.13:00 - 16:3028.01.2021Seminarraum FAV EG B (Seminarraum von Neumann) Programmanalyse Vorträge
Mi.12:30 - 14:0003.02.2021Seminarraum FAV EG B (Seminarraum von Neumann) Programmanalyse - Vorträge
Programmanalyse - Einzeltermine
TagDatumZeitOrtBeschreibung
Mi.27.01.202112:30 - 14:00Seminarraum FAV EG B (Seminarraum von Neumann) Programmanalyse - Vorträge
Do.28.01.202113:00 - 16:30Seminarraum FAV EG B (Seminarraum von Neumann) Programmanalyse Vorträge

Leistungsnachweis

Es gibt vier Übungsblätter zu den Inhalten der Vorlesung, die von den StudentInnen bearbeitet und anschließend in jeweils einer Übungsstunde besprochen werden. Die StudentInnen kreuzen an welche Übungsbeispiele sie bearbeitet haben. Aus diesen StudentInnen wählt der Übungsleiter jeweils eine Studentin/einen Studenten der/die das Übungsbeispiel präsentiert. StudentInnen müssen 50% der Aufgaben ankreuzen für das positive Abschließen der Lehrveranstaltung. Die Übungen fließen allerdings nicht in die Abschlussnote mit ein. Die Abschlussnote ergibt sich nur aus dem Abschlussvortrag. 

LVA-Anmeldung

Von Bis Abmeldung bis
01.10.2020 12:00

Curricula

StudienkennzahlVerbindlichkeitSemesterAnm.Bed.Info
066 931 Logic and Computation Gebundenes Wahlfach
066 937 Software Engineering & Internet Computing Gebundenes Wahlfach
066 938 Technische Informatik Gebundenes Wahlfach

Literatur

Es wird kein Skriptum zur Lehrveranstaltung angeboten.

Sprache

Englisch