Mar
14
2012

La détection de doublons de code – Tips #3 Bis

Je vous présentais hier la fonctionnalité de détection des doublons de code proposée par Visual Studio 11, je vous propose aujourd’hui un rapide retour d’expérience sur l’utilisation de cette fonctionnalité sur un vrai projet avec un bon volume de code (620 000 lignes).

image

L’analyse du code a pris 3h30. Le temps d’analyse pour un aussi gros volume de code est certes important mais ne me choque pas plus que cela. Je suis plutôt surpris par le fait que la machine ne soit pas “à genoux” durant l’analyse mais ne soit occupé qu’à  20% au niveau du CPU sachant qu’il ne semble pas y avoir d’autres goulots d’étranglements (mémoire, disque).

Les résultats sont classés en 4 catégories : exact match, strong match, medium match, weak match.

L’analyseur indique que 25% du code semble être du doublon (et peut donc être quasi-supprimé suite à du refactoring) soit dans mon cas plus de 150 000 lignes de code. Je sais que le code est très loin d’être optimisé et qu’il y a beaucoup de redondance de code mais ce résultat est pour le moins plutôt étrange…

J’ai vite été conforté dans mon impression en analysant la qualité des résultats. J’ai commencé l’étude par l’analyse des weak match.

Je n’ai pas réussi à trouver un résultat à peu près pertinent dans les weak match.

Un des exemples typiques concerne ce type de code :

image

Le moteur d’analyse prend en compte uniquement le texte et non pas le vocabulaire en lui-même et trouve donc des clones qui ne sont pas du tout pertinents.

Autre exemple avec l’initialisation “en masse” d’objets, l’affichage de ce type de résultat n’est pas forcément pertinent :

image

image

 

Les bonnes nouvelles se retrouvent plutôt au niveau des correspondances exact ou très voisines :

image

J’ai été ainsi surpris de découvrir qu’un même bloc de code a été repris 58 fois ( ! ) au sein de l’applicatif.

Une séance de refactoring va donc pouvoir être planifié afin d’éliminer cette redondance ainsi que les suivantes.

En résumé, cette nouvelle fonctionnalité est plus proche de l’analyseur de texte que de l’analyseur de code car le vocabulaire n’est pas pris en compte de manière pertinente. Et il ne faut pas se fier au grand nombre de résultats potentiels affiché mais faire un filtre et une analyse de ceux-ci afin de décider des actions à mener pour améliorer la qualité du code.

Related Posts

About the Author: Patrice Lamarche

Leader Technique et ScrumMaster au sein de l'éditeur de logiciels Log'in Space. Je partage ici mes expériences dans le monde du développement avec les technologies Microsoft. Mon intêret et mon objectif principal est d'arriver à apporter plus de maturité à l'équipe de développement dont je fais parti, en mettant en mettant en place des process, des pratiques et outils destinés à améliorer le déroulement des projets. Microsoft MVP Application Lifecycle Management (ALM)