Détection des variables inutilisées dans un projet visual basic

Soyez le premier à donner votre avis sur cette source.

Vue 11 490 fois - Téléchargée 904 fois

Description

Détection des variables inutilisées dans un projet Visual Basic - v1.1
Conception/développement : Vincent Dummer (cyrus@mageos.com)

Description :
-------------
Cette application permet de détecter tous les constantes / variables / types / énumérations / subs / fonctions déclarés, mais non utilisées, dans le code d'un projet Visual Basic.

Format du résultat :
--------------------
Type de l'élément inutilisé-[Module]-[Procédure]-Nom de l'élément inutilisé

Exemple 1 : LocalVariable-frmMain-Form_Load-i
=> La variable i a été déclarée en tant que locale dans l'évènement Form_Load du module frmMain mais n'est pas utilisée.

Exemple 2 : GlobalSub-maSub
=> La procédure maSub a été déclarée en tant que global mais n'a pas été utilisée.

Principe de fonctionnement du programme :
-----------------------------------------
Tout d'abord, on scanne le fichier projet VBP afin de trouver tous les forms/modules contenant le code du projet. Ensuite, on y effectue les deux passes suivantes :

- PREMIERE PASSE : On répertorie toutes les déclarations du projet et on les stocke dans une collection.
- DEUXIEME PASSE : On crée un compteur pour chaque variable de la collection. Ensuite, on scanne chaque ligne du code pour compter ces variables.

Enfin, on affiche toutes les variables qui n'ont été comptées que zéro fois et on avertit l'utilisateur de la fin du traitement.

NB : Ceci est uniquement le principe de fonctionnement. Dans le code, vous vous rendrez compte des nombreux cas particuliers gérés par cette application.

Limitations :
-------------
- La lenteur du traitement, pour peu que le projet contienne beaucoup de variables.
- Les modules de classe ne sont pas traités pendant la vérification.

Bugs connus :
-------------
Les évènements inconnus seront indiqués comme étant non déclarés.

Historique de versions:
-----------------------
V1.0 : - Version initiale

V1.1 : - Suppression d'un bug de détection
- Augmentation du nombre d'évènements connus

Special Bafreu à :
------------------
La guilde du figuier marin (Microman, Chaz, Gailin le fort, Simong, Glou) et à la Tartiflette Power Team (Tutu des montagnes, Karine, Sammy des bois et la mère Fred) !!!

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_Zeroc00l
Messages postés
370
Date d'inscription
lundi 1 avril 2002
Statut
Membre
Dernière intervention
11 février 2010
-
Je viens de trouver ce aue je cherchais l'outil dont je parlais est le mme aue celui aui sert a dire sous caml si tellle ou telle valeur est filtree ou non !

Par exemple en caml on fait l'eauivalent d'un select case en vb

Si je fait :

Select case UnEntier

Case 1 -> retourner 1
Case 2 a 10 -> retourner 2
Case >10 -> retourner 3

End select

il verifie aue la syntaxe est bonne mais que je filtre bien toute les valeur possibles de la "variable" ( C'est pas vraiment une variable mais on dira que pour l'exemple s'en est une )
donc la il me dira : Warning certaine valeur ne seront pas filtre ( en caml lorsaue l'on met l'equivqlent du select case il faut obligatoirement que le code d'une case se declenche )
Et en plus il me donne un exmple de valeur ( en fonction du type de la variable ) qui ne sera pas filtre !

la compilation de ce systeme verifie donc si la porte de la variable est entierement teste. Il serait interessant de faire un code qui "reflechi"
sur les affectations au variable , si le calcul est toujours bon, si on ne risaue pas une erreur de depassement...

Bref ambitieux !
cs_PROGRAMMIX
Messages postés
1134
Date d'inscription
mercredi 2 octobre 2002
Statut
Membre
Dernière intervention
24 juillet 2011
-
Comme Rome ne s'est pas fait en un jour, il arrive souvent que l'on travaille par étape sur un projet : un jour ceci, un jour celà, etc.
Aussi ce serait bien d'ajouter une option enregistrer voire imprimer le résultat afin de pouvoir apporter les corrections nécessaires au code sans être obligé de relancer la détection chaque jour.
Afyn
Messages postés
613
Date d'inscription
samedi 3 août 2002
Statut
Membre
Dernière intervention
22 décembre 2016
-
Ca ne parcours pas les Ctl ?
Et ca fait remonter les déclarations API comme variable inutilisés.

Est ce que l'on pourrait afficher également la liste des variables utilisées, dans quel module, et le nombre de fois quelle sont utilisées.
Ca peut donner des idées d'optimisation par exemple si l'on calcule une variable dans une boucle ou des trucs comme ca.

Merci

A+
Afyn
ABL-Online
Messages postés
65
Date d'inscription
dimanche 16 septembre 2001
Statut
Membre
Dernière intervention
21 septembre 2006
-
Cette source est maintenant devenue obsolète avec le Visual Studio 2005 enfin si on peux dire ..., puisque maintenant il renseigne systématiquement les variables déclarées et inutilisées dans un projets.

Mais bon encore faut-il ne pas faire ce genre d'erreur qui pour moi a mon sens n'en est pas une :

Private Blabla as String = String.Empty

Dans ce cas présent on assigne donc une valeur et de ce fait elle est utilisée et n'est plus référencée comme inutilisée alors qu'à la longue oui lui assignera peut-être jamais de valeur quand on modifie le code pour l'améliorer par exemple et donc à force il arrive que l'on oublie de supprimer cette déclaration.

Par contre pour les références , il peux supprimer toutes les références ajoutées par la suite pour le quel on s'en est jamais servis au final.

Et là c'est génial, ça évite d'avoir des dépendances déclarées qui sont totalement inutiles.

Salutations à tous,

Didier Lombet
cs_Zeroc00l
Messages postés
370
Date d'inscription
lundi 1 avril 2002
Statut
Membre
Dernière intervention
11 février 2010
-
Les variables inutilisées sont les variables qui ne sont jamais accedé en lecture (utile).

Donc ecrire :
"Private Blabla as String = String.Empty"
ne pose pas de probleme dans la detection : on ecris dans Blabla mais on ne lie jamais Blabla !
Donc elle est inutile

Affinage 1 :

Detection des acces en ecriture qui ont des effet de bords sur le reste :
ex :
----------------------
Private bonhomme as Perso = Toto.GetInstance()
----------------------
Ce code pourrait modifié des variables static (genre si Toto est un singleton)
Cependant bonhomme n'est jamais utilisé

Affinage 2 :

Pour affiner : on regarde si les acces en lecture d'une variable ne sers qu'a la construire directement, alors on ne compte pas ces acces :

exemple 1 :
----------------------
i as Integer = 42
i = i + 11
----------------------
La variable 'i' n'a servit a rien et pourtant a eu un acces en lecture.
Il ne faut donc pas comtper ce genre d'acces en lecture, si il ne reste plus d'acces en lecture alors la variable est inutile.

exemple 2 :
----------------------
s as String = "a"
s = add_str_in_dico_and_return(s) + "b"
----------------------
s est utilise pour construire s mais genere un effet de bord avec la fonction add_ ...

Affinage 3 :
Meme chose que l'affinage precedent mais les variables de boucle ne sont jamais inutilisées bien qu'elles ne soient jamais accédées en lecture d'apres les affinages precedent

Affinage 4 :
Trouver les groupe de variables qui se construisent ensemble mais qui au final ne servent a rien
exemple :
----------------------
i as integer = 1
j as integer = 1
k as integer

for t = 0 to 10 'Desole je me rappelle plsu bcp de la syntaxe du vb
k = i + j
i = j + k
j = k + i
next

'Si aucune des variables n'est lu ici alors i j et k sont inutiles
----------------------


Il devient vite assez complique de trouver les variables inutiles, ca fait appelle au graphes etc...
Commenter la réponse de cognicase

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.