Acabei de me encarregar de um projeto de código com problemas de manutenção. O que posso fazer para manter o projeto em pé de igualdade?
Eu me encontro em um lugar em que trabalhamos com um sistema .NET de várias camadas muito grande que está perdendo muitas coisas importantes, como testes de unidade, COI, MEF, muitas classes estáticas, conjuntos de dados puros etc. apenas 24, mas estou aqui há quase três anos (este aplicativo está em desenvolvimento há 5) e, principalmente, devido a restrições de tempo, estamos adicionando mais porcaria para caber na outra porcaria. Depois de fazer vários projetos no meu tempo livre, comecei a entender o quão importante são todos esses conceitos. Também devido à mudança de funcionários, agora eu sou o líder da equipe neste projeto e realmente quero criar algumas maneiras inteligentes de melhorar este aplicativo. Maneiras pelas quais o valor pode ser explicado à gerência. Tenho ideias do que gostaria de fazer, mas todas parecem tão impressionantes sem muito ganho inicial. Qualquer história de como as pessoas lidaram ou teriam lidado com isso seria uma leitura muito interessante. Obrigado.
Respostas:
Orçamento para atacar dívidas técnicas. Você só precisa fazer isso. Quais partes do ataque primeiro dependem de onde seus desenvolvedores estão gastando mais tempo atualmente, mas é mais importante que você comece do que as coisas ideais. Se você estiver usando o Scrum, coloque partes específicas da dívida técnica em seu backlog e trate-as como recursos até que você as identifique.
Trabalhar efetivamente com o código herdado é altamente recomendado e provavelmente seria útil. Ainda não li, mas parece haver muitas informações sobre como obter testes de unidade no código legado, para que você possa modificá-lo e atualizá-lo com segurança.
Use a analogia do cartão de crédito com a gerência - você está "pagando juros" por tudo o que faz, porque é muito difícil realizar alguma coisa. Se você pagar sua dívida técnica, liberará esses recursos e poderá desenvolver novas funcionalidades mais rapidamente no futuro. Caso contrário, seus "pagamentos de juros" (pagos em tempo de desenvolvimento) continuarão a se acumular e sua equipe produzirá novas funcionalidades mais lentamente.
Talvez comece a estimar a quantidade de tempo que você gasta em cada ciclo lutando contra a dívida técnica para dar uma idéia do quanto já acumulou. Descreva como seria uma correção ou alteração de recurso em um sistema sustentável, como ela é no sistema real e quais alterações precisariam ser feitas ou poderiam ser boas primeiras etapas para chegar lá.
fonte
Role a dívida técnica em correções de erros e recursos adicionais.
Eu descobri que uma abordagem iterativa à melhoria produz os melhores resultados. O mantra no meu trabalho é melhorar a qualidade do código sempre que você o toca. Cada trabalho, seja uma correção de bug ou um recurso, começa com uma análise do que pode ser corrigido / refatorado / limpo. Tentamos fazer o refatorar no mesmo nível (em escala) do trabalho que precisamos concluir.
Crie uma lista ordenada dos problemas na base de código. Verifique se todos estão cientes da lista e da ordem de prioridade. Sempre que obtiverem um trabalho, devem procurar um problema na lista associada ao código em que você estará trabalhando.
Isso não vai consertar tudo. Existem alguns refatores ou correções que requerem uma grande parte do tempo e dos recursos. Eu geralmente tento amarrá-los a outros grandes trabalhos que serão beneficiados.
fonte
Eu posso apenas estar dizendo o óbvio, mas ei.
Escreva um pequeno teste de unidade que exercite um pedaço de código com problemas e refatore-o, certificando-se de que o teste ainda passe. Vá para outro pedaço de código, aquele que você pode alcançar com mais facilidade a partir da pequena porção de solo sólido que você acabou de construir. Espuma, enxágüe, repita.
Isso também ajudará você a se familiarizar um pouco com a base de código.
Depois de fazer isso por um tempo, você verá que é hora de fazer uma refatoração mais extensa. Descobrir código duplicado, violações do princípio DRY ... você sabe, as coisas de sempre. Até então, você terá uma cobertura de código indiscutivelmente decente, que permitirá embaralhar métodos, extrair interfaces e todas essas comodidades.
Sempre deixe a base de código um pouco melhor do que era antes de começar a invadir a área. Tenho certeza de que é um pequeno investimento que valerá a pena, mesmo em um prazo não tão longo.
fonte
Você pode tentar explicar a dívida técnica que este projeto tem para ter uma idéia de por onde começar. Você também pode tentar barganhar que, devido à troca de funcionários, deve haver algum tempo gasto para acelerar o código, e isso significa colocar alguns testes para ajudar a garantir um melhor desenvolvimento futuro, pois os testes podem ajudar a evitar erros e facilitar as coisas para possivelmente novas pessoas para trabalhar no projeto.
fonte
Em casos como esse, eu gosto de tentar otimizar o projeto o máximo possível. Descubra quais recursos são absolutamente necessários para avançar. Qualquer sistema que já existe há muito tempo provavelmente possui uma carteira de pedidos muito longa. Muitos desses itens serão críticos e muitos serão apenas "sinos e assobios".
No que diz respeito aos testes, os testes de unidade definitivamente serão úteis, mas você pode solicitar a alguns funcionários não técnicos que participem dos testes e enviem bugs aos membros da sua equipe.
Boa sorte.
fonte
Uma opção é tirar o pó do seu currículo e começar a procurar emprego.
Uma boa pergunta é se esse projeto mal executado é indicativo de como toda a empresa é administrada. Se a resposta for sim, pergunte se você está sendo pago o suficiente para permanecer em uma empresa mal administrada.
fonte
Muitas vezes, você pode empurrar a refatoração pela gerência superior, se puder dizer a eles que será uma atualização de desempenho ou corrigirá algum bug existente. Não re-fator apenas para mudar algo para o que você faria, especialmente se funcionar. O tempo de correção de erros também pode ser uma boa maneira de se adaptar a alguma refatoração, já que você já está lá. Seja assertivo e não olhe para ele, pois você é mais jovem que seus colegas programadores. Comece com algo pequeno, como fazer alguns testes de unidade e trabalhar a partir daí; você pode expor alguns bugs que podem ajudar o gerenciamento a dar ciclos para outras coisas.
fonte
Atualmente, estou lendo o Brownfield Application Development no .NET , que basicamente trata de como lidar com os problemas que você tem atualmente. Até agora, eu gosto da maior parte do que diz (não de tudo - mas esse é o tipo de livro para ajudá-lo a refletir sobre os problemas, e não o que é totalmente prescritivo). Pode ajudar de várias maneiras - mostra que você não está sozinho; espero que lhe dê dicas sobre como resolver alguns dos problemas.
Fundamentalmente, eu concordo com a maioria das abordagens - você não pode consertar a coisa toda da noite para o dia, mas pode aprimorá-la gradualmente em etapas muito pequenas. E sim - Dívida técnica é a metáfora que você precisa usar.
fonte
Em última análise, depende de quão bom seu pessoal é no projeto. Se é a mesma equipe que criou a bagunça, então você tem poucas chances de melhorar com o mesmo grupo. Analise sua equipe, descubra seus membros mais fracos e substitua-os (se você tiver a capacidade de fazê-lo).
"Você não pode fazer uma bolsa de seda da orelha de uma porca".
fonte