Currently I am working in the CHAQ project which aims at supporting software evolution and tests based on change information.
Software evolution tends to be expensive due to the effort that involves changing an application without affecting working functionality. This effort includes locating the area that implements the functionality or domain concept that must be changed, and from modifying the product across explicit and implicit dependencies that must remain consistent.
I am interested on supporting software engineers to implement changes in evolving applications. Currently, I am working on a description of source code entities at a very fine grain that is resilient to changes.
I am also working on the detection of source code regularities, its documentation within the source code, and the detection of their violations. Source code regularities are implementation characteristics that are common to a set of entities. Source code regularities tend to state an implementation recipe for entities implementing the same feature. This means that source code regularities uncover design rationale that is usually hidden in implementation details.
In particular, I am interested on understanding how the implementation of source code entities affects software over time. Knowing which controversial implementation choices (a.k.a. bad smells, code smells, antipatterns) affect the most the evolution of an application could help to prioritize their treatment maximizing the effect of anti-regressive/perfective-maintenance tasks.
Although most of my research has analyzed only one type of bad smell: clones (a.k.a. duplicated code), similar analyses can be used for other bad smells.
In particular, my PhD project is a method to assess the effect of source code characteristics on the evolvability of an implementation. The method proposed was evaluated by analyzing the effect of clones on the changeability of methods.
Finally, I have worked on the detection and evaluation of software variability. Variability aims to increase the productivity of companies by separating the functionality into functionality that is common to all products (core application), from functionality that is specific to certain products (optional features/implementation of extension points). Knowing regularities, exceptions, extension points, and their instantiations helps the developers to detect which parts of the application are related or could be affected by the changes they need to implement.