Changes to software systems often entail a loss of quality, especially if they have to be accomplished under pressure of time. Long-term software projects must counter this phenome...
Interface-based programming, i.e. the systematic use of interface types in variable declarations, serves the decoupling of classes and increases a program’s changeability. To ma...
The Java language lacks the important notions of ownership (an object owns its representation to prevent unwanted aliasing) and immutability (the division into mutable, immutable,...
Yoav Zibin, Alex Potanin, Paley Li, Mahmood Ali, M...
Can we predict locations of future refactoring based on the development history? In an empirical study of open source projects we found that attributes of software evolution data ...
Jacek Ratzinger, Thomas Sigmund, Peter Vorburger, ...
Refactorings are behavior-preserving program transformations that automate design evolution in object-oriented applications. Three kinds of design evolution are: schema transformat...