Написание кастомных правил для анализатора кода Kiuwan
Продолжаем нашу серию заметок по статическому анализатору кода Kiuwan.
Данный класс инструментов исследует текст программ на предмет выявления в них каких-то известных шаблонов уязвимостей, ошибок, неточностей, неэффективных действий и многого другого. Откуда берутся эти шаблоны, мы писали в прошлый раз. Для каждого языка программирования эти шаблоны будут свои в силу понятных отличий в синтаксисе, но будут и общие правила качественного кода, типа избегать использования повторяющихся блоков кода.
Однако, не всегда этих шаблонов и правил хватает для оценки определенных качеств написанной программы. В каждом конкретном случае может понадобиться свой определяющий параметр. Например, нам важно убедиться, нет ли в написанной банковской программе скрытых транзакций копеечек на чей-нибудь счет. Или проверить, что не используются никакие недопустимые внешние библиотеки. В этом случае, нам просто необходимо иметь возможность заставить анализатор проверять не только штатные шаблоны, но и наши дополнительные правила.
В данной заметке хотелось бы рассказать, как создавать свои «кастомные» правила анализа исходного кода для Kiuwan.
Шаг 1. Kiuwan Rule Developer
Kiuwan предлагает для написания кастомных правил инструмент, называемый Kiuwan Rule Developer. Пропустим процесс установки, так как он не представляет из себя ничего интересного. А внешний вид утилиты выглядит так:
Рассмотрим интерфейс более детально. Он состоит из 3 основных областей:
1. Окно содержащее в себе исходный код, на котором будет тестироваться правило
2. AST (абстрактное синтаксическое дерево) — дерево, описывающее разобранный (parsed) исходный код
3. Панель исполнения — панель, в которой мы можем создавать, открывать и редактировать правила, писать XPath выражения и Groovy скрипты, а также смотреть результаты исполнения правила
Все правила описываются с помощью языка программирования Java. Поэтому нам необходимо подружить нашу среду разработки (в нашем случае это будет Eclipse) с утилитой. Процесс этот несложный — всего лишь необходимо в утилите прописать директории нового созданного проекта правила в Eclipse.
Шаг 2. Создаем новое правило
А сейчас мы приступим к самому интересному — созданию самого правила. Для этого нажмем кнопку «New» на закладке «Rule». Откроется новое окно в котором нам необходимо прописать все детали создаваемого правила. Звездочкой отмечены обязательные поля.
В нашем простейшем примере правило будет искать использование в коде методов System.out.print и System.out.println. Почему?! Потому что правильнее пользоваться стандартизованной библиотекой для логирования, например, log4j.
Заполнив все поля на вкладке «Definition» перейдем ко вкладке «Code examples». Здесь мы покажем примеры «неправильного» кода и кода исправленного. Собственно, в дальнейшем «неправильный» код нам может пригодиться для тестирования нашего правила.
После сохранения, будет создано 2 файла:
• Шаблон исходного кода правила
• Файл описания правила в формате XML
Шаг 3. Компилируем Java код правила в Eclipse
Перейдем в Eclipse. Обновим файлы проекта и увидим добавленные файлы CheckSystemOut.java и COM.MYCOMPANY.JAVA.CHECKSYSTEMOUT.rule.xml
Открыв первый файл, мы увидим базовый шаблон кода, созданный утилитой.
Для нашего простого примера добавим немного простого кода. Более подробная информация для написания правил есть в статьях на сайте компании Kiuwan.
Компилируем правило (у меня в Eclipse выбрана автоматическая компиляция при сохранении), и всё практически готово.
Шаг 4. Тестируем правило.
Возвращаемся в утилиту Kiuwan Rule Developer. В ней мы сможем потестировать написанное нами. Для этого нам надо сделать несколько простых шагов:
1. Вставить исходный код, на котором наше правило будет тестироваться (я возьму его из описания правила)
2. Кликнуть на кнопку «Generate AST». При этом исходный код будет разобран, и будет создана структура кода AST (Abstract Syntax Tree)
3. Нажимаем кнопку «Execute» и смотрим результаты выполнения правила
Все, правило готово! Остается выполнить установку и настройку правила на веб-портале системы и подгрузить экспортированный jar файл в папку локального анализатора. Останавливаться на этих подробностях я не буду, так как это уже не так интересно.
Шаг 5. Смотрим на результаты анализа
Ну, а теперь стоит посмотреть, как все это работает. Запускаем Kiuwan Local Analyzer, «натравливаем» его на код проекта, который мы хотим проанализировать, жмем кнопку «Analyze», ждем некоторое время и смотрим результаты :)
Перейдя на вкладку дефектов мы можем видеть результат работы нашего правила.
Стоит отметить, что данный способ расширения вашей модели качества является универсальным для любого языка программирования, поддерживаемого Kiuwan (на текущий момент более 20).