Devo me incomodar se a minha relação LOC / dia for muito alta? [fechadas]

9

Atualmente, estou trabalhando em um projeto independente, portanto não tenho o luxo de passar por testes em humanos ou pela revisão externa de código - no entanto, não vejo bugs difíceis no meu código atual (eu os corrigo como os vejo , e na maioria das vezes são apenas nomes de campos errados e coisas assim que você corrige em um ou dois minutos), e eu o testo depois de implementar qualquer recurso antes de enviá-lo. Ultimamente, meu número LOC era cerca de 400 por dia (para registro, é C #), e não estou apenas implementando novos sistemas, mas também reescrevendo coisas que já escrevi e corrigindo alguns bugs.

Devo ser incomodado? É o sinal de que preciso parar e revisar todo o código que escrevi até essa data e refatorá-lo?

Max Yankov
fonte
como você está medindo o LOC? ele exclui o código gerado pelo visual studio ou não?
jk.
Com este comando bash na minha pasta de código: (localize ./ -name '* .cs' -print0 | xargs -0 cat) | wc -l
Max Yankov
certo, de modo que é provável que inclua qualquer código gerado, por exemplo, designer.cs - eu não me preocuparia com o número de linhas que você está escrevendo
jk.
Geralmente sim, mas com esse ambiente em particular (mecanismo de jogo Unity) não é o caso.
precisa
11
Tento remover o maior número possível de linhas de código antes de adicionar mais. Trabalhar em um sistema mínimo é muito mais agradável do que a alternativa.
precisa

Respostas:

18

O LOC é provavelmente uma das métricas mais abusadas e, como resultado, é provavelmente uma das medidas mais inúteis da qualidade do código e uma medida ainda mais inútil do esforço de programação.

Sim, é uma afirmação ousada para eu fazer, e não, não posso apontar para estudos que comprovem meu argumento. No entanto, posso afirmar com experiência adquirida que, quando você começa a se preocupar com a quantidade de código que escreveu, provavelmente está se preocupando com os problemas errados.

Primeiro, você deve se perguntar o que está tentando medir ou provar, e se essa prova é meramente desinteressante ou para apoiar uma melhoria mais ampla da qualidade e onde você precisa usar essas informações para obter o apoio de sua equipe. / management para fazer algo sobre isso.

Uma das coisas pelas quais costumo usar o LOC é um pouco de verificação de sanidade. Se eu me pego escrevendo muito código, fico mais interessado em LOC por método, ou LOC por classe, em vez de LOC em geral. Essas medidas podem ser indicadores que você precisará refatorar ainda mais se sentir um pouco de TOC sobre o quão bem fatorado seu código deve ser. Classes muito grandes podem precisar ser refatoradas em algumas classes menores, e métodos longos de várias linhas podem precisar ser divididos em vários métodos, outras classes, ou podem até indicar alguma repetição que pode ser removida. Observe que eu usei a palavra "pode" várias vezes lá.

A realidade é que o LOC fornece apenas um indicador possível e nenhuma garantia real de que seu código precise ser alterado. A verdadeira pergunta a fazer é se o código se comporta conforme necessário e conforme o esperado. Nesse caso, sua próxima pergunta é se você conseguirá manter o código com facilidade ou não e se terá tempo agora ou no futuro para fazer alterações no código de trabalho para reduzir as despesas gerais de manutenção no futuro.

Muitas vezes, muito código significa que você terá mais para manter mais tarde, mas às vezes até mesmo um código bem fatorado pode se estender a centenas de linhas de código e, sim, às vezes você pode escrever centenas de linhas de código em um dia. Entretanto, a experiência me diz que, se estou sustentando uma saída de centenas de linhas de novo código por dia, geralmente existe o risco de que grande parte do código tenha sido copiada e colada inadequadamente de outro lugar, e isso por si só possa indicar problemas com duplicação e manutenção, mas, novamente, isso não é garantia; portanto, tenho a tendência de confiar no que minha experiência e instintos me dizem com base em como as tarefas em mãos foram concluídas.

A melhor maneira de evitar o dilema colocado na sua pergunta IMHO é esquecer o LOC e refatorar o tempo todo. Escreva seu teste de código primeiro, implemente para falhar, refatorar para passar, depois veja o que pode ser refatorado lá e, em seguida, para melhorar o código. Você deixará a tarefa sabendo que já conferiu seu trabalho duas vezes e não ficará tão preocupado em adivinhar a si mesmo no futuro. Realisticamente falando, se você usar uma abordagem de teste como eu descrevi, qualquer medição LOC / dia em seu código completo realmente significa que você escreveu 3-5 vezes a quantidade medida, com esse esforço oculto com sucesso pela refatoração em andamento esforços.

S.Robins
fonte
11
+1 400 linhas por dia pode ser uma indicação de um problema, infelizmente acho que a única maneira de descobrir é a revisão de código, o que é difícil em uma equipe de um homem
jk.
Obrigado por uma resposta tão detalhada :) Eu acho que cobre completamente o assunto.
precisa
@jk. Acredito que abordar seu comentário dentro do contexto da minha resposta. Em solo, a melhor maneira de proteger a qualidade do código é se concentrar em como você escreve e testa o código. Um bom conjunto de testes, associado a uma mentalidade de refatoração contínua, pode ser tão bom quanto uma revisão de código de várias maneiras. Observe que não pretendo fazer nada sem revisões, mas que elas devem ser secundárias para garantir que seu produto atenda aos requisitos e tenha uma boa cobertura de teste, o que permite que alterações futuras sejam feitas com confiança. Minha primeira pergunta durante a revisão de código é sempre "Onde está o teste para isso?" :-)
S.Robins 12/03
+1 Embora você não possa apontar para estudos que mostram que o LOC é uma métrica ruim, é fácil encontrar estudos que tiveram problemas porque eles usaram o LOC como uma métrica.
daramarak
Concordo plenamente que o LOC é uma métrica inútil. Alguns dias eu escrevo centenas de linhas de código e tudo bem. Alguns dias eu ganho zero. Alguns dias, tudo o que faço é remover o código. :-)
Brian Knoblauch 13/03
5

Nem um pouco - alguns dias você está corrigindo um erro difícil de encontrar e muda apenas uma linha. Outros dias, você adiciona um novo código e escreve vários milhares de linhas.

O LOC diário não informa nada, exceto que as tarefas daquele dia podem ser realizadas com 400 linhas de código.

Tom Clarkson
fonte
2

Algumas dessas respostas estão erradas, você não está usando o LOC como uma medida de produtividade (se estivesse, não se preocuparia em ser muito 'produtivo'), o que realmente está fazendo é se preocupar com a qualidade do código, porque código é o inimigo, isso é uma boa coisa para se preocupar.

Infelizmente, a única maneira de saber sobre a qualidade do código é a revisão do código, já que você é uma equipe individual, isso será complicado, mesmo que você tenha parado para revisar seu código (e você realmente não quer parar, certo?) próprio código não revelará tanto quanto um colega revendo seu código. Sugiro tentar alguém para revisar pelo menos parte do seu código, para que você possa saber se o seu 400 LOC / dia está produzindo bobagens ou não. Mesmo uma revisão independente do código de um dia ajudará aqui

jk.
fonte
1

Você não deve se preocupar com o número de LOC que produz por dia.

Mas você deve se incomodar:

  • se o seu código não for testado (se, por exemplo, você não tiver testes de unidade)
  • se você começar a ter problemas para adicionar novos recursos ou alterar os recursos implementados (isso significa que sua refatoração não era adequada)
  • se sua experiência não for grande e seu código não for revisado (é provável que um par de olhos extra encontre problemas)
BЈовић
fonte
0

LOC é uma medida 'oficial' de produtividade, mas os argumentos em relação ao seu valor podem ser longos (um ORM pode gerar 50.000 linhas de código em 3 minutos; no entanto, se o design do banco de dados estiver errado, todo esse código poderá ir para a lixeira).

Sugiro que você avalie seu progresso rastreando% de tarefas concluídas versus tempo versus% de tarefas planejadas para serem concluídas. Isso é o que conta. Os clientes pagam pelo código de trabalho que fornece valor comercial, não para os LOCs.

Algumas referências sobre LOC

NoChance
fonte
mas ele não está usando o LOC como uma medida de produtividade
jk.
Sim, mas como eu disse, não é uma medida precisa. A mesma coisa quando você usa o "valor médio de 1.200.100" recebe uma média, mas é tendenciosa e não precisa. Com o LOC, as coisas pioram porque cada ambiente de desenvolvimento e conjunto de ferramentas podem refletir diferentes valores de produtividade. Por exemplo, os LOCs não podem comparar a complexidade do código, apenas seu comprimento. Alterei o post original com 2 referências que você pode querer ver.
NoChance
0

Você também está medindo o número de duplicatas de código ?

Se o resultado é alto, porque você tem muitas cópias e colas no código, deve se preocupar.

Motivo: no caso de ocorrer um erro na fonte de copiar e colar, é difícil e propenso a erros corrigir todos os usos da cópia e colar

k3b
fonte
-1

Se você acredita em um código funcional bonito, essa deve ser sua única medida

"Flui? Parece bonito?"

Noite escura
fonte
3
a única medida? como funciona? é rápido o suficiente?
jk.
É por isso que eu disse funcional :)
Darknight