Software Testing and Analysis


Testing is a common practice adopted by software engineers to validate software systems. Testing of modern systems requires a lot of developer effort and testing costs often prevent engineers from exhaustively validating their systems.
Our research focuses on the enhancement of software testing practices through the automation of software testing activities. In particular we focus on test cases maintenance and re-use, automatic generation of integration tests, and generation of test cases to improve structural coverage.


Program analysis is a software engineering practice that aims at analyzing the behavior of software systems through the inspection of static and dynamic information like source code or execution traces.
Our research focuses both on static and dynamic analysis. In particular we work on the combination of contextual data-flow analysis and runtime monitoring to improve structural testing of object oriented systems, and on the analysis of inferred behavioral models for the diagnosis of functional faults.



Heterogeneity, mobility, complexity and new application domains raise new software reliability issues that cannot be met cost-effectively only with classic software engineering approaches. Self-healing systems can successfully address these problems, thus increasing software reliability while reducing maintenance costs. Self-healing systems must be able to automatically identify runtime failures, locate faults, and find a way to bring the system back to an acceptable behavior.
Our research focuses on the design of techniques for the construction of self-healing systems with particular focus on functional failures. We designed techniques to automatically derive assertions to effectively detect functional failures, locate the faults underlying the failures, and identify sequences of alternative actions to bring the system back to an acceptable behavior.


Enterprise services must satisfy strong requirements that are coded in agreements with customers, commonly called service level agreements (SLA). To satisfy SLAs in critical conditions, conventional data centers are often greatly over-dimensioned, wasting resources and raising service costs.
Our research focuses on the adoption of surrogate models to manage and optimize resources within virtualized data centers (VDC) to reduce over-dimensioning, and so reduce service costs without negatively affecting service agreements, through dynamic adaptation.