Software engineering, Autonomic computing, Self-adaptive, Self-healing
HArman Mark and Pezzè Mauro (ed.) (2015), Introduction to the Special Issue on ISSTA 2013
, AMC, New York.
Carzaniga Antonio, Gorla Alessandra, Perino Nicolò, Pezzè Mauro (2015), Automatic Workarounds: Exploiting the Intrinsic Redundancy of Web Applications, in ACM Transactions on Software Engineering and Methodologies
, 24(3), 16-16.
Carzaniga Antonio, Goffi Alberto, Gorla Alessandra, Mattavelli Andrea, Perino Nicolò, Pezzè Mauro, Tonella Paolo (2015), Intrinsic Software Redundancy for Self-healing Software Systems and Automated Oracle generation, in Software Engineering and Management
, GermanyGI, Dresden, Germany.
Carzaniga Antonio, Mattavelli Andrea, Pezzè Mauro (2015), Measuring Software Redundancy, in Proceedings of the 37th International Conference on Software Engineering
, IEEE, Piscataway, NJ, USA.
Mattavelli Andrea, Goffi Alberto, Gorla Alessandra (2015), Synthesis of Equivalent Method Calls in Guava, in Proceedings of the 7th Symposium on Search-Based Software Engineering (SSBSE ’15)
, Springer, Germany.
New York NY USA (ed.) (2014), Introduction to the Special Issue International Conference on Software Engineering
, ACM, New York.
Goffi Alberto, Gorla Alessandra, Mattavelli Andrea, Pezzè Mauro, Tonella Paolo (2014), Search-Based Synthesis of Equivalent Method Sequences, in Proceedings of the 22nd International Symposium on the Foundations of Software Engineering
, ACM, New York, NY, USA.
Carzaniga Antonio, Goffi Alberto, Gorla Alessandra, Mattavelli Andrea, Pezzè Mauro (2014), Cross-checking Oracles from Intrinsic Software Redundancy, in Proceedings of the 36th International Conference on Software Engineering
, ACM, New York, NY, USA.
Mattavelli Andrea (2014), Understanding the Redundancy of Software Systems, in Proceedings of the 36th International Conference on Software Engineering
, ACM, New York, NY, USA.
Pezzè Mauro (ed.) (2013), International Symposium on Software Testing and Analysis, ISSTA 2013, July 15-20, 2013, Lugano, Switzerland
, ACM, New York.
Pezzè Mauro (2012), From off-Line to continuous on-line maintenance
, IEEE, New york.
Glinz Martin (ed.) (2012), 34th International Conference on Software Engineering, ICSE 2012, June 2-9, 2012, Zurich, Switzerland
, IEEE, New York.
Carzaniga Antonio, Gorla Alessandra, Mattavelli Andrea, Perino Nicolò (2012), A self-healing technique for Java applications, in 34nd ACM/IEEE International Conference on Software Engineering
, Zurich, SwitzerlandIEEE Press, Piscataway, NJ, USA.
Pezzè Mauro, Rinard Martin C., Weimer Westley, Zeller Andreas (2011), Self-Repairing Programs (Dagstuhl Seminar 11062)
, Dagstuhl Reports, Dagstuhl.
Carzaniga Antonio, Gorla Alessandra, Mattavelli Andrea, Perino Nicolò, Pezzè Mauro (accepted), Automatic Recovery from Runtime Failures, in 35th International Conference on Software Engineering
, San Francisco, California, USAIEEE Press, Piscataway, NJ, USA.
This project aims to define a new approach to design and develop self-healing enabled software systems. The approach will provide first class design elements to build software systems that can automatically detect failures, and diagnose and repair the corresponding faults or bugs.
While the current research on self-healing systems and, more generally, on self-managed and autonomic systems investigate specific self-healing and self-managed mechanisms to address particular classes of faults and problems, this project focuses on the definition of a general set of design principles and methods, and an enabling infrastructure. Current research in self-healing and autonomic systems gives evidence of the possibility of augmenting software systems with self-healing mechanisms, and provides important enabling data for this project.
Many advances in software design and verification in the last decades, like for example structured programming in the seventies and object oriented design in the eighties, sprang from embedding best-practice principles, like locality, divide and conquer, encapsulation and information hiding, into design methodologies supported by enabling infrastructures expressed as programming language construct and virtual machine runtime support. Similarly, this project aims to move one step forward towards a general methodology for designing self-healing systems by generalizing current approaches for designing self-healing systems into general principles, embedding the principles into design methodologies, and defining supporting infrastructures.
This project focuses on design principles that will be the foundation of future infrastructure and methods. Design principles capture the essence of the design approach and are essential to the new methodology. A full set of well-defined and motivated principles underlying a self-healing design methodology will be the main results of this project that will start the investigation from some initial ideas that include: flexibility in input and rigorous conformance in output, documented input flexibility, management interface testing and probing interface, documented reconfiguration or evading and recovery actions, documented stateful performance and resource-usage model, documented properties of the component itself. The design infrastructure is equivalent to the JVM for Java programs, and provides the runtime required to enact self-healing-enabling mechanisms.
A preliminary architecture and prototype of a design infrastructure as well as an initial set of self-healing-enabling mechanisms will be also an important result of this project, and will enable to definition of a full scale design methodology. We will start from a set of ideas that we derived from our investigation of problems and state of art ad-hoc mechanisms and that includes transactional memory to support the restoring of a coherent state after revealing a failure or an aborted attempt to apply a recovery action, runtime and preemptive analysis to collect data about the program execution that can support failure analysis and fault diagnosis either continuously during the program execution or on demand as a response to particular failing or recovery conditions. Like object oriented design principles and runtime mechanisms call for a proper methodology to design well-formed object oriented programs, similarly, design principles and runtime mechanisms for self-healing systems call for a proper methodology to design well-formed self-healing systems.
In a nutshell, this project aims to address the following challenges: (1) identify the information and create a suitable exchange format to integrate self-healing techniques that work at different phases of the self-healing cycle, (2) design approaches to identify the techniques that best integrate at different phases to address a system failure while avoiding unexpected interferences among self-healing techniques, (3) improve individual self-healing techniques by providing underlying technologies that broaden the scope of their applicability or that enhance the effectiveness of one or several techniques, (4) define new techniques to address open problems in the self-healing cycle, (5) move techniques and approaches at the infrastructure level to create a general framework for designing self-healing systems and enabling reusability of approaches across application domains.