TDD / Teste Unitários

Olá pessoal,

Na verdade, esse post não é uma duvida e sim para compartilhar informação/conhecimento com todos…

comecei a estudar TDD (Test-Driven Development) e testes unitários em geral… E resolvi listar as vantagens que existem em se testar o código…

Até mesmo para poder convencer meu Gerente de Projetos entre outras pessoas que ainda acham que testar gasta tempo e não vale a pena… de que testes são uteis e aumentam nossa produtividade!!!

Comecei a fazer uma lista com os itens que achei mais interessantes…

[quote]Fatos:

  • Durante o desenvolvimento do softwarer gastamos grande parte do tempo consertando erros, do que adicionando novas funcionalidades…

Beneficios de criar os testes ANTES de criar as funcionalidades (TDD)…

  • Temos certeza que todo o código será testado

  • A tendencia é que implementemos apenas o que for necessário para resolver o problema, e não implementaremos varias funcionalidade que não serão usadas… Programar apenas o necessário para resolver o problema!!!

  • Como o codigo é usado antes mesmo de ser escrito existe uma alta abstração da sua verdadeira implementação… Portanto mais facil enxergas as interfaces, facilitando seu desacoplamente das demais partes do sistema…

  • Teremos rapidamente a oportunidade de usar o metodo e assim já ficar sabendo se o mesmo é simples de ser usado… CODIGO SIMPLES!!!


Beneficios de Usar Testes unitários:

  • Ter certeza que independente do que foi alterado, o que estava funcionando continuará…

  • Maior confiança em adicionar novas funcionalidades

  • Maior confiança para REFATORAR o código existente

  • Ajuda novos programadores a entenderem o código… pois eles tem varios “exemplos” de utilização dos metodos existentes apenas vendo os testes… E nada melhor para aprender alguma coisa doque vendo o exemplos

  • O erro que foi pego uma vez não se repetirá novamente…

  • Proteção para que outros programadores não estragem/insiram bug no seu código…

  • Outro programadores poderão dar manutenção no seu código sem medo de estragar alguma coisa…


Consequencia…

  • Aumento na produtividade, pois vc perde menos tempo consertando erros, e sobra mais tempo para introduzir funcionalidades com segurança, e nos certificamos rapidamente de que: “O que estava funcionando continua…”

  • o código vira sinonimo de qualidade


Resumindo:

Ao contrario do que possa parecer, TESTES aumentam a velocidade no desenvolvimento!!! tb aumentam a segurança de que o código não conterá erros, e com isso aumenta muito a qualidade do código…[/quote]

O que vcs acham?? concordam???
seria legal se cada um incrementasse essa lista com suas experiencias e opiniões… ou até mesmo corrigi-la (caso eu tenha falado alguma besteira… :slight_smile: )

Então,
é isso ai

Até mais

Felipe, boa compilação dos benefícios do desenvolvimento baseado em testes/testes automatizados.

Uma adição para os benefícios de testes unitários:

[list]faz com que o design leve em conta a testabilidade do código, o que como conseqüencia resulta em uma melhor separação de responsabilidades e maior desacoplamento. Isso ajuda a evitar o estilo de design conhecido como “castelo de cartas”.[/list]

Eu acrescentaria que uma condição necessária para a adoção de testes automatizados é que o time inteiro de desenvolvedores ‘compre’ a idéia. Nada pior que saber que um outro desenvolvedor não roda os testes antes de fazer commit, ou simplesmente faz commits mesmo quando estes quebram os testes, ou pior, comentou alguns testes porque com suas novas alterações tais testes não passavam (!).

Além disso, eu recomendo que os próprios desenvolvedores sejam responsáveis por escrever e manter o conjunto de testes, ao invés de se ter um time ou desenvolvedor dedicado a escrever testes. É claro, isso é implícito no verdadeiro desenvolvimento baseado em testes.

Finalmente, recomendo também um sistema integração contínua (como o CruiseControl), no mínimo diária, para tornar evidente quando alguém quebra as regras e faz commit sem garantir que todos os testes passem, e assim ajudar a equipe a se manter ‘na linha’.

acrescentaria o framework http://emma.sourceforge.net/

Emma eh uma ferramenta, nao um framework. De qualquer maneira, estou interessado nas suas opinioes sobre code coverage e TDD, sunshine.