Компания Coverity, развивающая инструментарий для автоматического анализа кода на предмет наличия проблем безопасности и ошибок, опубликовала отчёт (PDF, 390 Kб) с результатами изучения 936 млн строк кода на C/C++, охватывающих 740 наиболее активно разрабатываемых открытых проектов (252 млн строк кода) и 493 проприетарных продуктов (684 млн строк кода).

Впервые за многолетнюю практику проведения аналогичных исследований, по уровню качества открытое ПО заметно опередило проприетарное - средний уровень дефектов в открытом коде составил 0.59 ошибок на 1000 строк кода, в то время как в проприетарном ПО данный показатель составил 0.72 (в прошлом году соотношение было 0.69 против 0.68).

Если рассматривать корреляцию уровня качества в зависимости от размера проектов, то наибольший уровень ошибок наблюдается в проектах размером от 500 тысяч до 1 млн строк - 0.70 ошибок на 1000 строк для открытого кода и 0.84 для проприетарного. Для проектов размером более 1 млн строк кода уровень качества составляет 0.65 для открытого кода и 0.71 для проприетарного, от 100 до 500 тысяч - 0.50 и 0.81, до 100 тысяч строк - 0.35 и 0.38. При этом, следует иметь в виду, что требования промышленных стандартов качества допускают наличие 1 ошибки на 1000 строк кода.

37% всех выявленных проблем относятся к категории ошибок высокой степени опасности. Распределение типов проблем выглядит следующим образом:

  • Утечка ресурсов (Resource Leaks) 9,503
  • Разыменование NULL-указателя (Null Pointer Dereferences) 6,573
  • Проблемы с порядком вычислений (Control Flow Issues) 5,175
  • Проблемы с обработкой ошибок (Error Handling Issues) 4,500
  • Неинициализированные переменные (Uninitialized Variables) 3,398
  • Некорректный доступ к памяти (Memory - Illegal Access) 2,591
  • Повреждения памяти (Memory Corruptions) 2,555
  • Проблемы с обработкой целочисленных значений (Integer Handling Issues) 2,448
  • Некорректные выражения (Incorrect Expression) 1,912
  • Проблемы с сопровождением кода (Code maintainability issues) 982
  • Игнорирование рекомендаций по безопасному программированию (Security best practices violations) 759
  • Небезопасная обработка данных (Insecure Data Handling) 705
  • Ошибки использования API (API Usage Errors) 619
  • Зависания программ (Program Hangs) 324
  • Проблемы с одновременным доступом (Concurrent Access Violations) 164
  • Проблемы с производительностью (Performance inefficiencies) 153
  • Предупреждения при парсинге (Parse warnings) 260
  • Несоответствия иерархии класса (Class Hierarchy Inconsistencies) 17

При рассмотрении тенденций в изменении качества кода ядра Linux в 2013 году отмечается сокращение среднего времени на устранения выявленных ошибок со 122 до 6 дней. Уровень дефектов в ядре составляет 0.61 ошибок на 1000 строк кода, при том, что этот показатель впервые спустился ниже 1 в 2008 году, а в прошлом году составлял 0.66. Из других интересных выводов упоминается то, что разработчики на C/C++ устраняют важные ошибки более активно, чем разработчики на Java. Если для проектов на C/C++ устранено 46% выявленных утечек ресурсов, то для Java-проектов было исправлено всего 13% таких проблем. Подобное поведение объясняется излишним доверием Java-разработчиков к предоставляемым языком средствам защиты, таким как сборщик мусора.

Система Coverity Scan была создана в 2006 году по инициативе Министерства национальной безопасности США для обеспечения и усиления безопасности информационной инфраструктуры Соединённых Штатов, в которой используются различные Open Source проекты. В настоящее время программа тестирования Coverity Scan охватывает около 1700 открытых проектов. С марта прошлого года в число проверяемых проектов включены разработки на языке Java, в том числе были проверены проекты Apache Hadoop, HBase и Cassandra. При автоматическом анализе кода открытых проектов с 2006 год выявлено более 94 тысяч дефектов, при этом в 2013 году авторами проектов было исправлено 50 тысяч проблем. Более 11 тысяч исправлений приходятся на 4 крупнейших проекта - NetBSD, FreeBSD, LibreOffice и ядро Linux.

Источник: http://www.opennet.ru/opennews/art.shtml?num=39587