Как начать писать инструмент покрытия кода?

Ищете книги или другие справочные материалы, которые на самом деле обсуждают, как написать инструмент покрытия кода на Java; некоторые из различных техник или приемов - инструментарий исходного или байтового кода.

Это для языка сценариев, который генерирует байт-код Java под капотом.

Ответов (5)

Вы также можете получить исходный код из инструмента покрытия открытого исходного кода и учиться на нем.

Thxm, Mc! http://asm.objectweb.org / - еще один. Отличная документация по инструментарию байтового кода, но ничего «напрямую» не направленного на написание инструмента покрытия - только некоторые подсказки или идеи.

Генерирует ли ваш язык сценариев байт-код? Создает ли он метаданные отладки? Если это так, то, вероятно, лучше всего использовать байт-код. Фактически существующие инструменты, вероятно, будут работать (возможно, с минимальной модификацией).

Типичная проблема таких инструментов в том, что они написаны для работы с Java и предполагают, что a class com.foo.Bar.class соответствует файлу com/foo/Bar.java . Отказ от этого предположения может быть утомительным.

EMMA - это загрузчик классов, который выполняет перезапись байтового кода для сбора покрытия кода в Java. Стиль кодирования немного забавный, но я рекомендую прочитать исходный код для некоторых идей.

Если ваш язык сценариев интерпретируется, вам понадобится загрузчик классов более высокого уровня (на уровне исходного кода), который подключается к интерпретатору.

Вы также можете использовать что-то вроде BCEL, чтобы проанализировать, какие строки исходного кода действительно существуют в байт-коде. Вы не хотите сообщать, что такие вещи, как пустые строки и комментарии, не были покрыты.

Если вы говорите о ColdFusion (что, как я полагаю, вы из тегов), я не уверен, что это выполнимо, но здесь я могу ошибаться ...

IIRC, когда CF компилирует, он по существу компилируется в интерпретируемую форму CFML как простой старый исходный файл Java, затем он компилируется в класс. Следовательно, любые имеющиеся у вас инструменты будут применяться к промежуточной версии, а не к самому CFML.

Сказав это, у Adobe теперь есть отладчик CF, который может пошагово выполнять код, поэтому, пожалуйста, докажите, что я ошибаюсь - мне бы хотелось, чтобы код был покрыт CFML.