tdd - Como poderia Usar o TDD em um sistema Legado?
Perguntas � tdd � Como poderia Usar o TDD em um sistema Legado?
Como poderia Usar o TDD em um sistema Legado?
Atualmente estou trabalhando em projetos antigos, sem testes, não existe documentação e tão pouco testes. Estou pensando em utilizar TDD nas alterações que eu devo fazer, sabendo o que a função faz eu posso simplesmente criar o teste dela e montar toda alteração. Se houver refatoração eu sei que devo fazer os testes nos pontos que estou mexendo, tipo baby steps e continuar garantindo que ainda funcionam.
Porém, como poderia garantir que outros métodos que fazem chamadas, não irão quebrar? Devo fazer os teste de coisas que já estão desenvolvidas?
criado 22 de mar de 2013
editado 25 de mar de 2013
Eu acho que vale a pena fazer o que eu chamo de testes de pareto: provavelmente 20% das funcionalidades do seu projeto causam 80% dos problemas... foque em criar testes para esses 20% .Se não tem ideia de quais são os mais usados ou críticos, crie algumas métricas no sistema para ajudar nessa decisão no que precisa ser devidamente testado. Em sistema legado não adianta falar; "ah, tem que testar tudo...", isso não existe no mundo real... só em projeto novo que começou certo!
Vale a pena sim. Testes unitários dão sempre segurança para quem está desenvolvendo. O problema de pegar um sistema legado para começar a desenvolver testes é que seria necessário investir um tempo para criar uma estrutura inicial. Chamo de estrutura você ter que usar algum mock, DB em memória, etc.
A primeira etapa para conseguir aplicar TDD em um sistema legado é convencer a empresa. É necessário também estar atento:
Provavelmente a empresa não vai querer que você pare apenas para produzir testes. A solução para isso, seria fazer testes apenas onde você está alterando. Se você foi mudar um IF em um método, você poderia colocar um testes naquele método.
Seus testes não devem afetar outros desenvolvedores quebrando o build, ou forçando configurações extras. Deve ser algo desacoplado, o que não é difícil de se fazer.
Crie o teste apenas o que você irá alterar, assim você garante sua alteração estará protegida de qualquer outra alteração feita no sistema. Rapidamente você poderá saber se teu método vai quebrar ou não.
E por último, tenha sempre uma boa noção de boas práticas do TDD. Saiba quando é melhor usar um mock, um banco em memória, etc. Aplicar relatórios de cobertura, teste contínuo e outras coisas.
A melhor forma de aplicar testes para um sistema legado, ou não, é conhecer as ferramentas e suas metodologias.
criado 03 de abr de 2013
Que vale a pena isso é fato, mas como o Boaglio colocou acima, não adianta apenas testar só o que eu fiz, pois poderia acabar quebrando outras coisas que eu nem sabia que existia e que por algum motivo pode chamar a classe ou o método alterado, logo dando novo comportamento.
Mas fazendo um mapeamento de quem chama o que e testando as chamadas de outros locais eu consigo garantir "melhor", sem a ideia de "Testar todo o sistema".
— Eduardo Bregaida 03 de abr de 2013
Mas você tem que pensar que, se você for começar a todo o sistema, você demorará muito tempo para fazer o primeiro teste. Para colocar testes em um sistema legal o ideal é começar com pequenos passos. Comece testando o método que você está alterando, e depois vá alterando outros. Geralmente as empresas com sistemas legados não gostam de investir tempo em testes, então só de conseguir o aval não quer dizer que é necessário testar todo o fluxo para chegar em seu método. Mesmo com a chefia dizendo vá em frente, eles ainda contam que você não gaste tempo a mais do que o que seria gasto sem o teste.
— Hebert Coelho 03 de abr de 2013
Uma prática de pode ajudar ir aumentando a cobertura de testes em projetos legados, é a partir de um ponto definido, todas alterações e novas funcionalidades terem seus respectivos testes, mesmo que depois de feitos os testes dos 20% principais como citado pelo @boaglio mesmo, assim vc terá um aumento gradativo da cobertura do projeto, e se tratando de legados, não se pode ter medo de refatorar, vai ser a prática mais utilizada por quem estiver tentando colocar testes.
criado 25 de mar de 2013
Se você puder utilize as libs mockito e PowerMock, a primeira é uma lib de mocks muito bacana, já a segunda pode ser útil para impedir a execução de métodos estáticos e tal.
Se puder vai passando algum code coverage (recomendo o cobertura) para ir vendo o percentual de código coberto
criado 02 de abr de 2013
Desculpe, acabei adicionando como uma nova resposta, mas deveria ser um comentário, no caso estou com o sonar, assim consigo manter a qualidade de código e tenho também um code coverage. Obrigado
Não é a resposta que estava procurando? Procure outras perguntas com as tags tdd ou faça a sua própria pergunta.