University of Bologna
Department of Computer Science and Engineering



Corso di Analisi di Programmi

Nome del Corso Analisi di Programmi
Codice del Corso 28789
Grado Laurea Magistrale
Semestre Primo e Secondo Semestre
Docente Prof. Cosimo Laneve
Linguaggio di Insegnamento Italiano
Crediti 6 cfu (fino all'a.a. 2010/11: 12cfu)
Ore di Insegnamento 40 (fino all'a.a. 2010/11: 80)
Orario vai a http://corsi.unibo.it/informatica-magistrale
Orario di Ricevimento Su appuntamento via email (di solito il Mercoledì 12,00 -- 13.30
Obiettivi Questo corso consente di apprendere le tecnologie formali più importanti per garantire proprietà di correttezza di programmi commerciali o presenti nei compilatori per ottimizzare i codici. Tutte le tecniche presentate saranno applicate a casi di studio.
Syllabus a.a. 2011/12
Lecture 1. Introduzione, nozioni preliminari (insiemi, prodotti cartesian i, relazioni, funzioni, funzioni parzialie totali, spazi di funzioni, concatenzazione di funzioni), il linguaggio whil e: sintassi. [1], pg. 213-214, 7-9.

Lecture 2.Semantica denotazionale del linguaggio while: semantica delle espressioni intere e semantica delle espressioni booleane. [1], pg 9-17.

Lecture 3. Semantica denotazionale del linguaggio while: la semantica dei comandi, criteri per le equazioni di punto fisso. [1], pg 85-89.

Lecture 4: Teoria del punto fisso: ordinamenti parziali, ordinamenti parziali completi, reticoli, funzioni monotone, funzioni continue, il teorema di Kleene. [1], pg 93-107; [2], pg 393-404.

Lecture 5. La semantica del comando while e di altri comandi iterativi. [1], pg 107-112.

Lecture 6: Data-Flow Analysis: analisi delle available espressions, [2], pg. 35-43.

Lecture 7: Data Flow Analysis: analisi delle definizioni raggiungibili e constant folding, [2], pg. 43-46, 27-29.

Lecture 8: Data Flow Analysis: analisi delle very busy espressions, [2], pg 46-49.

Lecture 9: Data-Flow Analysis: analisi delle variabili vive, [2], pg. 49-52.

Lecture 10: Data Flow Analysis: correttezza dell'analisi delle variabili vive, [2], pg. 60-65.

Lecture 11: Data-Flow Analysis: le equazioni di dataflow, loro soluzione algoritmica e complessità computazionale, [2], pg. 65-82, 365-392.

Lecture 12: Data-Flow Analysis: problemi non distributivi, l'analisi della propagazione delle costanti, e l'algoritmo relativo, [2], pg. 72-74 e 78-82.

Lecture 13: Interpretazione Astratta: domini astratti e domini concreti, connessioni di Galois e inserzioni di Galois. Il dominio astratto dei segni. [6]

Lecture 14: Interpretazione Astratta: la semantica astratta delle espressioni (del linguaggio while) e la correttezza locale delle operazioni. [6]
Syllabus fino all'a.a. 2010/11
Lecture 1. Introduzione, nozioni preliminari (insiemi, prodotti cartesiani, relazioni, funzioni, funzioni parziali e totali, spazi di funzioni, concatenzazione di funzioni), il linguaggio while: sintassi. [1], pg. 213-214, 7-9.

Lecture 2. Semantica denotazionale del linguaggio while: semantica delle espressioni intere e semantica delle espressioni booleane. [1], pg 9-17.

Lecture 3. Semantica denotazionale del linguaggio while: la semantica dei comandi, criteri per le equazioni di punto fisso. [1], pg 85-89.

Lecture 4: Teoria del punto fisso: ordinamenti parziali, ordinamenti parziali completi, reticoli, funzioni monotone, funzioni continue, il teorema di Kleene. [1], pg 93-107; [2], pg 393-404.

Lecture 5. La semantica del comando while e di altri comandi iterativi. [1], pg 107-112.

Lecture 6: La logica di Hoare: correttezza parziale, esempio di verifica con la semantica denotazionale, variabili logiche, il linguaggio delle asserzioni. [1], pg 172-177.

Lecture 7: La logica di Hoare: le regole, invarianti, proprieta`. [1], pg 178-183.

Lecture 8: La logica di Hoare: consistenza e completezza del sistema. [1], pg 183-191.

Lecture 9: Data-Flow Analysis: analisi delle available espressions, [2], pg. 35-43.

Lecture 10: Data Flow Analysis: analisi delle definizioni raggiungibili e constant folding, [2], pg. 43-46, 27-29.

Lecture 11: Data Flow Analysis: analisi delle very busy espressions, [2], pg 46-49.

Lecture 12: Data-Flow Analysis: analisi delle variabili vive, [2], pg. 49-52.

Lecture 13: Data Flow Analysis: correttezza dell'analisi delle variabili vive, [2], pg. 60-65.

Lecture 14: Data-Flow Analysis: le equazioni di dataflow, loro soluzione algoritmica e complessità computazionale, [2], pg. 65-82, 365-392.

Lecture 15: Data-Flow Analysis: problemi non distributivi, l'analisi della propagazione delle costanti, e l'algoritmo relativo, [2], pg. 72-74 e 78-82.

Lecture 16: Interpretazione Astratta: domini astratti e domini concreti, connessioni di Galois e inserzioni di Galois. Il dominio astratto dei segni. [6]

Lecture 17: Interpretazione Astratta: la semantica astratta delle espressioni (del linguaggio while) e la correttezza locale delle operazioni. [6]

Lecture 18: Interpretazione Astratta: la semantica astratta dei comandi del linguaggio while. [6]

Lecture 19: Interpretazione Astratta: la correttezza della semantica astratta del linguaggio while. [6]

Lecture 20: Interpretazione Astratta: Caso di studio: il Java Bytecode Verifier (1). [6]

Lecture 21: Interpretazione Astratta: Caso di studio: il Java Bytecode Verifier (2). [6]

Lecture 22: Interpretazione Astratta: Caso di studio: il Java Bytecode Verifier (3). [6]

Tipo di insegnamento Lezioni frontali
Giudizio Esame scritto
Testi di riferimento
[1] Hanne Riis Nielson, Flemming Nielson: Semantics with Applications: A Formal Introduction.

[2] F. Nielson, H.R. Nielson, C. Hankin: "Principles of Program Analysis", Springer Verlag, 2005

[3] K. R. Apt: "Ten years of Hoare logic: A survey -- Part 1", ACM Transactions on Programmming Languages, Vol. 3(4), pp. 431--483, 1981.

[4] N. D. Jones, F. Nielson: "Abstract interpretation, a semantic based tool for program analysis", 1994

[5] Glynn Winskel: Lecture notes on Denotational semantics.

[6] Dispense del docente: Parte 0 Parte 1, Parte 2, Parte 3.

[7] B. A. Davey, H. A. Priestley: Introduction to Lattices and Order. This is the Bible for cpos, lattices, etc. For outstanding students only.

[8] many others: search semantics + programming languages + book with google and you will find tons of material. Choose your favorite one.
Captatio Benevolentiae Qui si trovano buone ragioni per studiare l'analisi dei programmi. Qui si trova un'applicazione dell'analisi dei programmi in cui si dimostria che tutti i compilatori Java -- SDK 1.3 hanno bachi (il problema e` stato risolto dall'SDK 1.4 in poi).
Alcune start-up che usano le tecniche che saranno presentate nel corso:
Risultati del corso Comprensione di tecniche formali per garantire proprietà di correttezza di programmi, le difficoltà relative alla loro progettazione e i possibili campi di applicazione.
Newsgroup unibo.cs.informaticamagistrale.analisidiprogrammi