Компания 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 тысяча.