Введение:
Инструмент статического анализа кода, технической основой которого является JAVA ASM. Адрес проекта: https://github.com/sorra/TraceSonar.
Последний раз проект был представлен 2 года назад с очень небольшим количеством участников. У меня до сих пор есть некоторые сомнения относительно того, можно ли его использовать.
Как использовать: Готов к использованию прямо из коробки.
Проект предоставляет кейс test.sh, позволяющий пользователям напрямую ощутить эффект от использования.
mvn assembly:assembly && java -Xmx2048m -jar target/tracesonar-0.1-SNAPSHOT.jar -f target/tracesonar-0.1-SNAPSHOT.jar -q "sorra.tracesonar.core.GraphStore#*"
После выполнения этой команды TraceSonar просканирует и проанализирует отношения вызовов всех методов класса sorra.tracesonar.core.GraphStore и запишет результаты в файл трассировки.html. Пользователи могут прочитать отчет и понять статус вызова этого класса.
Например, давайте посмотрим на метод getCallerCollector в этом классе.
В IDEA вы можете получить следующие отношения вызова
Как видите, этот метод находится в MethodInsnCollector#visitInvokeDynamicInsn и
В Searcher#searchCallers есть три вызова.
Давайте посмотрим на результаты анализа цепочки вызовов метода getCallerCollector в отчете трассировки.html.
Видно, что этот метод имеет три внешних вызова, что соответствует результатам анализа в IDEA.
Кроме того, вы также можете видеть, что этот инструмент может отслеживать цепочку вызовов вплоть до основного метода.
Согласно readme.md этого проекта,
Правила раскраски в отчете следующие:
Синий: начальный узел цепочки вызовов.
Зеленый: конечный узел цепочки вызовов.
Серый: возможные звонки
Таким образом, если класс или метод подвергается рефакторингу, этот инструмент может легко проанализировать, какие части проекта требуют внимания разработчиков и тестировщиков.
Сканировать все
После запуска демо-кейса автор просто нашел проект и выполнил полное сканирование. В корневом каталоге проекта выполните следующую команду:
java -Xmx2048m -jar tracesonar-0.1-SNAPSHOT.jar -f target/super-jacoco.jar -q "*#*"
Судя по журналу выполнения, скорость анализа сканирования по-прежнему очень высокая.
Анализ проекта с открытым исходным кодом занял менее 1 секунды.
Как насчет 5-минутного точного теста начального уровня? Хотите попробовать?