Identification et localisation des préoccupations fonctionnelles dans un code légataire Java

Traditionnellement, les applications orientées objets légataires intègrent différents aspects fonctionnels. Ces aspects peuvent être dispersés partout dans le code. Il existe différents types d’aspects : • des aspects qui représentent des fonctionnalités métiers ; • des aspects qui répondent à des exigences non fonctionnelles ou à d’autres considérations de conception comme la robustesse, la distribution, la sécurité, etc. Généralement, le code qui représente ces aspects chevauche plusieurs hiérarchies de classes. Plusieurs chercheurs se sont intéressés à la problématique de la modularisation de ces aspects dans le code : programmation orientée sujets, programmation orientée aspects et programmation orientée vues. Toutes ces méthodes proposent des techniques et des outils pour concevoir des applications orientées objets sous forme de composition de fragments de code qui répondent à différents aspects. La séparation des aspects dans le code a des avantages au niveau de la réutilisation et de la maintenance. Ainsi, il est important d’identifier et de localiser ces aspects dans du code légataire orienté objets. Nous nous intéressons particulièrement aux aspects fonctionnels. En supposant que le code qui répond à un aspect fonctionnel ou fonctionnalité exhibe une certaine cohésion fonctionnelle (dépendances entre les éléments), nous proposons d’identifier de telles fonctionnalités à partir du code. L’idée est d’identifier, en l’absence des paradigmes de la programmation par aspects, les techniques qui permettent  l’implémentation des différents aspects fonctionnels dans un code objet. Notre approche consiste à : • identifier les techniques utilisées par les développeurs pour intégrer une fonctionnalité en l’absence des techniques orientées aspects • caractériser l’empreinte de ces techniques sur le code • et développer des outils pour identifier ces empreintes. Ainsi, nous présentons deux approches pour l’identification des fonctionnalités existantes dans du code orienté objets. La première identifie différents patrons de conception qui permettent l’intégration de ces fonctionnalités dans le code. La deuxième utilise l’analyse formelle de concepts pour identifier les fonctionnalités récurrentes dans le code. Nous expérimentons nos deux approches sur des systèmes libres orientés objets pour identifier les différentes fonctionnalités dans le code. Les résultats obtenus montrent l’efficacité de nos approches pour identifier les différentes fonctionnalités dans du code légataire orienté objets et permettent de suggérer des cas de refactorisation. Object oriented applications integrate various functional aspects. These aspects can be scattered everywhere in the code. There are various types of aspects : • aspects which represent business functionalities ; • aspects related to non functional requirements or to design concerns such as robustness, distribution, and security. The code representing such aspects can be located in different class hierarchies. Researchers have been interested in the problem of the modularisation of these aspects and many approaches were proposed : oriented programming subjects, oriented programming Aspects and oriented programming view. These approaches offer techniques and tools for designing object oriented applications based on the composition of slices of various aspects. The main benefit of the separation of aspects is supporting reuse and maintenance. Consequently, it is well worth identifying and extracting aspects of legacy object oriented applications. Our work mainly focuses on functional aspects. Assuming that the code of a functional aspect or a feature has a functional cohesion (dependencies between elements), we suggest methods for identifying such features from the code. The idea is to identify, in the absence of any aspect oriented paradigm, the techniques used for implementing a feature in the code. Our approach consists of : • identifying techniques used by developers to integrate a feature in the absence of aspect oriented techniques • characterizing the patterns of these techniques • and developing tools to identify these patterns. We present two approaches for the identification of the existing features in the object oriented code. The first one identifies various design patterns which integrates these features in the code. The second approach uses the formal concept analysis to identify the recurring features in the code. We experiment our approaches to identify functional features in different open source object oriented applications. The results show the efficiency of our approaches in identifying various functional features in the legacy object oriented, and can some times suggest refactoring.

Keyphrases: Fonctionnalités, Réingénierie, Code orienté objets légataire, Refactorisation, Treillis de Galois, Java, Features, Reengineering, Legacy object oriented code, Refactoring, Galois lattices