In this theme we investigate advanced mechanisms, languages, formalisms, methodologies and tools to support software engineers during maintenance and evolution of a software system. This includes a variety of techniques to:
- detect, discover and verify structural and behavioral regularities in software systems;
- co-design and co-evolve a software system and its structural and behavioral regularities;
- early detect inconsistencies and irregularities in the software upon evolution of that software;
- deal with variability in software development;
- support software restructuring, re-engineering and reverse engineering in general.
In this theme we investigate and advance the state-of-the art in software development technology. We address the problem mainly from a language engineering angle, as a means to study:
- the automated transformation and translation of programs;
- the conception of novel language for programming context-oriented software (also see theme 4);
- research on advanced program query languages;
- advanced language features for aspect-oriented programming (also see theme 3);
- novel programming paradigms and language concepts;
- new program development approaches;
- metaprogramming and reflection;
- generative programming in general.
With its research on languages like the Ambience programming language, the AmOS object system, the Subjective-C language extension of Objective-C, and more, the RELEASeD research group contributes to the emerging research area of context-oriented programming, by studying:
- the conception of context-oriented languages that support dynamic adaptation to changing execution contexts;
- the development of ambient and context-oriented software systems (methodology and tools);
- application domains and scenarios that could benefit from such context-oriented technology.
As an emerging software development paradigm, we have also shown interest in technology to support the evolution and development of aspect-oriented software. More specifically, we have studied, amongst other things:
- advanced language engineering for aspect-oriented programming;
- the use of logic query languages as advanced pointcut languages;
- evolution and maintenance issues with aspect-oriented software;
- aspect mining tools and techniques;
- migration of traditional software towards aspects;
- alternative techniques to deal with crosscutting concerns in software.