Network


Latest external collaboration on country level. Dive into details by clicking on the dots.

Hotspot


Dive into the research topics where Marcelo d'Amorim is active.

Publication


Featured researches published by Marcelo d'Amorim.


international workshop on dynamic analysis | 2005

Event-based runtime verification of java programs

Marcelo d'Amorim; Klaus Havelund

We introduce the temporal logic HAWK and its supporting tool for runtime verification of Java programs. A monitor for a HAWK formula checks if a finite trace of program events satisfies the formula. HAWK is a programming-oriented extension of the rule-based EAGLE logic that has been shown capable of defining and implementing a range of finite trace monitoring logics, including future and past time temporal logic, metric (real-time) temporal logics, interval logics, forms of quantified temporal logics, extended regular expressions, state machines, and others. Monitoring is achieved on a state-by-state basis avoiding any need to store the input trace. HAWK extends EAGLE with constructs for capturing parameterized program events such as method calls and method returns. Parameters can be executing thread, the objects that methods are called upon, arguments to methods, and return values. HAWK allows one to refer to these in formulae. The tool synthesizes monitors from formulae and automates program instrumentation.


computer aided verification | 2005

Efficient monitoring of ω-languages

Marcelo d'Amorim; Grigore Rosu

We present a technique for generating efficient monitors for ω-regular-languages. We show how Buchi automata can be reduced in size and transformed into special, statistically optimal nondeterministic finite state machines, called binary transition tree finite state machines (BTT-FSMs), which recognize precisely the minimal bad prefixes of the original ω-regular-language. The presented technique is implemented as part of a larger monitoring framework and is available for download.


automated software engineering | 2006

An Empirical Comparison of Automated Generation and Classification Techniques for Object-Oriented Unit Testing

Marcelo d'Amorim; Carlos Pacheco; Tao Xie; Darko Marinov; Michael D. Ernst

Testing involves two major activities: generating test inputs and determining whether they reveal faults. Automated test generation techniques include random generation and symbolic execution. Automated test classification techniques include ones based on uncaught exceptions and violations of operational models inferred from manually provided tests. Previous research on unit testing for object-oriented programs developed three pairs of these techniques: model-based random testing, exception-based random testing, and exception-based symbolic testing. We develop a novel pair, model-based symbolic testing. We also empirically compare all four pairs of these generation and classification techniques. The results show that the pairs are complementary (i.e., reveal faults differently), with their respective strengths and weaknesses


Electronic Notes in Theoretical Computer Science | 2006

Checking and Correcting Behaviors of Java Programs at Runtime with Java-MOP

Feng Chen; Marcelo d'Amorim; Grigore Rosu

Monitoring-oriented programming (MOP) is a software development and analysis technique in which monitoring plays a fundamental role. MOP users can add their favorite or domain-specific requirements specification formalisms into the framework by means of logic plug-ins, which essentially comprise monitor synthesis algorithms for properties expressed as formulae. The properties are specified together with declarations stating where and how to automatically integrate the corresponding monitor into the system, as well as what to do if the property is violated or validated. In this paper we present Java-MOP, an MOP environment for developing robust Java applications. Based upon a carefully designed specification schema and upon several logic plug-ins, Java-MOP allows users to specify and monitor properties which can refer not only to the current program state, but also to the entire execution trace of a program, including past and future behaviors.


foundations of software engineering | 2013

SPLat: lightweight dynamic analysis for reducing combinatorics in testing configurable systems

Chang Hwan Peter Kim; Darko Marinov; Sarfraz Khurshid; Don S. Batory; Sabrina Souto; Paulo Barros; Marcelo d'Amorim

Many programs can be configured through dynamic and/or static selection of configuration variables. A software product line (SPL), for example, specifies a family of programs where each program is defined by a unique combination of features. Systematically testing SPL programs is expensive as it can require running each test against a combinatorial number of configurations. Fortunately, a test is often independent of many configuration variables and need not be run against every combination. Configurations that are not required for a test can be pruned from execution. This paper presents SPLat, a new way to dynamically prune irrelevant configurations: the configurations to run for a test can be determined during test execution by monitoring accesses to configuration variables. SPLat achieves an optimal reduction in the number of configurations and is lightweight compared to prior work that used static analysis and heavyweight dynamic execution. Experimental results on 10 SPLs written in Java show that SPLat substantially reduces the total test execution time in many cases. Moreover, we demonstrate the scalability of SPLat by applying it to a large industrial code base written in Ruby on Rails.


automated software engineering | 2013

Entropy-based test generation for improved fault localization

José Creissac Campos; Gordon Fraser; Marcelo d'Amorim

Spectrum-based Bayesian reasoning can effectively rank candidate fault locations based on passing/failing test cases, but the diagnostic quality highly depends on the size and diversity of the underlying test suite. As test suites in practice often do not exhibit the necessary properties, we present a technique to extend existing test suites with new test cases that optimize the diagnostic quality. We apply probability theory concepts to guide test case generation using entropy, such that the amount of uncertainty in the diagnostic ranking is minimized. Our ENTBUG prototype extends the search-based test generation tool EVOSUITE to use entropy in the fitness function of its underlying genetic algorithm, and we applied it to seven real faults. Empirical results show that our approach reduces the entropy of the diagnostic ranking by 49% on average (compared to using the original test suite), leading to a 91% average reduction of diagnosis candidates needed to inspect to find the true faulty one.


international conference on software testing verification and validation | 2012

Symbolic Execution with Interval Solving and Meta-heuristic Search

Mateus Borges; Marcelo d'Amorim; Saswat Anand; David H. Bushnell; Corina S. Pasareanu

A challenging problem in symbolic execution is to solve complex mathematical constraints such as constraints that include floating-point variables and transcendental functions. The inability to solve such constraints limit the application scope of symbolic execution. In this paper, we present a new method to solve such complex math constraints. Our method combines two existing: meta-heuristic search and interval solving. Conceptually, the combination explores the synergy of the individual methods to improve constraint solving. We implemented the new method in the CORAL constraint-solving infrastructure, and evaluated its effectiveness on a set of publicly-available software from the aerospace domain. Results indicate that the new method can solve significantly more complex mathematical constraints than previous techniques.


programming language design and implementation | 2014

Compositional solution space quantification for probabilistic software analysis

Mateus Borges; Antonio Filieri; Marcelo d'Amorim; Corina S. Păsăreanu; Willem Visser

Probabilistic software analysis aims at quantifying how likely a target event is to occur during program execution. Current approaches rely on symbolic execution to identify the conditions to reach the target event and try to quantify the fraction of the input domain satisfying these conditions. Precise quantification is usually limited to linear constraints, while only approximate solutions can be provided in general through statistical approaches. However, statistical approaches may fail to converge to an acceptable accuracy within a reasonable time. We present a compositional statistical approach for the efficient quantification of solution spaces for arbitrarily complex constraints over bounded floating-point domains. The approach leverages interval constraint propagation to improve the accuracy of the estimation by focusing the sampling on the regions of the input domain containing the sought solutions. Preliminary experiments show significant improvement on previous approaches both in results accuracy and analysis time.


automated software engineering | 2015

Static Analysis of Implicit Control Flow: Resolving Java Reflection and Android Intents (T)

Paulo Barros; René Just; Suzanne Millstein; Paul Vines; Werner Dietl; Marcelo d'Amorim; Michael D. Ernst

Implicit or indirect control flow is a transfer of control between procedures using some mechanism other than an explicit procedure call. Implicit control flow is a staple design pattern that adds flexibility to system design. However, it is challenging for a static analysis to compute or verify properties about a system that uses implicit control flow. This paper presents static analyses for two types of implicit control flow that frequently appear in Android apps: Java reflection and Android intents. Our analyses help to resolve where control flows and what data is passed. This information improves the precision of downstream analyses, which no longer need to make conservative assumptions about implicit control flow. We have implemented our techniques for Java. We enhanced an existing security analysis with a more precise treatment of reflection and intents. In a case study involving ten real-world Android apps that use both intents and reflection, the precision of the security analysis was increased on average by two orders of magnitude. The precision of two other downstream analyses was also improved.


automated software engineering | 2011

Fault-localization using dynamic slicing and change impact analysis

Elton Alves; Milos Gligoric; Vilas Jagannath; Marcelo d'Amorim

Spectrum-based fault-localization tools, such as Tarantula, have been developed to help guide developers towards faulty statements in a system under test. These tools report statements ranked in order of suspiciousness. Unfortunately, the reported statements can often be unrelated to the error. This paper evaluates the impact of several approaches to ignoring such unrelated statements in order to improve the effectiveness of fault-localization tools.

Collaboration


Dive into the Marcelo d'Amorim's collaboration.

Top Co-Authors

Avatar

Mateus Borges

Federal University of Pernambuco

View shared research outputs
Top Co-Authors

Avatar
Top Co-Authors

Avatar

Sarfraz Khurshid

University of Texas at Austin

View shared research outputs
Top Co-Authors

Avatar

Andrei Rimsa

Universidade Federal de Minas Gerais

View shared research outputs
Top Co-Authors

Avatar

Diego Cavalcanti

Federal University of Campina Grande

View shared research outputs
Top Co-Authors

Avatar

Fernando Magno Quintão Pereira

Universidade Federal de Minas Gerais

View shared research outputs
Top Co-Authors

Avatar

Juliano Iyoda

Federal University of Pernambuco

View shared research outputs
Top Co-Authors

Avatar

Mitsuo Takaki

Federal University of Pernambuco

View shared research outputs
Top Co-Authors

Avatar

Paulo Barros

Federal University of Pernambuco

View shared research outputs
Top Co-Authors

Avatar
Researchain Logo
Decentralizing Knowledge