test driven development por johann gomes e thaís moura

22
Test Driven Development por Johann Gomes e Thaís Moura * TDD

Upload: internet

Post on 18-Apr-2015

107 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Test Driven Development por Johann Gomes e Thaís Moura

Test Driven Development

por Johann Gomes e Thaís Moura

*TDD

Page 2: Test Driven Development por Johann Gomes e Thaís Moura

*SITUAÇÃO ATUAL

*Atualmente, as falhas de software são

grandes responsáveis por custos e

tempo no processo de desenvolvimento de software.

Page 3: Test Driven Development por Johann Gomes e Thaís Moura

*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.

Page 4: Test Driven Development por Johann Gomes e Thaís Moura

*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.

Page 5: Test Driven Development por Johann Gomes e Thaís Moura

*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

Page 6: Test Driven Development por Johann Gomes e Thaís Moura

*CURIOSIDADE

*Curiosidade: as falhas de software custam cerca de 60 bilhões de dólares à economia norteamericana a cada ano [NIST 2002]

Page 7: Test Driven Development por Johann Gomes e Thaís Moura

*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.

Page 8: Test Driven Development por Johann Gomes e Thaís Moura

*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

Page 9: Test Driven Development por Johann Gomes e Thaís Moura

*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].

Page 10: Test Driven Development por Johann Gomes e Thaís Moura

*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

Page 11: Test Driven Development por Johann Gomes e Thaís Moura

*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

Page 12: Test Driven Development por Johann Gomes e Thaís Moura

*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

Page 13: Test Driven Development por Johann Gomes e Thaís Moura

*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

Page 14: Test Driven Development por Johann Gomes e Thaís Moura

*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

Page 15: Test Driven Development por Johann Gomes e Thaís Moura

*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

Page 16: Test Driven Development por Johann Gomes e Thaís Moura

*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

Page 17: Test Driven Development por Johann Gomes e Thaís Moura

*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

Page 18: Test Driven Development por Johann Gomes e Thaís Moura

*EXPERIMENTO

*[Müller and Hagner 2002] conduziram um experimento estruturado comparando TDD com programação tradicional

Page 19: Test Driven Development por Johann Gomes e Thaís Moura

*EXPERIMENTO

*Foram medidos:*Eficiência do TDD em termos do time

de desenvolvimento

*Qualidade do código resultante

*Nível de entendimento do mesmo

Page 20: Test Driven Development por Johann Gomes e Thaís Moura

*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.

Page 21: Test Driven Development por Johann Gomes e Thaís Moura

*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.