2008-08-05 25 views
19

Vous cherchez des livres ou d'autres références qui discutent réellement comment pour écrire un outil de couverture de code en Java; quelques-unes des différentes techniques ou astuces - l'instrumentation par code source ou octet.Comment commencer à écrire un outil de couverture de code?

Ceci est pour un langage de script qui génère du code octet Java sous le capot.

Répondre

2

Thxm, Mc! http://asm.objectweb.org/en est un autre. Excellent documentation sur l'instrumentation de code octet, mais rien de "directement" visant à écrire un outil de couverture - juste quelques conseils ou idées.

7

Est-ce que le bytecode de votre langage de script est généré? Génère-t-il des métadonnées de débogage? Si oui, l'instrumentation bytecode est probablement le chemin à parcourir. En fait, les outils existants fonctionneront probablement; peut-être avec une modification minime (le problème typique est que les outils sont écrits pour fonctionner avec Java et supposent que com.foo.Bar.class correspond à com/foo/Bar.java.) Dénuder cette hypothèse peut être fastidieux.) EMMA est un ClassLoader qui fait Réécriture de code octet pour la collecte de code-couverture en Java. Le style de codage est un peu génial, mais je recommande de lire la source pour quelques idées.

Si votre langage de script est interprété, vous aurez besoin de quelque chose de plus haut niveau (niveau source) qui se connecte à l'interpréteur.

1

Vous pouvez également obtenir la source à partir d'un outil de couverture de code Open Source et en tirer des leçons.

2

Vous pouvez également utiliser quelque chose comme BCEL pour analyser les lignes de source qui existent réellement dans le byte-code. Vous ne voulez pas signaler que des éléments comme des lignes vides et des commentaires n'ont pas été couverts.

+0

Ce n'est pas une bonne idée à moins que les numéros de ligne dans BCEL correspondent exactement à ceux de la liste DSL de l'OP. Si ce n'est pas le cas, vous bénéficiez d'une couverture sur les «mauvaises» sources. –

2

Si vous parlez ColdFusion (que je suppose que vous êtes des balises), alors je ne suis pas sûr que cela est faisable, mais je peux être très mal ici ...

IIRC, Lorsque CF compile compile essentiellement en une forme interprétée du CFML en tant que fichier source java simple, il est ensuite compilé dans la classe. Par conséquent, toute instrumentation que vous pourriez avoir s'appliquera à la version intermédiaire plutôt qu'à la CFML elle-même. Cela dit, Adobe a maintenant le débogueur CF qui peut utiliser le code, alors s'il vous plaît me prouvez le contraire - j'adorerais la couverture de code dans CFML.

+0

Voir ma réponse à propos de "Couverture de branche pour les langues arbitraires en toute simplicité". L'instrumentation du code CFML directement puis sa compilation en Java donnerait toujours des données de couverture de test directement pour CFML. (Je construis des outils de couverture de test pour vivre). –

+0

De quoi s'agit-il? Couverture du code Rancho pour ColdFusion http://kunalsaini.blogspot.in/2012/05/rancho-code-coverage-tool-for.html –