2008-08-05 22 views
19

Auf der Suche nach Büchern oder anderen Referenzen, die tatsächlich diskutieren wie ein Code-Coverage-Tool in Java schreiben; einige der verschiedenen Techniken oder Tricks - Quell- und Byte-Code-Instrumentierung.Wie fange ich an, ein Code Coverage Tool zu schreiben?

Dies ist für eine Skriptsprache, die Java-Byte-Code unter der Haube generiert.

Antwort

2

Thxm, Mc! http://asm.objectweb.org/ist ein anderer. Excellent Dokumentation über Byte-Code-Instrumentierung, aber nichts "direkt" darauf abzielen, ein Coverage-Tool zu schreiben - nur ein paar Tipps oder Ideen.

7

Wird Ihre Scriptsprache Bytecode generiert? Generiert es Debug-Metadaten? Wenn ja, ist Bytecode-Instrumentierung wahrscheinlich der Weg zu gehen. In der Tat werden existierende Werkzeuge wahrscheinlich funktionieren; vielleicht mit minimaler Modifikation (das typische Problem ist, dass die Tools so geschrieben sind, dass sie mit Java funktionieren und annehmen, dass com.foo.Bar.class com/foo/Bar.java entspricht. Das Abwickeln dieser Annahme kann mühsam sein.) EMMA ist ein ClassLoader, der das tut Byte-Code-Neuschreiben für die Code-Coverage-Sammlung in Java. Der Code-Stil ist ein wenig funky, aber ich empfehle die Quelle für einige Ideen zu lesen.

Wenn Ihre Skriptsprache interpretiert wird, benötigen Sie etwas übergeordnetes (Quellniveau), das an den Interpreter angehängt wird.

1

Sie können die Quelle auch von einem Open-Source-Coverage-Tool abrufen und daraus lernen.

2

Sie könnten auch etwas wie BCEL verwenden, um zu analysieren, welche Zeilen der Quelle tatsächlich im Byte-Code existieren. Sie möchten nicht melden, dass Dinge wie leere Zeilen und Kommentare nicht behandelt wurden.

+0

Das ist keine gute Idee, wenn die Zeilennummern in BCEL nicht genau mit denen in der DSL des OP übereinstimmen. Wenn sie dies nicht tun, werden Sie über die "falschen" Quellenzeilen informiert. –

2

Wenn Sie Coldfusion im Gespräch sind (was ich nehme an, Sie von den Tags sind), dann bin ich nicht sicher, ob dies machbar ist, aber ich kann sehr falsch hier ...

IIRC, wenn CF es kompiliert im Wesentlichen kompiliert in eine interpretierte Form der CFML als eine einfache alte Java-Quelldatei, diese wird dann in die Klasse kompiliert. Daher wird jede Instrumentierung, die Sie haben, auf die Zwischenversion und nicht auf die CFML selbst angewendet.

Aber Adobe hat jetzt den CF-Debugger, der Code durchstarten kann, also bitte beweisen Sie mich falsch - ich würde Codeabdeckung in CFML lieben.

+0

Siehe meine Antwort zu "Branch Coverage for Arbitrary Languages ​​Made Easy". Wenn der CFML-Code direkt instrumentiert und dann nach Java kompiliert wird, ergeben sich Testdaten für CFML. (Ich baue Testabdeckung Werkzeuge für einen Lebensunterhalt). –

+0

Worum geht es? Rancho Code Abdeckung für ColdFusion http://kunalsaini.blogspot.in/2012/05/rancho-code-coverage-tool-for.html –