Main concepts

co-evolving systems identify tightly coupled artifacts that are characterized by high interdependence, such as production code and test code. This research aims to automatically detect code and test co-evolutions in Java, considering co-evolutions occurring in single or separated commits and including atomic evolutions - such as insertions, deletions, or updates - and complex ones, such as refactorings. After an empirical study on 45 open-source projects, the study proves the existence of immediate and delayed co-evolutions. It also highlights a new useful description of complete and partial changes over time, in highly coupled systems.

The automatic detection was addressed as follows:

  • first, the evolution history of a given project was locally cloned,
  • then evolutions between commits were detected leveraging tree difference algorithms(Gumtree, RefactoringMinerG).
  • next, dependency graphs between evolutions in production and test code were computed in a static analysis
  • a dynamic analysis was then performed to qualify potential impacts on tests as impacting, repairing, or neutral evolutions
  • finally, production code evolutions that impact test code were assembled with the test code evolutions that repair tests.

By creating a comprehensive dataset of detected co-evolutions, the work of the authors offer a knowledge base enabling a future design of a recommendation engine, that could prevent potentially dangerous unsynchronization between co-evolving systems, which leads to a time-consuming and error-prone manual maintenance.

A limit of the study consists of the overall computational time needed to finalize the detection of co-evolutions, making challenging the replication or the improvement of the whole model.


References