image

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.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *