← Derniers articles
💻 computer science

Detecting Object-Oriented Code Smells through Social Network Analysis

Cet article propose une nouvelle approche pour la détection des odeurs de code orientées objet en modélisant les composants logiciels et leurs interactions sous forme de réseaux sociaux et en appliquant des métriques d'analyse de réseaux sociaux (SNA) à quatre projets Java open-source afin de révéler des défauts de conception cachés.

Auteurs originaux : Mohamed Maddeh

Publié 2026-09-29
📖 5 min de lecture🧠 Analyse approfondie

Auteurs originaux : Mohamed Maddeh

Article original sous licence CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/). ✨ Ceci est une explication générée par l'IA de l'article ci-dessous. Elle n'a pas été rédigée ni approuvée par les auteurs. Pour une précision technique, consultez l'article original. Lire la clause de non-responsabilité complète

Le logiciel est construit à partir d'innombrables petites instructions qui travaillent ensemble, tout comme une ville est construite à partir de bâtiments individuels et des routes qui les relient. Lorsqu'une ville est bien planifiée, la circulation est fluide et de nouveaux quartiers peuvent être ajoutés sans chaos. Dans le monde de la programmation informatique, cette organisation est appelée « conception orientée objet », où le code est regroupé en unités autonomes qui interagissent les unes avec les autres. Cependant, tout comme une ville peut souffrir d'intersections surchargées ou de bâtiments abandonnés, les logiciels peuvent développer des failles structurelles appelées « odeurs de code » (code smells). Il ne s'agit pas d'erreurs qui font planter un programme, mais plutôt de signes que la conception devient désordonnée, difficile à comprendre ou difficile à réparer. Si elles ne sont pas corrigées, ces odeurs rendent le logiciel fragile et coûteux à maintenir, forçant les développeurs à passer plus de temps à démêler des nœuds qu'à construire de nouvelles fonctionnalités.

Pendant des décennies, des chercheurs ont tenté de détecter ces failles automatiquement, souvent en comptant les lignes de code ou en mesurant le nombre de variables qu'une section donnée utilise. Bien qu'utiles, ces méthodes traditionnelles passent parfois à côté du tableau d'ensemble, échouant à voir comment différentes parties du système dépendent les unes des autres de manière complexe. Une nouvelle approche, détaillée dans une étude récente de Mohamed Maddeh de l'Université de l'Arabie Saoudite, suggère de ne pas regarder le logiciel uniquement comme une collection de fichiers, mais comme un réseau social. Dans cette perspective, chaque classe de code est une personne, et chaque fois qu'un morceau de code en utilise un autre, il s'agit d'une interaction sociale. En appliquant les mêmes outils mathématiques utilisés pour cartographier les amitiés et l'influence dans les communautés humaines, le chercheur a développé un moyen de repérer ces faiblesses structurelles avec plus de clarté.

L'étude s'est concentrée sur quatre projets de logiciels open-source bien connus écrits en langage Java : JUnit, Spring, Apache Commons BCEL et Guava. Ces projets varient considérablement en taille, allant de quelques centaines à plus de quatre mille unités de code distinctes. Pour les analyser, le chercheur a d'abord extrait chaque classe au sein de ces projets et a cartographié précisément la façon dont elles interagissaient. Si une classe avait besoin de données ou d'une fonction provenant d'une autre, une ligne était tracée entre elles, créant un immense réseau de connexions. Ce réseau a ensuite été importé dans un outil de visualisation spécialisé appelé Gephi, qui a permis au chercheur de voir la structure entière du logiciel comme une carte unique et interconnectée.

Une fois le logiciel modélisé sous forme de réseau, le chercheur a appliqué des mesures spécifiques pour identifier les « odeurs ». Dans un réseau social, une personne qui connaît tout le monde et qui est au centre de nombreuses conversations est très connectée. Dans le logiciel, une classe qui interagit avec trop d'autres classes indique souvent une « Classe Dieu » (God Class), une unité qui a assumé trop de responsabilités et qui essaie de tout faire. À l'inverse, une personne qui ne connaît personne et qui se retrouve seule en bordure de la carte représente du « Code Mort » (Dead Code), un morceau de logiciel qui n'est plus utilisé. D'autres schémas, tels qu'un groupe de personnes qui ne se parlent qu'entre elles mais ne communiquent jamais avec l'extérieur, ou une seule personne qui sert de pont unique entre deux groupes distincts, ont révélé des failles comme des « Classes de Données » (Data Classes) qui détiennent des informations sans rien faire, ou une « Chirurgie au Fusil » (Shotgun Surgery), où un seul changement nécessite des modifications à de nombreux endroits différents.

Les résultats ont montré que cette méthode basée sur le réseau pouvait filtrer efficacement la grande majorité du code sain, laissant aux développeurs une liste beaucoup plus courte de suspects à inspecter. Dans le projet le plus vaste étudié, qui contenait plus de quatre mille classes, la méthode n'a signalé qu'environ 17 % de code comme potentiellement problématique. Dans un autre projet comprenant près de mille classes, elle a identifié environ 35 % de code nécessitant une attention particulière. Les outils de visualisation ont rendu ces conclusions immédiates et intuitives ; les « Classes Dieu » apparaissaient comme de grands hubs colorés au centre de la carte, tandis que le « Code Mort » et les « classes inutilisées » apparaissaient comme de petits nœuds ternes poussés aux extrémités de la carte, souvent isolés dans leurs propres îles déconnectées.

Cette approche ne prétend pas remplacer le jugement humain ou identifier parfaitement chaque faille sans erreur. Elle sert plutôt d'outil de triage puissant, un moyen de réduire la tâche écrasante de la révision de l'ensemble d'une base de code à une liste gérable des parties les plus structurellement inhabituelles. En se concentrant sur les relations entre les morceaux de code plutôt que sur leur contenu interne, la méthode offre une perspective nouvelle sur un vieux problème. Elle suggère que la santé d'un système logiciel est souvent visible dans le schéma de ses connexions, et qu'en cartographiant ces schémas, les développeurs peuvent trouver les faiblesses cachées qui menacent la stabilité de leurs créations numériques avant qu'elles ne deviennent ingérables.

Noyé(e) sous les articles dans votre domaine ?

Recevez des digests quotidiens des articles les plus récents correspondant à vos mots-clés de recherche — avec des résumés techniques, dans votre langue.

Essayer Digest →