The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Сравнение качества кода ядер ОС Linux, Windows, OpenSolaris и FreeBSD

16.05.2008 22:20

Греческий исследователь 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Гб) и список аналитических запросов представлены на данной странице.

Ниже представлена таблица с основными характеристиками ядер (↓ - чем меньше, тем лучше, ↑ - чем больше, тем лучше):
ХарактеристикаFreeBSDLinux Solaris WRK
A . Обзор
Строк кода (тысяч) 2,599 4,150 3,000 829
Объем комментариев (тысяч)232 377 299 190
Число операторов (тысяч) 948 1,772 1,042 192
Число файлов 4,479 8,372 3,851 653
Число слинкованных модулей 1,224 1,563 561 3
Число функций 38,371 86,245 39,966 4,820
Макроопределений 727,410 703,940 136,953 31,908
B . Организация файлов (в среднем)
Число файлов в директории6.8 20.4 8.9 15.9
Число заголовочных файлов на 1 исходник 1 1.05 1.96 1.09 1.92
Средняя связность структур в файлах 2.2 ×1014 1.3 ×1013 5.4 ×1012 2.6 ×1013
C . Структура кода
% глобальный функций/td>36.7 21.2 45.9 99.8
% аккуратно структурированных функций 27.1 68.4 65.8 72.1
% labeled statements 0.64 0.93 0.44 0.28
Среднее число параметров в функциях2.08 1.97 2.20 2.13
Средняя глубина максимальной вложенности 0.86 0.88 1.06 1.16
Число элементов в языковой инструкции9.14 9.07 9.19 8.44
% повтора кода 4.68 4.60 3.00 3.81
Средняя связность структур в функциях 7.1 ×104 1.3 ×108 3.0 ×106 6.6 ×105
D . Стиль кодирования
% соответствующих общему стилю строк77.27 77.96 84.32 33.30
% соответствующих общему стилю typedef идентификаторов 57.1 59.2 86.9 100.0
% соответствующих общему стилю совокупных тэгов (aggregate tags)0.0 0.0 20.7 98.2
Число символов в строке 30.8 29.4 27.2 28.6
% цифровых констант в операндах 10.6 13.3 7.7 7.7
% небезопасных функции-подобных макросов 3.99 4.44 9.79 4.04
% опечаток в комментариях33.0 31.5 46.4 10.1
% уникальных слов с опечатками в комментариях6.33 6.16 5.76 3.23
E . Препроцессинг
% директив препроцессора в заголовочных файлах 22.4 21.9 21.6 10.8
% не-#include директив в Си файлах 2.2 1.9 1.2 1.7
% директив препроцессора в функциях 1.56 0.85 0.75 1.07
% условных директив препроцессора в функциях 0.68 0.38 0.34 0.48
% функции-подобных макросов в "defined" функциях 26 20 25 64
% макросов среди уникальных идентификаторов 66 50 24 25
% макросов среди идентификаторов 32.5 26.7 22.0 27.1
F . Организация данных
% деклараций переменных в глобальной области0.36 0.19 1.02 1.86
% операндов переменных в глобальной области3.3 0.5 1.3 2.3
% идентификаторов ошибочно определенных в глобальном контексте0.28 0.17 1.51 3.53
% деклараций переменных ограниченных файлом 2.4 4.0 4.5 6.4
% операндов переменных ограниченных файлом10.0 6.1 12.7 16.7
Переменных в typedef или aggregate 15.13 25.90 15.49 7.70
Элементов данных в aggregate или enumeration 8.5 10.0 8.6 7.3


  1. Главная ссылка к новости (http://developers.slashdot.org...)
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/15914-style
Ключевые слова: style, code, kernel, linux, solaris, windows, freebsd
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (22) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 23:41, 16/05/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Как по мне некоторые из критериев оценивания довольно странные...
     
  • 1.2, OTEu (?), 23:58, 16/05/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    почему нет OpenBSD ?
     
     
  • 2.4, Teo (?), 00:28, 17/05/2008 [^] [^^] [^^^] [ответить]  
  • +/
    Поддерживаю, почему нет моей бзды?
     
  • 2.16, ximaera (?), 11:50, 17/05/2008 [^] [^^] [^^^] [ответить]  
  • +/
    А что, объём проделанной работы (с учётом получения Windows Research Kernel) кажется маленьким?
     

  • 1.3, Mad (??), 00:01, 17/05/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Добил % идентификаторов ошибочно определенных в глобальном контексте у винды)))
     
  • 1.5, Роман (??), 00:31, 17/05/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А какой в этом смысл? Статья ради статьи?
    Можно еще command.com и bash сравнить :)
     
  • 1.6, gogo (?), 04:28, 17/05/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Какой-то маразм. Сравниваются какие-то абсолютно непоказательные, невразумительные или несравнимые параметры. Зачем все это?
     
  • 1.10, vitek (??), 09:03, 17/05/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    для курсовой сойдет :-)

    смысл имеет только первый показатель и то с натяжкой - говорит о функциональности.

     
     
  • 2.11, Lindemidux (??), 09:37, 17/05/2008 [^] [^^] [^^^] [ответить]  
  • +/
    Linux - монолитно-модульное ядро, Вендофс - гибридное с GUI, и как это сравнивать?
     
     
  • 3.13, vitek (??), 10:42, 17/05/2008 [^] [^^] [^^^] [ответить]  
  • +/
    а зачем это сравнивать?
    только для курсовой по статистике.
    к тому же виндовый код не весь.
    з.ы.:
    ну и понятия у мс о микроядерности!
     

  • 1.12, leon55 (ok), 09:43, 17/05/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Нечем человеку было заняться.
     
  • 1.14, Светочка (?), 11:04, 17/05/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Почему нет minix3?
     
     
  • 2.15, vitek (??), 11:07, 17/05/2008 [^] [^^] [^^^] [ответить]  
  • +/
    а у неё колонке WRK всё совпадает
     
  • 2.17, ximaera (?), 11:53, 17/05/2008 [^] [^^] [^^^] [ответить]  
  • +/
    https://www.opennet.ru/openforum/vsluhforumID3/41772.html#16
     

  • 1.18, waiby (?), 12:49, 17/05/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    а что такое aggregate? с typedef ясно.
     
  • 1.19, MarCo (?), 18:51, 17/05/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Напоминает определение качества стихотворений в постреволюционное время в России по количеству буквы "Р". Вот у Маяковского революционные стихи, много слов с буквой "Р", а Блок не революционный поэт, у него меньше всех!
     
  • 1.20, Аноним (20), 02:24, 18/05/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    мда... все смазало разрешение монитора и квартирный вопрос ))
    З.Ы. В слове винда маловато буковок "Х"
     
  • 1.21, анализатар (?), 09:00, 19/05/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Понятно ... "толпа студентов" организовалась лучше, чем работники Конторы, но до сих пор не может собраться и писать в общем стиле.
     
  • 1.22, spamtrap (ok), 10:31, 19/05/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    так а у кого всё-таки длиннее?
     
  • 1.23, Аноним (23), 10:54, 19/05/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Чего раскричались? Вполне нормальное исследование _качества_ кода :)
    А если не понятно, зачем всё это, сходите к своему QA менеджеру на консультацию.

    Кстати, сравнивать качество кода можно для _абсолютно любых_ программ, поскольку сравнивается не их функционал, а (опосредованно) квалификация, аккуратность, дисциплина и проч. подобные качества программистов.

     
     
  • 2.24, fresco (??), 13:50, 19/05/2008 [^] [^^] [^^^] [ответить]  
  • +/
    Верно сказано. WRK не видел (не было времени разобраться в дебрях msdn, если кто сладеет прямой ссылкой -- поделитесь плиз). Остальных расставил бы так: 1. OpenSolaris 2. FreeBSD 3. Linux.
     

  • 1.25, nuclight (ok), 16:50, 25/05/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Странные стрелочки в части по препроцессору - везде "чем меньше, тем лучше". Тогда как и само по себе использование макросов, и упоминание в тексте статьи говорят об обратном - лучше больше.


     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру