Demonstration venue · read-only. Every page can be browsed; the buttons that would change it are switched off. Create an account to run TaxoReview on your own data. A simulation from public publication records: the people listed were not invited and did not agree to review.
? Tutorial for this page

Andrea Mattavelli

dblp:116/6661 · DBLP profile ↗
← Back
10ranked-venue papers
1as first author
0since 2021 · last 2018
—ORCID · none

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 10 · 1 first-authorArtificial intelligence and machine learning · 1 · 1 first-author

Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.

Software engineering, system software, and programming languages
8 papers
Program analysis · 41% Software testing · 34% Software maintenance and evolution · 9%

Topics — the 12 heaviest of 14, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Program analysis
symbolic execution
0.732018
Chopped symbolic execution · ICSE 2018
Accelerating array constraints in symbolic execution · ISSTA 2017
Combining symbolic execution and search-based testing for programs with complex heap inputs · ISSTA 2017
Software testing
test generation
0.622017
Accelerating array constraints in symbolic execution · ISSTA 2017
Combining symbolic execution and search-based testing for programs with complex heap inputs · ISSTA 2017
Program analysis › symbolic execution
path explosion
0.312018
Chopped symbolic execution · ICSE 2018
Program analysis
constraint solving
0.312017
Accelerating array constraints in symbolic execution · ISSTA 2017
Program analysis
static analysis
0.312017
Accelerating array constraints in symbolic execution · ISSTA 2017
Software testing › test generation
automated test generation
0.212014
Cross-checking oracles from intrinsic software redundancy · ICSE 2014
Software testing
metamorphic testing
0.212014
Search-based synthesis of equivalent method sequences · SIGSOFT FSE 2014
Software testing › test generation › test sequence generation
method sequence generation
0.212014
Search-based synthesis of equivalent method sequences · SIGSOFT FSE 2014
Program synthesis and code generation
search-based program synthesis
0.212014
Search-based synthesis of equivalent method sequences · SIGSOFT FSE 2014
Software testing › test oracle
test oracle generation
0.212014
Cross-checking oracles from intrinsic software redundancy · ICSE 2014
Software maintenance and evolution › software evolution › software adaptation
self-healing systems
0.112012
A self-healing technique for Java applications · ICSE 2012
Operating systems
fault tolerance
0.122015
Measuring Software Redundancy · ICSE (1) 2015
Search-based synthesis of equivalent method sequences · SIGSOFT FSE 2014

Methods — techniques the papers use, named apart from their topics

symbolic execution · 0.6constraint solving · 0.6semantics-preserving transformation · 0.3search-based testing · 0.3optimization · 0.3code similarity analysis · 0.2specification-based testing · 0.2search-based synthesis · 0.2metamorphic testing · 0.2cross-checking · 0.2
YearPublicationVenuePosition
2018 Chopped symbolic execution
abstract
Symbolic execution is a powerful program analysis technique that systematically explores multiple program paths. However, despite important technical advances, symbolic execution often struggles to reach deep parts of the code due to the well-known path explosion problem and constraint solving limitations.
David Trabish, Andrea Mattavelli, Noam Rinetzky, Cristian Cadar
ICSE2
2017 Combining symbolic execution and search-based testing for programs with complex heap inputs
abstract
Despite the recent improvements in automatic test case generation, handling complex data structures as test inputs is still an open problem. Search-based approaches can generate sequences of method calls that instantiate structured inputs to exercise a relevant portion of the code, but fall short in building inputs to execute program elements whose reachability is determined by the structural features of the input structures themselves. Symbolic execution techniques can effectively handle structured inputs, but do not identify the sequences of method calls that instantiate the input structures through legal interfaces. In this paper, we propose a new approach to automatically generate test cases for programs with complex data structures as inputs. We use symbolic execution to generate path conditions that characterise the dependencies between the program paths and the input structures, and convert the path conditions to optimisation problems that we solve with search-based techniques to produce sequences of method calls that instantiate those inputs. Our preliminary results show that the approach is indeed effective in generating test cases for programs with complex data structures as inputs, thus opening a promising research direction.
Pietro Braione, Giovanni Denaro, Andrea Mattavelli, Mauro Pezzè
ISSTA3
2017 Accelerating array constraints in symbolic execution
abstract
Despite significant recent advances, the effectiveness of symbolic execution is limited when used to test complex, real-world software. One of the main scalability challenges is related to constraint solving: large applications and long exploration paths lead to complex constraints, often involving big arrays indexed by symbolic expressions. In this paper, we propose a set of semantics-preserving transformations for array operations that take advantage of contextual information collected during symbolic execution. Our transformations lead to simpler encodings and hence better performance in constraint solving. The results we obtain are encouraging: we show, through an extensive experimental analysis, that our transformations help to significantly improve the performance of symbolic execution in the presence of arrays. We also show that our transformations enable the analysis of new code, which would be otherwise out of reach for symbolic execution.
David Mitchel Perry, Andrea Mattavelli, Xiangyu Zhang 0001, Cristian Cadar
ISSTA2
2015 Measuring Software Redundancy
abstract
Redundancy is the presence of different elements with the same functionality. In software, redundancy is useful (and used) in many ways, for example for fault tolerance and reliability engineering, and in self-adaptive and self-checking programs. However, despite the many uses, we still do not know how to measure software redundancy to support a proper and effective design. If, for instance, the goal is to improve reliability, one might want to measure the redundancy of a solution to then estimate the reliability gained with that solution. Or one might compare alternative solutions to choose the one that expresses more redundancy and therefore, presumably, more reliability. We first formalize a notion of redundancy whereby two code fragments are considered redundant when they achieve the same functionality with different executions. On the basis of this abstract and general notion, we then develop a concrete method to obtain a meaningful quantitative measure of software redundancy. The results we obtain are very positive: we show, through an extensive experimental analysis, that it is possible to distinguish code that is only minimally different, from truly redundant code, and that it is even possible to distinguish low-level code redundancy from high-level algorithmic redundancy. We also show that the measurement is significant and useful for the designer, as it can help predict the effectiveness of techniques that exploit redundancy.
Antonio Carzaniga, Andrea Mattavelli, Mauro Pezzè
ICSE (1)2
2015 Synthesis of Equivalent Method Calls in Guava
Andrea Mattavelli, Alberto Goffi, Alessandra Gorla
SSBSE1
2014 Cross-checking oracles from intrinsic software redundancy
abstract
Despite the recent advances in automatic test generation, testers must still write test oracles manually. If formal specifications are available, it might be possible to use decision procedures derived from those specifications. We present a technique that is based on a form of specification but also leverages more information from the system under test. We assume that the system under test is somewhat redundant, in the sense that some operations are designed to behave like others but their executions are different. Our experience in this and previous work indicates that this redundancy exists and is easily documented. We then generate oracles by cross-checking the execution of a test with the same test in which we replace some operations with redundant ones. We develop this notion of cross-checking oracles into a generic technique to automatically insert oracles into unit tests. An experimental evaluation shows that cross-checking oracles, used in combination with automatic test generation techniques, can be very effective in revealing faults, and that they can even improve good hand-written test suites.
Antonio Carzaniga, Alberto Goffi, Alessandra Gorla, Andrea Mattavelli, Mauro Pezzè
ICSE4
2014 Search-based synthesis of equivalent method sequences
abstract
Software components are usually redundant, since their interface offers different operations that are equivalent in their functional behavior. Several reliability techniques exploit this redundancy to either detect or tolerate faults in software. Metamorphic testing, for instance, executes pairs of sequences of operations that are expected to produce equivalent results, and identifies faults in case of mismatching outcomes. Some popular fault tolerance and self-healing techniques execute redundant operations in an attempt to avoid failures at runtime. The common assumption of these techniques, though, is that such redundancy is known a priori. This means that the set of operations that are supposed to be equivalent in a given component should be available in the specifications. Unfortunately, inferring this information manually can be expensive and error prone. This paper proposes a search-based technique to synthesize sequences of method invocations that are equivalent to a target method within a finite set of execution scenarios. The experimental results obtained on 47 methods from 7 classes show that the proposed approach correctly identifies equivalent method sequences in the majority of the cases where redundancy was known to exist, with very few false positives.
Alberto Goffi, Alessandra Gorla, Andrea Mattavelli, Mauro Pezzè, Paolo Tonella
SIGSOFT FSE3
2014 Software testing with code-based test generators: data and lessons learned from a case study with an industrial software component
Pietro Braione, Giovanni Denaro, Andrea Mattavelli, Mattia Vivanti
Softw. Qual. J.3
2013 Automatic recovery from runtime failures
abstract
We present a technique to make applications resilient to failures. This technique is intended to maintain a faulty application functional in the field while the developers work on permanent and radical fixes. We target field failures in applications built on reusable components. In particular, the technique exploits the intrinsic redundancy of those components by identifying workarounds consisting of alternative uses of the faulty components that avoid the failure. The technique is currently implemented for Java applications but makes little or no assumptions about the nature of the application, and works without interrupting the execution flow of the application and without restarting its components. We demonstrate and evaluate this technique on four mid-size applications and two popular libraries of reusable components affected by real and seeded faults. In these cases the technique is effective, maintaining the application fully functional with between 19% and 48% of the failure-causing faults, depending on the application. The experiments also show that the technique incurs an acceptable runtime overhead in all cases.
Antonio Carzaniga, Alessandra Gorla, Andrea Mattavelli, Nicolò Perino, Mauro Pezzè
ICSE3
2012 A self-healing technique for Java applications
abstract
Despite the best design practices and testing techniques, many faults exist and manifest themselves in deployed software. In this paper we propose a self-healing framework that aims to mask fault manifestations at runtime in Java applications by automatically applying workarounds. The framework integrates a checkpoint-recovery mechanism to restore a consistent state after the failure, and a mechanism to replace the Java code at runtime to apply the workaround.
Antonio Carzaniga, Alessandra Gorla, Andrea Mattavelli, Nicolò Perino
ICSE3