Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Старое ПППП / Лабораторная работа №6 / Лабораторная работа №6. Статический анализатор кода FindBugs

.pdf
Скачиваний:
81
Добавлен:
17.04.2018
Размер:
213.8 Кб
Скачать

Практикум по промышленному программированию ­ 2015. Лабораторная работа №6

Лабораторная работа №6 Статический анализатор кода FindBugs

Цель работы:ознакомиться со статическим анализатором кода FindBugs, научиться его использовать для нахождения потенциальных ошибок.

Необходимое ПО для практической части:JDK 8; IntelliJ IDEA 14 Community Edition; Gradle.

Теоретические сведения

Стати́ческий ана́лиз ко́да (англ. static code analysis) — анализ программного обеспечения, производимый (в отличие от динамического анализа) без реального выполнения исследуемых программ. В большинстве случаев анализ производится над какой­либо версией исходного кода, хотя иногда анализу подвергается какой­нибудь вид объектного кода. Термин обычно применяют к анализу, производимому специальным программным обеспечением (ПО), тогда как ручной анализ называют «program understanding», «program comprehension» (пониманием или постижением программы).

Взависимости от используемого инструмента глубина анализа может варьироваться от определения поведения отдельных операторов до анализа, включающего весь имеющийся исходный код. Способы использования полученной в ходе анализа информации также различны — от выявления мест, возможно содержащих ошибки (утилиты типа Lint), до формальных методов, позволяющих математически доказать какие­либо свойства программы (например, соответствие поведения спецификации).

Впоследнее время статический анализ всё больше используется в верификации свойств ПО, используемого в компьютерных системах высокой надёжности, особенно критичных для жизни (safety­critical). Также применяется для поиска кода, потенциально содержащего уязвимости (иногда это применение называется Static Application Security Testing, SAST).

Большинство компиляторов (например, GNU C Compiler) выводят на экран «предупреждения» (англ. warnings) — сообщения о том, что код, будучи синтаксически правильным, скорее всего, содержит ошибку. Например:

int x;

int y = x+2; // Переменная x не инициализирована!

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

FindBugs

FindBugs — статический анализатор кода, который известен тем, что обнаружил ошибку в модели памяти Java. Программа использует статический анализ, чтобы найти потенциальные ошибки сотни различных типов в Java коде. Приложение распространяется и как отдельное десктопное приложение и как плагин к Eclipse, Netbeans, IntelliJ IDEA и Hudson.

FindBugs отлавливает так называемые bug patterns ­ т.e. конструкции в коде, которые, скорее всего, являются ошибкой. Причем, для ее работы не обязательно иметь исходный код приложения ­ на самом деле она выполняет анализ байт­кода, используя для этих целей библиотеку Apache BCEL (ByteCode Engineering Library). Таким образом, можно даже сторонние JARы проанализировать на наличие ошибок ­ FindBugs может обрабатывать JAR­, ZIP­файлы, и, конечно, class­файлы.

Практическая часть

С FindBugs можно работать из IntelliJ IDEA, подключив плагин ​Findbugs­IDEA​. (Подключение плагинов описано в лабораторной работе №1.) Ниже показана работа плагина версии 0.9.996 c IntelliJ IDEA версии 14.1.2.

После установки плагина и перезагрузки среды разработки возможности FindBugs станут доступны. Внизу появляется возможность вызова вида FindBugs.

­1­

Практикум по промышленному программированию ­ 2015. Лабораторная работа №6

На скриншоте выделены кнопки “Проанализировать все файлы в проекте” и “Настройки анализа”. Для того, чтобы анализ покрывал все возможные недоработки и ошибки в коде, нужно в настройках анализа задать минимальный показываемый уровень предупреждений как “Низкий”.

После нажатия на кнопку “Проанализировать все файлы в проекте” будет проведен статический анализ всех файлов в проекте, и выведен отчет о найденных ошибках.

У каждой ошибки можно просмотреть её подробное описание, класс ошибки и приоритет (низкий, средний и высокий).

Описания всех ошибок можно посмотреть здесь: ​http://findbugs.sourceforge.net/bugDescriptions.html.

Отчет по ошибкам в формате XML или HTML можно сформировать с помощью кнопки .

­2­

Практикум по промышленному программированию ­ 2015. Лабораторная работа №6

Интеграция FindBugs и Gradle

В Gradle возможно вызывать проверку кода с помощью FindBugs. Подробнее про плагин findbugs в gradle здесь: ​http://gradle.org/docs/current/userguide/findbugs_plugin.html.

Необходимый сниппет для файла build.gradle: apply plugin: 'findbugs'

findbugs {

ignoreFailures = true effort = "max" reportLevel = "low"

}

tasks.withType(FindBugs) { reports { xml.enabled = false html.enabled = true

}

}

В этом сниппете также задана генерация отчетов в формате HTML. Они помещаются в директорию \build\reports\findbugs\. Задача, выполняющая все необходимые действия для проверки кода ­ check (она вызывает задачу findbugsMain, но findbugs работает с байт­кодом, поэтому предварительно необходимо скомпилировать код. Поэтому лучше для статической проверки использовать команду check).

Задание для самостоятельной работы

Задание выполняется ​индивидуально​.

Необходимо проверить с помощью FindBugs свои выполненные лабораторные работы №3 и 5. Сгенерировать HTML­отчеты об ошибках. Ошибки необходимо исправить. В лабораторной работе №5 статический анализ организовать с помощью Gradle.

Литература, ссылки

1.https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D 1%81%D0%BA%D0%B8%D0%B9_%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_% D0%BA%D0%BE%D0%B4%D0%B0

2.http://habrahabr.ru/post/198938/

3.http://jdevnotes.blogspot.jp/2009/06/findbugs.html

­3­