Что такое строка кода? - PullRequest
       56

Что такое строка кода?

13 голосов
/ 09 декабря 2008

Я понимаю, что нет определенно «правильного» ответа на этот вопрос, но когда люди говорят о строках кода, что они имеют в виду? Например, в C ++ вы считаете пустые строки? Комментарии? строки с открытой или закрытой скобкой?

Я знаю, что некоторые люди используют LoC в качестве меры производительности, и мне интересно, существует ли здесь стандартное соглашение. Кроме того, я думаю, что есть способ заставить различные компиляторы считать строки кода - есть ли там стандартное соглашение?

Ответы [ 20 ]

23 голосов
/ 09 декабря 2008

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

Это может заставить вас спросить: «Тогда зачем мне использовать LOC в качестве показателя производительности?» и ответ таков: потому что на самом деле не имеет значения, как вы считаете строку кода, если вы считаете их последовательно, вы можете получить представление об общем размере проекта по отношению к другим.

13 голосов
/ 09 декабря 2008

Посмотрите статью Википедии , особенно раздел " Измерение SLOC ":

Существует два основных типа SLOC меры: физический SLOC и логический SLOC. Конкретные определения этих две меры различаются, но наиболее распространены определение физического SLOC является подсчетом строк в тексте программы исходный код, включая строки комментариев. Пустые строки также включены, если строки кода в разделе состоит из более чем 25% пустых строк. В этом случае пустые строки превышают 25% не учитываются Код.

Логическая SLOC мера попытки измерить количество «выписок», но их конкретные определения привязаны к конкретным компьютерным языкам (одна простая логическая мера SLOC для C-подобные языки программирования номер завершения оператора точка с запятой). Это гораздо проще создавать инструменты, которые измеряют физическое SLOC и физические определения SLOC легче объяснить. Тем не мение, физические меры SLOC чувствительны к логически неуместному форматированию и Соглашения о стиле, в то время как логический SLOC менее чувствителен к форматированию и стилевые соглашения. К сожалению, SLOC меры часто указываются без давая свое определение и логично SLOC часто может быть значительно отличается от физического SLOC.

Рассмотрим этот фрагмент кода C как пример неоднозначности при определении SLOC:

for (i=0; i<100; ++i) printf("hello");   /* How many lines of code is this? */

В этом примере мы имеем:

  • 1 Физические строки кода LOC
  • 2 Логические строки кода lLOC (для выписки и выписки printf)
  • 1 строка комментария

[...]

8 голосов
/ 09 декабря 2008

Я бы сказал

  • количество комментариев
  • пустых строк, потому что они важны для читабельности, но не более одной непрерывной
  • строки с фигурными скобками тоже учитываются, но применяются те же правила, что и для пустых строк - то есть 5 вложенных фигурных скобок без кода между ними считается одной строкой.

Я бы также смиренно предположил, что любой показатель производительности, который фактически основан на значении LoC, является двухъярусным:)

4 голосов
/ 09 декабря 2008

Любой день, когда я могу закончить меньшим количеством строк кода, но с большим или большим количеством рабочих функций ... это хороший день. Возможность удалить сотни строк кода и получить что-то такое же функциональное и более удобное для обслуживания - это замечательная вещь.

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

3 голосов
/ 09 декабря 2008

Если вы используете LOC в качестве показателя производительности, вы внезапно обнаружите, что ваши программисты гораздо более многословно пишут «игра в систему». Это глупая мера, и только глупые люди используют ее для чего-то большего, чем хвастовство.

3 голосов
/ 09 декабря 2008

Все, что возвращает "wc -l", является моим номером.

2 голосов
/ 09 декабря 2008

«Строки кода» должны включать все, что вы должны поддерживать. Это включает в себя комментарии, но исключает пробелы.

Если вы используете это в качестве показателя производительности, убедитесь, что вы делаете разумные сравнения. Строка C ++ отличается от строки Ruby.

2 голосов
/ 09 декабря 2008

1 строка = 4 секунды чтения. Если для того, чтобы понять, что я говорю по этой строке, потребуется больше, значит, строка слишком длинная.

1 голос
/ 09 декабря 2008

Нет правильного ответа.

Для неофициальных оценок я использую wc -l.

Если бы мне нужно было что-то строго измерить, я бы измерил исполняемые операторы. Практически все, что с оператором-терминатором (обычно точкой с запятой) или оканчивается блоком. Для составных операторов я бы подсчитывал каждое подзаголовок.

Итак:

int i = 7;                  # one statement terminator; one (1) statement
if (r == 9)                # count the if as one (1) statement
  output("Yes");      # one statement terminator; one (1) statement; total (2) for the if
while (n <= 14) {    # count the while as one (1) statement
  output("n = ", n);  # one statement terminator; one (1) statement
  do_something();   # one statement terminator; one (1) statement
  n++                       # count this one, one statement (1), even though it doesn't need a statement terminator in some languages
}                              # brace doesn't count; total (4) for the while

Если бы я делал это в Scheme или Lisp, я бы посчитал выражения.

Как уже говорили другие, самое главное, чтобы ваш счет был последовательным. Также важно, для чего вы это используете. Если вы просто хотите, чтобы потенциальный новый сотрудник знал, насколько велик ваш проект, используйте wc -l. Если вы хотите заняться планированием и оценкой, возможно, вы захотите стать более формальными. Вы не должны ни при каких обстоятельствах использовать LOC для расчета компенсации программисту.

1 голос
/ 09 декабря 2008

LOC - заведомо неоднозначная метрика. Для подробного сравнения он действителен только при сравнении кода, написанного на том же языке, с тем же стилем, той же командой.

Тем не менее, он дает определенное понятие сложности, когда рассматривается в виде порядка величины. Программа на 10000 строк намного сложнее, чем программа на 100 строк.

Преимущество LOC в том, что wc -l возвращает его, и в отличие от многих других программных метрик, в его понимании или расчете нет никакой излишней затеи

...