Как хорошо статический анализ кода работает с Spring и другими абстракциями?

Первоначально: беспорядок

, первоначально пишущий этот ответ, я недавно переключился с Visual Studio (с годами опыта) к Linux и первой вещи, которую я сделал был попытаться найти разумный IDE. В то время, когда это было невозможно: никакой хороший IDE не существовал.

Крещение: UNIX является IDE. Все это. 1 глоток>

И затем я понял, что IDE в Linux является командной строкой со своими инструментами:

  • Первый Вы настраиваете свою оболочку
  • и Ваш редактор; выберите свой яд —, оба - состояние:

В зависимости от Ваших потребностей, необходимо будет тогда установить и настроить несколько плагинов, чтобы заставить редактора работать приятно (that’s одна раздражающая часть). Например, большинство программистов на Vim извлечет выгоду из плагин YouCompleteMe для умного автозавершения.

Однажды that’s сделанный, оболочка является Вашим интерфейсом команды для взаимодействия с различными инструментами — Отладчиков (gdb), Профилировщиков (gprof, valgrind), и т.д. Вы настраиваете свой проект/среду сборки с помощью , Делают , CMake, SnakeMake или любая из различных альтернатив. И Вы управляете своим кодом с системой управления версиями (большинство людей использует Мерзавец ). Вы также используете tmux (ранее также, экран) для мультиплексирования (= думают несколько окон/вкладок/панелей), и сохраните терминальный сеанс.

Дело в том, что, благодаря оболочке и нескольким соглашениям записи инструмента, эти весь интегрируются друг с другом . И тем путем оболочка Linux является действительно интегрированная среда разработки , полностью наравне с другими современными IDE. (Этот doesn’t означает, что отдельные IDE don’t имеют функции, в которых может испытывать недостаток командная строка, но инверсия также верна.)

каждому их собственное

я не могу преувеличить, как хорошо вышеупомянутый рабочий процесс функционирует однажды you’ve выработавший привычку. Но некоторые люди просто предпочитают графических редакторов, и в годах, так как этот ответ был первоначально записан, Linux получил комплект превосходных графических IDE для нескольких различных языков программирования (но не, до знающего I’m, для C++). Действительно дайте им попытку даже if — В как me —, В Вы заканчивают тем, что не использовали их. Here’s просто маленький и смещенный выбор:

Имеют в виду, что этот список совсем не завершен.

1 глоток> я украл тот заголовок из комментария dsm’s.

2 глоток> я раньше обращался к Vim здесь. И в то время как простой Vim еще более, чем способен, Неоэнергия является многообещающим перезапуском, и it’s модернизировал несколько старых бородавок.

5
задан Arjan Tijms 4 August 2013 в 13:11
поделиться

4 ответа

Раньше я работал в Coverity над продуктом статического анализа Java.

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

Для мертвого кода в методе, если ваш анализатор имеет такую ​​возможность, результаты должны быть довольно хорошими, поскольку анализ не будет делать никаких предположений относительно входных данных. Даже предполагая все возможные входные данные, можно найти мертвый код, в котором коррелированная логика предотвращает выбор определенных ветвей.

4
ответ дан 14 December 2019 в 08:53
поделиться

Работая над статическим анализом, я не знаю ни одного инструмента статического анализа, который действительно работает с абстракциями. Скорее всего, вам придется написать модуль, который будет подключаться к процессу анализа и объяснять, как вы используете абстракции.

И я сомневаюсь, что наличие мертвого кода стоит дороже этой суммы.

1
ответ дан 14 December 2019 в 08:53
поделиться

Вы можете использовать инструменты тестового покрытия (динамический анализ), чтобы определить, какой код ваша система используется ; дополнение - это код, который может быть мертв (он не был выполнен!) и нуждается в проверке (например, могут быть ложные срабатывания). Чем больше упражнений вы даете своей системе, тем ниже вероятность ложных срабатываний.

Инструмент покрытия тестами Java, который может собирать эти данные для вас, можно найти здесь .

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

В общем, обнаружение мертвого кода X требует доказательства отсутствия условия, при котором X вызывается. Это сложно (теоретически невозможно), когда сталкиваешься с машиной Тьюринга и операторами ЕСЛИ вида

 if (Turing(..)) then call X();

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

Однако во многих случаях «мертвый код» действительно просто код, который просто не может вызвать его («деактивный код» на языке FAA). То есть, пока X определен, прямо или косвенно в системе просто нет обращений к X (или обращений, если X является элементом данных). Их легче обнаружить инструментам статического анализа из-за беспорядочного усложнения в Java, связанного с загрузкой и отражением динамических классов (что делает невозможным деактивный анализ кода перед лицом неизвестных, но загружаемых классов).

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

2
ответ дан 14 December 2019 в 08:53
поделиться

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

Ценность статического анализатора кода - это не проверка кода. Чтобы устранить мертвый код, я бы использовал покрытие кода, чтобы профилировать это. - В вашем случае - вы упомянули много абстракций ... Думаю, статического анализа кода будет недостаточно.

0
ответ дан 14 December 2019 в 08:53
поделиться
Другие вопросы по тегам:

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