View
106
Download
0
Category
Preview:
Citation preview
Test Driven Development
por Johann Gomes e Thaís Moura
*TDD
*SITUAÇÃO ATUAL
*Atualmente, as falhas de software são
grandes responsáveis por custos e
tempo no processo de desenvolvimento de software.
*TRATANDO FALHAS
*Evitar falhas (fault-avoidance)*economicamente impraticável
*Com atividades apropriadas de especificação, projeto, implementação e manutenção sempre visando evitar falhas em primeiro lugar.
*Inclui o uso de métodos de construção de software avançados, métodos formais e reuso de blocos de software confiáveis.
*TRATANDO FALHAS
*Eliminar falhas (fault-elimination) *Compensação analítica de erros
cometidos durante a especificação,
*Projeto e implementação. Inclui verificação, validação e teste.
*TRATANDO FALHAS
*Tolerar falhas (fault-tolerance) *Compensação em tempo real de
problemas residuais como mudanças fora da especificação no ambiente operacional, erros de usuário, etc.
*Tratamento de exceções
*CURIOSIDADE
*Curiosidade: as falhas de software custam cerca de 60 bilhões de dólares à economia norteamericana a cada ano [NIST 2002]
*CRIAÇÃO DO TDD
*Visando minimizar custos e aumentar a qualidade de software, o Test driven development (TDD) foi criado.
*O TDD antecipa a identificação e correção de falhas durante o desenvolvimento do software.
*O QUE É TDD?
É uma metodologia para o processo de
desenvolvimento de software guiado por
TESTES
PRIMEIRO são criados os TESTES, para
POSTERIORMENTE escrever-se o CÓDIGO
necessário para passar por eles
*Importante pensamento sobre o TDD:
“If you can’t write a test for what you are about to code, then you shouldn’t even be thinking about coding” [Chaplin 2001].
*HISTÓRICO
*Criado por Kent Beck em 1999, o mesmo criador da metodologia eXtreme Programming (metodologia para lidar com requisitos vagos e em constante mudança)
*Segundo ele, o TDD encoraja designs simples e inspira confiança
*COMO FUNCIONA
Crie um teste para a
funcionalidade
Esse teste deve ser
criado antes de
implementar a
funcionalidade
Por conta disso, o teste
deverá FALHAR
Se não falhar, é porque há algo de
errado com a funcionalidade
1. ADICIONE UM TESTE
*COMO FUNCIONA
Ver se todos os testes estão funcionando
Ou seja, TESTAR os próprios TESTES
O teste deverá FALHAR novamente, pelo mesmo motivo: a funcionalidade ainda não foi implementada
2. TESTE TODOS OS TESTES
*COMO FUNCIONA
Escrever o código que deverá fazer o teste
passar
O código escrito aqui não precisa estar
perfeito, o OBJETIVO é apenas PASSAR NO
TESTE
3. IMPLEMENTE O CÓDIGO PARA CADA TESTE FUNCIONAR
*COMO FUNCIONA
Agora deveremos limpar o código tanto quanto for
necessário
Remoção da duplicação de código
Otimização
4. REFATORE/OTIMIZE O CÓDIGO
*COMO FUNCIONA
1. ADICIONE UM TESTE
2. TESTE TODOS OS TESTES
3. IMPLEMENTE O CÓDIGO PARA CADA TESTE FUNCIONAR
4. REFATORE/OTIMIZ
E O CÓDIGO
5. REPITA TUDO
*VANTAGENS
*Uma vantagem significativa do TDD é que ele permite que você tome pequenos passos quando estiver escrevendo um software
*Encoraja o refactoring (otimização de código, deixando ele mais legível e eficaz)
*Diminui a quantidade de erros por linha de código
*Facilidade de manutenção
*DESVANTAGENS
*O alto número de testes de unidades pode
trazer um falso senso de segurança, resultando em
menor nível de de atividades de
garantia de qualidade, como testes de integração e aceitação
*EXPERIMENTO
*[Müller and Hagner 2002] conduziram um experimento estruturado comparando TDD com programação tradicional
*EXPERIMENTO
*Foram medidos:*Eficiência do TDD em termos do time
de desenvolvimento
*Qualidade do código resultante
*Nível de entendimento do mesmo
*EXPERIMENTO
O grupo que desenvolveu com TDD escreveu os casos de teste antes de começar a implementação.
Já o grupo da programação tradicional escreveu os testes depois de completar o código.
*EXPERIMENTO
*O código do grupo TDD teve menos erros significantes quando reusado.
*Baseados nesse fato, os pesquisadores concluíram que a abordagem TDD aumenta substancialmente a qualidade do software e proporciona maior entendimento do código.
*REFERÊNCIAS
*Wikipédia: http://pt.wikipedia.org/wiki/Test_Driven_Development
*Java Free, artigo Test-Driven Developmento escrito por Dalton de Camargo: http://javafree.uol.com.br/artigo/869918/TestDriven-Development-TDD.html
*Ebah!: http://www.ebah.com.br/content/ABAAABNfUAG/conceitos-beneficios-tdd
Recommended