Количество строк кода: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
м откат правок 46.71.211.225 (обс) к версии RainBot
Строка 87: Строка 87:
Сравнительно недавно появился ещё один аспект данной проблемы — разница между программным кодом, написанным вручную, и сгенерированным автоматически. Современные [[среда разработки программного обеспечения|средства разработки]] достаточно часто предоставляют возможность автоматически создавать большие объёмы кода всего лишь несколькими [[клик (нажатие клавиши)|кликами]] [[компьютерная мышь|мыши]]. Наиболее ярким представителем данных систем являются [[среда визуальной разработки|средства визуальной разработки]] [[графический интерфейс пользователя|графического пользовательского интерфейса]]. Объём работы, затраченный при создании такого кода, никак не может сравниваться с объёмом работы, например, по написанию [[драйвер|драйвера устройства]]. С другой стороны, может оказаться, что на написание вручную специализированного [[Компонент (программирование)|компонента]] пользовательского интерфейса со сложным поведением времени может быть потрачено гораздо больше, чем на простой драйвер.
Сравнительно недавно появился ещё один аспект данной проблемы — разница между программным кодом, написанным вручную, и сгенерированным автоматически. Современные [[среда разработки программного обеспечения|средства разработки]] достаточно часто предоставляют возможность автоматически создавать большие объёмы кода всего лишь несколькими [[клик (нажатие клавиши)|кликами]] [[компьютерная мышь|мыши]]. Наиболее ярким представителем данных систем являются [[среда визуальной разработки|средства визуальной разработки]] [[графический интерфейс пользователя|графического пользовательского интерфейса]]. Объём работы, затраченный при создании такого кода, никак не может сравниваться с объёмом работы, например, по написанию [[драйвер|драйвера устройства]]. С другой стороны, может оказаться, что на написание вручную специализированного [[Компонент (программирование)|компонента]] пользовательского интерфейса со сложным поведением времени может быть потрачено гораздо больше, чем на простой драйвер.


=== Примеры. ===
=== Примеры ===
Размеры исходных кодов операционных систем семейства [[Microsoft]] [[Windows NT]] точно не известны, но, согласно источнику<ref>[http://www.dwheeler.com/sloc/ Counting Source Lines of Code (SLOC)]</ref>, они составляют:
Размеры исходных кодов операционных систем семейства [[Microsoft]] [[Windows NT]] точно не известны, но, согласно источнику<ref>[http://www.dwheeler.com/sloc/ Counting Source Lines of Code (SLOC)]</ref>, они составляют:



Версия от 17:34, 20 октября 2016

Количество строк кода (англ. 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

См. также

Примечания