LINUX.ORG.RU

Проект Cppcheck собирает средства для реализации улучшений

 ,


2

4

Разработчик Cppcheck (Daniel Marjamäki) собирается добавить возможность верификации ПО на C и C++ в свой статический анализатор.

Верификация ПО в Cppcheck

В режиме «верификации» Cppcheck будет выдавать предупреждение, если не удастся подтвердить, что код безопасный, однако это может приводить к шуму (множественным предупреждениям).

Планы реализации

Режим верификации будет реализован последовательно. На первом этапе работа будет сконцентрирована над проверкой «деление на ноль». Это относительно простая проверка. Каждая функция будет проверяться отдельно. При этом предполагается, что все входные данные могут иметь произвольное значение. Проверки других типов неопределённого поведения будут добавлены позже. Также планируется улучшить синтаксический анализ C и C++.

Ускорение разработки

Цель сбора средств на Kickstarter — ускорение разработки режима верификации. Планируется добавить данную возможность в любом случае, но работа может занять больше времени, если средства не будут собраны. Если же средства будут собраны то Даниель сможет взять отпуск на основной работе, чтобы полностью посвятить своё рабочее время проекту cppcheck.

Цели проекта

  • Устранение ложноотрицательных срабатываний тестов деления на ноль в Juliet и ITC.

  • Исправление ложноположительного срабатывания (см. BUG#9402).

  • Улучшение анализатора C++.

>>> Подробности на Kickstarter



Проверено: a1batross ()

Пивас-студио-капец? Интересное начинание, одобряю.

На кикстартере вообще чем платить можно? У меня вот, например, пейпал есть, но я им долго не пользовался, а теперь этот пейпал для продолжения работы хочет номер моего телефона и чуть ли не паспорта, всё настолько плохо?

hobbit ★★★★★ ()

Отлично.

собирается добавить возможность верификации ПО на C и C++ в свой статический анализатор.

Спасибо, но splint и так весьма неплохо справляется с С.

anonymous ()
Ответ на: комментарий от hobbit

как же ты на нем вообще зарегистрировался?? Он с самого начала требует телефон и мыло что не удивительно, ведь он использует данные твоей карты. Без телефона невозможно восстановить утерянные данные, даже если есть мыло. Так было всегда

jtad ()
Ответ на: комментарий от jtad

Не было там раньше требований телефона, только мыло. Сейчас тоже попробовал зайти — та же фигня, требуют привязать мобильник, номер паспорта, и СНИЛС/ИНН.

sluggard ★★★★★ ()
Ответ на: комментарий от sluggard

Может в России такая безопасность, но я в германии создавал аккаунт 3 года назад и уже без телефона нельзя было зарегится. Да я иначе и не стал бы давать номер своей карты, плюс там вообще все мои данные светятся у получателя, в том числе имя и фамилия

jtad ()
Ответ на: комментарий от jtad

Мне палка говорит, что я с ними с 2015 года. Как-то вот не было привязки.
Написано, что личность надо подтвердить в соответствии с пользовальским соглашением и законодательством РФ. Пошли они в жопу, с требованием паспорта и ИНН.

sluggard ★★★★★ ()
Последнее исправление: sluggard (всего исправлений: 1)

Говно этот ваш cppcheck. Даже вот такую элементарщину пропускает:

#include <iostream>

int f(int* i)
{
    std::cout << *i << std::endl;
    return 0;
}

int main()
{
    int *i = new int(9);
    if (*i)
        std::cout << *i << std::endl;
    delete i;
    (void)f(i);
}

В который раз убеждаюсь, что все эти статические анализаторы - пустая трата времени. Одни молчат в тряпочку, как вот этот cppcheck, другие нагенерят дофига варнингов, и почти все из них либо ложные срабатывания, либо какая-то фигня в коде, которые вообще никогда не выполнится. Иной раз думаешь, разбирая очередное сообщение: «итить, неужели тут действительно UB или еще что-то…». Начинаешь вдумчиво читать справочник по С++, и оказывается, что авторы тулзы тупо сами не знают С++.

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

Но некоторые люди молятся на статический анализ, как на какую-то священную гору Кайлаш. Даже языки новые изобретают, с очередной супер-пупер продвинутой статической типизацией.

seiken ★★★★★ ()
Ответ на: комментарий от jtad

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

А ты сам уверен, что твоё «всегда» оно распространяется на период до твоего сознательного существования?

Aceler ★★★★★ ()
Ответ на: комментарий от seiken

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

seiken ★★★★★ ()
Ответ на: комментарий от Aceler

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

jtad ()
Последнее исправление: jtad (всего исправлений: 1)
Ответ на: комментарий от hobbit

На кикстартере вообще чем платить можно?

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

Manhunt ★★★★★ ()

cppcheck еще нужен при наличии clang-tidy?

Во-первых, у него свой парсер C++, а это несерьезно. Он всегда будет багованный, и всегда будет отставать от новых стандартов.

Во-вторых, он сам на C++, что вызывает вопросы. Белые люди пишут анализаторы на окамле и аналогах; clang-tidy основан на существующей мощной кодовой базе; а тут что? С наибольшей вероятностью - невладение другими инструментами. Те, кто шарит в статическом анализе, ими владеют в первую очередь.

В-третьих, свои правила тут предлагалось задавать регулярками. Даже непонятно где смеяться. У clang-tidy - приличный модульный API.

Есть что-то неучтенное?

anonymous ()
Ответ на: комментарий от ob1

Этот кусок кода с if вообще не обязателен - cppcheck и без него лажает, а scan-build так же НЕ лажает. Пожалуй даже исправлю исходный пример в тoм комменте, если это еще возможно.

seiken ★★★★★ ()
Ответ на: комментарий от abcq

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

seiken ★★★★★ ()
Ответ на: комментарий от seiken

Да, с С++ всегда проблемы.

Во-первых, язык сам по себе понуждает не по-детски извращаться. И тут уже дело не в том, что анализатор гуано, а в том, что код зачастую без пол-литра не разберёшь. Если следовать рекомендации «пиши проще, как на С», то тогда смысл С++ ускользает. Тот же splint с С справляется на счёт «раз».

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

Во-вторых. У меня лично splint подключён к vim через syntastic. Синтаксический анализ кода производится сразу при сохранении файла (можно настроить и так, чтобы при открытии производился, не проблема). И сразу формируется список ошибок (если они есть). Т.е., я сразу вижу косяки и могу их поправить до компиляции. Синтаксический анализ это не панацея, это устранение последствий «болезни грязных рук». На разработку уходит меньше времени и тестирование становится менее болезненным.

А всякие хитрые баги с многопоточностью эти анализаторы вообще не осилят.

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

Но некоторые люди молятся на статический анализ, как на какую-то священную гору Кайлаш. Даже языки новые изобретают, с очередной супер-пупер продвинутой статической типизацией.

Культ можно из чего угодно сделать. Было бы желание. =)))

anonymous ()
Ответ на: комментарий от Manhunt

Коммерсам можно :D Они деревянные. Они хоть на java что угодно запинают. А тут пяток разработчиков на энтузиазме.

При этом кто погибче (всякие фейсбуки) опять же выбирают подходящие языки.

anonymous ()
Ответ на: комментарий от ob1

new же в С++ не может нулевой указатель вернуть, так что всё там норм, можно вообще не проверять, инфа сотка.

new кидает исключение, если попытка выделить память не удалась.

чтобы вызывать new который может вернуть nullptr, это нужно извращаться типа такого

int* i = new (std::nothrow) int(9);
fsb4000 ★★ ()
Ответ на: Да, с С++ всегда проблемы. от anonymous

Re: Да, с С++ всегда проблемы.

Да не расстраивайся ты, не всем нужна высшая математика, не все могут и на c++ кодить, кто-то должен и навоз возить, кто-то на php говнокодить - работай спокойно, не переживай так.

anonymous ()
Ответ на: Re: Да, с С++ всегда проблемы. от anonymous

Re: Да, с С++ всегда проблемы.

Да не расстраивайся ты, не всем нужна высшая математика, не все могут и на c++ кодить, кто-то должен и навоз возить, кто-то на php говнокодить - работай спокойно, не переживай так.

Да чего мне расстраиваться? Мне и С хватает. С одной стороны. С другой, «кодить», равно как и гадить, это можно на любом языке. Но на сишечке это сделать чуть сложнее чем на крестиках. Если мы уж тут обсуждаем синтаксический анализ, то очевидно что чем объёмнее формальная спецификация языка, тем сложнее его синтаксический анализ. Размеры стандартов С и С++ рекомендую сравнить в качестве домашнего задания. Надеюсь, тогда точно дойдёт и без высшей математики насколько сложнее анализ кода на С++ по отношению к коду на С.

Но да, чего только люди не придумают, чтоб на С не писать…

anonymous ()
Ответ на: комментарий от sluggard

Сейчас тоже попробовал зайти — та же фигня, требуют привязать мобильник, номер паспорта, и СНИЛС/ИНН.

и законодательством РФ. Пошли они в жопу, с требованием паспорта и ИНН.

Благодари своих депутатов за подобную ахинею.

EXL ★★★★★ ()
Ответ на: комментарий от fsb4000

new же в С++ не может нулевой указатель вернуть, так что всё там норм, можно вообще не проверять, инфа сотка.

Киса, if() от непроиницилизированного значения - это UB.

Manhunt ★★★★★ ()
Ответ на: комментарий от seiken

Даже языки новые изобретают, с очередной супер-пупер продвинутой статической типизацией.

Ну та C/C++ уже не спасти.

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

Только в условиях говнокода C/C++.

RazrFalcon ★★★★★ ()