Je pense qu'on parlede trouver ca au runtime et dans ce cas on n'a pas les sources :mrgreen: -> ton javacc est inutilisable mais il faut analyser le bytecode.
Version imprimable
bonjour,
après pour analyser le bytecode tu a des outil pas mal comme ASM.
mais bon tous ca reste quand même pas mal complexe ..
Alors quelqu'un a une solution :)?
thelvin: arrête de philosopher :mrgreen:
Si c'est pour faire un plugin Eclipse, le code source est accessible.
Il y a une API qui s'appelle JDT:
http://help.eclipse.org/galileo/inde...w-summary.html
très utile pour analyser le code java. (Merci à yann2 de me l'avoir montré)
De nombreux cas me semblent impossible à analyser, ne serait-ce qu'à cause de l'héritage.
Tu analyse une méthode toto qui appelle une méthode machin qui ne fait aucune modification.
Tu vas donc conclure que toto ne fait aucune modif non plus.
Manque de bol, dans une classe fille, la méthode machin est redéfinie et modifie l'état. Donc toto n'est plus "clean" dans cette classe fille.
A mon avis, tu pourras ne tirer de conclusions qu'avec des contraintes très strictes (pas d'appels à des méthodes non final ou non private).
oO je ne vois pas le problème il faut de toute manière analyser chaque méthode pour toute les classes (hériter ou pas) et tirer des conclusion pour chaque class a pars
ainsi la méthode toto sera clean dans la class mère est non-clean dans la class fille indépendamment l'une de l'autre.
faire muter l'object courant c'est faire muter une de ses propriétés... après, la mutation peut être directe (affectation d'un champ) ou indirecte, mais ça reste une mutation...
de toute façon c'est un faux débat, car le but étant de lister les méthodes qu'on doit tester car elles peuvent potentiellement changer l'état d'un objet, c'est pas vraiment exploitable dans le monde réel. Une méthode doit être testée si le code qu'elle contient est suffisament complexe pour risquer d'être incorrect (not "too simple to fail"). Enfin bon j'ai peut-être mal compris le but de ce post, mais perso je n'y vois aucun intérêt...
Je pense que la question posée est pertinente, son cas d'utilisation pour les tests est un peu absurde car le programmeur sait ce qui doit être testé ou non, mais on pourrai avoir besoin d'une tel opération pour savoir si une méthode est threadsafe par exemple (si on ne modifie aucune propriété par une méthode alors pas de risque de problème d'exclusion mutuelle) :)