Результаты сравнения качества кода открытых и проприетарных проектов

Компания Coverity, развивающая инструментарий для автоматического анализа кода на предмет наличия проблем безопасности и ошибок опубликовала отчёт (PDF, 1 Мб) с результатами изучения 450 млн строк кода, охватывающих 118 наиболее активно разрабатываемых открытых проектов и 256 проприетарных продуктов. В среднем уровень дефектов в открытом и закрытом коде оказался примерно на одном уровне — 0.69 против 0.68 ошибок на 1000 строк кода, что значительно выше требований промышленных стандартов качества, в которых допускается 1 ошибка на 1000 строк кода. В проектах размером от 500 тысяч до 1 млн строк кода открытое ПО почти в два раза опередило проприетарное ПО по качеству, показав коэффициент наличия ошибок 0.44 против 0.98. Для проектов до 100 тысяч строк кода данные показатели составили 0.4 и 0.51, от 100 до 500 тысяч — 0.60 и 0.66. В проектах, размером более 1 млн строк кода более высокое качество наблюдается в проприетарном ПО — коэффициент ошибок в открытом ПО составил 0.75, а в проприетарном — 0.66.

Что касается типов проблем, выявленных в процессе анализа кода, то 36% всех выявленных проблем относятся к категории ошибок высокой степени опасности. Распределение типов проблем выглядит следующим образом (уже исправлено/ ещё не исправлено):

Проблемы с порядком вычислений (Control Flow Issues) 3,464 / 5,826 Разыменование NULL-указателя (Null Pointer Dereferences) 2,724 / 6,846 Неинициализированные переменные (Uninitialized Variables) 1,374 / 1,692 Повреждения памяти (Memory Corruptions) 2,264 / 3,151 Проблемы с обработкой ошибок (Error Handling Issues) 1,432 / 5,461 Утечка ресурсов (Resource Leaks) 2,544 / 4,826 Проблемы с обработкой целочисленных значений (Integer Handling Issues) 2,512 / 3,791 Некорректный доступ к памяти (Memory — Illegal Access) 1,693 / 4,299 Небезопасная обработка данных (Insecure Data Handling) 751 / 1,372 Некорректные выражения (Incorrect Expression) 766 / 1,421 Проблемы с одновременным доступом (Concurrent Access Violations) 175 / 206 Ошибки использования API (API Usage Errors) 257 / 359 Зависания программ (Program Hangs) 127 / 180 Несоответствия иерархии класса (Class Hierarchy Inconsistencies) 4 / 9. Анализ качества ядра Linux показал, что в выпущенных за 2012 год версиях ядра Linux 3.2–3.7 было зафиксировано 5803 дефектов, при этом уже исправлено 5170 проблем. В 2011 году число дефектов для ядер 2.6.38–3.1 составило 2331, но исправлено было только 1283 проблем. Средний коэффициент наличия ошибок во всех подсистемах ядра составил 0.66 (от 0.32 до 0.9, в зависимости от подсистемы ядра), в то время как 5 лет назад данный коэффициент превышал граничный показатель в 1 ошибку на 1000 строк кода. В новых версиях ядра число ошибок уменьшается, например в ядре 3.8 коэффициент наличия ошибок составляет 0.59.

Система Coverity Scan была создана в 2006 году по инициативе Министерства национальной безопасности США для обеспечения и усиления безопасности информационной инфраструктуры Соединённых Штатов, в которой используются различные Open Source проекты. В настоящее время программа тестирования Coverity Scan охватывает около 300 открытых проектов, суммарный размер кода которых превышает 68 млн строк. При автоматическом анализе данного кода было выявлено 47 тысяч дефектов из которых уже исправлено 21 тысяча.

©  OpenNet