Ищите книги или другие ссылки, которые фактически обсуждают, как написать инструмент покрытия кода на Java; некоторые из различных приемов или приемов - инструментарий исходного и байт-кода.
Это для языка сценариев, который генерирует байт-код Java под капотом.
Тхсм, Мак! http://asm.objectweb.org / это еще один. Отличная документация по инструментарию байт-кода, но ничего «прямо» направленного на написание инструмента покрытия - только некоторые подсказки или идеи.
Ваш язык сценариев генерирует байт-код? Генерирует ли отладочные метаданные? Если это так, то, вероятно, стоит использовать инструментарий байт-кода. Фактически существующие инструменты, вероятно, будут работать (возможно, с минимальной модификацией).
Типичная проблема таких инструментов в том, что они написаны для работы с Java и предполагают, что a class com.foo.Bar.class
соответствует файлу com/foo/Bar.java
. Развернуть это предположение может быть утомительно.
EMMA - это ClassLoader, который выполняет переписывание байт-кода для сбора покрытия кода в Java. Стиль кодирования немного прикольный, но я рекомендую прочитать исходный код для некоторых идей.
Если ваш язык сценариев интерпретируется, вам понадобится загрузчик классов более высокого уровня (на уровне исходного кода), который подключается к интерпретатору.
Вы также можете получить исходный код из инструмента покрытия открытого исходного кода и поучиться на нем.
Вы также можете использовать что-то вроде BCEL, чтобы проанализировать, какие строки исходного кода действительно существуют в байт-коде. Вы не хотите сообщать, что такие вещи, как пустые строки и комментарии, не были рассмотрены.
Если вы говорите о ColdFusion (который я предполагаю, что вы из тегов), то я не уверен, что это выполнимо, но я могу быть очень не прав здесь ...
IIRC, когда CF компилирует его, он компилируется в интерпретируемую форму CFML как простой старый исходный файл Java, затем он компилируется в класс. Следовательно, любая имеющаяся у вас аппаратура будет применяться к промежуточной версии, а не к самому CFML.
Сказав это, тем не менее, у Adobe теперь есть отладчик CF, который может перешагивать через код, поэтому, пожалуйста, докажите, что я не прав - я бы хотел, чтобы охват кода в CFML.