Lehrveranstaltungen

Programmanalyse

Dozent:innen: Univ.-Prof. Dr. Sebastian Erdweg; Sven Keidel
Kurzname: 08.079.732
Kurs-Nr.: 08.079.732
Kurstyp: Vorlesung/Übung

Voraussetzungen / Organisatorisches

Vorlesung "Programmiersprachen". Gute Programmierkenntnisse.

Digitale Lehre

Wie Sie wissen wird das kommende Semester bis auf Weiteres ausschließlich digital stattfinden können. Für die Veranstaltung Programmanalyse haben wir uns folgendes Vorgehen vorgenommen:

  1. Es wird keine Vorlesungen geben. Anstelle der Vorlesungen haben wir Literatur zum Selbststudium bestimmt, dass Sie mit unserer Hilfe bearbeiten werden. Wir verwenden primär zwei Bücher. Beide Bücher sind eventuell auch als E-Book verfügbar, am besten suchen Sie selbst danach.
  2. [list]
  3. "Types and Programming Languages" von Benjamin C. Pierce. Dieses Buch wird uns für ca. 10 Wochen beschäftigen, eine Anschaffung lohnt sich.
  4. "Principles of Program Analysis" von Flemming Nielson, Hanne R. Nielson, und Chris Hankin. Dieses Buch werden wir in geringerem Umfang am Ende Vorlesung nutzen, eine Anschaffung lohnt sich nur für Interessierte.

  • Wir haben es uns zur Aufgabe gemacht, Sie durch diese Literatur zu geleiten. Dazu haben wir die Inhalte in wöchentliche "Reading assignments" und "Exercise assignments" gruppiert, welche wir immer Dienstags veröffentlichen werden. Wir empfehlen dringlichst die Assignments zeitnah zu bearbeiten, damit Sie den Anschluss nicht verlieren.
  • Der von uns ausgewählte Stoff ist durchaus anspruchsvoll und Sie werden sicherlich immer wieder Fragen haben. Wir bieten 3 Online-Sprechstunden pro Woche als Videokonferenz an:

    1. Mittwochs um 12:00 Uhr, Fokus: Reading Assignment
    2. Freitags um 13:00 Uhr, Fokus: Exercise Assignment
    3. sowie Montags um 13:00 Uhr, Fokus: Exercise Assignment

  • Sie können alle drei oder auch nur einen Teil der Sprechstunden wahrnehmen. Bitte reichen Sie Ihre Fragen bis 30 Minuten vor der Online-Sprechstude ein, sodass wir die Sprechstunde möglichst effektiv gestalten können.
  • Jede Woche wird es ein multiple-choice Quiz geben, dass Sie bis Montag Abend beantworten können. Die Quizzes beziehen sich sowohl auf das Reading als auch das Exercise Assignment und können ohne zusätzlichen Lernaufwand gelöst werden. Ein ausreichend gutes Abschneiden in den Quizzes ist Zulassungsvoraussetzung für die Klausur.
  • Wie die Klausur durchgeführt werden kann ist zum aktuellen Zeitpunkt noch unklar. Ich bitte von Fragen diesbezüglich abzusehen. Wir informieren Sie sobald es Klarheit gibt.
  • [/list]
    Zur Kommunikation verwenden wir ausschließlich Microsoft Teams. Bitte installieren Sie sich die App und melden Sie sich mit Ihrer Uni-Mainz Emailadresse an. Dann verwenden Sie den Code "ptu8dhw" um dem Team "ProgAnalysis Course" beizutreten (https://support.microsoft.com/en-us/office/use-a-link-or-code-to-join-a-team-c957af50-df15-46e3-b5c4-067547b64548). Nutzen Sie die aktuelle Woche um sich mit Teams vertraut zu machen und testen Sie Ihr Videokonferenz-Setup mit Kommilitonen. Gerne können Sie sich mit Ihren Kommilitonen im Kanal "random" austauschen.

    Empfohlene Literatur


    1. Fachartikel, die im Laufe der Veranstaltung bekanntgegeben werden
    2. "Types and Programming Languages" von Benjamin C. Pierce
    3. "Principles of Program Analysis" von Flemming Nielson, Hanne R. Nielson, and Chris Hankin

    Inhalt

    Programmanalysen sind ein fundamentales Werkzeug der Softwareentwicklung und treten in vielfältiger Form in der Praxis auf. Man kann dabei grob drei Einsatzgebiete von Programmanalysen unterscheiden:

    • Zum Bug Finding verwendet man Analysen, die Fehlerquellen in einem Program auffinden bzw. die Abstinenz solcher Fehler validieren. Zum Beispiel: type checking, bounds checking, information flow.
    • Für Compiler Optimierungen verwendet man Analysen, die Eigenschaften eines Programms berechnen, welche Optimierungen ermöglichen. Zum Beispiel: reaching definitions, constant propagation.
    • Für Editor Support verwendet man Analysen, die Informationen über ein Programm ableiten um damit Tools zu speisen, die Entwickler beim Programmieren unterstützen. Zum Beispiel: Code completion, Refactorings.


    Die Entwurfsmöglichkeiten für Programmanalysen sind entsprechend vielfältig und es haben sich verschiedene Analysetechniken etablieren können. Das Ziel der Veranstaltung "Programmanalysen" ist das Studierende die Grundlagen des Entwurfs von Programmanalysen erlernen, für ein gegebenes Einsatzgebiet geeignete Analysetechniken auswählen können, und einfache Programmanalysen selbst entwickeln und bewerten können. Dazu werden wir eine Auswahl der folgenden Themen besprechen:

    1. Code smells
    2. Program semantics
    3. Dynamic analysis
    4. Type systems
    5. Control-flow graphs and data-flow analyses
    6. Abstract interpretation
    7. Soundness, Recall, and Precision

    Termine

    Datum (Wochentag) Zeit Ort
    22.04.2020 (Mittwoch) 12:00 - 14:00 05 426
    2413 - Neubau Physik/Mathematik
    29.04.2020 (Mittwoch) 12:00 - 14:00 05 426
    2413 - Neubau Physik/Mathematik
    06.05.2020 (Mittwoch) 12:00 - 14:00 05 426
    2413 - Neubau Physik/Mathematik
    13.05.2020 (Mittwoch) 12:00 - 14:00 05 426
    2413 - Neubau Physik/Mathematik
    20.05.2020 (Mittwoch) 12:00 - 14:00 05 426
    2413 - Neubau Physik/Mathematik
    27.05.2020 (Mittwoch) 12:00 - 14:00 05 426
    2413 - Neubau Physik/Mathematik
    03.06.2020 (Mittwoch) 12:00 - 14:00 05 426
    2413 - Neubau Physik/Mathematik
    10.06.2020 (Mittwoch) 12:00 - 14:00 05 426
    2413 - Neubau Physik/Mathematik
    17.06.2020 (Mittwoch) 12:00 - 14:00 05 426
    2413 - Neubau Physik/Mathematik
    24.06.2020 (Mittwoch) 12:00 - 14:00 05 426
    2413 - Neubau Physik/Mathematik
    01.07.2020 (Mittwoch) 12:00 - 14:00 05 426
    2413 - Neubau Physik/Mathematik
    08.07.2020 (Mittwoch) 12:00 - 14:00 05 426
    2413 - Neubau Physik/Mathematik