Desenvolvimento dirigido a testes vale a pena?
Paralelamente ao meu trampo Java EE, estou desenvolvendo um sisteminha para controle financeiro em Rails. E tudo o que vejo de errado, ou que poderia ser melhor aqui na empresa, estou tentando levar no meu projeto. E uma das coisas é o TDD. Evidentemente testes unitários deveriam ser prioridade em qualquer sistema de informação, mas sabemos que na realidade, as vezes a diretoria pressiona, e você tem que correr com o codigo e deve deixar algo de lado, para encaixar no prazo. Geralmente esse “algo” que fica de lado, é o teste. Com rails/ruby, é possível explorar mais ainda o TDD. Pelo fato de ser uma linguagem dinâmica, é possivel você criar o teste antes do código. Parece estranho né ? Mas isso te força a sempre codificar pensando no teste e sempre testar pensando no código. E acredite, isto faz uma enorme diferença.
Temos alguns sistemas legados aqui na empresa, que não tiveram esta preocupação com o teste. Devido, provavelmente ao que relatei no parágrafo anterior. E agora estamos com muito receio de refatorar o código, pois não temos a segurança que uma boa suite de teste nos daria. Ai você me diz: “Simples! Faça a tal suite de testes, e depois refatora!”. Entretanto, o sistema não foi feito pensando em testes, não foi concebido para ser unitariamente testado. Com isso temos o codigo de negocio completamente vinculado ao acesso ao banco, o que torna praticamente impossível a utilização de uma camada de mocks. Ou seja, estamos em maus lençóis.
Rafa,
não entendi porque vc fala que é devido a Ruby ser uma linguagem dinâmica que é possível aplicar TDD? Tvz a diferença seja que com Java por exemplo, você precisa ao menos definir a interface das classes de negócio, e com Ruby não é necessário porque ele não faz validação em tempo de compilação se um método existe ou não, já que ele abstrai esse conceito de métodos para mensagens. Mas criando as interfaces é possível criar testes mesmo sem ter feito o código ainda. O que é altamente recomendável.
Concordo plenamente com o seu post! Pensar em teste melhora o desenvolvimento e garante um código melhor!
E quanto aos sistemas legados que você cita, dos quais eu cuido e sofro na pele…hehehe…na minha opinião, para sistemas legados, que foram concebidos sem teste, não vale a pena um esforço para adicionar testes a ele, não ao menos tudo de uma vez. Se possível for, pode-se ir adicionando testes a medida que é necessário fazer mudanças, mas pra mim o ideal é que esses sistemas sejam reescritos! E que nossos chefes leiam isso e concordem! hehehe
Abraços!
Was this answer helpful?
LikeDislikeNa verdade nada impede que você crie o teste antes do código em qualquer linguagem. O plugin do JUnit dentro do Eclipse, inclusive, consegue trabalhar bem com erros de compilação.
[]s
Was this answer helpful?
LikeDislikeLuiz, na verdade eu disse que com o Ruby é possível escrever o teste antes do código, e que isso ajuda quando se utiliza a metodologia TDD. Não disse que só é possível fazer TDD com linguagens dinâmicas. E realmente, com Java podemos fazer algo que chega perto utilizando interfaces, e segundo o nosso amigo Shoes ai de cima, o JUnit se vira bem com esses erros de compilação, mas nunca testei isso.
Was this answer helpful?
LikeDislike