IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tests et Performance Java Discussion :

Plugin PMD anomaly "DD"


Sujet :

Tests et Performance Java

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Plugin PMD anomaly "DD"
    Bonjour,
    Je vais essaye de situer un peu le contexte.
    Je suis étudiant en informatique, nous avons une matière "technique de test" où nous devons effectuer quelques tests sur nos codes.
    Lors d'un de nos travaux pratique nous devions analyser notre code a l'aide du plugin "PMD", notre professeur nous a lancé un défi.
    Nous avions une erreur "DD - anomaly"
    Cette erreur apparaît lorsqu'on définie deux fois une variable. Jusque la pas de problème.
    Sauf...bien sur...dans notre code nous utilisons un compteur et l'incrémentons dans une boucle for.
    Et pof PMD nous dit "DD-anomaly".

    Le professeur nous a donc donné comme défi de comprendre pourquoi il y a cette erreur ? essaye de trouver une solution "élégante" et expliquer pourquoi cette solution passe outre "DD-anomaly".

    Après quelques essais, nous avons trouvé une solution, lors de l'incrémentation dans la boucle "for" nous faisons "++variable" au lieu de "variable++".
    Mais je ne comprends pas pourquoi ni comment le plugin PMD nous dit rien.
    J'ai effectuer quelques recherches mais rien trouvé de concluent.

    Désole si mon "post" est un peu lourd en texte.
    Ce n'est pas une priorité, mais comme c'est un défi, nous nous amusons plus a essayer une solution.

    Cordialement
    Merci de vos réponse.

  2. #2
    Membre confirmé

    Homme Profil pro
    Chomeur
    Inscrit en
    Juin 2006
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chomeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 347
    Points : 452
    Points
    452
    Par défaut
    Bonjour,

    nous avons trouvé une solution, lors de l'incrémentation dans la boucle "for" nous faisons "++variable" au lieu de "variable++"
    A mon avis, vous avez plutôt trouvé un "bug" PMD... Je ne vois pas pourquoi ++XYZ ne serait pas vu de la même façon que XYZ++ du point de vue "DD-anomaly" car dans les deux cas la valeur de la variable est redéfinie.
    Signature à venir...
    Ancienne : Divers NTIC (PHP, Dojo, à venir...) : http://tif44.fr/blog/

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par TIFéç Voir le message
    Bonjour,



    A mon avis, vous avez plutôt trouvé un "bug" PMD... Je ne vois pas pourquoi ++XYZ ne serait pas vu de la même façon que XYZ++ du point de vue "DD-anomaly" car dans les deux cas la valeur de la variable est redéfinie.

    Possible, mais même si cela s'agit d'une erreur, on peut quand même en trouver la raison, et c'est que je ( on ) n'arrive pas a trouver.
    Puisque pour gagner ce fameux défi, il faut quand même donner quelques explication et solution "élégante" , et je ne pense pas que la solution du bug soit valable pour le prof =)
    Mais je vais continuer a cherche si il n'y pas simplement une autre manière d'incrémenter une variable pour enlever cette erreur "DD-anomaly" ( et de pouvoir l'expliquer ).
    Et merci beaucoup de ta réponse, ça m'aide quand même

  4. #4
    Membre confirmé

    Homme Profil pro
    Chomeur
    Inscrit en
    Juin 2006
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chomeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 347
    Points : 452
    Points
    452
    Par défaut
    Bonjour,

    Effectivement après quelques tests, je confirme le comportement curieux de PMD...

    Le code suivant provoque la warning :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	static public int doNothing() {
    		int test = 0;
    		for(int i = 0; i == 10; i++) {
    			test++;
    		}
     
    		return test;
    	}
    Celui-ci ne le fait pas..?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	static public int doNothingWithBug() {
    		int test = 0;
    		for(int i = 0; i == 10; i++) {
    			++test;
    		}
     
    		return test;
    	}
    Mais à mon avis la solution "élégante" attendue n'est pas celle là. Selon les cas, il est généralement conseillé d'externaliser dans une fonction ou de revoir la façon de réaliser la boucle. Par exemple, le code suivant ne lève pas de "DD anomaly" non plus...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	static public int doNothingAgain() {
    		int test = 0;
    		for(int i = 0; i == 10; i++) {
    			incrementProperly(test);
    		}
     
    		return test;
    	}	
     
    	static public void incrementProperly(int temp) {
    		temp++;
    	}
    La l'exemple donné est un peu idiot mais si tu veux préciser le code exact à refactorer, tu aura peut être différentes suggestions de "solutions élégantes"?
    Signature à venir...
    Ancienne : Divers NTIC (PHP, Dojo, à venir...) : http://tif44.fr/blog/

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Nous avons aussi essayer d'externaliser a l'aide d'une fonction, et effectivement cela correspond mieux pour le plugin PMD, nous l'avions deja proposé a notre prof, mais cela ne lui convient pas.
    Comme tu l'as dit cela parait un peu idiot et "sale" de le faire passer par une fonction surtout juste pour une incrementation.
    Pour le moment on essaye d analyser la regle de pmd pour voir comment il interprète cette erreur. On avance pas trop mais bon

    je te remercie pour ton activité c est la première fois que je viens ici, et c est très agréables de voir des personnes comme ca

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo