April 1, 2011

acessos

Refletindo sobre testes


Esta semana o criador do Ruby on Rails, DHH (David Heinemeier Hansson), "questionou", as vantagens de se utilizar um framework de teste como Rspec/Cucumber ao invez do Test:Unit. Flamers a parte, essa discussão levantou alguns pontos importantes sobre testes ao qual gostaria de discutir nesse post. É importante deixar claro que são opiniões de uma pessoa que esta começando com testes então pode conter alguns erros.


Do indie ao major
     

32823834_a069612902
Beatles_2
Não é de hoje que tenho visto testes ganharem visibilidade maior. Não apenas na comunidade Ruby, mas em outras linguagens como Java, os testes vem ganhado mais destaques do que nos últimos anos. Parte disso, eu acredito, venha da popularização de metodologias ágeis nas empresas brazucas, seja Scrum ou XP.

É muito bom ver que a cultura de testes venha ganhando espaço entre os desenvolvedores já que por muito tempo vem se dito das vantagens de se usar testes nos códigos. Mas ao mesmo tempo que isso acontece, venho sentido que as pessoas não estão enxergando a verdadeira vantagem de se fazer testes, mas sim seguindo a “moda” do momento


Fighting for wrong reasons

5320621628_68e97bcd8a_o_1

Fazer testes não é legal porque fulano de tal disse que é importante. Testes são uma segurança que você cria em torno do seu código, a confiança no que você fez vai funcionar nos casos esperados. Quando estamos codificando sentimos medo de mexer em fixtures já concluídas, testes vem para dar uma confiança maior ao mexer no código e garantir que o que estamos fazendo não vai quebrar o que já foi feito. Mais do que isso, ate códigos legados podem se beneficiar da cobertura de testes para um refatoração.

Mas o que eu tenho observado nos foruns e discussões é uma onda em cima de frameworks de testes aonde o que se busca não é a segurança no seu código, mas sim utilizar um Cucumber para rodar suas user story porque é "cool" ou Rspec ser o framework do momento para testes. Isso ainda se complica cada vez mais com siglas e significados para coisas que são obvias.


Suco de limão que parece tamarindo e que tem gosto de groselha

Quem-usa-bdd-vai-aqui-quem-usa-tdd-aqui

BDD ou TDD ? Existem muitos textos explicado sobre BDD e suas vantagens em relação ao TDD. BDD é basicamente sobre você testar os comportamentos ao invés dos detalhes das implementações... Mas espera ai ! Quando estamos usando TDD também não deveria ser assim ? Você não testar as entranhas de uma função, objeto, ou api, mas sim suas mensagens e interfaces ? 

Um iniciante de testes ao entrar neste mundo se sente perdido com essas siglas e teorias que ao mesmo tempo que são diferentes são tão próximas. No final todas elas buscam o mesmo objetivo e muitas vezes os beneficios ficam perdidos em meio a tantas soluções diferentes e curiosas que encontramos no meio. 


Finish him

5577600036_e0d8c7c842

Testar é importante e isso todos sabem. Mas o importante não é saber por palavras, mas sentir de verdade, testando seus códigos e rodando suas suites de testes varias vezes e estressar seu código com vários cenários e valores diferentes. Usar os beneficios do TDD/BDD para direcionar o design de seus objetos e métodos e no fim gerar uma documentação viva de seu sistema. Mesmo que com tudo o código não seja livre de bugs, o desenvolvedor ganha mais confiança e coragem no seu trabalho.

É vantajoso usar o cucumber nos seu projeto ? Rspec realmente vai trazer clareza e facilidades na hora de testar sua aplicação ? Um simples minitest não resolveria os seus testes de forma mais clara ? Essas são perguntas que devemos fazer antes de escolhermos uma solução para determinado caso. Do que adianta um cucumber se o cliente não participa ativamente do desenvolvimento, é um overhead a mais no desenvolvimento somado com uma dependência de gem.  

Uma dica de leitura é o post do Cassio Marques, aonde é abordados outros pontos interessantes de teste e ferramentas:

Sobre as razões para testar e porque você pode estar fazendo tudo errado

Bem é isso. Discutam, reclamem e critiquem =)




Comments [1]