Top Banner
T D D Introdução ao @CharlesFortes .com Community
42

Introdução ao TDD

Jun 11, 2015

Download

Technology

Charles Fortes

Introdução ao TDD - Palestra .NetRaptors 100loop apresentada Infórium
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Introdução ao TDD

T D DIntrodução ao

@CharlesFortes

.com Community

Page 2: Introdução ao TDD

@CharlesFortes

.com Test-Driven Development Introdução ao

Cadastro de Usuário

Cadastro de Usuário

Cadastro de Usuário Cadastro de Usuário

Cadastro de Usuário Cadastro de Usuário

Cadastro de Usuário

Cadastro de Usuário

Page 3: Introdução ao TDD

@CharlesFortes

.com

• Meu sistema pode ter no máximo 6 usuários; • Para poder cadastrar um usuário, deve-se estar logado no sistema e possuir

permissão específica para isto;

• Não podem haver dois logins iguais no sistema;

• A senha deve ter no mínimo 6 caracteres e não pode ter mais de 50 caracteres;

• Nome, Login e senha são campos obrigatórios;

Test-Driven Development Introdução ao

Page 4: Introdução ao TDD

Test-Driven Development Introdução ao

@CharlesFortes

.com

O que é

Test-DrivenDevelopment?

Page 5: Introdução ao TDD

@CharlesFortes

.com

É Desenvolver Focado no Caso

de Testes, nas Especificações

Test-Driven Development Introdução ao

Page 6: Introdução ao TDD

@CharlesFortes

.com Test-Driven Development Introdução ao

É Desenvolver Focado no Caso

de Testes, nas Especificações

WTF?

Page 7: Introdução ao TDD

@CharlesFortes

.com

Casos de Testes são condições aos quais o

software deverá ser submetido para que possa ser testado quanto ao seu funcionamento adequado e verificando se ele

atende ao que foi solicitado

Test-Driven Development Introdução ao

Page 8: Introdução ao TDD

@CharlesFortes

.com

Entende-se que nossa tela de cadastro de usuário está

funcionando corretamente quando as seguintes condições estiverem

satisfeitas:

1. Logado no sistema e tendo permissão para cadastrar usuários, cadastrar um usuário Incluir

corretamente, exibir mensagem de sucesso

2. Tentar inserir 7 usuário O sistema não pode permitir, retornando uma exceção

3. Com 6 usuários cadastrados, remover um usuário e inserir um novo Incluir corretamente, exibir

mensagem de sucesso

4. Tentar cadastrar um usuário sem estar logado no sistema Não permitir, retornar exceção

5. Estando logado no sistema, tentar cadastrar um usuário sem ter permissão Não permitir, retornar

exceção

6. Tentar cadastrar dois usuários com o mesmo nome Não permitir, retornar uma exceção

7. Remover um usuário e cadastrar um novo com o mesmo nome

Test-Driven Development Introdução ao

Page 9: Introdução ao TDD

@CharlesFortes

.com

Entende-se que nossa tela de cadastro de usuário está

funcionando corretamente quando as seguintes condições estiverem

satisfeitas:

1. Tentar salvar um usuário com o login em branco não permitir, retornar uma exceção

2. Tentar salvar um usuário com o nome em branco não permitir, retornar uma exceção

3. Tentar cadastrar um usuário com senha em branco não permitir, retornar uma exceção

4. Tentar cadastrar uma senha com 5 dígitos não permitir, retornar uma exceção

5. Tentar cadastrar uma senha com 6 dígitos Incluir corretamente, exibir mensagem de sucesso

6. Tentar cadastrar uma senha de 50 dígitos Incluir corretamente, exibir mensagem de sucesso

7. Tentar cadastrar uma senha com 51 dígitos não permitir, retornar uma exceção

Test-Driven Development Introdução ao

Page 10: Introdução ao TDD

@CharlesFortes

.com

Para cada um dos casos de testes apresentados anteriormente,

deve existir um teste de unidade que o valide de forma

absoluta.

Test-Driven Development Introdução ao

Page 11: Introdução ao TDD

@CharlesFortes

.com

Para cada um dos casos de testes apresentados anteriormente,

deve existir um teste de unidade que o valide de forma

absoluta.

Test-Driven Development Introdução ao

WTF?

Page 12: Introdução ao TDD

@CharlesFortes

.com

“Testes de unidade é um método pelo qual as unidades individuais do

código-fonte são testados para determinar se eles estão aptos

para o uso.

A unidade é a menor parte testável de um aplicativo. Na programação

procedural uma unidade pode ser uma função individual ou

procedimento. Na programação orientada a objeto uma unidade é

normalmente um método.”

Test-Driven Development Introdução ao

Segundo a Wikipédia

Page 13: Introdução ao TDD

@CharlesFortes

.com

Um teste de unidade, é um teste automatizado que testa

uma funcionalidade/aspecto/Requisito do sistema

Test-Driven Development Introdução ao

i.e. Testar a capacidade do sistema de se permitir cadastrar um usuário dentro dos moldes do negócio

Page 14: Introdução ao TDD

@CharlesFortes

.com Test-Driven Development Introdução ao

Testa

Page 15: Introdução ao TDD

@CharlesFortes

.com Test-Driven Development Introdução ao

Teste de unidade deve ser executável independente dos dados

O teste de unidade deve conter tudo

o que o teste necessita, ele não pode depender de estados gerados por

outros testes, ele deve funcionar tão bem sendo executado sozinho como com todos os demais

Teste de unidade sempre será usado como teste de regressão

Page 16: Introdução ao TDD

@CharlesFortes

.com Test-Driven Development Introdução ao

Teste de unidade feito por fazer não tem valor

Page 17: Introdução ao TDD

@CharlesFortes

.com Test-Driven Development Introdução ao

Não altere ou exclua testes para ter um novo. O teste só deve mudar

quando a funcionalidade mudar

Teste de unidade deve testar o Contrato, não teste nada além do contrato

Page 18: Introdução ao TDD

@CharlesFortes

.com Test-Driven Development Introdução ao

No modelo tradicional de desenvolvimento, primeiro se cria o código, e

depois se implementam os testes necessários para seu funcionamento

Requisitos

Análise

Desenho

Código Teste de Unidade

Teste de Integração

Teste de Sistema

Teste de Aceite Planeja >

Planeja >

Planeja >

Planeja >

Page 19: Introdução ao TDD

@CharlesFortes

.com Test-Driven Development Introdução ao

O problema deste modelo é que o teste muitas vezes se torna viciado,

acaba sendo um teste criado para provar que o código funciona, e não

para validar se há ou não falhas

Page 20: Introdução ao TDD

@CharlesFortes

.com Test-Driven Development Introdução ao

Pensando em como solucionar este problema, foi criado o TDD

Desenho reaproveitado de uma tirinha do site vidadeprogramador.com.br O texto apresentado não é o texto original da tirinha.

Page 21: Introdução ao TDD

@CharlesFortes

.com Test-Driven Development Introdução ao

Pensando em como solucionar este problema, foi criado o TDD

Requisitos

Análise

Desenho

Código Teste de Unidade

Teste de Integração

Teste de Sistema

Teste de Aceite Planeja >

Planeja >

Planeja >

Planeja >

Page 22: Introdução ao TDD

@CharlesFortes

.com

Quem diz: _“o importante é testar, não importa quando” esta errado, porque entende TDD como uma abordagem de testes.

TDD utiliza testes para dirigir o desenvolvimento

da aplicação

Test-Driven Development Introdução ao

Page 23: Introdução ao TDD

@CharlesFortes

.com

“Testes escritos antes do código da aplicação, antes de serem testes, são especificações”

Giovanni Bassi

Test-Driven Development Introdução ao

Page 24: Introdução ao TDD

@CharlesFortes

.com Test-Driven Development Introdução ao

Dentre as vantagens desta abordagem estão o fato de que se desenvolve

apenas o necessário e com agilidade

E a segurança de que a aplicação continuará funcionando no

futuro (evitando regressões), qualquer erro que apareça pode ser facilmente

encontrado sem ficar debugando o código a esmo.

Page 25: Introdução ao TDD

@CharlesFortes

.com Test-Driven Development Introdução ao

O TDD NÃO realiza todos os testes que o projeto precisa, ele apenas fornece uma direção para ser seguida durante o desenvolvimento que foca as

especificações. Ele testa se o que foi solicitado funciona.

O TDD deve ser realizado pelo desenvolvedor, de forma que guie seu raciocínio quanto a como e o que implementar

Page 26: Introdução ao TDD

@CharlesFortes

.com

Lets Test

Test-Driven Development Introdução ao

0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0

Page 27: Introdução ao TDD

@CharlesFortes

.com Test-Driven Development Introdução ao

Pensando em como solucionar este problema, foi criado o TDD

Page 28: Introdução ao TDD

Pré-Condição

Deve ser preparado o ambiente de testes, suas pré-condições

Podem ser usados MOCKs, fakes, querys, a execução de

outro teste (ou outros), etc...

@CharlesFortes

.com Test-Driven Development Introdução ao

Page 29: Introdução ao TDD

Pré-Condição

O Visual Studio usa a marcação TestInitialize em um método para

executar algo que prepara o ambiente.

@CharlesFortes

.com Test-Driven Development Introdução ao

Page 30: Introdução ao TDD

Domain-Driven Design Introdução ao

@CharlesFortes

.com

Escreva o Teste Verifique se ele falhou Escreva o Código para que ele passe Rode todos os testes Refatore Escreva o Teste Verifique se ele falhou Escreva o Código para que ele passe Rode todos os testes Refatore

Page 31: Introdução ao TDD

Domain-Driven Design Introdução ao

@CharlesFortes

.com

Page 32: Introdução ao TDD

Domain-Driven Design Introdução ao

@CharlesFortes

.com

Escreva o Teste Verifique se ele falhou Escreva o Código para que ele passe Rode todos os testes Refatore Escreva o Teste Verifique se ele falhou Escreva o Código para que ele passe Rode todos os testes Refatore

Page 33: Introdução ao TDD

Domain-Driven Design Introdução ao

@CharlesFortes

.com

Page 34: Introdução ao TDD

Domain-Driven Design Introdução ao

@CharlesFortes

.com

Escreva o Teste Verifique se ele falhou Escreva o Código para que ele passe Rode todos os testes Refatore Escreva o Teste Verifique se ele falhou Escreva o Código para que ele passe Rode todos os testes Refatore

Page 35: Introdução ao TDD

Domain-Driven Design Introdução ao

@CharlesFortes

.com

Page 36: Introdução ao TDD

Domain-Driven Design Introdução ao

@CharlesFortes

.com

Escreva o Teste Verifique se ele falhou Escreva o Código para que ele passe Rode todos os testes Refatore Escreva o Teste Verifique se ele falhou Escreva o Código para que ele passe Rode todos os testes Refatore

Page 37: Introdução ao TDD

Domain-Driven Design Introdução ao

@CharlesFortes

.com

Page 38: Introdução ao TDD

Domain-Driven Design Introdução ao

@CharlesFortes

.com

Escreva o Teste Verifique se ele falhou Escreva o Código para que ele passe Rode todos os testes Refatore Escreva o Teste Verifique se ele falhou Escreva o Código para que ele passe Rode todos os testes Refatore

Page 39: Introdução ao TDD

VB6

@CharlesFortes

.com Test-Driven Development Introdução ao

Page 40: Introdução ao TDD

@CharlesFortes

.com

Lets Code

0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0

Test-Driven Development Introdução ao

Page 41: Introdução ao TDD

@CharlesFortes

.com Test-Driven Development Introdução ao

http://bugbang.com.br

http://artofunittesting.com

http://www.agiledata.org/essays/tdd.html

Page 42: Introdução ao TDD

@CharlesFortes

pangeanet.org/profile/charlesfortes

br.linkedin.com/in/charlesfortes

Test-Driven Development Introdução ao