mk.am
God is wearing black
Сравнение качества кода ядер ОС Linux, Windows, OpenSolaris и FreeBSD
Categories: diary, it

Греческий исследователь Diomidis Spinelli (автор книги “Code Quality: The Open Source Perspective“) опубликовал отчет “A Tale of Four Kernels“, в котором провел сравнение качества кода операционных систем Linux (2.6.18), Windows (исходные тексты частей ядра Microsoft Windows XP x64/Server 2003 SP1 можно загрузить для образовательных целей), OpenSolaris (сборка от 2007-08-28) и FreeBSD (6.1).

На оценку качества кода влияние оказали следующие факторы: организация файлов, структура кода, стиль оформления кода, использование директив препроцессинга, организация данных.

В итоге, автор не смог выделить явного победителя или проигравшего, у каждой системы были свои сильные и слабые стороны. Так в Linux отлично организована структура кода, но хромает его стиль. Solaris и Windows отличились хорошим использованием средств препроцессора и хорошим стилем кодирования. Сильная сторона FreeBSD – четкое разделение пространства имен и структур данных в функциях. Подробнее итоги изложены в сводной таблице. Дампы данных, полученные в результате парсинга исходных текстов, для СУБД MySQL (размер дампа около 8Гб) и список аналитических запросов представлены на данной странице.

Ниже представлена таблица с основными характеристиками ядер (↓ – чем меньше, тем лучше, ↑ – чем больше, тем лучше):

ХарактеристикаFreeBSDLinuxSolarisWRK
A . Обзор
Строк кода (тысяч)2,5994,1503,000829
Объем комментариев (тысяч)232377299190
Число операторов (тысяч)9481,7721,042192
Число файлов4,4798,3723,851653
Число слинкованных модулей1,2241,5635613
Число функций38,37186,24539,9664,820
Макроопределений727,410703,940136,95331,908
B . Организация файлов (в среднем)
Число файлов в директории6.820.48.915.9
Число заголовочных файлов на 1 исходник 11.051.961.091.92
Средняя связность структур в файлах2.2 ×10141.3 ×10135.4 ×10122.6 ×1013
C . Структура кода
% глобальный функций/td>36.721.245.999.8
% аккуратно структурированных функций27.168.465.872.1
% labeled statements0.640.930.440.28
Среднее число параметров в функциях2.081.972.202.13
Средняя глубина максимальной вложенности0.860.881.061.16
Число элементов в языковой инструкции9.149.079.198.44
% повтора кода4.684.603.003.81
Средняя связность структур в функциях7.1 ×1041.3 ×1083.0 ×1066.6 ×105
D . Стиль кодирования
% соответствующих общему стилю строк77.2777.9684.3233.30
% соответствующих общему стилю typedef идентификаторов57.159.286.9100.0
% соответствующих общему стилю совокупных тэгов (aggregate tags)0.00.020.798.2
Число символов в строке30.829.427.228.6
% цифровых констант в операндах10.613.37.77.7
% небезопасных функции-подобных макросов3.994.449.794.04
% опечаток в комментариях33.031.546.410.1
% уникальных слов с опечатками в комментариях6.336.165.763.23
E . Препроцессинг
% директив препроцессора в заголовочных файлах22.421.921.610.8
% не-#include директив в Си файлах2.21.91.21.7
% директив препроцессора в функциях1.560.850.751.07
% условных директив препроцессора в функциях0.680.380.340.48
% функции-подобных макросов в “defined” функциях26202564
% макросов среди уникальных идентификаторов66502425
% макросов среди идентификаторов32.526.722.027.1
F . Организация данных
% деклараций переменных в глобальной области0.360.191.021.86
% операндов переменных в глобальной области3.30.51.32.3
% идентификаторов ошибочно определенных в глобальном контексте0.280.171.513.53
% деклараций переменных ограниченных файлом2.44.04.56.4
% операндов переменных ограниченных файлом10.06.112.716.7
Переменных в typedef или aggregate15.1325.9015.497.70
Элементов данных в aggregate или enumeration8.510.08.67.3

http://www.opennet.ru/opennews/art.shtml?num=15914

Related posts

Comments are closed.

28 queries in 0.811 seconds.