221 votes

Trouver du code inutilisé

Je dois refacturer une grande application C#, et j'ai trouvé beaucoup de fonctions qui ne sont jamais utilisées. Comment puis-je vérifier le code inutilisé, afin de pouvoir supprimer toutes les fonctions inutilisées?

3 votes

3 votes

Je suis surpris que cela soit étiqueté comme hors sujet, j'ai trouvé la question et les réponses utiles 11 ans après sa rédaction. Le lien hors sujet fourni dit que "... les outils logiciels couramment utilisés par les programmeurs; et est ..." sont certainement pertinents pour SO!.

228voto

Jarrett Meyer Points 11147

Oui, ReSharper le fait. Faites un clic droit sur votre solution et sélectionnez "Trouver les problèmes de code". Un des résultats est "Symboles inutilisés". Cela vous montrera les classes, les méthodes, etc., qui ne sont pas utilisés.

20 votes

C'est génial. Pas assez de gens le savent. Vous devez également activer l'Analyse de toute la solution pour que tout s'affiche.

18 votes

Resharper est un excellent outil, mais je l'ai trouvé peu fiable pour cette tâche. J'ai une méthode publique où j'ai supprimé toutes les références. Si je clique droit sur la méthode et sélectionne Afficher les utilisations, il n'y en a pas, mais les problèmes de code de Resharper ne le répertorient pas comme inutilisé.

0 votes

Sur la réponse de Jarrett Meyer, faites un clic droit sur "projet" au lieu de "solution" pour gagner du temps de recherche dans une solution multi-projets.

29voto

Jeff Schumacher Points 1976

C'est une excellente question, mais attention, vous vous engagez dans des eaux dangereuses ici. Lorsque vous supprimez du code, assurez-vous de compiler et de tester souvent.

Un excellent outil me vient à l'esprit :

NDepend - Cet outil est tout simplement incroyable. Il faut un peu de temps pour le comprendre, et après les premières 10 minutes, je pense que la plupart des développeurs disent simplement "tant pis !" et suppriment l'application. Une fois que vous avez bien compris NDepend, il vous donne un aperçu incroyable de la façon dont vos applications sont couplées. Consultez-le : http://www.ndepend.com/. Surtout, cet outil vous permettra de visualiser les méthodes qui n'ont pas d'appelants directs. Il vous montrera également l'inverse, un arbre complet des appels pour n'importe quelle méthode dans l'assembly (ou même entre les assemblies).

Quel que soit l'outil que vous choisissez, ce n'est pas une tâche à prendre à la légère. Surtout si vous manipulez des méthodes publiques dans des assemblies de type bibliothèque, car vous ne saurez peut-être jamais si une application les référence.

4 votes

Un autre mot de prudence, si votre application est asp.net, avec NDepend, vous devrez précompiler votre site afin de pouvoir analyser les codes-behind et NDepend ne pourra pas couvrir/connaître les appels depuis les pages aspx (par exemple les appels de méthodes dans ObjectDataSources et similaires)

16voto

mmiika Points 3027

Resharper est bon pour cela comme l'ont dit d'autres. Attention cependant, ces outils ne trouvent pas votre code qui est utilisé par réflexion, par exemple ils ne peuvent pas savoir si un code n'est PAS utilisé par réflexion.

15voto

Comme l'a souligné Jeff, l'outil NDepend peut aider à trouver les méthodes, champs et types inutilisés.

Pour développer un peu, NDepend propose d'écrire des règles de code sur des requêtes LINQ (CQLinq). Environ 200 règles de code par défaut sont proposées, dont 3 sont dédiées à la détection du code inutilisé/inactif.

Essentiellement, une règle pour détecter une méthode inutilisée ressemble à ceci :

// Dead Methods
warnif count > 0 
from m in Application.Methods where !m.MethodsCallingMe.Any()
select m

Règle NDepend pour trouver les méthodes inutilisées (méthodes inactives)

Mais cette règle est naïve et renverra des faux positifs triviaux. Il existe de nombreuses situations où une méthode n'est jamais appelée mais n'est pas pour autant inutilisée (point d'entrée, constructeur de classe, finaliseur...) c'est pourquoi les 3 règles par défaut sont plus élaborées :

NDepend s'intègre à Visual Studio 2022, 2019, 2017, 2015, 2013, 2012, 2010, donc ces règles peuvent être vérifiées/naviguées/modifiées directement dans l'IDE. L'outil peut également être intégré à votre processus d'intégration continue et peut générer des rapports montrant les règles enfreintes et les éléments de code responsables. NDepend a également une extension pour les services de l'équipe VS.

Si vous cliquez sur ces 3 liens ci-dessus vers le code source de ces règles, vous verrez que celles concernant les types et les méthodes sont un peu complexes. C'est parce qu'elles détectent non seulement les types et méthodes inutilisés, mais aussi les types et méthodes utilisés uniquement par des types et méthodes inutilisés (récursif).

Il s'agit d'une analyse statique, d'où le préfixe Potentiellement dans les noms des règles. Si un élément de code n'est utilisé que par réflexion, ces règles pourraient le considérer comme inutilisé, ce qui n'est pas le cas.

En plus d'utiliser ces 3 règles, je vous conseillerais de mesurer la couverture du code par les tests et de chercher à avoir une couverture complète. Souvent, vous verrez que le code qui ne peut pas être couvert par les tests est en réalité du code inutilisé/inactif qui peut être supprimé en toute sécurité. Cela est particulièrement utile dans le cadre d'algorithmes complexes où il n'est pas clair si une branche de code est accessible ou non.

Avis de non-responsabilité : Je travaille pour NDepend.

0 votes

Salut, comment puis-je les supprimer rapidement en utilisant NDepend? J'ai découvert que cela ne les trouvait que.

4voto

Mitch Wheat Points 169614

ReSharper fait un excellent travail pour trouver du code inutilisé.

Dans l'IDE de VS, vous pouvez faire un clic droit sur la définition et choisir 'Trouver toutes les références', bien que cela ne fonctionne qu'au niveau de la solution.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X