The goal of the course is that of providing the basic tools for understanding, designing and using analysis tools on computational systems aiming at verifying properties and/or extracting functionalities of systems under analysis. In the context of the CdS, the course provides context knowledge and cross capabilities useful for analyzing software systems both from the developer point of view and from the point of view of who aims at extracting functionalities from unknown systems (reverse engineering). At the end of the course, the student will be able to show knowledge and comprehension capabilities that allow him/her to elaborate and/or apply original ideas in the fields of software analysis and verification, potentially in research contexts; to solve problems of program analysis in new and not familiar fields, included in wider contexts, related to their field of study; to study and to search for study material concerning system and program analysis in autonomy.
Introduction to program analysis and verification.
Static analyses: Data-flow analysis based on CFG, Static analysis based on semantics (abstract interpretation), numerical analysis, alias and inter-procedural analysis (nods)
Dynamic analyses: Formal foundations of testing, Monitoring.
Verification: Model checking
Slicing: Transformation technique for program analysis and verification.
|Seidl, Helmut, Wilhelm, Reinhard, Hack, Sebastian||Compiler Design Analysis and Transformation (Edizione 1)||Springer||2012||978-3-642-17548-0|
|Keith Cooper, Linda Torczon||Engineering a Compiler, Second Edition (Edizione 2)||Elsevier||2012||012088478X|
|Xavier Rival, Kwangkeun Yi||Introduction to Static Analysis: An Abstract Interpretation Perspective||MIT||2020|
|Edmund M Clarke, Orna Grumberg, Doron Peled, Doron Peleg||Model Checking (Edizione 2)||MIT||2018||9780262038836|
|Christel Baier and Joost-Pieter Katoen||Principles of Model Checking||MIT press||2008|
|F. Nielson, H. R. Nielson and C. Hankin||Principles of Program Analysis||Springer-Verlag||1999|
The exam is structured in two parts and may be completed in two different manners:
- Written exam + Project
- Written exam + Oral (mandatory for evaluation greater than 26)
The goal of the written exam is that of verifying a sufficient understanding of the notions presented during the course. The goal of the project is that of verifying the capability of retrieving study material and of re-elaborating independently and in autonomy the notions acquired during the course.
The goal of the oral exam is that of verifying an advanced understanding of the notions presented during the course and a clear capability of re-elaborating the studied notions.
Written exam: set of questions on the whole program of the course
Project: detailed study of a specific problem or case study in the context of program analysis (written relation+presentation with slides)
Oral exam: questions on the whole program of the course