logo Как известно, компания Coverity предлагает бесплатно всем open-source разработчикам свой облачный сервис сканирования кода  Coverity Scan

Однако, отзывы блогеров пока не очень радужные: сервис выдаёт  большое число false positives, в т.ч. и на таких стандартных библиотеках как STL, в частности описывают следующий результат сканирования libraw:

107 предупреждений, из них где-то треть — с High Impact.

Из High Impact:

  • Штук 10 в Microsoft STL (сабмитили виндовую сборку)
  • Еще какое-то количество такого примерно вида:
    1.  int variable;
    2.  if(layout==Layout1) variable=value1;
    3.  if(layout==Layout2) variable=value2;

    И на это дается предупреждение, дескать неаккуратненько, не инициализированная переменная. С этим можно согласиться по общим ощущениям, так не надо делать. Но в реальной жизни бывает два вида layout — и это явно прописано в вызывающем коде. Т.е. у машинки достаточно данных, чтобы сообразить, что это не ‘High impact’, а просто неаккуратность.

  • Некоторое количество предупреждений, дескать unsigned short при расширении до 32-64 бит может больно укусить. С этим я не хочу спорить — формально машинка права, а по факту в этих unsigned short живут размеры картинки и до 32767 они в ближайшие годы не дорастут.Т.е. опять, фиксить не надо — в случае данной предметной области.
  • Все остальные найденные ‘High Impact’ проблемы — это просто ложные срабатывания. Т.е. код, согласен, не идеальный (видели бы вы этот код из dcraw !), но все найденное — не является ошибкой.В частности, любимый коффиновский метод проверки диапазона значений 0..N одним действием машинка просто не чует:
    1. int var=-1;
    2. if(bla-bla) { var = some_non_negative_value; }
    3. if( (unsigned)var < 5) // => это проверяет на диапазон 0..4

       

Источник:

http://blog.lexa.ru/2013/02/16/pro_staticheskii_analiz_s.html

4 комментария для “Облачный аудит кода Coverity Scan

  1. Базовый рисерч показывает, что с реализацией stl у MS всегда были проблемы.
    http://stackoverflow.com/questions/14647007/does-stdlistclear-invalidate-stdlistend-iterator VS2012
    http://www.rsdn.ru/forum/cpp/55878.1 — VC6
    http://msdn.microsoft.com/en-us/library/vstudio/ecdecxh1(v=vs.100).aspx VS2010
    The last time I checked, Microsoft’s std::sort was implemented in a way
    that has O(n*n) worse case run time when sorting containers with lots of
    equivalent elements. According to Sedgewick, this is simply a bug in
    the most common partition implementation (
    http://www.cs.princeton.edu/~rs/talks/QuicksortIsOptimal.pdf ) and is entirely
    avoidable. The C++ Standard warns that std::sort can have a bad worse
    case run time, but it doesn’t actually require it.

  2. Забавно. с учётом того, что компилятор у них — первоклассный в плане оптимизации (а вот препроцессор — уже нет).

    По-моему, у Microsoft просто сильно скачет уровень по различным командам девелоперов.

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

    Очевидно, что в эту проблему рано или поздно упирается любой статический анализатор (см. Теорему Райса), когда начинает строить достаточно подробную модель программы.

    Так или иначе приходится упрощать или апроксимировать (если конечно не хотим в конечном счете построить интерпретатор программы 🙂 ) так что в любом случае это вопрос — к разработчикам анализатора, а не к дураку-пользователю, что не тот код суёт 🙂

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *