Temos aqui uma grande base de código herdada com código incorreto que você não pode imaginar.
Definimos agora alguns padrões de qualidade e queremos cumpri-los em uma base de código completamente nova, mas também se você tocar no código legado.
E reforçamos aqueles com o Sonar (ferramenta de análise de código), que já possui milhares de violações.
Agora, a discussão surgiu para diminuir as violações do legado. Porque é legado.
A discussão é sobre regras de legibilidade. Como quantos ifs / for aninhados .. pode ter.
Agora, como posso argumentar contra diminuir nossa qualidade de codificação no código legado?
Respostas:
O código é apenas um meio para atingir um fim. O que esse fim pode ser varia, mas geralmente é lucro.
Se é lucro; então, argumentar com êxito qualquer coisa que você queira mostrar que aumentará o lucro - por exemplo, aumentando as vendas, reduzindo os custos de manutenção, reduzindo os custos de desenvolvimento, reduzindo os salários, reduzindo os custos de reciclagem etc. Se você não pode / não mostra que isso melhorar lucro; então você está apenas dizendo que seria uma maneira divertida de jogar dinheiro no vaso sanitário.
fonte
Eu, eu e eu, fomos produtores e mantenedores de código legado. Se a sua ferramenta está gerando "milhares de violações" (ou mesmo centenas), esqueça a ferramenta, isso é inaplicável à situação ...
Suponho que os desenvolvedores originais se foram e não estão disponíveis para discussão. Portanto, ninguém por perto entende o porquê e o porquê do estilo de design e codificação. Corrigir centenas ou milhares de violações não será uma questão de reescrever algumas linhas de código aqui e ali. Em vez disso, requer, sem dúvida, refatoração / decomposição re-funcional. Você tenta fazer isso em qualquer grande base de código existente, sem entender profundamente seu design atual, e é obrigado a apresentar um novo conjunto de bugs / problemas / etc. Apenas uma nova lata de vermes ainda pior do que a que você possui agora (ou pior do que a sua ferramenta >> pensa que você tem agora).
A única abordagem sensata para resolver "milhares de violações" seria reescrever do zero. Um esforço longo e caro e quase impossível de vender para a gerência. E, neste caso, eles provavelmente estão certos ...
O código herdado normalmente requer apenas ajustes. Como no y2k, ou quando as ações passaram de 256th para decimal. Eu fiz um monte de ambos que cr * p. E muitas outras coisas semelhantes. É tipicamente bastante "preciso", pois você pode "ler" o estilo às vezes ruim, a decomposição funcional ruim, o mau etc, e localizar a coleção de locais que precisam ser modificados. E então, o que acontece "entre esses lugares", ou seja, qual é o fluxo de mais alto nível, pode permanecer um mistério para você. Apenas certifique-se de entender a funcionalidade localizada que está sendo alterada e, em seguida, teste, teste, teste de quaisquer efeitos colaterais, etc., seu conhecimento localizado não será capaz de antecipar.
Se você não conseguir visualizar o código dessa maneira, talvez não seja a melhor pessoa para manter o código herdado. Algumas pessoas podem começar com uma tela em branco e escrever programas bonitos, mas não podem começar com uma grande base de código do código de outras pessoas e mantê-lo. Outras pessoas podem manter o código, mas não podem começar do zero. Alguns podem fazer as duas coisas. Verifique se as pessoas certas estão mantendo seu código legado.
Os momentos ocasionais em que você pode redesenhar e reescrever sua base de código herdada do zero são quando os requisitos de negócios (ou outros) mudam a tal ponto que os "ajustes" básicos não podem mais acomodar os requisitos alterados . E, nesse ponto, você pode começar escrevendo um novo documento de requisitos funcionais, certificando-se de que todas as partes interessadas estejam a bordo. É basicamente um jogo totalmente novo.
A única coisa >> errada >> a fazer é tentar tratar a manutenção de código legado da mesma maneira que você faria no desenvolvimento. E essa coisa errada parece ser exatamente o caminho que você gostaria de seguir :) Acredite na minha palavra, não é isso que você quer fazer.
fonte
A questão não é quão bom ou ruim esse código é. A questão é quanto você se beneficia de quanto investimento.
Então você tem uma ferramenta que encontra milhares de coisas das quais não gosta. Você pode ignorar os resultados da ferramenta ou investir trabalho para mudar milhares de coisas. Isso é muita coisa. As pessoas não serão focadas, nem durante as alterações, nem durante a revisão, e isso não será testado adequadamente, pois leva séculos para descobrir como testar (ou apenas para experimentar) todas as alterações, para que haja erros. Então, até encontrar e corrigir esses erros, você investiu muito tempo e dinheiro com resultado negativo geral.
Por outro lado, as ferramentas podem encontrar coisas que elas não apenas "não gostam", mas que são bugs ou bugs em potencial. Se o código legado ainda estiver sendo amplamente utilizado, a ferramenta correta poderá encontrar bugs. Portanto, ativar os avisos do compilador um por um, verificar se são úteis (nem todos são úteis) e corrigir esses avisos pode valer a pena.
fonte
Se não está quebrado, não conserte
Isso praticamente deve ser tatuado em todo desenvolvedor e gerente de software, para que nunca o esqueçam.
Sim, ele quebra todas as convenções de codificação modernas. Sim, está escrito no FORTRAN-77 com um invólucro em C para que possa ser invocado no Python. Sim, esses são GOTOs não estruturados. Sim, há uma sub-rotina com três mil linhas. Sim, os nomes das variáveis só fazem sentido para um croata. etc etc.
Mas se tiver sido testado com raiva por mais de uma década e já passou, deixe-o em paz! Se a modificação necessária for pequena, mantenha-a o mais pequena e local possível. Qualquer outra coisa corre o risco maior de quebrar algo que não precisava ser consertado.
Obviamente, às vezes você descobre que é realmente um kluge impossível de manter e que a única maneira de acomodar a "pequena" modificação é reescrever do zero. Nesse caso, você precisa voltar para quem está pedindo a mudança e dizer a ele quanto vai custar (em dólares ou horas-homem para a reescrita, e em suor e lágrimas de sangue pelos novos e inevitáveis erros).
Há muito tempo, houve uma série de falhas em uma das unidades de disco da Digital. Acabaram lembrando e substituindo todos eles na gord sabe quanto custa. Aparentemente, havia uma gota de cola segurando um filtro dentro do HDA. O manifesto de engenharia dizia da cola "Não especificado parametricamente, NÃO SUBSTITUTOS ACEITÁVEIS". Um contador de feijão "economiza" menos de um centavo por unidade de disco, adquirindo outra cola. Ele emitiu um vapor dentro do HDA que matou a unidade após alguns anos de serviço. Não estava quebrado até que ele consertou. Sem dúvida "foi apenas uma pequena mudança ..."
fonte
Definitivamente, não há razão para reduzir o nível de qualidade do código legado. Também não há necessidade de corrigir avisos imediatamente. Apenas garanta que todas as suas "novas" alterações em todos os componentes do seu projeto estejam seguindo um alto padrão de qualidade. Ou seja, nenhum commit deve aumentar a contagem de avisos.
É uma abordagem simples e uniforme.
Ele permite que o código antigo antigo funcione como está (porque nenhuma modificação desnecessária é feita nele). Garante que o novo código seja de alta qualidade. Nenhum custo adicional está envolvido.
fonte
Controle de risco….
Custo….
Benefício
Você espera que manter um padrão de codificação leve a um melhor design do código.
Mas é muito improvável que alguém gaste muitas semanas alterando o código apenas para remover avisos de uma ferramenta de verificação padrão de codificação, resultará em uma melhoria no design do código.
Recomendação….
Experiência pessoal….
fonte
A discussão é sobre a redução dos limites da ferramenta? ... ou eu entendi errado. Está escrito de uma maneira confusa. Caso contrário, descarte minha resposta.
IMHO, seria uma boa idéia reduzir a sensibilidade da ferramenta. Por quê? Porque destacaria os pedaços de código mais cabeludos. A alternativa é produzir relatórios com milhares de violações, tornando-se inútil por seu tamanho.
... além disso, apenas converse sobre isso com as pessoas envolvidas e ouça suas razões também.
fonte
Eu tentaria separar o código legado do novo código limpo. No Eclipse, por exemplo, você pode fazer isso colocando-os em diferentes projetos que se utilizam. projeto 'limpo' e projeto 'legado' .
Dessa forma, você pode analisar os dois projetos no sonar com diferentes padrões de qualidade. Os padrões devem diferir apenas na importância das regras. As regras em si devem ser as mesmas. Dessa forma, você pode ver no projeto 'legado' o que precisa ser 'corrigido' para atender aos padrões do projeto 'limpo' .
Sempre que você conseguiu elevar algum código legado aos padrões mais altos, você pode movê-lo para o projeto 'limpo'.
Em todos os dias de trabalho, você não pode realizar para elevar todas as aulas que você toca aos padrões do projeto 'limpo' por causa do atraso de tempo. Mas você deve tentar chegar lá em pequenos passos, tentando melhorar um pouco o código legado sempre que tocá-lo.
fonte