Главная » Разработка для Android » Применение статического анализа к коду Android – ECLIPSE

0

 

В Find Bugs есть команда меню, перспектива и несколько видов, которые помогут вам при поиске ошибок. Для запуска Find Bugs выберите соответствующую команду в контекстном меню проекта (рис. 5.13).

Рис. 5.13. Запуск Find Bugs

После запуска Find Bugs можно перейти в перспективу этой программы (рис. 5.14). В перспективу Find Bugs включены виды, отображающие иерархический список потенциальных проблем, найденных Find Bugs. Проблемы сгруппированы по типам. В виде Editor (Редактор) имеются маркеры для обозначения проблем. Если открыть свойства проблемы, программа выведет ее подробное описание, в том числе объяснит, почему Find Bugs может Давать «ложноположительные» заключения.

В данном случае рассмотрим проблему Null check of a value previously dereferenced (Проверка на нуль ссылки, которая была разыменована), показанную в окне Bug Explorer (Обозреватель ошибок) (рис. 5,15).

Проверка на нуль значения, введенного в поле, которая происходит после того, как ссылка на это значение уже разыменована, в синтаксисе Java не возбраняется, но такая ситуация практически наверняка бесполезна или является очевидной ошибкой. В следующем коде видно, что поле savedState используется с явным расчетом на то, что оно никогда не должно быть равно нулю, но проверка на нуль происходит в ходе выполнения записи в журнал операций:

Рис. 5.14. Перспектива Find Bugs

Рис. 5.15. Обозреватель ошибок в программе Find Bugs

На самом деле проверка savedState на нуль должна происходить до его использования, так как не указано, что значение savedState должно быть ненулевым. Мы изменим операцию присваивания, в которой не происходит проверка savedState на нуль, на следующую:

Снова запускаем Find Bugs и убеждаемся, что это изменение снимает возможную проблему.

Это хороший пример ошибки, которую можно найти при статическом анализе. О такой ошибке вас не предупредит компилятор, поскольку возможны случаи, когда программист хочет сделать в коде именно такой ход. Но обычный логический вывод позволяет статическому анализатору предположить, что он столкнулся с ошибкой. И действительно, в такой ситуации он довольно часто оказывается прав.

Источник: Android. Программирование на Java для нового поколения мобильных устройств

По теме:

  • Комментарии