Pular para o conteúdo principal

Introdução ao Desenvolvimento Orientado a Testes

Test-Driven Development (TDD) ou Desenvolvimento Orientado a Testes é uma maneira diferente de escrever software. A diferença entre esta abordagem e a que você provavelmente está acostumado é que com TDD você vai evoluindo seu código aos poucos, conforme vai explorando o problema com o uso de testes automatizados escritos antes da solução sequer existir.

Em TDD, um teste é um pedaço de software. A diferença entre teste e o código que está sendo produzido é que os testes têm 2 funções principais:
  • De especificação, ou seja, definir uma regra que seu software deve obedecer
  • De validação, ou seja, verificar que a regra é obedecida pelo software
Geralmente os testes são criados com algum framework do tipo xUnit (jUnit, nUnit Test::Unit etc) , mas também podem ser feitos num nível de funcionalidades (através de softwares como o FitNesse e Selenium) . Estas ferramentas servem basicamente para organizar os testes e facilitar na criação das verificações.
O processo de criação de programação orientado a testes é simples:
  1. Escreva um teste que falhe. Pense no que o código deve fazer, descreva o contexto e defina quais são as verificações que precisam ser feitas. Não há um limite no número de testes, então quanto menos coisa cada teste descrever/verificar, melhor. No início também não é preciso se preocupar se a classe/método ainda não existe. Pense primeiro no teste e só depois que este estiver pronto crie o esqueleto de código necessário para que ele compile e falhe ao rodar.
  2. Faça o teste passar. Agora chegou o ponto crucial: escreva o mínimo de código para que o teste passe. Controle o instinto natural do programador de tentar prever tudo que o código vai fazer e apenas faça o teste passar. Mesmo que tenha certeza que o código deve fazer mais coisas, fazer os testes passarem deve ser a única preocupação agora.
  3. Refatore. Uma vez que o teste passou, verifique o que no código pode ser melhorado. Geralmente para um teste passar é preciso inserir duplicação através de constantes (técnica conhecida como Fake It). Agora é a hora de melhorar o código e remover as duplicações, lembrando que os testes devem continuar passando.
Estes 3 passos são repetidos até que não se consiga pensar em novos testes, o que indica que a funcionalidade está pronta.

Algumas vantagens desta abordagem são:
  • Incentiva a simplicidade: como a solução vai surgindo pouco a pouco, a tendência é que não se perca tempo com aquilo que não tem certeza que será usado em seguida. Expressões como “You Ain’t Gonna Need It (YAGNI)” e “Keep It Simple, Stupid (KISS)” são recorrentes quando se está programando orientado a testes.
  • Aumenta a confiança no código: o sistema funciona de uma determinada maneira porque existem testes que foram utilizados durante sua criação e validam o que foi criado. E se ainda assim algum erro surgir, um novo teste é criado para reproduzí-lo e garantir que depois de solucionado ele não irá se repetir.
  • Ajuda como documentação: os testes quando bem definidos são mais simples de ler que o código e, embora nem sempre sirvam como uma especificação para o usuário final, eles são uma fonte eficiente para entender o que o software faz. Além disso, esta documentação sempre estará atualizada com a aplicação.
  • Facilita refactorings: quanto mais testes existem no sistema, maior é a segurança para fazer refactorings. Um erro causado por algum refactoring dificilmente vai passar desapercebido quando um ou mais testes falharem após a mudança.
Bibliografia:
SAMCHEZ, Ivan. Introdução ao Desenvolvimento Orientado a Testes, Coding Dojo Floripa. 07/11/06. Disponível em: http://dojofloripa.wordpress.com/2006/11/07/introducao-ao-desenvolvimento-orientado-a-testes/

Comentários

Postagens mais visitadas deste blog

Projeto balanço... no Agile

Alguém que estudou o desenvolvimento de software, sua análise e seu projeto viu, sem dúvida, a seguinte figura clássica sendo apresentada pelo seu professor, por exemplo. Trata-se do  Projeto Balanço . Cada figura do conjunto demonstra um determinado processos ou fase do desenvolvimento de software.  O conjunto conseguiu demostrar, de forma abstrata, o que realmente ocorre num projeto de software.   Tornou-se famosa pela sátira ao produto de software entregue para o cliente e também pelo seu desenvolvimento .   Gostando ou não,  muitos profissionais consideram-na uma realidade. É uma figura tão famosa e clássica para a comunidade de desenvolvimento, que uma equipe se organizou com o objetivo de mante-la ativa. Trata-se do Project Cartoon: http://www.projectcartoon.com/ Várias conclusões e aprendizados são percebidos ao avaliar a figura sob um ponto de vista da engenharia de software.  Considerando que o balanço é uma representação abstrata do ...

Gestão de Projetos com os Pinguins de Madagascar

Um vídeo muito divertido que mostra como os pinguins de madagascar trabalham com projetos.

A Bíblia e a Gestão de Projetos

Houve uma explosão da disciplina de Gestão de Projetos, despertando muito interesse das organizações e dos profissionais. A resposta porque isto aconteceu é simple: MUDANÇAS!!! Vivemos num mundo onde o volume de mudanças tem crescido a cada vez mais e para que as organizações consigam "viver", elas precisão estar preparadas para as mudanças... Mas este assunto não é recente e sim algo que faz parte da história desde muito tempo. As grandes obras da antiguidade, como as Muralhas da China, as grandes pirâmides do Egito, a expansão e conquistas do povo romano, entre outros revelam claramente que houve uma INICIAÇÃO sobre o que será feira, um bom (ou algum) PLANEJAMENTO, uma fase de EXECUÇÃO devidamente CONTROLADA e uma FINALIZAÇÃO.  Estas obras/ações da antiguidade que resultaram de um esforço temporário empreendido para criar algo exclusivo são evidentes até os dias de hoje. E a BÍBLIA não fica de fora. Ao lermos ela observamos que grandes projetos também foram executados...