Buscar

TDD - Test Driven Development

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

Test Driven Development - TDD
Definição
TDD é o Desenvolvimento Orientado por Testes (Test Driven Development). 
Desenvolver o software baseado em testes que são escritos antes do código de produção!
Considerado o criador ou o 'descobridor' da técnica, Kent Beck, declarou em 2003 que TDD encoraja designs de código simples e inspira confiança.
Ao escrever os testes antes, o desenvolvedor garante que boa parte (ou talvez todo) do seu sistema tem um teste que garante o seu funcionamento; 
Desenvolvimento guiado por testes;
Maior produtividade já que o desenvolvedor encontra menos bugs e não desperdiça tempo com depuradores;
Características
Ciclo do TDD
Ao criar o teste antes de implementar a unidade, são reduzidos problemas como mal entendimento de requisitos ou interfaces, pois como criar um teste se eu não sei o que devo testar?
É de extrema importância, para o desenvolvedor, o entendimento dos requisitos do cliente. 
Não adianta criar testes que não validem o código como um todo para reduzir o tempo, é necessário criar testes para o conjunto completo de unidades, só assim o TDD vai funcionar como deve, devendo fornecer uma cobertura completa aos testes.
Além disso, os testes devem seguir o modelo Test F.I.R.S.T.
F (Fast) - Rápidos: devem ser rápidos, pois testam apenas uma unidade;
I (Isolated) – Independentes: Testes unitários são isolados, testando individualmente as unidades e não sua integração;
R (Repeateble) – Repetitivos: Repetição nos testes, com resultados de comportamento constante;
S (Self-verifying) – Auto Verificação: A auto verificação deve verificar se passou ou se deu como falha o teste;
T (Timely) – Oportuno: O teste deve ser oportuno, sendo um teste por unidade.
Centrado na implementação de testes unitários;
Feedback rápido sobre a nova funcionalidade e sobre as outras funcionalidades existentes no sistema;
Características
Os testes são definidos em função dos requisitos; 
A implementação é definida em função dos testes;
Cada acréscimo funcional precisa ser justificado por um teste;
Busque sempre a implementação mais simples que atenda ao teste;
Se você acha que faltou algo no código, escreva mais um teste que justifique a complementação.
Características
Fluxo de Desenvolvimento com Teste
Pontos positivos 
O desenvolvedor pode resolver o problema aos poucos, aspecto a aspecto;
Testes facilitam o entendimento/documentam dos requisitos; 
Erros são percebidos mais cedo; 
É mais fácil identificar a causa; 
A correção é menos custosa; 
Garante uma boa base de testes; 
A arquitetura tende a apresentar baixo nível de acoplamento
O código é, naturalmente, facilmente testável, consequentemente…Refatoração são menos arriscados.
Análise Abordagem Tradicional 
Implementação primeiro, testar depois o que foi feito;
Muitos defeitos só são encontrados quando o desenvolvimento já foi encerrado;
Em caso de erros nas estimativas / pressão entrega, testes são prejudicados;
Se houver poucos testes, refatoração é arriscado; 
Tendência a tornar o código “genérico” (mais complexo do que necessário) para evitar refatoração; 
Riscos/Dificuldades do uso de TDD
Resistência da equipe (mudança de cultura); 
Negociação do prazo com o cliente; 
Estimativas / Acompanhamento do desenvolvimento. 
Potenciais benefícios do uso de TDD 
Maior facilidade de evolução do projeto;
Mudanças/novos requisitos são menos ameaçadores;
Código é mais simples;
Rotatividade causa menos impacto;
Testes cobrem/documentam as principais funcionalidades 
Código é mais legível 
JUnit
O mais popular framework de testes para Java. Ele facilita o desenvolvimento e execução de testes unitários em código Java. Ele Fornece uma completa API (conjunto de classes) para construir os testes e Aplicações gráficas e em modo console para executar os testes criados.
As vantagens de utilizar esse framework são: JUnit pode verificar se cada unidade de código funciona da forma esperada; Facilita a criação, execução automática de testes e a apresentação dos resultados; É Orientado a Objeto; É free e pode ser baixado na internet.
Para utilizar JUnit é necessário ter um ambiente de desenvolvimento como o NetBeans.
Detalhes Importantes
Testes podem mostrar a presença de falhas em um sistema, mas não podem provar que não existem falhas. 
Desenvolvedores de componentes são responsáveis pelos testes de componentes, mas os testes de sistema são normalmente realizados por uma equipe separada de testes.
Conclusão	
O desenvolvedor que escreve testes automatizados gasta tempo com isso. Mas ele gasta tempo de maneira inteligente. Hoje, o desenvolvedor que faz teste manual também gasta muito tempo com testes, mas de maneira errada, improdutiva. Em médio prazo, esse desenvolvedor gastará mais tempo testando a mesma funcionalidade do que o que utilizou o TDD e os automatizou desde o começo. É tudo uma questão de pensar a médio prazo. Além de outras vantagens: colabora para o aumento da qualidade dos sistemas, o software cresce de forma ordenada e com qualidade de design e também se adapta com mais facilidade a mudanças.

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais