É uma boa idéia agendar um horário regular para limpar o código? [fechadas]


42

Estou gerenciando uma pequena equipe de desenvolvedores. De vez em quando, decidimos que vamos passar um dia ou dois para limpar nosso código.

Seria uma boa idéia agendar um horário regular, digamos 1 semana a cada 2 meses, para limpar nossa base de código?


9
Prefiro começar a registrar todas as coisas que exigem limpeza em uma ferramenta de rastreamento de problemas . Analisando os problemas registados no rastreador pode dar uma idéia melhor (muito melhor) sobre o que seria a abordagem mais adequada para um determinado projeto
mosquito

4
Seria uma idéia melhor para agendar um horário regular para a revisão do código
l46kok

1
O que você quer dizer quando diz 'limpar'? Ele está prettificando o código ou manipulando todas as tags FIXME e TODO ou obtendo mais desempenho do código escrito rapidamente? Ou alguma outra coisa? Qualquer uma delas pode ser classificada como limpeza, mas eu atribuiria prioridades diferentes a cada uma delas.
paul

Outro "fechado como popular demais", hein, pessoal?
MGOwen

Respostas:


100

Não.

Corrija-o enquanto estiver trabalhando:

  • Se você esperar para refatorar a parte em que está trabalhando, esquecerá muito e precisará gastar tempo para se familiarizar novamente.
  • Você não vai acabar com o código "gold-plating" que acaba nunca sendo usado porque os requisitos foram alterados

2
Meu dinheiro com esta resposta ..
Soner Gönül 18/03/2013

2
+1 para uma excelente resposta. Você não vai acabar código "sobre-regulamentação", que acaba não sendo usado porque os requisitos mudou
Md Mahbubur Rahman

8
Em um projeto perfeito, com gerenciamento perfeito e uma equipe de desenvolvedores uniformemente excelentes, essa resposta seria válida. Infelizmente, nunca vi ou ouvi falar de um projeto desses em meus dez anos na indústria.
18713 Ben

3
Tente fazer isso, mas quando você não puder (e isso acontecerá devido à pressão do tempo ou porque você simplesmente ainda não sabe como fazê-lo corretamente), crie um ticket no seu sistema de tickets. Dessa forma, esperamos poder voltar a ele enquanto o problema ainda estiver fresco em sua mente e não apenas quando ele eventualmente começar a causar problemas.
Sarien

1
Eu acho que isso é um bom conselho, mas não aborda a pergunta. Haivng gerenciava uma equipe com uma base de código horrenda (era horrível antes de eu chegar lá). Era tempo muito bem gasto para combater a refatoração e a limpeza de funções específicas. Nós os chamamos de projetos de infraestrutura e os trabalhamos em todos os sprint que pudemos. Muitas vezes, essas coisas eram itens que não faziam parte de outra mudança, mas eram coisas que a equipe identificou como áreas problemáticas. Fizemos retrospectivas trimestrais e atualizamos essa lista regularmente.
Bill Leeper

21

Minha opinião pessoal: é absolutamente necessária para 90% dos projetos.

Especialmente para projetos que são fortemente direcionados pelas vendas, geralmente há um grande impulso para incluir novos recursos em cada versão, e você inevitavelmente acaba comprometendo seus melhores instintos e introduzindo alguns kludges / hacks aqui e ali.

Eventualmente, você acumulou 'dívida técnica' suficiente por meio desses pequenos compromissos e acaba gastando bastante tempo trabalhando em torno das falhas na base de código e não consegue usar todo o seu potencial.

Geralmente, existem dois tipos de problemas gerados desta maneira:

  • Pequenos que podem ser facilmente corrigidos, mas podem ser sistêmicos, por exemplo, parâmetros nomeados incorretamente, tratamento incompleto de erros, etc. Eles normalmente terão pouco impacto fora do bloco de código em que aparecem. A melhor maneira de lidar com isso é revisar o código e verificar o código enquanto ele está sendo gravado / modificado. Como outros já declararam, não é necessário reservar um ciclo especial de refatoração para corrigir esses erros.
  • Grandes, que podem ter surgido a partir de especificações incompletas ou decisões ruins de design desde o início, ou dois desenvolvedores / equipes criando duas soluções diferentes para o mesmo problema. Geralmente, são muito mais difíceis de corrigir e exigem um esforço conjunto para consertar. Como resultado, eles geralmente são adiados, até que se tornem um incômodo perpétuo. Esses tipos de problemas exigem um período de tempo dedicado para correção.

Geralmente, tento reservar tempo para um ciclo puro de refatoração / correção de bugs a cada 3 a 4 ciclos. Eu sempre peço aos meus desenvolvedores que me digam quando também se sentem frustrados com a base de código. Nem todo desenvolvedor precisa trabalhar no esforço de limpeza - você geralmente (mas nem sempre) pode escalonar um pouco as equipes, portanto, apenas uma equipe está trabalhando na limpeza a qualquer momento.


1
Não entendo o aumento do número de grandes empurrões como um problema ágil.
Jeffo

2
@ Jeffff Não, não é um problema ágil. É um problema de gerenciamento. Pelo que vi, as empresas que são fortemente influenciadas pelas vendas tendem a gravitar para ciclos de lançamento agressivos e grandes conjuntos de recursos. Estratégias ágeis tendem a atrair essas empresas (se elas realmente seguem as estratégias ou não). Embora eu goste de desenvolvimento ágil, minha experiência mostrou que, quando uma empresa se autodenomina 'ágil', normalmente significa que posso esperar ver uma quantidade razoável de dívida técnica na base de código.
PSWG

Eu acho que se eles não têm nenhuma metodologia, podem se chamar do que quiserem. Como ágil, é a palavra da moda atual, é a mais atraente. Faz um tempo desde que eu estava em um projeto em cascata; foi um desastre de tantas outras maneiras, que nunca o uso como argumento contra a metodologia.
Jeffo

Em qualquer projeto, ágil ou não, refatorar e limpar o código é algo que você faz à medida que avança, para manter constantemente a dívida técnica no mínimo. Se você não considera isso em suas estimativas, terá que começar a fazer isso. Você não pode acumular dívidas técnicas até precisar interromper tudo para corrigi-las. Em vez disso, siga a regra dos escoteiros: "Sempre deixe o código mais limpo do que você o encontrou".
Christoffer Hammarström

Na minha experiência, equipes inexperientes que começam com scrum, sem observar bons princípios de codificação (como XP), às vezes podem se concentrar demais na funcionalidade (histórias). Em vez disso, eles devem dizer que uma história não é concluída até que o código seja "bom" o suficiente, mas nem todo mundo tem espinha dorsal suficiente para fazê-lo dentro de um prazo iminente. E com o Agile, você tende a ter mais prazos em menos tempo, então eu também o associo aos métodos Agile, embora eu esteja perfeitamente ciente de que eles não são a causa.
markijbema

11

Meus desenvolvedores ordenaram seu código antes do check-in (Subversion) ou da fusão com o principal ramo de desenvolvimento (Git).

Eu tenho que fazer o seguinte:

  • Remover comentários irrelevantes
  • Certifique-se de que seus métodos, argumentos e variáveis ​​sejam nomeados adequadamente
  • Verifique se há estrutura para suas classes e se os itens estão encapsulados, como devem ser
  • Refatorar para melhorar a legibilidade e reduzir qualquer cheiro de código

Para projetos maiores, o código é revisado formalmente antes da fusão do ramo de desenvolvimento para o ramo principal.

Penso que "dedicar tempo" significará que é algo que pode ser adiado ou adiado devido à quantidade de trabalho envolvido. Ao fazer com que os desenvolvedores façam isso por check-in (o que equivale a uma solicitação / problema de mudança no JIRA), é muito mais gerenciável.


Apenas por curiosidade: Por que você está usando dois VCS diferentes?
Eekhoorn

2
Houve / há uma fase migratória. Agora, migramos a maioria dos repositórios SVN, mencionei os dois em algum contexto.
18713 Sam

Isto é o que eu faço. Limpe o código antes de um check-in e refatore-o se eu retornar ao código para melhorar a funcionalidade.
precisa

1
Isso não resolverá os problemas persistentes que estão à espreita em áreas que podem não fazer parte da solicitação de recurso da equipe de produto.
Bill Leeper

9

Não na minha opinião. Se você deixar muito tempo entre a dívida com a tecnologia e a corrigi-la, perderá o contexto do problema. Leva mais tempo para consertar e tende a ficar pior. Mais importante, as pessoas deixam as janelas quebradas porque não é "semana da limpeza".

Pessoalmente, negocio a limpeza técnica da dívida em cada sprint, se souber que criamos alguns no sprint antes. Mantém a dívida fresca na mente das pessoas. Limita a quantidade de código usando o código do problema para facilitar a refatoração. Impede que a dívida técnica se acumule. E isso ajuda a empurrar os desenvolvedores a darem um tapa em algo juntos, porque eu vou fazê-los fazer isso no próximo sprint (então é melhor fazê-lo bem em primeiro lugar).


Sua segunda frase contradiz a primeira. Você disse que não, mas disse que trabalha esse tipo de coisa em cada corrida. De uma maneira que está agendando tempo para fazê-lo.
Bill Leeper

2
@BillLeeper - enh. Quando ouço "horário regular", isso significa que há algum intervalo regular para fazer o trabalho de limpeza. IMO, isso está incorreto - o tempo todo é o momento certo para fazer o trabalho de limpeza.
Telastyn

1
Bom ponto, concordo que o horário regular não funciona bem. Demasiadas vezes as prioridades fazer com que seja cancelada etc.
Bill Leeper

4

Eu diria que sim definitivamente, com uma ressalva: isso deve ser feito com frequência, preferencialmente semanalmente. Acredito que uma revisão de código regular agendada, além de atuar sobre os itens que saem da revisão de código, compensa muito rapidamente. Veja a resposta de pswg

1 semana a cada 2 meses definitivamente não é o suficiente. Isso fala com a maioria das outras respostas que responderam com 'Não' à sua pergunta. A essência da maioria dessas respostas é que, se você esperar demais, não estará mais em contato com o código e, em geral, leva muito mais tempo para corrigir / limpar / refatorar.


Fazemos uma "Terça-feira da Dívida Técnica" para isso. Sua meia maneira jogou uma semana de trabalho israelense e nos permite dar um passo para trás para lidar com questões
Zachary K

1

Não é tão claro se você quis dizer um exercício adicional de limpeza de código de vez em quando. Nesse sentido, sim. Quaisquer que sejam as práticas que seguimos, sempre ocorre alguma degradação.

Você não deve usar isso como desculpa para não fazer a coisa certa [Aplicando princípios do SOLID, testes de unidade relevantes, inspeções etc.] em primeiro lugar.


1

Penso que atualmente as duas respostas populares "Não" "Sim" são dois aspectos da mesma verdade. Lembre-se de que o OP está falando de um grupo que ele está gerenciando, não apenas de si mesmo como indivíduo. Não podemos supor que todos os desenvolvedores do grupo sejam disciplinados o suficiente para escrever um código limpo e de fácil leitura; e há a questão de pressão externa e metodologias de estilo ágil. Além disso, mesmo com os melhores esforços das pessoas, suas diferenças de estilo significam que elas podem escrever código que seria considerado limpo quando separado, mas impuro quando considerado junto com outras pessoas (para não mencionar as interfaces barulhentas).

Por outro lado, o "conserte enquanto trabalha nele" é, na minha opinião, um ideal a se aspirar. Você pode tornar seu código ainda mais "corrigido"

  • cuidadoso CRing de pares
  • escrever testes de unidade junto com o próprio código
  • adoção de diretrizes de codificação
  • usando formatadores e linters automáticos (mas YMMV)
  • etc.

Agora, se a equipe do OP adotar o exposto acima, e se ele encorajar seus subordinados - por exemplo, durante revisões de código e durante sessões periódicas de limpeza de código - para tentar antecipar armadilhas e evitar a feiúra com antecedência, com o tempo, esperamos que precisará de menos tempo de limpeza. (E eles poderiam dedicar esse tempo à documentação, refatoração mais profunda e compartilhamento de conhecimento do que escreveram e consolidaram.)


1

Acho que agendar um horário regular é muito bom, seja uma tarefa em um projeto em estilo cascata regular ou histórias em um projeto ágil. Ter um horário definido pode não ser tão valioso quanto apenas trabalhar em sua programação. Isso permite que você faça isso como parte do cronograma versus cancelamento do dia da limpeza, porque está atrasado no projeto.

Ter gerenciado um projeto que possuía uma quantidade enorme de dívidas em código, trabalhando-as regularmente era essencial para que as coisas funcionassem sem problemas. Algumas de nossas coisas eram grandes, outras eram pequenas.

Após alguns meses desse tipo de trabalho, o líder da nossa equipe de operações me disse como tudo estava funcionando perfeitamente.

Cada item pode não parecer muito, mas, como todas as dívidas, ele aumenta.


1

A resposta ideal é Não, porque você toma as medidas necessárias para evitar que isso seja uma necessidade (limpe conforme você avança por vários motivos já mencionados).

Esse pode ser o objetivo no final, mas você pode ter uma equipe que está longe de colocar isso em prática.

Os gerentes precisam assumir alguma responsabilidade. Nem sempre é culpa do desenvolvedor. Os gerentes podem dizer uma coisa, mas começam a pressionar para que os projetos sejam concluídos e fazem sugestões que promovam más práticas. Eles podem literalmente dizer: "limparemos mais tarde" ou, se funcionar, isso é bom o suficiente.

Você pode precisar dedicar um tempo específico para mostrar que isso é importante. Depois que você souber que sua equipe é capaz de limpar o código (não um dado), tente incorporá-lo com mais frequência.

Eventualmente, você não precisa definir um horário.

Pessoalmente, luto para resolver um novo problema e fazê-lo funcionar enquanto tento manter as coisas arrumadas. Estou melhorando, mas muitas vezes paramos deliberadamente e limpamos as coisas. É uma mentalidade diferente para mim. Eventualmente, as práticas sólidas se tornam hábito.


-1

Não, você deve fazer isso enquanto estiver codificando. Isso é chamado de refatoração se você estiver usando TDD. O problema quando você espera um mês ou dois para corrigir e limpar seu código é que você pode alterar o comportamento do código porque não se lembra de todas as partes do seu código.

Sugiro refatorar, que se baseia na codificação primeiro do código necessário para fazer algo funcionar e, assim que funciona, redesenha-o, otimize-o e torne-o bonito.


Isso é chamado de refatoração, esteja você usando TDD ou não. Esta questão não tem nada a ver com TDD ...
Ben Lee
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.