Ещё один год стремится к окончанию, поэтому настало время заварить себе кофе и перечитать обзоры ошибок за прошедший год. Конечно, на это уйдёт много времени, поэтому эта статья и была написана. Предлагаю взглянуть на наиболее интересные темные места проектов, которые встретились нам в 2019 году в проектах, написанных на C и C++.
Читать полностью »
Рубрика «статический анализ» - 2
Топ 10 ошибок в проектах C++ за 2019 год
2019-12-19 в 12:53, admin, рубрики: C, c++, pvs-studio, баги, Блог компании PVS-Studio, ошибки, статический анализ, статический анализ кода, топПричины внедрить в процесс разработки статический анализатор кода PVS-Studio
2019-11-25 в 8:56, admin, рубрики: ci, devops, DevSecOps, pvs-studio, SAST, Блог компании PVS-Studio, информационная безопасность, Программирование, статический анализ, статический анализ кода, статический анализатор кода, тестирование, тестирование по
PVS-Studio – это инструмент для поиска ошибок и потенциальных уязвимостей в исходном коде программ, написанных на языках C, C++, C# или Java. PVS-Studio относится к классу инструментов статического тестирования защищённости приложений (Static Application Security Testing, SAST). Анализатор ориентирован на практику непрерывной интеграции (CI) и позволяет выявлять ошибки на самых ранних этапах, когда их исправление почти ничего не стоит.
Читать полностью »
Что делать, если для вашего любимого языка нет статического анализатора?
2019-11-08 в 7:55, admin, рубрики: copypaste, cpd, java, modelica, open source, pmd, static analysis, копипаст, Программирование, Проектирование и рефакторинг, статический анализНу, если под любимым языком подразумевается русский, английский и т. д., то это в другой хаб. А если язык программирования или разметки, то конечно писать анализатор самим! На первый взгляд, это очень сложно, но, к счастью, существуют готовые многоязыковые инструменты, в которые относительно легко добавить поддержку нового языка. Сегодня я покажу, как можно с достаточно незначительными затратами времени добавить поддержку языка Modelica в анализатор PMD.
Кстати, знаете, что может ухудшить качество кодовой базы, полученной из последовательности идеальных pull request-ов? Тот факт, что сторонние программисты копировали в свои патчи куски существующего кода проекта вместо грамотного абстрагирования. Согласитесь, в какой-то мере такую банальность отловить ещё сложнее, чем некачественный код — он же качественный и даже уже тщательно отлаженный, поэтому тут недостаточно локальной проверки, нужно держать в голове всю кодовую базу, а человеку это непросто… Так вот: если на добавление полной поддержки Modelica (без создания конкретных правил) до состояния «может запускать примитивные проверки» у меня ушло около недели, то поддержку только copy-paste detector часто можно вообще добавить за день!
Статический анализ IntelliJ IDEA против человеческого разума
2019-10-24 в 20:51, admin, рубрики: control flow, intellij idea, java, Блог компании JetBrains, Программирование, статический анализНе так давно я изучал вывод статического анализатора IntelliJ IDEA для Java-кода и наткнулся на интересный случай. Так как соответствующий фрагмент кода не является open source, я его анонимизировал и отвязал от внешних зависимостей. Будем считать, что он выглядел так:
private static List<Integer> process(Map<String, Integer> options, List<String> inputs) {
List<Integer> res = new ArrayList<>();
int cur = -1;
for (String str : inputs) {
if (str.startsWith("-"))
if (options.containsKey(str)) {
if (cur == -1) cur = options.get(str);
}
else if (options.containsKey("+" + str)) {
if (cur == -1) cur = res.isEmpty() ? -1 :
res.remove(res.size() - 1);
if (cur != -1) res.add(cur + str.length());
}
}
return res;
}
Код как код, что-то преобразуется, что-то делается, но статическому анализатору он не понравился. Здесь мы видим целых два предупреждения:
Независимый обзор PVS-Studio (Linux, C++)
2019-08-08 в 17:46, admin, рубрики: c++, cmake, devops, pvs-studio, Проектирование и рефакторинг, Разработка под Linux, статический анализУвидел публикацию о том, что PVS таки научился анализировать под Линуксами, и решил попробовать на своих проектах. И вот что из этого получилось.
Статический анализ улучшит кодовую базу сложных C++ проектов
2019-08-03 в 18:35, admin, рубрики: c++, legacy code, SAST, Блог компании PVS-Studio, качество кода, Программирование, размер имеет значение, Совершенный код, старый код, статический анализ, статический анализ кода, статический анализатор кода
Постепенно и незаметно складывается ситуация, когда сложность серьёзных C++ проектов становится запредельной. К сожалению, теперь C++ программист не может полагаться только на свои силы.
Читать полностью »
Внедряйте статический анализ в процесс, а не ищите с его помощью баги
2019-01-21 в 7:41, admin, рубрики: artifactory, ci, devops, java, Jenkins, статический анализ, Тестирование IT-системНаписать эту статью меня сподвигло большое количество материалов о статическом анализе, всё чаще попадающихся на глаза. Во-первых, это блог PVS-studio, который активно продвигает себя на Хабре при помощи обзоров ошибок, найденных их инструментом в проектах с открытым кодом. Недавно PVS-studio реализовали поддержку Java, и, конечно, разработчики IntelliJ IDEA, чей встроенный анализатор является на сегодня, наверное, самым продвинутым для Java, не могли остаться в стороне.
При чтении таких обзоров возникает ощущение, что речь идёт про волшебный эликсир: нажми на кнопку, и вот он — список дефектов перед глазами. Кажется, что по мере совершенствования анализаторов, багов автоматически будет находиться всё больше и больше, а продукты, просканированные этими роботами, будут становиться всё лучше и лучше, без каких-либо усилий с нашей стороны.
Но волшебных эликсиров не бывает. Я хотел бы поговорить о том, о чём обычно не говорят в постах вида «вот какие штуки может найти наш робот»: чего не могут анализаторы, в чём их реальная роль и место в процессе поставки софта, и как внедрять их правильно.
Храповик (источник: википедия).
Читать полностью »
Проверка проекта CDK с помощью статического анализатора IntelliJ IDEA
2019-01-17 в 9:45, admin, рубрики: intellij idea, java, баги, Блог компании JetBrains, проверка кода, Программирование, статический анализ, Тестирование IT-системЯ решил потестировать статический анализатор Java-кода IntelliJ IDEA и с его помощью проверил проект The Chemistry Development Kit. Здесь я приведу некоторые ошибки, которые я нашёл. Думаю, что часть из них характерна для Java-программ в целом, поэтому могут быть интересны.
The Chemistry Development Kit — это Java-библиотека с открытыми исходниками для решения задач хемоинформатики и биоинформатики. Когда я занимался биоинформатикой, мы активно её использовали. Проект разрабатывается уже более 20 лет, у него десятки авторов, и качество кода там очень неровное. Тем не менее, в проекте имеются юнит-тесты, а в pom.xml прописана интеграция с анализатором покрытия JaCoCo. Вдобавок там настроены плагины целых трёх статических анализаторов: FindBugs, PMD, Checkstyle. Тем интереснее проверить, какие же предупреждения остаются.
PVS-Studio 7.00
2019-01-16 в 11:06, admin, рубрики: .net, C#, c++, devops, DevSecOps, DevTools, gradle, intellij idea, java, maven, pvs-studio, SAST, static code analysis, Блог компании PVS-Studio, информационная безопасность, си/си++, статический анализСегодня важный день – после 28 релизов шестой версии мы выпускаем PVS-Studio 7.00, где ключевым новшеством является поддержка языка Java. Однако за 2018 год накопилось много других важных изменений, касающихся С++, С#, инфраструктуры и поддержки стандартов кодирования. Поэтому предлагаем вашему вниманию заметку, которая обобщает основные изменения, произошедшие в PVS-Studio за последнее время.
Читать полностью »
Как писать юнит-тесты, если совсем не хочется
2019-01-03 в 9:56, admin, рубрики: assert, java, junit, Программирование, статический анализ, табличка сарказм, Тестирование IT-систем, юнит-тестыВсех нас на работе то и дело пытаются заставить писать юнит-тесты. Многие уже поняли, что от них один вред. Написание тестов отнимает много времени, за которое вы могли бы сделать что-то более полезное. Если тест неожиданно начинает падать, ломается сборка на сервере непрерывной интеграции, не выкатывается вовремя релиз, бизнес теряет деньги и крайним оказываетесь вы, автор упавшего юнит-теста. При рефакторинге тесты причиняют головную боль, потому что начинают падать и приходится с этим разбираться.
Тем не менее злые начальники требуют больше тестов, говоря о так называемом «контроле качества». Особо хитрые менеджеры даже считают покрытие и не отпускают вас с работы, пока оно не будет достигнуто. Ваш код заворачивают на ревью, если в нём нет тестов или они чем-то не понравились. Сплошное расстройство!
Что же делать?