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

Qualimétrie Discussion :

Choix d'une architecture performante d'un ensemble de règles PMD testées avec JUnit


Sujet :

Qualimétrie

  1. #1
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut Choix d'une architecture performante d'un ensemble de règles PMD testées avec JUnit
    Bonjour,

    J'essaye d'ajouter des règles PMD spécifiques a un très gros projet (plus de 8 millions de lignes de code)
    Il y aura en tout une 50aine de règles maximum et tout le code ne sera pas scanné en une seule fois, je vous rassure ;o)

    Cependant, la performance de PMD est a prendre en compte je pense.

    De plus, j'aimerais utiliser JUnit pour pouvoir tester et maintenir mes règles PMD.



    J'ai donc regroupé les 50 règles PMD en 5 ou 6 classes PMD.
    Cela permet de gagner en performance je pense puisqu'on parcours moins de noeud (on peut factoriser certaines méthodes visit(...))
    Les messages d'erreurs sont personnalisés pour chaque règle grâce a addViolation(Object data, SimpleNode node, String message)

    Le problème est que je souhaiterais implémenter des tests JUnit pour mes règles PMD tel que décrit ici :
    http://pmd.sourceforge.net/snapshot/...uidelines.html

    J'aurais donc un fichier XML qui décrit le cas de test par classe PMD ! Or une de mes classe PMD peut tester plusieurs choses et je n'ai pas trouvé comment écrire simplement plusieurs cas de test dans un fichier XML (si on duplique les blocs <test-code> le rapport final ne contient que l'erreur du dernier test en erreur.)

    Y a t'il un moyen pour mapper plusieurs fichiers XML de cas de test JUnit sur la meme classe PMD ?
    Dois-je coder une classe PMD par règle ? Cela ne risque t'il pas de réduire fortement la performance de l'execution de PMD ? Quelles solutions puis-je mettre en place pour améliorer les performances de PMD sinon ?

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 13
    Points : 18
    Points
    18
    Par défaut
    Salut,

    En tant que contributeur PMD, je pense que tu as fait une erreur de jugement en regroupant tes 50 règles en quelques classes.

    1) Ca sera rapidement immaintenable
    2) Le coeur de PMD est extremement performant, tu n'as probablement pas gagner grand chose en faisant ça et tes "grosses classes" ont de grand chance de contenir des "scories" qui coûteront plus cher en performance. En te méfiant du code de PMD, assez ancien, conçu par des gens brillant (pas moi) et revue par de nombreux committeurs, tu as placé une grande confiance, dans ton propre code, dont tu es vraisemblablement le seul relecteur.
    3) 50 en Java ? Rien en XPath ? C'est dommage, Les règles XPath sont ultra performante, simple à maintenir et à tester (y'a un framework) pour ça dans PMD.

    Maintenant, je te rassure, on fait tous ce genre d'erreur. A mon bureau, on vient de trouver la cause d'une fuite mémoire catastrophique qui nous pourrit la vie depuis 2 semaines : un dévelopeur (brillant au demeurant) a voulu "optimiser" la manière dont oracle rapatrier les requêtes... Comme toi, il a voulu être plus malin que le produit qu'il utilise.

    Bref, pour répondre à tes questiosn:

    Dois-je coder une classe PMD par règle ?
    Oui.

    Cela ne risque t'il pas de réduire fortement la performance de l'execution de PMD ?
    Non.

    Quelles solutions puis-je mettre en place pour améliorer les performances de PMD sinon
    Déjà, attends de voir si tu as un problème de perf. Ensuite, il est fort probable que le problème se posera que dans certaines classes, qu'il suffira alors d'essayer d'optimiser. Le forum de PMD ou la mailing pour t'y aider d'ailleurs.

  3. #3
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    Merci de cet avis éclairé ;o)

    Les 50 ne seront sans doute pas toutes en java, mais XPath devra être utilisé a mon avis uniquement pour les règles ultra simples.

    Je trouve que les règles XPath souffrent d'un manque de commentaires, ce qui ne rendent pas simple leur maintenance.
    A moins que tu ait une solution pour ajouter des commentaires dans XPath ? Sinon il faudrait faire une documentation externe.

    Pour le code des règles PMD que j'ai codé en effet j'en suis seul relecteur car pour le moment personne sur le projet ne connait cette technologie et les arbres AST... et peu sont près a s'investir pour s'auto former :/

    La solution n'étant pas encore en place, j'ai le temps de recoder une classe par règle, si tu me dit que ca sera performant, pas de soucis, je testerais ;o)

    Merci encore !

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 13
    Points : 18
    Points
    18
    Par défaut
    Merci de cet avis éclairé ;o)
    Je t'en prie

    Les 50 ne seront sans doute pas toutes en java, mais XPath devra être utilisé a mon avis uniquement pour les règles ultra simples.
    Simple oui, mais ultra simple non

    Je trouve que les règles XPath souffrent d'un manque de commentaires, ce qui ne rendent pas simple leur maintenance.A moins que tu ait une solution pour ajouter des commentaires dans XPath ? Sinon il faudrait faire une documentation externe.
    Oui, moi aussi de nombreuse fois j'aurais bien aimé commenté mes règles. Maintenant tu peux aussi ajouter des commentaires dans le XML du rulset:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <!-- commentaire -->
    <property name="xpath">
    ...
    Pour le code des règles PMD que j'ai codé en effet j'en suis seul relecteur car pour le moment personne sur le projet ne connait cette technologie et les arbres AST... et peu sont près a s'investir pour s'auto former :/
    Je pense que tu surestimes largement le coup d'aprentissage de XPath ! Coder une règle XPath, surtout avec le designer fourni avec PMD, est trivial. En plus, tu as de la chance, mon ancien collègue Philippe Prados vient de sortir un article sur XPath ce mois ci dans linux Magazine.. Cours l'acheter

Discussions similaires

  1. Choix d'une architecture : XML ou SGBDR ?
    Par psylox dans le forum XQUERY/SGBD
    Réponses: 7
    Dernier message: 28/03/2008, 08h23
  2. Choix d'une architecture pour un projet
    Par rveber dans le forum Windows
    Réponses: 5
    Dernier message: 30/01/2008, 21h44
  3. Conseils pour le choix d'une architecture
    Par GregyFun dans le forum Flash
    Réponses: 13
    Dernier message: 23/05/2007, 14h08
  4. Choix d'une architecture pour un serveur
    Par Bebert71 dans le forum Développement
    Réponses: 2
    Dernier message: 14/12/2006, 13h48
  5. [Architecture][Strategie] Client/Serveur Choix d'une architecture
    Par etiennegaloup dans le forum Général Java
    Réponses: 7
    Dernier message: 06/07/2005, 12h00

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