View
214
Download
0
Category
Preview:
Citation preview
T D DIntrodução ao
@CharlesFortes
.com Community
@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
@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
Test-Driven Development Introdução ao
@CharlesFortes
.com
O que é
Test-DrivenDevelopment?
@CharlesFortes
.com
É Desenvolver Focado no Caso
de Testes, nas Especificações
Test-Driven Development Introdução ao
@CharlesFortes
.com Test-Driven Development Introdução ao
É Desenvolver Focado no Caso
de Testes, nas Especificações
WTF?
@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
@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
@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
@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
@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?
@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
@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
@CharlesFortes
.com Test-Driven Development Introdução ao
Testa
@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
@CharlesFortes
.com Test-Driven Development Introdução ao
Teste de unidade feito por fazer não tem valor
@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
@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 >
@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
@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.
@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 >
@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
@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
@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.
@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
@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
@CharlesFortes
.com Test-Driven Development Introdução ao
Pensando em como solucionar este problema, foi criado o 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
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
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
Domain-Driven Design Introdução ao
@CharlesFortes
.com
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
Domain-Driven Design Introdução ao
@CharlesFortes
.com
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
Domain-Driven Design Introdução ao
@CharlesFortes
.com
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
Domain-Driven Design Introdução ao
@CharlesFortes
.com
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
VB6
@CharlesFortes
.com Test-Driven Development Introdução ao
@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
@CharlesFortes
.com Test-Driven Development Introdução ao
http://bugbang.com.br
http://artofunittesting.com
http://www.agiledata.org/essays/tdd.html
@CharlesFortes
pangeanet.org/profile/charlesfortes
br.linkedin.com/in/charlesfortes
Test-Driven Development Introdução ao
Recommended