2009-03-19 10 views
1

Existe-t-il un moyen de déterminer si toutes les fonctions définies dans le code sont appelées quelque part?Existe-t-il un moyen de vérifier si toutes les fonctions définies sont appelées?

J'ai effectué une importante mise à jour de code pour un grand projet et je veux m'assurer que les anciennes fonctions qui ne sont plus utilisées sont supprimées du code.

Existe-t-il un meilleur moyen de rechercher chaque fonction dans la solution?

+0

double possible de [Y at-il un outil pour trouver des fonctions non référencées (mort, le code obsolète) dans une application C#?] (Http://stackoverflow.com/questions/65585/is-there-a-tool -pour-trouver-non référencé-fonctions-mort-obsolète-code-en-ac) – nawfal

Répondre

7

Marquez chaque méthode que vous essayez de supprimer comme Obsolete avec IsError ensemble à true. Lorsque vous marquez une méthode en tant que telle, vous obtiendrez une erreur de compilation et serez en mesure de savoir si vous pouvez supprimer la méthode en toute sécurité.

[Obsolete("Don't use this method", /* IsError */ true)] 
    public void Foo() {} 
+0

J'ai tendance à activer IsError pour mes propres bibliothèques internes. Pour les autres cas, je le supprime – Sung

+0

Je le fais aussi. Et les laisse souvent comme ça pendant un moment, jusqu'à ce que je sois absolument certain de ne plus en avoir besoin.Sauf si je suis absolument certain que je n'en ai plus besoin, bien sûr: p – Svish

+0

@Svish: Allumer IsError semble parfois gênant, mais parfois quand il faut y aller, il faut y aller. – Sung

0

Outil de couverture de code comme NCover?

EDIT: Cela suppose que vous avez suffisamment de tests pour la fonctionnalité et que vous êtes déterminé à vous débarrasser de toutes les fonctions inutiles. Delete-then-compile fonctionnera, mais n'est pas évolutif. Quoi qu'il en soit, le point est que vous allez vouloir un outil d'analyse de source (statique ou analyse d'exécution).

0

Voici une manière qui va tout attraper sauf la réflexion.

  1. Supprimer la méthode
  2. Compile

Cela semble un peu exagéré, mais il a l'avantage que vous pouvez requêtes « batch » en supprimant plusieurs fonctions.

+0

L'ordre pourrait importer ici, cependant? Si A() appelle B() mais rien n'appelle A(), supprimer B() d'abord sera trompeur puisqu'il ne compilera pas. –

+0

@Andrew Je n'ai pas dit que c'était facile :). – JaredPar

+0

@JaredPar: Je pense, j'ai lu à propos de ce processus de "Travailler efficacement avec Legacy Code" par Michael Feathers sur la façon de refactoriser le code hérité sans tests. – Sung

2

FxCop devrait être capable de trouver des méthodes orphelines/inutilisées. Je pense que l'analyse statique est ce que vous cherchez, pas la couverture de code.

0

Deux suggestions:

  • Selon vos outils de développement, vous pourriez être en mesure de générer des avertissements pour les fonctions qui sont déclarées, mais jamais appelés.

  • Vous pouvez générer une carte de liens, puis comparer sa liste de fonctions à une liste que vous générez (avec grep ou ctags?) Directement à partir de votre source.

Questions connexes