Papers by matias martinez

Empirical Software Engineering
Automatic Program Repair (APR) techniques can promisingly help reduce the cost of debugging. Many... more Automatic Program Repair (APR) techniques can promisingly help reduce the cost of debugging. Many relevant APR techniques follow the generate-and-validate approach, that is, the faulty program is iteratively modified with different change operators and then validated with a test suite until a plausible patch is generated. In particular, Kali is a generate-and-validate technique developed to investigate the possibility of generating plausible patches by only removing code. Former studies show that indeed Kali successfully addressed several faults. This paper addresses the single and particular case of code-removal patches in automated program repair. We investigate the reasons and the scenarios that make their creation possible, and the relationship with patches implemented by developers. Our study reveals that code-removal patches are often insufficient to fix bugs, and proposes a comprehensive taxonomy of code-removal patches that provides evidence of the problems that may affect t...

Empirical Software Engineering, 2021
In this paper, we do automatic correctness assessment for patches generated by program repair sys... more In this paper, we do automatic correctness assessment for patches generated by program repair systems. We consider the human-written patch as ground truth oracle and randomly generate tests based on it, a technique proposed by Shamshiri et al., called Random testing with Ground Truth (RGT) in this paper. We build a curated dataset of 638 patches for Defects4J generated by 14 state-of-the-art repair systems, we evaluate automated patch assessment on this dataset. The results of this study are novel and significant: First, we improve the state of the art performance of automatic patch assessment with RGT by 190% by improving the oracle; Second, we show that RGT is reliable enough to help scientists to do overfitting analysis when they evaluate program repair systems; Third, we improve the external validity of the program repair knowledge with the largest study ever.
ArXiv, 2018
Repairnator is a bot. It constantly monitors software bugs discovered during continuous integrati... more Repairnator is a bot. It constantly monitors software bugs discovered during continuous integration of open-source software and tries to fix them automatically. If it succeeds to synthesize a valid patch, Repairnator proposes the patch to the human developers, disguised under a fake human identity. To date, Repairnator has been able to produce 5 patches that were accepted by the human developers and permanently merged in the code base. This is a milestone for human-competitiveness in software engineering research on automatic program repair.
ArXiv, 2017
In this paper our goal is to perform an open-ended exploration of the program repair search space... more In this paper our goal is to perform an open-ended exploration of the program repair search space. Our idea is to collect the largest number of test-suite adequate patches, independently of whether they are fully correct or overfitting. For that, we design Cardumen, a repair approach based mined templates that has an ultra-large search space. We evaluate the capacity of Cardumen to discover test-suite adequate patches (aka plausible patches) over the 356 real bugs from Defects4J by Just et al. (2014). Cardumen finds 8935 patches over 77 bugs of Defects4J. This is the largest number of automatically synthesized patches ever reported, all patches being available in an open- science repository. Moreover, Cardumen identifies 8 unique patches, that are patches for Defects4J bugs that were never repaired in the whole history of program repair.

ArXiv, 2021
In 2017, Google announced Kotlin as an official Android programming language, and more recently, ... more In 2017, Google announced Kotlin as an official Android programming language, and more recently, as the preferred programming language to build applications. These facts motivated developers to migrate their applications, which is challenging because each migrated piece of code must be tested after the migration to ensure it preserves the expected behavior. Due to the interoperability between Java and Kotlin, most developers decided to migrate their applications gradually. Thus, developers have to decide which file(s) to migrate first on each migration step. However, there are no tools available to help developers make these choices. This paper presents an approach to support a gradual migration of Android applications that given a version of an application written in Java and eventually, in Kotlin, it suggests the most convenient files to migrate. To this end, we built a large-scale corpus of open-source projects that migrated Java files to Kotlin. Then, we trained a learning to ra...

IEEE Transactions on Software Engineering, 2021
Currently, the majority of apps running on mobile devices are Android apps developed in Java. How... more Currently, the majority of apps running on mobile devices are Android apps developed in Java. However, developers can now write Android applications using a new programming language: Kotlin, which Google adopted in 2017 as an official programming language for developing Android apps. Since then, Android developers have been able to: a) start writing Android applications from scratch using Kotlin, b) evolve their existing Android applications written in Java by adding Kotlin code (possible thanks to the interoperability between the two languages), or c) migrate their Android apps from Java to Kotlin. This paper aims to study this last case. We conducted a qualitative study to find out why Android developers have migrated Java code to Kotlin and to bring together their experiences about the process, in order to identify the main difficulties they have faced. To execute the study, we first identified commits from open-source Android projects that have migrated Java code to Kotlin. Then, we emailed the developers that wrote those migrations. We thus obtained information from 98 developers who had migrated code from Java to Kotlin. This paper presents the main reasons identified by the study for performing the migration. We found that developers migrated Java code to Kotlin in order to access programming language features (e.g., extension functions, lambdas, smart casts) that are not available with Java for Android development, and to obtain safer code (i.e., avoid null-pointer exceptions). We also identified research directions that the research community could focus on in order to help developers to improve the experience of migrating their Java applications to Kotlin.

IEEE Software, 2021
Software bugs are common and correcting them accounts for a significant part of costs in the soft... more Software bugs are common and correcting them accounts for a significant part of costs in the software development and maintenance process. This calls for automatic techniques to deal with them. One promising direction towards this goal is gaining repair knowledge from historical bug fixing examples. Retrieving insights from software development history is particularly appealing with the constant progress of machine learning paradigms and skyrocketing 'big' bug fixing data generated through Continuous Integration (CI). In this paper, we present R-HERO, a novel software repair bot that applies continual learning to acquire bug fixing strategies from continuous streams of source code changes, implemented for the single development platform Github/Travis CI. We describe R-HERO, our novel system for learning how to fix bugs based on continual training, and we uncover initial successes as well as novel research challenges for the community.

Proceedings of the 14th ACM / IEEE International Symposium on Empirical Software Engineering and Measurement (ESEM), 2020
Background: Google announced Kotlin as an Android official programming language in 2017, giving d... more Background: Google announced Kotlin as an Android official programming language in 2017, giving developers an option of writing applications using a language that combines object-oriented and functional features. Aims: The goal of this work is to understand the usage of Kotlin features considering four aspects: i) which features are adopted, ii) what is the degree of adoption, iii) when are these features added into Android applications for the first time, and iv) how the usage of features evolves along with applications' evolution. Method: Exploring the source code of 387 Android applications, we identify the usage of Kotlin features on each version application's version and compute the moment that each feature is used for the first time. Finally, we identify the evolution trend that better describes the usage of these features. Results: 15 out of 26 features are used on at least 50% of applications. Moreover, we found that type inference, lambda and safe call are the most used features. Also, we observed that the most used Kotlin features are those first included on Android applications. Finally, we report that the majority of applications tend to add more instances of 24 out of 26 features along with their evolution. Conclusions: Our study generates 7 main findings. We present their implications, which are addressed to developers, researchers and tool builders in order to foster the use of Kotlin features to develop Android applications. CCS CONCEPTS • Software and its engineering → Language features.

2019 IEEE/ACM 41st International Conference on Software Engineering: Companion Proceedings (ICSE-Companion), 2019
Software repositories such as Git have become a relevant source of information for software engin... more Software repositories such as Git have become a relevant source of information for software engineer researcher. For instance, the detection of Commits that fulfill a given criterion (e.g., bugfixing commits) is one of the most frequent tasks done to understand the software evolution. However, to our knowledge, there is not open-source tools that, given a Git repository, returns all the instances of a given change pattern. In this paper we present Coming, a tool that takes an input a Git repository and mines instances of change patterns on each commit. For that, Coming computes fine-grained changes between two consecutive revisions, analyzes those changes to detect if they correspond to an instance of a change pattern (specified by the user using XML), and finally, after analyzing all the commits, it presents a) the frequency of code changes and b) the instances found on each commit. We evaluate Coming on a set of 28 pairs of revisions from Defects4J, finding instances of change patterns that involve If conditions on 26 of them.
2019 IEEE 1st International Workshop on Intelligent Bug Fixing (IBF), 2019

2019 IEEE 26th International Conference on Software Analysis, Evolution and Reengineering (SANER), 2019
In the field of automated program repair, the redundancy assumption claims large programs contain... more In the field of automated program repair, the redundancy assumption claims large programs contain the seeds of their own repair. However, most redundancy-based program repair techniques do not reason about the repair ingredientsthe code that is reused to craft a patch. We aim to reason about the repair ingredients by using code similarities to prioritize and transform statements in a codebase for patch generation. Our approach, DeepRepair, relies on deep learning to reason about code similarities. Code fragments at well-defined levels of granularity in a codebase can be sorted according to their similarity to suspicious elements (i.e., code elements that contain suspicious statements) and statements can be transformed by mapping outof-scope identifiers to similar identifiers in scope. We examined these new search strategies for patch generation with respect to effectiveness from the viewpoint of a software maintainer. Our comparative experiments were executed on six open-source Java projects including 374 buggy program revisions and consisted of 19,949 trials spanning 2,616 days of computation time. Deep-Repair's search strategy using code similarities generally found compilable ingredients faster than the baseline, jGenProg, but this improvement neither yielded test-adequate patches in fewer attempts (on average) nor found significantly more patches (on average) than the baseline. Although the patch counts were not statistically different, there were notable differences between the nature of DeepRepair patches and jGenProg patches. The results show that our learning-based approach finds patches that cannot be found by existing redundancy-based repair techniques. Index Terms-software testing and debugging, program repair, deep learning, neural networks, code clones, language models

Journal of Systems and Software, 2019
This article contributes to defining the design space of program repair. Repair approaches can be... more This article contributes to defining the design space of program repair. Repair approaches can be loosely characterized according to the main design philosophy, in particular "generate-and-validate" and synthesis-based approaches. Each of those repair approaches is a point in the design space of program repair. Our goal is to facilitate the design, development and evaluation of repair approaches by providing a framework that: a) contains components commonly present in most approaches, b) provides built-in implementations of existing repair approaches. This paper presents a Java framework named Astor that focuses on the design space of generate-and-validate repair approaches. The key novelty of Astor is to provides explicit extension points to explore the design space of program repair. Thanks to those extension points, researchers can both reuse existing program repair components and implement new ones. Astor includes 6 unique implementations of repair approaches in Java, including GenProg for Java called jGenProg. Researchers have already defined new approaches over Astor. The implementations of program repair approaches built already available in Astor are capable of repairing, in total, 98 real bugs from 5 large Java programs.
Revista Habitus, Dec 1, 2009
Resumo: O presente trabalho tem por objeto a imagem pornográfica, especificamente a vinculação no... more Resumo: O presente trabalho tem por objeto a imagem pornográfica, especificamente a vinculação nos meios audio-visuais. A discussão se dá em torno dos conceitos de Román Gubbern e Anthony Giddens, em contraste com estudos na área de psicologia social. O objetivo é forjar uma plataforma teórica mínima que nos permita estudar o consumo e significado social da pornografia. O artigo é uma crítica à análise moralista da pornografia. É igualmente um estudo na área da cinematografia, na medida em que estabelece o lugar da pornografia como gênero cinematográfico.

Las personas con necesidades de apoyo generalizado: Guía de identificación de indicios de envejec... more Las personas con necesidades de apoyo generalizado: Guía de identificación de indicios de envejecimiento y orientaciones para la determinación de apoyos Portadilla.qxd 7/2/07 12:37 Página 1 d 3 FEAPS MADRID es la federación que agrupa a las organizaciones sin ánimo de lucro que atienden a las personas con discapacidad intelectual de la Comunidad de Madrid. Son muchos los profesionales, que en su práctica diaria han logrado comprender más y mejor, las características, los procesos de adaptación, los entornos en los que se desenvuelven las personas con discapacidad intelectual, interpretando cada vez mejor su voz, sentimientos, inquietudes, dificultades...en definitiva, colaborando en el cumplimiento de la misión del movimiento asociativo FEAPS: mejorar la calidad de vida de las personas con discapacidad intelectual y sus familias. En esa línea de trabajo, surge la idea de iniciar la COLECCIÓN FEAPS MADRID, donde profesionales, familias, voluntarios y las propias personas con discapacidad tienen a su disposición un espacio para la reflexión, difusión y exposición de trabajos e investigaciones de interés para todo el colectivo. Con estos cuadernos se reconoce el trabajo desinteresado de este conjunto de personas que, además de sus tareas habituales, dedican horas de su tiempo a mantener vivo el espíritu inquieto de los que luchamos por un mundo donde la inclusión social sea una realidad. La COLECCIÓN consta de nueve series representadas cada una por un color, que se corresponden con las áreas de servicio de Atención Temprana, Educación, Atención de Día, Ocio en Comunidad, Empleo y Promoción Laboral, Vivienda y Residencia, Apoyo a Familias, Asociacionismo y por último una de Información General. Agradecemos la colaboración de todas las personas que participan en la elaboración de estos cuadernos, así como a todas las organizaciones públicas y privadas que colaboran en su difusión.
This paper presents a dataset of 14 CVS repositories of Java applications. This dataset aims at s... more This paper presents a dataset of 14 CVS repositories of Java applications. This dataset aims at supporting the replication of early papers in the field of software evolution and mining software repositories. By building this dataset, we saved some CVS repositories from a probable death by deletion.
Fuentes de generación de renta
Enciclopedia De Castilla La Mancha Vol 3 1999 Isbn 84 95343 03 7 Pags 58 61, 1999

Journal of Adolescent Health, 2015
The purpose of the study was to examine the association between income inequality and school viol... more The purpose of the study was to examine the association between income inequality and school violence and between the performance inequality and school violence in two international samples. Methods: The study used data from Trends in International Mathematics and Science Study 2011 and from the Central Intelligence Agency of United States which combined information about academic performance and students' victimization (physical and social) for 269,456 fourth-grade students and 261,747 eighth-grade students, with gross domestic product and income inequality data in 52 countries. Ecological correlations tested associations between income inequality and victimization and between school performance inequality and victimization among countries. Multilevel ordinal regression and multilevel regression analyses tested the strength of these associations when controlling for socioeconomic and academic performance inequality at school level and family socioeconomic status and academic achievement at student level. Results: Income inequality was associated with victimization rates in both fourth and eighth grade (r z .60). Performance inequality shows stronger association with victimization among eighth graders (r z .46) compared with fourth graders (r z .30). Multilevel analyses indicate that both an increase in the income inequality in the country and school corresponds with more frequent physical and social victimization. On the other hand, an increase in the performance inequality at the system level shows no consistent association to victimization. However, school performance inequality seems related to an increase in both types of victimizations. Conclusions: Our results contribute to the finding that income inequality is a determinant of school violence. This result holds regardless of the national performance inequality between students.

Context: During last years, many automatic software repair approaches have been presented by the ... more Context: During last years, many automatic software repair approaches have been presented by the software engineering research community. According to the corresponding papers, these approaches are able to repair real defects from open source projects. Problematic: Some previous publications in the automatic repair field do not provide the implementation of theirs approaches. Consequently, it is not possible for the research community to re-execute the original evaluation, to set up new evaluations (for example, to evaluate the performance against new defects) or to compare approaches against each others. Solution: We propose a publicly available automatic software repair tool called Astor. It implements three state-of-the-art automatic software repair approaches in the context of Java programs (including GenProg and a subset of PAR's templates). The source code of Astor is licensed under the GNU General Public Licence (GPL v2).
Uploads
Papers by matias martinez