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) !!!
8 août 2006 à 18:20
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...
5 août 2006 à 19:44
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
24 janv. 2004 à 09:08
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
22 nov. 2003 à 17:14
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.
10 nov. 2003 à 18:23
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 !
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.