Analiza programelor - curs
Prezentare
Marți, orele 18-20, sala A109 (Fac. de Automatică și Calculatoare),
din 27 aprilie 2004, timp de 6 săptămâni
Cadru didactic: Marius Minea,
marius@cs.upt.ro>
Cursul e adresat tuturor celor interesați de programare, limbaje,
instrumente de dezvoltare și analiză, tehnici utilizate, rezultate noi, și
perspectiva de a lucra în domeniu: proiecte de diplomă, și de cercetare.
Motivație
Sistemele software sunt tot mai complexe. Trebuie să detectăm
erori sau probleme de securitate, sau și mai greu, să garantăm absența
lor; să analizăm funcționarea și performanța programelor; sau chiar să
definim un nou limbaj și să implementăm un mediu de dezvoltare. Deci,
trebuie să știm ce tehnici și instrumente există, și cum să realizăm
altele la nevoie.
Rezultatele de cercetare recente în domeniul analizei
programelor sunt spectaculoase:
- s-a verificat absența erorilor la rulare (ex. depășiri) în programul de
control din Airbus A340
- s-au detectat automat și corectat sute de erori în surse de sistem de
operare (nucleul Linux)
- s-a verificat corectitudinea secvențelor de apeluri sistem în cod de
> 100 k linii sursă (gcc)
Conținut
Domeniul analizei programelor grupează o serie de tehnici pentru
a deduce proprietăți ale programelor prin analiza codului sursă, fără a rula
executabilul. Vom discuta patru abordări: analiza fluxului de date,
analiza bazată pe constrângeri, interpretare abstractă, sisteme de tipuri,
prezentând succint principiile și aplicabilitatea lor în practică:
calculul fluxului de valori din program (pentru detectarea de atribuiri
eronate), analiza atribuirilor indirecte prin pointeri, analiza structurilor
alocate dinamic, simplificarea programelor la proprietățile relevante pentru
analiza dorită, instrumentarea cu verificări la rulare sau înlocuirea lor
cu verificări statice.
Cerințe
Noțiuni fundamentale de limbaje de programare, gândire
algoritmică și matematică. Cursul e înrudit cu cele de limbaje și
compilatoare, dar se poate urma independent.
Nu vor fi note sau teme, ci doar o serie de expuneri ca prim pas spre un curs
opțional, dacă există interes.
Note de curs
- Introducere. Analiza fluxului de date. PDF, 1:1 și
1:6, pentru listat
- Analiza fluxului de date. Sistematizare. PDF, 1:1
și 1:6, pentru listat (versiune incompletă)
- Interpretare abstractă PDF, 1:1
și 1:6, pentru listat
Folii cu exemple de widening/narrowing (Doug Gregor, RPI)
- Analiza bazata pe constrângeri
Un articol de sinteză de Alex Aiken
- Sisteme de tipuri
Foliile din cursul lui Zhendong Su (UC Davis)
Luca Cardelli. Type Systems
- Aplicatii: Splint, ESC/Java, CIL, CCured ...
Cursuri la alte universități
Articole (lectură suplimentară)
Marius Minea
Last modified: Tue May 25 14:45:21 EEST 2004