
Kim MensCatholic University of Louvain | UCLouvain · Institute of Information and Communication Technologies, Electronics and Applied Mathematics
Kim Mens
Professor
Professor of Computer Science
About
277
Publications
97,594
Reads
How we measure 'reads'
A 'read' is counted each time someone views a publication summary (such as the title, abstract, and list of authors), clicks on a figure, or views or downloads the full-text. Learn more
2,700
Citations
Introduction
Kim Mens is full Professor of Computer Science at UCLouvain university in Belgium, where he leads the RELEASeD research lab on software evolution and software development technology. He holds the degrees of Licentiate in Mathematics, Licentiate in Computer Science, and PhD in Computer Science. His main research interests include software development, software maintenance, software evolution and context-oriented programming with a particular emphasis on programming languages and tool support.
Additional affiliations
September 2001 - present
October 1992 - August 2001
Education
October 1994 - October 2000
October 1992 - July 1994
October 1988 - July 1992
Publications
Publications (277)
Their highly adaptive nature and the combinatorial explosion of possible configurations makes testing context-oriented programs hard. We propose a methodology to automate the generation of test scenarios for developers of feature-based context-oriented programs. By using combinatorial interaction testing we generate a covering array from which a sm...
We propose a tool and underlying technique that uses semi-parsing to extract control flow graphs from legacy source code (written in COBOL). Obtaining such control flow graphs can be useful in the industrial setting of legacy moderni-sation, to quickly demonstrate to code owners that modernisation engineers did not break their business logic. They...
Getting an initial understanding of the structure of a software system, whether it is for software maintenance, evolution or reengineering purposes, is a nontrivial task. We propose a lightweight approach to delve a system's source code automatically and efficiently for relevant concepts of interest: what concerns are addressed in the code, what pa...
Refactoring substantial legacy codebases, even with industrial-strength tools, often leads to trust concerns with code owners, in particular when the codebase underwent significant transformation. To provide more assurance to code owners, we integrated visual analytics into the refactoring process. This method involves transforming code into contro...
Les premiers cours de programmation a l'université com-prenant de nombreuxétudiants utilisent couramment des correcteurs automatiques pour fournir auxétudiants des corrections et des retours automatisés sur les exercices de programmation de base. Implémenter un tel retour pour l'intégrer dans un correcteur automatique est une tâche chronophage pour...
Feature-based context-oriented programming reconciles ideas from context-oriented programming, feature modelling and dynamic software product lines. It offers a programming language, architecture, tools and methodology to develop software systems consisting of contexts and features that can become active at run-time to offer the most appropriate be...
Refactoring is a common step in the process of modernising software. This task is often delegated to experts, e.g. when dealing with complex legacy software. An example of such experts is the company Raincode Labs who provides services in the realm of legacy modernisation.
When working on code critical to a business, it is important to build up cli...
Context-aware systems are systems that adapt their behavior dynamically when sensing changes in the surrounding environment in which they run. These changes may come from changing user preferences, external sensors (weather, localisation), or internal sensors (battery, memory) of the device. The paradigm of context-oriented programming,
provides de...
A cyber range is a virtual training ground for training security experts. Trainees are separated into attacking and defending teams, whose roles are either to compromise or to protect some critical infrastructure. As reuse of a same scenario may significantly reduce training efficiency,
recent research proposed to automate the process of defining a...
Développement d’une communauté d’apprentissage en informatique pour soutenir le développement professionnel des enseignants dans plusieurs pays européens. Le poster fait le point sur le processus mis en place, les outils numériques développés ainsi que sur la recherche appliquée qui accompagne le projet.
Trop souvent, on attend de nos élèves qu’ils soient capables de lire du code ou d’en écrire, sans prendre le temps de leur expliciter les étapes clés qui permettent d’y arriver. Dans cet atelier, on vous propose de découvrir quelques stratégies explicites supportées par la recherche qui vont aider les élèves à apprendre à lire et écrire du code via...
L’apprentissage de la programmation, visuelle ou non, passe par la réalisation d’exercices. Cependant, la création d’exercices de programmation visuelle avec auto-correction n’est pas à la portée de tous les enseignants. Cet atelier présente la plateforme d’auto-correction INGInious et son support de séquences d’exercices de programmation viuselle....
L’enseignement de la programmation peut profiter de l’utilisation de stratégies d’instruction explicites pour diminuer la charge cognitive et favoriser le transfert des apprentissages. Une de ces stratégies est l’utilisation d’exemples résolus avec objectifs étiquetés. Nous avons utilisé une méthodologie d’analyse de tâche pour extraire à des exper...
Context:
The context-oriented programming paradigm is designed to enable self-adaptation, or dynamic behaviour modification of software systems, in response to changes in their surrounding environment. Context-oriented programming offers an adaptation model, from a programming language perspective, that maintains a clean modularisation between the...
When working with a complex process, it is difficult to get a clear idea on how exactly changes to the input can impact the output. Visualising how the steps of such process evolves with input can help understanding and/or boost confidence in the produced result. We took a suitable existing industrial process, and created a visualisation for it usi...
Research on source code mining has been explored to discover interesting structural regularities, API usage patterns, refactoring opportunities, bugs, crosscutting concerns, code clones and systematic changes. In this paper we present a pattern mining algorithm that uses frequent tree mining to mine for interesting good, bad or ugly coding idioms m...
Large code refactoring projects can consist of hundreds of refactoring rules that are applied iteratively to make code easier to maintain. Visualising the refactoring process can help engineers and stakeholders understand how chains of refactorings were applied and to gain more confidence in the produced result. An apparently suitable existing visu...
In programming education, explicit strategies are gaining traction.The reason for this study was to improve an introductory programming course based on a problem-based methodology, by using more explicit programming strategies. After analysing a previous run of this course for first year undergraduate students, we concluded that such strategies cou...
Solving a task with a deep neural network requires an appropriate formulation of the underlying inference problem. A formulation defines the type of variables output by the network, but also the set of variables and functions, denoted output mathematics, needed to turn those outputs into task-relevant predictions. Despite the fact that the task per...
Software developers repeatedly perform similar but non-identical changes to a systems source code. Such groups of similar systematic code changes are performed for various reasons: adapting code to a changed API, migrating to a different library, refactoring to improve code quality, performing routine code maintenance tasks, fixing multiple manifes...
Context-oriented programming enables dynamic software evolution by supporting the creation of software systems that dynamically adapt their behaviour depending on the context of their surrounding environment. Conceiving such systems is complex through due to their high dynamicity and the combinatorial explosion of possible contexts and correspondin...
L’enseignement de l’informatique est un enjeu majeur dans la formation des adultes de demain qui devront s’inscrire dans une société où la technologie est de plus en plus présente. Cependant, pour l’enseignement obligatoire dans de nombreux pays européens, il n’a été que tout récemment introduit ou n’est seulement qu’au stade de projet. La Commissi...
Software written in legacy programming languages is notoriously ubiquitous and often comprises business-critical portions of codebases and portfolios. Some of these languages, like COBOL, mature, grow, and acquire modern tooling that makes maintenance activities more bearable. Others, like many fourth generation languages (4GLs), stagnate and becom...
Most software engineers interact with some form of code differencing every day, either directly or indirectly. Yet, many existing algorithms and tools used in that context have not significantly evolved since the basic Unix diff utility. As a consequence, many specific characteristics and semantics of code are not taken into account in the process,...
L’accompagnement des enseignants du primaire et du secondaire en charge de l’enseignement de l’informatique est un enjeu majeur dans l’intégration effective de l’enseignement de l’informatique à l’école. La formation initiale et continue doit pouvoir permettre d’accompagner les enseignants dans leur propre apprentissage de l’informatique et les aid...
In an ongoing industry-university collaboration we are developing a language-parametric framework for mining code idioms in legacy systems. This modular framework has a pipeline architecture and a language-parametric meta representation of the artefacts used by each of its 5 components: source code importer, mining preprocessor, pattern miner, patt...
In this paper we present a visualisation tool that is intricately related to a feature-based context-oriented programming language. Context-oriented programming languages allow programmers to develop software systems of which the behaviour evolves dynamically upon changing contexts. In our language , the software behaviour as well as the contexts t...
Build system implementations are surprisingly numerous for the single common purpose of assembling software. With this variety, picking the right one is a complex task. And even more difficult is the migration to a new build system, with uncertain benefits at the end. Software maintainers and release engineers need better comparisons of build syste...
In this paper we compare two approaches to discover recurrent fragments in source code: clone detection and frequent subtree mining. We apply both approaches to a medium- sized Java case and compare qualitatively and quantitatively their results in terms of what types of code fragments are detected, as well as their size, relevance, coverage, and l...
Discovering regularities in source code is of great interest to software engineers, both in academia and in industry, as regularities can provide useful information to help in a variety of tasks such as code comprehension, code refactoring, and fault localisation. However, traditional pattern mining algorithms often find too many patterns of little...
We implemented a feature-based context-oriented programming language, which clearly separates the notion of contexts from the notion of features. Contexts reify particular situations occurring in the surrounding environment, to which a software system can adapt. Features reify the system's behaviour; they are the language components that describe t...
Context-oriented programming languages allow programmers to develop context-aware systems that can adapt their behaviour dynamically upon changing contexts. Due to the highly dynamic nature of such systems and the many possible combinations of contexts to which such systems may adapt, developing such systems is hard. Feature-based context-oriented...
With a feature-based context-oriented programming approach, fine-grained features can be (un)installed dynamically, upon changing contexts. Given the highly dynamic nature of such a programming approach, it is hard for developers to keep track of how and when contexts or features are active and how these features interact with the system. To help p...
As part of our ongoing research on context-oriented software technology, we propose a feature-oriented programming approach to context-oriented programming. Behavioural variations are implemented as fine-grained features that can be installed and activated dynamically, upon changing contexts. Given the highly dynamic nature of such a programming ap...
Build systems, also known as build automation tools, are used in every non-trivial software project. They contain the knowledge of how software is built, and provide tools to get it actually built as fast as possible. While they are central for day-to-day productivity, they sometimes fail to deliver their promise of being correct, efficient and tai...
This theme issue provides an updated perspective on techniques to manage software system variability at runtime, to make software systems smarter and less dependent on human intervention.
We introduce a concept for monitoring the implementation of water-related Sustainable Development Goals (SDG-6) in Tunisia and present an approach for testing the concept at the scale of the Medjerda Catchment, which is the most important river basin of the country. The monitoring concept is coherent with the indicator Framework that is negotiated...
Together4Water is a scientific project that aims at designing and implementing a participatory approach to monitor the implementation of water-related Sustainable Development Goal (SDG-6) in Tunisia at the scale of the Medjerda Catchment. The Medjerda catchment is the most important river basin in Tunisia. It plays a sensitive economical role at na...
The 2030 Agenda was accepted in September 2015 in New York by the global heads of state and have launched 17 goals and 169 targets including a dedicated goal on water and sanitation (SDG-6) that calls on states to “Ensure availability and sustainable management of water and sanitation for all”. The Agenda includes 6 objectives and 7 goals directly...
In software engineering, a smell is a part of a software system's source code with a poor quality and that may indicate a deeper problem. Although many kinds of smells have been studied to analyze their causes, their behavior, and their impact on software quality, those smells typically are studied independently from each other. However, if two sme...
Change patterns describe two or more files were often changed together during the development or the maintenance of software systems. Several studies have been presented to detect change patterns and to analyze their types and their impact on software quality. In this context, we introduced the Asynchrony change pattern to describes a set of files...
The context interaction problem occurs in dynamically adaptive software systems whenever adaptations to different contexts provide incompatible behaviour, as they were not foreseen to occur simultaneously. Several strategies have been proposed to resolve such conflicts when they occur. This paper surveys a number of such conflict resolution strateg...
The last two decades have seen a lot of research on context-aware and context-oriented software development technologies, across subfields of computer science. This research area is slowly starting to mature and researchers currently explore how to unify different solutions proposed in these subfields. We envision that within another decade some of...
The number of approaches existing to enable a smooth interaction between Java and Prolog programs testifies the growing interest in solutions that combine the strengths of both languages. Most of these approaches provide limited support to allow programmers to customise how Prolog artefacts should be reified in the Java world, or how to reason abou...
Welcome to the sixth special issue on Experimental Software and Toolkits (EST) of Elsevier’s Science of Computer Programming journal. The EST series aims at allowing academic software developers to publish the software systems they developed with similar rigour as academic papers. Peer reviewers evaluated not only a scientific paper about the devel...
This presentation on Object-Oriented Application Frameworks is part of a larger course LINGI2252 on Software Maintenance and Evolution, given at UCL university in Belgium.
These slides on Domain and Feature Modelling are part of the course LINFO2252 “Software Maintenance and Evolution”, taught by Prof. Kim Mens at UCLouvain, Belgium
These slides on Code Refactoring are part of the course LINGI2252 “Software Maintenance and Evolution”, given by Prof. Kim Mens at UCL, Belgium
These slides on Software Patterns are part of the course LINGI2252 “Software Maintenance and Evolution”, given by Prof. Kim Mens at UCL, Belgium
These slides on Object-Oriented Design Heuristics are part of the course LINGI2252 “Software Maintenance and Evolution”, given by Prof. Kim Mens at UCL, Belgium
These slides on Bad Code Smells are part of the course LINFO2252 “Software Maintenance and Evolution”, taught by Prof. Kim Mens at UCLouvain, Belgium
These slides on Software Reuse and Object-Oriented Programming are part of the course LINFO2252 “Software Maintenance and Evolution”, taught by Prof. Kim Mens at UCLouvain, Belgium
An introductory lecture on Context-Oriented Programming, part of the course LINGI2252 “Software Maintenance and Evolution”, given by Prof. Kim Mens at UCL, Belgium. This particular lecture was made by Sebastian Gonzalez in close collaboration with Kim Mens.
These slides, covering the topics of Software Maintenance and Evolution, are the introductory slides to the course
LINGI2252 “Software Maintenance and Evolution”, given by Prof. Kim Mens at UCL, Belgium
These slides on Reflection in Java are part of the course LINGI2252 “Software Maintenance and Evolution”, given by Prof. Kim Mens at UCL, Belgium.
These slides on Aspect-Oriented Programming are part of the course LINGI2252 “Software Maintenance and Evolution”, given by Prof. Kim Mens at UCL, Belgium
Self-adaptive systems enable the run-time modification, or dynamic adaptation, of a software system in order to offer the most appropriate behavior of the system according to its context of execution and the situations of its surrounding environment. Depending on the situations currently at hand, multiple and varied adaptations may affect the origi...
Context-sensitive parsing remains a problematic area within parsing research. To enable context-sensitive yet context-transparent parsing, we propose principled stateful parsing as a new transactional discipline that makes state changes transparent to parsing mechanisms such as backtracking and memoization. We also discuss the challenges and opport...
Historically, true context-sensitive parsing has seldom been applied to programming languages, due to its inherent complexity. However, many mainstream programming and markup languages (C, Haskell, Python, XML, and more) possess context-sensitive features. These features are traditionally handled with ad-hoc code (e.g., custom lexers), outside of t...
Historically, true context-sensitive parsing has seldom been applied to programming languages, due to its inherent complexity. However, many mainstream programming and markup languages (C, Haskell, Python, XML, and more) possess context-sensitive features. These features are traditionally handled with ad-hoc code (e.g., custom lexers), outside of t...
Context-aware systems must manage the dynamic selection, activation, and execution of feature variants ac- cording to changing contexts, detected from data gathered from their surrounding execution environment. Many context-oriented programming languages focus only on the implementation level by providing appropriate language abstractions for imple...
This is a video of a live demonstration of the context-oriented implementation framework described in our paper "A Context-Oriented Software Architecture" presented at COP 2016. (It was the masters thesis topic of the second author of this video.)
Context-aware systems must manage the dynamic selection , activation, and execution of feature variants according to changing contexts, detected from data gathered from their surrounding execution environment. Many context-oriented programming languages focus only on the implementation level by providing appropriate language abstractions for implem...
Modern software systems demand more and more smart capabilities depending on their context of use, as well as the ability to dynamically adapt these capabilities according to sensed context changes. This requires appropriate techniques for modelling, representing and handling context-aware software variability. While traditional variability modelli...
Welcome to the first edition of the LASSY workshop on Live Adaptation of Software Systems, taking place on March 14, 2016 in Malaga (Spain), collocated with the 15th International Conference on Modularity (Modularity 2016, formerly known as AOSD). The main objective of this workshop is to provide a space for discussion and collaboration of research...
The rapid evolution of smart mobile devices has triggered a growing need for context-aware software. Since the first appearance of context-aware applications in the early nineties, many applications on smart devices today are exhibiting context-aware features. This trend is likely to increase even further in future generations of software systems....
Modern software systems demand ever smarter capabilities depending on their context of use, as well as the ability to dynamically adapt these capabilities to sensed context changes. Context-oriented programming technology provides fine-grained compositional language-level abstractions to dynamically adapt the behaviour of software systems.
Presented at BENEVOL, the Belgian-Netherlands Software Evolution Seminar, on 4 December 2015 in Lille, France.
In this presentation, we present the need for a unified vision on context-oriented software engineering, that reconciles different research areas in computer science, including programming languages, human-computer interaction, and database technology. We identify three dimensions wherein proposed solutions for achieving context orientation could b...
A gentle and intuitive introduction to reflection and meta programming, part of a full lecture on programming paradigms at UCL university in Belgium, with reflection and meta programming as theme. (Further lectures focus more in depth on reflection and meta programming in a variety of programming languages such as Smalltalk, Ruby and Java.)
A quick introduction to the object-oriented programming language Smalltalk, part of a full lecture on Programming Paradigms at UCL university in Belgium, focussing on the programming languages Smalltalk, Ruby and Java, with reflection and meta programming as underlying theme.
A quick introduction to the object-oriented programming language Ruby, part of a full lecture on Programming Paradigms at UCL university in Belgium, focussing on the programming languages Smalltalk, Ruby and Java, with reflection and meta programming as underlying theme.
An introduction to some advanced language features of the object-oriented programming language Ruby, part of a full lecture on Programming Paradigms at UCL university in Belgium, focussing on the programming languages Smalltalk, Ruby and Java, with reflection and meta programming as underlying theme. This lecture looks into the Ruby features of hig...
An introduction to the basics of reflection in the object-oriented programming language Java, part of a full lecture on Programming Paradigms at UCL university in Belgium, focussing on the programming languages Smalltalk, Ruby and Java, with reflection and meta programming as underlying theme.
After a previous introductory lecture on the basics of reflection in Java, in this lecture we take a closer look at some more advanced reflective features of the language such as dynamic proxies, call stack introspection and instrumentation. This lecture is part of a full course on Programming Paradigms at UCL university in Belgium, focussing on th...