Должен ли я быть обеспокоен, если соотношение LOC / day слишком велико? [закрыто]

9

В настоящее время я работаю над независимым проектом, так что я не могу позволить себе такую ​​роскошь, как человеческое тестирование или проверка внешнего кода - однако я не вижу трудных ошибок в моем текущем коде (я их исправляю так, как вижу их) и в большинстве случаев это просто неправильные имена полей и тому подобное, вещи, которые вы исправляете через минуту или две), и я проверяю это после реализации любой функции, прежде чем нажать ее. В последнее время мой номер LOC составлял около 400 в день (для записи, это C #), и я не только внедряю новые системы, но и переписываю то, что уже написал, и исправляю некоторые ошибки.

Должен ли я быть обеспокоен? Является ли это признаком того, что мне нужно остановить и просмотреть весь код, который я писал до этой даты, и провести его рефакторинг?

Макс Янков
источник
как вы измеряете LOC? это исключает визуальный студийный код или нет?
JK.
С помощью этой команды bash в моей папке с кодом: (найти ./ -name '* .cs' -print0 | xargs -0 cat) | wc -l
Макс Янков
верно, это может включать любой сгенерированный код, например, designer.cs - я бы не беспокоился о количестве строк, которые вы пишете
jk.
В общем, да, но с этой конкретной средой (игровой движок Unity) это не так.
Макс Янков
1
Я пытаюсь удалить столько строк кода, сколько смогу, прежде чем добавить еще. Работать на минимальной системе намного приятнее, чем на альтернативной.
Джон Перди

Ответы:

18

LOC, вероятно, является одной из наиболее злоупотребляемых метрик, и, как следствие, это, вероятно, одна из более бесполезных мер качества кода и еще более бесполезная оценка усилий по программированию.

Да, это смелое заявление для меня, и нет, я не могу указать вам на исследования, подтверждающие мою точку зрения. Тем не менее, с трудом заработав, я могу заявить, что когда вы начинаете беспокоиться о том, сколько кода вы написали, вы, вероятно, беспокоитесь о неправильных проблемах.

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

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

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

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

Лучший способ избежать дилеммы, поставленной в вашем вопросе ИМХО, - это забыть о LOC и проводить рефакторинг ВСЕГДА. Сначала напишите свой тест кода, внедрите, чтобы потерпеть неудачу, выполните рефакторинг, а затем посмотрите, что может быть подвергнуто рефакторингу, а затем улучшите код. Вы покинете задание, зная, что уже дважды проверили свою работу, и вам не придется беспокоиться о том, чтобы угадать себя в будущем. На самом деле, если вы используете тестовый подход, как я уже описывал, любое измерение LOC / день в вашем законченном коде действительно будет означать, что вы написали в 3-5 раз больше измеренной суммы, и эти усилия будут успешно скрыты вашим текущим рефакторингом. усилия.

S.Robins
источник
1
+1 400 строк в день могут указывать на проблему, к сожалению, я думаю, что единственный способ выяснить это - проверка кода, что сложно для команды из 1 человека
jk.
Спасибо за подробный ответ :) Я думаю, что он полностью охватывает тему.
Макс Янков
@jk. Я считаю, что я адресую ваш комментарий в контексте моего ответа. В одиночку лучший способ защитить качество кода - сосредоточиться на том, как вы пишете и тестируете свой код. Хороший набор тестов в сочетании с менталитетом непрерывного рефакторинга во многих отношениях может быть так же хорош, как и анализ кода. Обратите внимание, что я вовсе не говорю о том, чтобы обойтись без обзоров, а скорее о том, что они должны быть вторичными по отношению к тому, чтобы ваш продукт соответствовал требованиям и имел хорошее тестовое покрытие, что позволяет с уверенностью делать будущие изменения. Мой первый вопрос во время проверки кода: «Где тест для этого?» :-)
S.Robins
+1 Хотя вы не можете указать на исследования, которые показывают, что LOC является плохой метрикой, легко найти исследования, которые столкнулись с проблемами, потому что они использовали LOC в качестве метрики.
Дарамарак
Полностью согласен, что LOC - бесполезная метрика. Иногда я пишу сотни строк кода, и это нормально. Несколько дней у меня нет нуля. Иногда я делаю только удаление кода. :-)
Брайан Ноблаух
5

Вовсе нет - иногда вы исправляете трудную для поиска ошибку и меняете только одну строку. В другие дни вы добавляете новый код и пишете несколько тысяч строк.

Daily LOC ничего вам не говорит, кроме того, что задачи на этот день можно выполнить с помощью 400 строк кода.

Том Кларксон
источник
2

В некоторых из этих ответов не хватает смысла, вы не используете LOC в качестве меры производительности (если бы вы были так, вы бы не беспокоились о том, чтобы быть слишком «продуктивным»), то, что вы на самом деле делаете, беспокоится о качестве вашего кода, потому что Враг - это код , о котором стоит беспокоиться.

К сожалению, единственный способ узнать о качестве кода - это проверка кода, так как вы - команда из одного человека, это будет непросто, даже если вы прекратили проверять свой код (и вы действительно не хотите останавливаться, верно?) Просматриваете свою собственный код не покажет столько, сколько рецензент просматривает ваш код. Я бы посоветовал попытаться заставить кого-то еще просмотреть хотя бы часть вашего кода, чтобы вы могли определить, тратит ли ваш 400 LOC / день бред или нет. Даже независимый обзор однодневного кода поможет здесь

JK.
источник
1

Вы не должны беспокоиться о количестве LOC, которое вы производите в день.

Но вы должны быть обеспокоены

  • если ваш код не проверен (например, у вас нет юнит-тестов)
  • если у вас возникли проблемы с добавлением новых функций или изменением реализованных функций (это означает, что ваш рефакторинг был неправильным)
  • если ваш опыт невелик, а ваш код не проверен (дополнительная пара глаз, скорее всего, обнаружит проблемы)
BЈовић
источник
0

LOC является «официальным» показателем производительности, но аргументы против его значения могут быть длинными (однако ORM может сгенерировать 50000 строк кода за 3 минуты, однако, если структура базы данных неверна, весь этот код может попасть в корзину).

Я предлагаю вам измерить свой прогресс, отслеживая% выполненных задач по сравнению со временем и% задач, запланированных к выполнению. Это то, что имеет значение. Клиенты платят за рабочий код, который обеспечивает ценность для бизнеса, а не за LOC.

Некоторые ссылки о LOC

Без шансов
источник
но он не использует LOC в качестве меры производительности
JK.
Да, но, как я уже сказал, это не точная мера. То же самое, когда вы используете «среднее значение 1,2100», вы получаете среднее значение, но оно является предвзятым и не точным. С LOC дела обстоят хуже, потому что каждая среда разработки и набор инструментов могут отражать разные показатели производительности. Например, LOC не могут сравнивать сложность кода, только его длину. Я исправил исходное сообщение с двумя ссылками, которые вы можете увидеть.
NoChance
0

Вы также измеряете количество дубликатов кода ?

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

Причина: в случае ошибки в вашем источнике копирования и вставки трудно и подвержено ошибкам исправить все случаи использования копирования и вставки.

k3b
источник
-1

Если вы верите в красивый функциональный код, то это должно быть вашей единственной мерой

"Это течет? Это выглядит красиво?"

Темная ночь
источник
3
единственная мера? как это работает? это достаточно быстро?
JK.
вот почему я сказал функционально :)
Darknight