[spoiler]Coverity опубликовала отчет, в котором приведены результаты анализа 450 миллионов (!) строк кода различных проектов, СПО и ППО. Всего же сервис Coverity Scan, оценивающий качество исходного кода и отыскивающий в нем ошибки и потенциальные уязвимости, проверил за последние семь лет 850 млн. строк практически всех ведущих СПО-проектов (Linux, Apache, PHP, ...).
Общие итоги таковы: количество багов на тысячу строк кода для СПО составляет 0,69, для ППО -- 0,68; различие наверняка в пределах погрешности, хотя огромный суммарный объем проанализированных проектов нивелирует множество различий, связанных с организационно-техническими профилями проектов. То есть пресловутый один баг на тысячу строк кода как фиксировался со времен зарождения структурного программирования и первых методологий разработки типа "водопада" много десятков лет назад, так и по сей день, несмотря на развитие программной инженерии, качественно перебороть его не удается. Но тема провала этой борьбы вопрос отдельный, в данном же исследовании интересен совсем другой факт.
Посмотрите на эту картинку из отчета:
В СПО проектах удается выдерживать хорошее качество (0,44) для проектов среднего размера (0,5-1 млн. строк кода, типовые КИС или фреймворки), а вот в крупных задачах виден провал в качестве почти вдвое. С ППО ситуация обратная: на средних проектах уровень ошибок весьма высок (0,98), а вот в крупных проектах ситуация заметно получше (0,66).
Продолжает улучшаться Linux: в 2011-м в его 6,8 млн. строк кода находилось 0,62 бага на тысячу операторов; в 2012-м объем составил 7,4 млн. строк, качество немного просело до 0,66, а вот в текущем году нынешняя версия объемом 7,6 млн. строк уже тщательно вычищена, и плотность багов в ней всего 0,59.
Причины разницы в структуре распределения ошибок достаточно очевидны, но я всё же их озвучу. Проект СПО среднего размера обычно удается реализовывать "на коленке", без инвестиций в дорогостоящие процессы тотального тестирования и дополнительные накладные организационные расходы и вложения в реализацию особо устойчивой архитектуры системы. В итоге баги, вносимые бесплатными разработчиками (качество работы которых наверняка разнится очень сильно) удается успешно вылавливать именно из-за открытости системы, которую может поизучать любой добровольный тестер, а таковых находится немало.
Однако крупные СПО проекты подразумевают прежде всего очень качественное проектирование, для чего профи должны инвестировать в такие процессы существенные временные ресурсы, а где их взять. Скорее всего, рост плотности багов по мере роста СПО-проекта связан уже с антагонистическими архитектурными недоделками.
В ППО ситуация прямо противоположна. Под средние проекты набираются разработчики невысокого класса с улицы, а вложения в тестирование весьма ограничены и несравнимы, конечно, с СПО. А вот в больших ППО-проектах и бюджеты соответствующие, за счет чего к процессам проектирования привлекаются лучшие кадры.