Naviguer dans une ville pour mieux comprendre les grands codes variables
Les grandes bases de code sont de plus en plus complexes et les fonctionnalités développées dépendent de divers éléments comme le contexte d’usage ou les plateformes matérielles. Les développeurs éprouvent ainsi de grandes difficultés à comprendre les différentes fonctionnalités implémentées. Johann Mortara, doctorant, Anne-Marie Pinna-Dery, maîtresse de conférences à l'Université Côte d'Azur, et Philippe Collet, professeur à l'Université Côte d'Azur, membres du laboratoire Informatique, Signaux et Systèmes de Sophia-Antipolis (I3S - CNRS/Université Côte d'Azur) ont été primés Best Artifact Award (attestant la reproductibilité et la réutilisabilité des résultats) à la conférence ICSME/VISSOFT 2021 pour avoir mis au point VariCity, une visualisation permettant de représenter le code sous la forme d’une ville qui met en valeur les zones du code concentrant sa variabilité, c’est-à-dire les implémentations des variations de fonctionnalités, facilitant ainsi leur identification et leur compréhension.
La complexité grandissante des systèmes logiciels nécessite de les configurer de manière très précise pour éviter des erreurs préjudiciables, comme les récentes pannes des géants du Web. La forte diversité des systèmes d’exploitation, des plateformes matérielles et des utilisateurs implique également une diversité importante des fonctionnalités qui sont fournies. La majorité des logiciels est maintenant configurable pour fournir des services sur-mesure en permettant à un utilisateur de choisir ses caractéristiques (features en anglais).
Cependant, il arrive de plus en plus fréquemment que les logiciels soient développés progressivement sans que ces caractéristiques soient reliées aux différents éléments dans le code qui les implémente. C’est le cas par exemple de la plupart des systèmes écrits dans des langages orientés objets comme Java ou C++ qui utilisent pour gérer leur variabilité les mêmes mécanismes que ceux utilisés pour structurer le code (héritage entre classes, patrons de conception, surcharge de méthodes). Les parties du code où les caractéristiques sont implémentées ne sont donc explicites, car mélangées à ces mécanismes. Il est alors très complexe de les identifier manuellement dans de grands codes sources.
VariCity s’appuie sur des calculs de métriques des mécanismes d’implémentation de la variabilité pour les visualiser sous la forme d’une ville représentant la base de code. Cette métaphore est déjà utilisée pour comprendre la qualité du code avec une catégorie d'objet comme un bâtiment et des éléments visuels comme la taille et la couleur de ses bâtiments pour faire apparaître facilement des zones de moindre qualité. En adaptant l’organisation de la ville pour représenter par des rues les relations entre les catégories d’objet, et en faisant varier les dimensions des bâtiments selon des métriques de variabilité, les zones intéressantes, à forte densité de variabilité, ressortent sous la forme de quartiers de couleurs vives, regroupant des gratte-ciels et des parkings. VariCity est disponible sous forme de logiciel open-source accompagné d'un package de reproduction de ces expérimentations de validation, qui a valu le prix à ses auteurs.
Les travaux se poursuivent par l’intégration de cette visualisation dans des environnements de développement afin de faciliter la navigation entre le code et les éléments de la ville, visant une aide toujours plus pertinente dans la compréhension et la maîtrise des grands codes.