DÉTECTION DES VARIABLES INUTILISÉES DANS UN PROJET VISUAL BASIC
cognicase
Messages postés63Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention13 juillet 2005
-
11 mars 2003 à 15:05
cs_Zeroc00l
Messages postés367Date d'inscriptionlundi 1 avril 2002StatutMembreDernière intervention11 février 2010
-
8 août 2006 à 18:20
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_Zeroc00l
Messages postés367Date d'inscriptionlundi 1 avril 2002StatutMembreDernière intervention11 février 2010 8 août 2006 à 18:20
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...
ABL-Online
Messages postés62Date d'inscriptiondimanche 16 septembre 2001StatutMembreDernière intervention21 septembre 2006 5 août 2006 à 19:44
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
Afyn
Messages postés608Date d'inscriptionsamedi 3 août 2002StatutMembreDernière intervention22 décembre 2016 24 janv. 2004 à 09:08
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
cs_PROGRAMMIX
Messages postés1133Date d'inscriptionmercredi 2 octobre 2002StatutMembreDernière intervention24 juillet 20112 22 nov. 2003 à 17:14
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.
cs_Zeroc00l
Messages postés367Date d'inscriptionlundi 1 avril 2002StatutMembreDernière intervention11 février 2010 10 nov. 2003 à 18:23
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 !
gabchampagne
Messages postés216Date d'inscriptionmercredi 2 avril 2003StatutMembreDernière intervention 5 mai 2004 6 nov. 2003 à 18:53
c'est éxactement la question que je me pose moi aussi.
Rrominet
Messages postés133Date d'inscriptionlundi 26 janvier 2009StatutMembreDernière intervention24 novembre 20141 8 juil. 2003 à 20:36
Pas mal comme prog !! J'ai un énorme projet VB et je trouve tous les jours des variables inutilisées (parfois de moi, parfois non)...
Par contre, une question comme ça, si tu déclares une variables 2 fois (une fois en global et une fois dans une fonction par exemple), comment ton prog le gère-t-il ?Si tu n'as jamais utilisé la variable globale et toujours celle de la fonction, il te dira qu'elle est utilisée alors qu'elle ne l'est pas forcément. Si tu me suis ? ;-)
Mais bon des variables dans ce cas s'il y en a beaucoup en double, il vaut mieux réapprendre à développer :)
En tout cas merci pour ta source !! Je teste ça dès demain ;-)
cs_Zeroc00l
Messages postés367Date d'inscriptionlundi 1 avril 2002StatutMembreDernière intervention11 février 2010 25 juin 2003 à 22:26
As-tu pensé à faire une appli qui enregistre tout le code d'un projet, "réflechit", et ensuite affiche les variables qui peuvent ( après une suite LOGIQUE et POSSIBLE de procédures) subir une erreur de dépassement ?
Moi l'idée me trote dans la tête et ton appli va surement me servir de tremplin. Ca fait un bon point de départ ( je commencerai pas a zero ! )...
Cependant, bien que l'idée semble simple ( ah si si, je vous jure !), la réalisation risque d'etre chaude !
A suivre...
-={[ ZeroCool ]}=-
P.S. : Je reviens noter !
fluminis
Messages postés73Date d'inscriptiondimanche 5 janvier 2003StatutMembreDernière intervention20 juin 2005 10 mai 2003 à 22:41
cool c'est ingenieux et bien pensé
merci et continu la tete dans le guidon :o)
akami
Messages postés6Date d'inscriptionvendredi 11 avril 2003StatutMembreDernière intervention 4 décembre 2006 19 avril 2003 à 18:15
très belle imagination
vraiment lourd quand il y a beaucoup de variables
---- ak
cs_lionalger
Messages postés18Date d'inscriptionmercredi 25 décembre 2002StatutMembreDernière intervention 1 avril 2006 19 mars 2003 à 05:29
Grand Bravo pour ton programme
Mais comme je suis fatique de revoir mes sources
j'aurais souhaite que tu vas plus lion en mettant des commetaires sur les lignes
grand merçi
cs_Cyrus
Messages postés47Date d'inscriptionmercredi 21 novembre 2001StatutMembreDernière intervention 2 avril 2007 13 mars 2003 à 13:45
Merci à tous pour vos encouragements. J'ai mis à jour la source pour enlever un problème de détection que m'avais mentionné frawid, et tout roule désormais pour le mieux. Sur ce, bonne prog' !!!
Cyrus, le programmeur avec la tête dans le guidon.
frawid
Messages postés47Date d'inscriptionsamedi 2 novembre 2002StatutMembreDernière intervention16 mars 2008 12 mars 2003 à 19:06
Ce programme est supper bien et mérite 9/10. Bravos Cyrus
cs_PROGRAMMIX
Messages postés1133Date d'inscriptionmercredi 2 octobre 2002StatutMembreDernière intervention24 juillet 20112 11 mars 2003 à 17:48
Je trouve aussi ce programme génial et à première vue bien structuré.
Je déplore juste les commentaires en anglais qui m'oblige à sortir mon vieux gros dictionnaire...
cognicase
Messages postés63Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention13 juillet 2005 11 mars 2003 à 15:05
Super prog. je le trouve cool au boute. J'ai pas ben ben d'expérience mais je peux te dire que je le trouve super bon ton prog. j'ai fait un test sur un mega projet pis ca fonctionne .. on ne s'appercoit pas toujours que l'on as fait des déclaration non utile faq je le trouve trippant Merci ben gros ... j'ai donner une note de 9/10
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 !
6 nov. 2003 à 18:53
8 juil. 2003 à 20:36
Par contre, une question comme ça, si tu déclares une variables 2 fois (une fois en global et une fois dans une fonction par exemple), comment ton prog le gère-t-il ?Si tu n'as jamais utilisé la variable globale et toujours celle de la fonction, il te dira qu'elle est utilisée alors qu'elle ne l'est pas forcément. Si tu me suis ? ;-)
Mais bon des variables dans ce cas s'il y en a beaucoup en double, il vaut mieux réapprendre à développer :)
En tout cas merci pour ta source !! Je teste ça dès demain ;-)
25 juin 2003 à 22:26
Moi l'idée me trote dans la tête et ton appli va surement me servir de tremplin. Ca fait un bon point de départ ( je commencerai pas a zero ! )...
Cependant, bien que l'idée semble simple ( ah si si, je vous jure !), la réalisation risque d'etre chaude !
A suivre...
-={[ ZeroCool ]}=-
P.S. : Je reviens noter !
10 mai 2003 à 22:41
merci et continu la tete dans le guidon :o)
19 avril 2003 à 18:15
vraiment lourd quand il y a beaucoup de variables
---- ak
19 mars 2003 à 05:29
Mais comme je suis fatique de revoir mes sources
j'aurais souhaite que tu vas plus lion en mettant des commetaires sur les lignes
grand merçi
13 mars 2003 à 13:45
Cyrus, le programmeur avec la tête dans le guidon.
12 mars 2003 à 19:06
11 mars 2003 à 17:48
Je déplore juste les commentaires en anglais qui m'oblige à sortir mon vieux gros dictionnaire...
11 mars 2003 à 15:05