Инструменты анализа кода и межописания типа

Мне генерировал проект знатока Кенгуру Spring и использую несколько инструментов (checkstyle, pmd и т.д.) для сбора информации о моем проекте. (а именно, я использую гидролокатор codehau для этого),

Кенгуру делает интенсивное использование Описаний типа Интера (ITD) AspectJ для разделения проблем как персистентность, javabeans-getter/setters и т.д.

В этих ITDs ткут во время компиляции так инструментах как checkstyle и pmd (кто работает на исходном уровне), имеют много ложных положительных сторон.

Единственное решение, которое я в настоящее время вижу, должен деактивировать проверки на Классы то использование ITDs.

Какие-либо лучшие идеи?

15
задан er4z0r 20 August 2010 в 15:05
поделиться

5 ответов

Не могли бы вы добавить аннотации / комментарии для конкретных инструментов в код Java для подавления ложных срабатываний? Например, у FindBugs есть собственная аннотация @SuppressWarnings.

0
ответ дан 1 December 2019 в 05:19
поделиться

Сомневаюсь, что это будет "нишевой проблемой" еще долго :-) Надеюсь, производители инструментов рассмотрят необходимые усовершенствования.

1
ответ дан 1 December 2019 в 05:19
поделиться

Если вы хотите рассуждать об исходном коде после того, как аспекты были вплетены в код, вам следует вплетать аспекты в исходный код, а не в двоичный.

Многие специалисты по вплетению аспектов используют двоичный код, потому что у них нет доступа к информации (таблица символов, имена, типы, типы выражений...), создаваемой фронт-эндом компилятора. Поэтому, хак заключается в том, чтобы использовать код виртуальной машины, производимый компилятором (этот трюк в основном работает только для наборов инструкций VM, таких как .net IL и коды классов java), который часто легко декодируется (красивый, регулярный набор инструкций), украшенный информацией о таблице символов.

Но если вы не можете рассуждать о двоичных результатах такого процесса плетения, то вы не можете быть уверены в том, что созданная программа не является баговой, что и является сутью первоначального вопроса ОП: "Как мне запустить инструменты SCA на (эффективном) сплетенном исходнике?".

Вы можете решить эту проблему двумя способами:

  • Заставить сообщество написать инструменты SCA, которые обрабатывают байт-коды, а не исходный текст. Это может быть трудно, потому что исходный код может содержать информацию, потерянную в процессе компиляции.
  • Лучшая идея: Заставить аспектное сообщество написать аспектные ткачи, которые работают с исходным кодом и производят исходный код. Это может быть трудно, потому что получить полный языковой фронт-энд сложно.

Я не могу помочь вам заставить сообщество сделать выбор.

Я могу предложить сильную поддержку, чтобы помочь сообществу выбрать второй путь: наш DMS Software Reengineering Toolkit. Это система преобразования программ, которая выполняет директивы вида "если вы видите это, замените его на то", но с соблюдением синтаксиса и семантики языка, фактически применяя такие изменения к структурам данных компилятора, создаваемых полными фронтэндами языка. (Это версия программной инженерии уравнительной подстановки в математике). Измененные структуры данных могут быть реэкспортированы в виде компилируемого исходного текста, снабженного комментариями.

Если вы понимаете, что могут делать преобразования в целом, вы можете увидеть, что аспектные ткачи - это частный случай систем преобразования программ. Таким образом, легко реализовать аспектные ткачи, используя DMS, и результаты являются исходным кодом, что означает, что можно применять инструменты анализа исходного кода.

Я сомневаюсь, что это действительно решит проблему ОП по анализу кода, сгенерированного Roo, в краткосрочной перспективе :-{

1
ответ дан 1 December 2019 в 05:19
поделиться

И FindBugs, и Cobertura НЕ работают на уровне исходного кода, а работают на уровне байт-кода.Таким образом, вы должны махать своими аспектами статически (что также улучшило бы время запуска приложения) во время компиляции (например, с использованием плагина Maven AspectJ), а не во время загрузки, а затем запускать инструменты статического анализа для полученного байт-кода.

1
ответ дан 1 December 2019 в 05:19
поделиться

Этот ответ не поможет вам прямо сейчас, но, надеюсь, он может быть вам интересен, так как обещает решение вашей проблемы в ближайшем будущем. Я не знаю, знакомы ли вы с IntelliJ IDEA - Java IDE от JetBrains, но работа в этом направлении уже ведется, и вот ссылка на специальный выпуск, который вы, возможно, захотите проследить: http://youtrack.jetbrains.net/issue/IDEA-26959. Просто установите на него наблюдение - и получите уведомление, когда функция будет реализована. IntelliJ IDEA предоставляет действительно мощный SCA. Поэтому поддержка ITD также должна быть высокого качества.

2
ответ дан 1 December 2019 в 05:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: