Количество строк кода

Поделись знанием:
Перейти к: навигация, поиск

Количество строк кода (англ. Source Lines of Code — SLOC) — это метрика программного обеспечения, используемая для измерения его объёма с помощью подсчёта количества строк в тексте исходного кода. Как правило[1][2], этот показатель используется для прогноза трудозатрат на разработку конкретной программы на конкретном языке программирования, либо для оценки производительности труда уже после того, как программа написана.





Подсчёт количества строк кода

Традиционно считается, что имеет смысл сравнивать размеры проектов лишь с точностью до порядка. Среди всего разнообразия методик вычисления данной метрики большинство источников выделяют два основных: подсчёт физических и логических строк[3].

Физическими строками считаются все непустые строки текстового файла. Пустые строки учитываются в том случае, если в некоторой секции их количество не превышает 25 %. В противном случае, пустые строки, превышающие количеством порог в 25 %, игнорируются.

Измеряя логические строки кода, предпринимается попытка посчитать количество собственно операторов в программе, но, разумеется, их определение зависит от конкретного языка программирования. Например, простейший способ посчитать количество логических строк кода в Си- и Паскаль-подобных языках состоит в подсчёте числа точек с запятой, заканчивающих операторы.

Физические строки кода интуитивно понятнее и их проще считать. Однако, результаты подсчета существенным образом зависят от правил оформления и форматирования исходного кода, чему логические строки кода подвержены в гораздо меньшей степени.

Рассмотрим следующий пример на Си:

for (i=0; i<100; ++i) printf("привет"); // Сколько здесь строк кода?

В данном случае у нас:

  • 1 физическая строка кода
  • 2 логические строки кода (Оператор цикла for и оператор вызова функции printf)
  • 1 строка комментария

У другого программиста этот же участок кода, скорее всего, будет оформлен в несколько строк:

for (i=0; i<100; ++i)
{
    printf("привет");
}
// Сколько здесь строк кода?

В данном примере у нас будет:

  • 5 физических строк кода
  • 2 логических строки кода
  • 1 строка комментария

История

Считается, что идея использовать строки кода в качестве метрики объёма компьютерных программ восходит к 50-м годам XX века, когда наиболее часто используемыми языками были Фортран, Ассемблер и Кобол. Основным механизмом ввода программ в компьютер были перфокарты и перфолента, причем на одной карте (одном кадре перфоленты) кодировалась одна строка кода. Будучи объектом физического мира, они (перфокарты/кадры перфоленты, а, следовательно, и строки кода) легко поддавались пересчёту. Кроме того, пачка перфокарт, составляющая программу, обладала вполне видимым объёмом, по которому менеджеры могли судить о производительности труда программистов.

Использование метрики

Результаты, получаемые на основе количества строк кода, бывают зачастую противоречивыми, особенно когда их применяют некорректно. Поэтому, применение этой метрики в процессе оценки трудозатрат представляется оправданным. Однако, корреляция с функциональностью уже не столь явная. Опытные программисты, как правило, предпочитают писать меньше кода, достигая того же самого результата. И если при оценке производительности достаточно большой команды разница в классе разработчиков может нивелироваться, то применение этой метрики для оценки производительности индивидуума представляется неадекватным.

Размер одной и той же программы, написанной на разных языках программирования, может существенно варьироваться (см. KAELOC — методика пересчёта в строки ассемблерного эквивалента). В приведённом ниже примере сравнивается программа «Hello world» на языках Си и Кобол (известный своей «многословностью»)

C COBOL
#include <stdio.h>

int main(void) {
   printf("Hello World");
   return 0;
}
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. HELLOWORLD.
000300
000400*
000500 ENVIRONMENT DIVISION.
000600 CONFIGURATION SECTION.
000700 SOURCE-COMPUTER. RM-COBOL.
000800 OBJECT-COMPUTER. RM-COBOL.
000900
001000 DATA DIVISION.
001100 FILE SECTION.
001200
100000 PROCEDURE DIVISION.
100100
100200 MAIN-LOGIC SECTION.
100300 BEGIN.
100400     DISPLAY " " LINE 1 POSITION 1 ERASE EOS.
100500     DISPLAY "Hello world!" LINE 15 POSITION 10.
100600     STOP RUN.
100700 MAIN-LOGIC-EXIT.
100800     EXIT.
Строк кода: 5
(исключая пустые)
Строк кода: 17
(исключая пустые)

Сравнительно недавно появился ещё один аспект данной проблемы — разница между программным кодом, написанным вручную, и сгенерированным автоматически. Современные средства разработки достаточно часто предоставляют возможность автоматически создавать большие объёмы кода всего лишь несколькими кликами мыши. Наиболее ярким представителем данных систем являются средства визуальной разработки графического пользовательского интерфейса. Объём работы, затраченный при создании такого кода, никак не может сравниваться с объёмом работы, например, по написанию драйвера устройства. С другой стороны, может оказаться, что на написание вручную специализированного компонента пользовательского интерфейса со сложным поведением времени может быть потрачено гораздо больше, чем на простой драйвер.

Примеры

Размеры исходных кодов операционных систем семейства Microsoft Windows NT точно не известны, но, согласно источнику[4], они составляют:

Год Версия Строк кода, млн.
1993 Windows NT 3.1 4-5
1994 Windows NT 3.5 7-8
1996 Windows NT 4.0 11-12
2000 Windows 2000 >29
2001 Windows XP 45

Размеры исходных кодов ядра Linux вместе с включёнными туда драйверами устройств можно посчитать точно:

Год Версия Строк кода
1991 Ядро Linux 0.1 10 239
1994 Ядро Linux 1.0.0 176 250
1995 Ядро Linux 1.2.0 310 950
1996 Ядро Linux 2.0.0 777 956
1999 Ядро Linux 2.2.0 1 800 847
2001 Ядро Linux 2.4.0 3 377 902
2003 Ядро Linux 2.6.0 5 929 913
2009 Ядро Linux 2.6.32 12 606 910[5]

Размеры других систем:

Год Версия Строк кода
- PostgreSQL 775 000
- 1C 3 000 000
2008 1С-Битрикс 762 854

См. также

Напишите отзыв о статье "Количество строк кода"

Примечания

  1. [www.softstarsystems.com/overview.htm Overview of COCOMO model]
  2. [www.c2.com/cgi/wiki?LinesOfCode Lines Of Code on C2 wiki]
  3. [www.rusarticles.com/programmy-statya/metriki-koda-i-ix-prakticheskaya-realizaciya-v-subversion-i-clearcase-chast-1-metriki-603328.html Метрики Кода И Их Практическая Реализация В Subversion И Clearcase. Часть 1 — Метрики]
  4. [www.dwheeler.com/sloc/ Counting Source Lines of Code (SLOC)]
  5. [www.h-online.com/open/features/What-s-new-in-Linux-2-6-32-872271.html?view=print What’s new in Linux 2.6.32]

Отрывок, характеризующий Количество строк кода

– Тринадцать, четырнадцать, пятнадцать, шестнадцать… – сказала она, считая по тоненьким пальчикам. – Хорошо! Так кончено?
И улыбка радости и успокоения осветила ее оживленное лицо.
– Кончено! – сказал Борис.
– Навсегда? – сказала девочка. – До самой смерти?
И, взяв его под руку, она с счастливым лицом тихо пошла с ним рядом в диванную.


Графиня так устала от визитов, что не велела принимать больше никого, и швейцару приказано было только звать непременно кушать всех, кто будет еще приезжать с поздравлениями. Графине хотелось с глазу на глаз поговорить с другом своего детства, княгиней Анной Михайловной, которую она не видала хорошенько с ее приезда из Петербурга. Анна Михайловна, с своим исплаканным и приятным лицом, подвинулась ближе к креслу графини.
– С тобой я буду совершенно откровенна, – сказала Анна Михайловна. – Уж мало нас осталось, старых друзей! От этого я так и дорожу твоею дружбой.
Анна Михайловна посмотрела на Веру и остановилась. Графиня пожала руку своему другу.
– Вера, – сказала графиня, обращаясь к старшей дочери, очевидно, нелюбимой. – Как у вас ни на что понятия нет? Разве ты не чувствуешь, что ты здесь лишняя? Поди к сестрам, или…
Красивая Вера презрительно улыбнулась, видимо не чувствуя ни малейшего оскорбления.
– Ежели бы вы мне сказали давно, маменька, я бы тотчас ушла, – сказала она, и пошла в свою комнату.
Но, проходя мимо диванной, она заметила, что в ней у двух окошек симметрично сидели две пары. Она остановилась и презрительно улыбнулась. Соня сидела близко подле Николая, который переписывал ей стихи, в первый раз сочиненные им. Борис с Наташей сидели у другого окна и замолчали, когда вошла Вера. Соня и Наташа с виноватыми и счастливыми лицами взглянули на Веру.
Весело и трогательно было смотреть на этих влюбленных девочек, но вид их, очевидно, не возбуждал в Вере приятного чувства.
– Сколько раз я вас просила, – сказала она, – не брать моих вещей, у вас есть своя комната.
Она взяла от Николая чернильницу.
– Сейчас, сейчас, – сказал он, мокая перо.
– Вы всё умеете делать не во время, – сказала Вера. – То прибежали в гостиную, так что всем совестно сделалось за вас.
Несмотря на то, или именно потому, что сказанное ею было совершенно справедливо, никто ей не отвечал, и все четверо только переглядывались между собой. Она медлила в комнате с чернильницей в руке.
– И какие могут быть в ваши года секреты между Наташей и Борисом и между вами, – всё одни глупости!
– Ну, что тебе за дело, Вера? – тихеньким голоском, заступнически проговорила Наташа.
Она, видимо, была ко всем еще более, чем всегда, в этот день добра и ласкова.
– Очень глупо, – сказала Вера, – мне совестно за вас. Что за секреты?…
– У каждого свои секреты. Мы тебя с Бергом не трогаем, – сказала Наташа разгорячаясь.
– Я думаю, не трогаете, – сказала Вера, – потому что в моих поступках никогда ничего не может быть дурного. А вот я маменьке скажу, как ты с Борисом обходишься.
– Наталья Ильинишна очень хорошо со мной обходится, – сказал Борис. – Я не могу жаловаться, – сказал он.
– Оставьте, Борис, вы такой дипломат (слово дипломат было в большом ходу у детей в том особом значении, какое они придавали этому слову); даже скучно, – сказала Наташа оскорбленным, дрожащим голосом. – За что она ко мне пристает? Ты этого никогда не поймешь, – сказала она, обращаясь к Вере, – потому что ты никогда никого не любила; у тебя сердца нет, ты только madame de Genlis [мадам Жанлис] (это прозвище, считавшееся очень обидным, было дано Вере Николаем), и твое первое удовольствие – делать неприятности другим. Ты кокетничай с Бергом, сколько хочешь, – проговорила она скоро.
– Да уж я верно не стану перед гостями бегать за молодым человеком…
– Ну, добилась своего, – вмешался Николай, – наговорила всем неприятностей, расстроила всех. Пойдемте в детскую.
Все четверо, как спугнутая стая птиц, поднялись и пошли из комнаты.
– Мне наговорили неприятностей, а я никому ничего, – сказала Вера.
– Madame de Genlis! Madame de Genlis! – проговорили смеющиеся голоса из за двери.
Красивая Вера, производившая на всех такое раздражающее, неприятное действие, улыбнулась и видимо не затронутая тем, что ей было сказано, подошла к зеркалу и оправила шарф и прическу. Глядя на свое красивое лицо, она стала, повидимому, еще холоднее и спокойнее.

В гостиной продолжался разговор.
– Ah! chere, – говорила графиня, – и в моей жизни tout n'est pas rose. Разве я не вижу, что du train, que nous allons, [не всё розы. – при нашем образе жизни,] нашего состояния нам не надолго! И всё это клуб, и его доброта. В деревне мы живем, разве мы отдыхаем? Театры, охоты и Бог знает что. Да что обо мне говорить! Ну, как же ты это всё устроила? Я часто на тебя удивляюсь, Annette, как это ты, в свои годы, скачешь в повозке одна, в Москву, в Петербург, ко всем министрам, ко всей знати, со всеми умеешь обойтись, удивляюсь! Ну, как же это устроилось? Вот я ничего этого не умею.
– Ах, душа моя! – отвечала княгиня Анна Михайловна. – Не дай Бог тебе узнать, как тяжело остаться вдовой без подпоры и с сыном, которого любишь до обожания. Всему научишься, – продолжала она с некоторою гордостью. – Процесс мой меня научил. Ежели мне нужно видеть кого нибудь из этих тузов, я пишу записку: «princesse une telle [княгиня такая то] желает видеть такого то» и еду сама на извозчике хоть два, хоть три раза, хоть четыре, до тех пор, пока не добьюсь того, что мне надо. Мне всё равно, что бы обо мне ни думали.
– Ну, как же, кого ты просила о Бореньке? – спросила графиня. – Ведь вот твой уже офицер гвардии, а Николушка идет юнкером. Некому похлопотать. Ты кого просила?
– Князя Василия. Он был очень мил. Сейчас на всё согласился, доложил государю, – говорила княгиня Анна Михайловна с восторгом, совершенно забыв всё унижение, через которое она прошла для достижения своей цели.
– Что он постарел, князь Василий? – спросила графиня. – Я его не видала с наших театров у Румянцевых. И думаю, забыл про меня. Il me faisait la cour, [Он за мной волочился,] – вспомнила графиня с улыбкой.
– Всё такой же, – отвечала Анна Михайловна, – любезен, рассыпается. Les grandeurs ne lui ont pas touriene la tete du tout. [Высокое положение не вскружило ему головы нисколько.] «Я жалею, что слишком мало могу вам сделать, милая княгиня, – он мне говорит, – приказывайте». Нет, он славный человек и родной прекрасный. Но ты знаешь, Nathalieie, мою любовь к сыну. Я не знаю, чего я не сделала бы для его счастья. А обстоятельства мои до того дурны, – продолжала Анна Михайловна с грустью и понижая голос, – до того дурны, что я теперь в самом ужасном положении. Мой несчастный процесс съедает всё, что я имею, и не подвигается. У меня нет, можешь себе представить, a la lettre [буквально] нет гривенника денег, и я не знаю, на что обмундировать Бориса. – Она вынула платок и заплакала. – Мне нужно пятьсот рублей, а у меня одна двадцатипятирублевая бумажка. Я в таком положении… Одна моя надежда теперь на графа Кирилла Владимировича Безухова. Ежели он не захочет поддержать своего крестника, – ведь он крестил Борю, – и назначить ему что нибудь на содержание, то все мои хлопоты пропадут: мне не на что будет обмундировать его.