SlideShare una empresa de Scribd logo
1 de 44
Giovanni Bassi Victor Hugo Germano Desenvolvendooutside in com BDD
Giovanni Bassi@giovannibassi
Victor Hugo Germano@victorhg
www.lambda3.com.br/training
Assumption DrivenDevelopment
(…) Agile (…)
http://reddevnews.com/articles/2007/11/01/testdriven-development-tdd.aspx
TDD éumaferramentaparapossibilitar a evolução de Design EfeitosColaterais Verificação de comportamento Documentação
Quenomedevodaraomeuteste? O quetestarprimeiro? TDD Quandotestar? O quetestar? Quantotestar? Porque um testefalhou?
Estado Interações
Validação de Estado @Test publicvoid OrderIsFilledIfEnoughInWarehouse() {    Warehouse warehouse = new WarehouseImpl(); warehouse.add(“TALISKER”, 50);     Order order = new Order(“TALISKER”, 50); order.fill(warehouse); assertTrue(order.isFilled()); assertEquals(0,warehouse.getInventory(“TALISKER”)); }
Validação de Interação @Test publicvoid fillingDoesNotRemoveIfNotEnoughInStock() {   Order order = new Order(“TALISKER”, 51);   Mock warehouse = mock(Warehouse.class); warehouse.expects(once()).method("hasInventory”) 	 .will(returnValue(false)); order.fill((Warehouse) warehouse.proxy()); assertFalse(order.isFilled()); }
TDD: um péssimonome!
“Behavior-driven development ésobreimplementarumaaplicaçãoatravés da descrição de seucomportamentopelaperspectiva de seus stakeholders” Dan North BDD
Foco no valor
Criando software queimporta!
Tem valor de negóciotangível Entregueincrementalmente Fácil de manter e gerenciar Fácil de entender e comunicar BDD
Linguagem Comum
Soluções PorondecomeçarO quetestar O quenãotestar Outside-in User stories Quantotestar Como nomearos testes Porque um testefalha Mínimopossível Intenção Documentação http://www.slideshare.net/bmabey/the-why-behind-tddbdd-and-the-how-with-rspec
Trocar de senha Para que eu possa garantir minha segurança Como usuário registrado Eu quero poder trocar de senha
Trocar de senha Funcionalidade Então... Dado... Quando... Cenário 1 Um usuário logado Solicito a troca de senha A senha é alterada E a nova senha é válida E ativo Cenário 2 Um usuário logado Solicito a troca de senha A senha não é alterada E a nova senha é inválida E ativo Cenário 3 Um usuário anônimo Solicito a troca de senha Um erro é lançado
E se especificaçõesfossemexecutáveis?
Cenário: Acesso do usuárioàpaginapessoal Dado queeutenho um usuariocadastrado Quandoestounapagina principal   Epreenchooscampos:     | Usuário | login@gmail.com |     | Senha    | 123456 |   Epressiono “acessar” Entãodevover “Login realizado com sucesso”
Ao final teremos testes de regressão! São apenasefeitoscolaterais(aindaquePositivos)
Outside In Feature! http://www.slideshare.net/josephwilk/outsidein-development-with-cucumber-and-rspec
Outside In Feature “Queroqueosusuários do site quecompraram o produtopossamfazer o download diretamente de suaspáginaspessoais”
Outside In Cenário Etapas “Garantindo a segurança de informações, Como usuáriocadastradopossoacessarapenasminhapáginapessoal”
Outside In Cenário Etapas
Outside In TDD CenárioFalhando
Outside In CenárioFalhando
Outside In CenárioFalhando
Outside In CenárioFalhando
Outside In CenárioFalhando
Outside In CenárioFalhando
Outside In CenárioPassando!
Demo
Fotografia da cultura de testes e BDD
Dúvidas?
Obrigado! @giovannibassi	giovanni@lambda3.com.br @victorhg		victor@lambda3.com.br

Más contenido relacionado

Más de Giovanni Bassi

O que aprendi montando a arquitetura de microsserviços
O que aprendi montando a arquitetura de microsserviçosO que aprendi montando a arquitetura de microsserviços
O que aprendi montando a arquitetura de microsserviçosGiovanni Bassi
 
Analisando dumps de memória de aplicações .NET
Analisando dumps de memória de aplicações .NETAnalisando dumps de memória de aplicações .NET
Analisando dumps de memória de aplicações .NETGiovanni Bassi
 
Async e await com JavaScript: entenda e use agora
Async e await com JavaScript: entenda e use agoraAsync e await com JavaScript: entenda e use agora
Async e await com JavaScript: entenda e use agoraGiovanni Bassi
 
Conhecendo o AKS, o azure container services com kubernetes
Conhecendo o AKS, o azure container services com kubernetesConhecendo o AKS, o azure container services com kubernetes
Conhecendo o AKS, o azure container services com kubernetesGiovanni Bassi
 
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1Giovanni Bassi
 
C#7, 7.1, 7.2, 7.3 e C# 8
C#7, 7.1, 7.2, 7.3 e C# 8C#7, 7.1, 7.2, 7.3 e C# 8
C#7, 7.1, 7.2, 7.3 e C# 8Giovanni Bassi
 
Engenharia ágil de ponta a ponta do clone ao deploy
Engenharia ágil de ponta a ponta do clone ao deployEngenharia ágil de ponta a ponta do clone ao deploy
Engenharia ágil de ponta a ponta do clone ao deployGiovanni Bassi
 
Entrega contínua fica mais fácil com contêineres
Entrega contínua fica mais fácil com contêineresEntrega contínua fica mais fácil com contêineres
Entrega contínua fica mais fácil com contêineresGiovanni Bassi
 
.NET Core, ASP.NET Core e .NET Standard 2
.NET Core, ASP.NET Core e .NET Standard 2.NET Core, ASP.NET Core e .NET Standard 2
.NET Core, ASP.NET Core e .NET Standard 2Giovanni Bassi
 
.NET com contêineres Windows e Linux
.NET com contêineres Windows e Linux.NET com contêineres Windows e Linux
.NET com contêineres Windows e LinuxGiovanni Bassi
 
Async e await com JavaScript: entenda e use agora
Async e await com JavaScript: entenda e use agoraAsync e await com JavaScript: entenda e use agora
Async e await com JavaScript: entenda e use agoraGiovanni Bassi
 
Compartilhando código entre frontend e backend com Node.js
Compartilhando código entre frontend e backend com Node.jsCompartilhando código entre frontend e backend com Node.js
Compartilhando código entre frontend e backend com Node.jsGiovanni Bassi
 
Construindo uma ferramenta CLI multiplataforma com Node.js
Construindo uma ferramenta CLI multiplataforma com Node.jsConstruindo uma ferramenta CLI multiplataforma com Node.js
Construindo uma ferramenta CLI multiplataforma com Node.jsGiovanni Bassi
 
Um mergulho nos containers windows
Um mergulho nos containers windowsUm mergulho nos containers windows
Um mergulho nos containers windowsGiovanni Bassi
 
Build e release pipeline com docker
Build e release pipeline com dockerBuild e release pipeline com docker
Build e release pipeline com dockerGiovanni Bassi
 
Release contínuo de um microsserviço com Docker ASP.net core e Azure Containe...
Release contínuo de um microsserviço com Docker ASP.net core e Azure Containe...Release contínuo de um microsserviço com Docker ASP.net core e Azure Containe...
Release contínuo de um microsserviço com Docker ASP.net core e Azure Containe...Giovanni Bassi
 
Backend na nuvem com docker
Backend na nuvem com dockerBackend na nuvem com docker
Backend na nuvem com dockerGiovanni Bassi
 

Más de Giovanni Bassi (20)

O que aprendi montando a arquitetura de microsserviços
O que aprendi montando a arquitetura de microsserviçosO que aprendi montando a arquitetura de microsserviços
O que aprendi montando a arquitetura de microsserviços
 
Sendo ágil com git
Sendo ágil com gitSendo ágil com git
Sendo ágil com git
 
Analisando dumps de memória de aplicações .NET
Analisando dumps de memória de aplicações .NETAnalisando dumps de memória de aplicações .NET
Analisando dumps de memória de aplicações .NET
 
Novidades do c# 7 e 8
Novidades do c# 7 e 8Novidades do c# 7 e 8
Novidades do c# 7 e 8
 
Async e await com JavaScript: entenda e use agora
Async e await com JavaScript: entenda e use agoraAsync e await com JavaScript: entenda e use agora
Async e await com JavaScript: entenda e use agora
 
Conhecendo o AKS, o azure container services com kubernetes
Conhecendo o AKS, o azure container services com kubernetesConhecendo o AKS, o azure container services com kubernetes
Conhecendo o AKS, o azure container services com kubernetes
 
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
 
C#7, 7.1, 7.2, 7.3 e C# 8
C#7, 7.1, 7.2, 7.3 e C# 8C#7, 7.1, 7.2, 7.3 e C# 8
C#7, 7.1, 7.2, 7.3 e C# 8
 
Engenharia ágil de ponta a ponta do clone ao deploy
Engenharia ágil de ponta a ponta do clone ao deployEngenharia ágil de ponta a ponta do clone ao deploy
Engenharia ágil de ponta a ponta do clone ao deploy
 
Entrega contínua fica mais fácil com contêineres
Entrega contínua fica mais fácil com contêineresEntrega contínua fica mais fácil com contêineres
Entrega contínua fica mais fácil com contêineres
 
.NET Core, ASP.NET Core e .NET Standard 2
.NET Core, ASP.NET Core e .NET Standard 2.NET Core, ASP.NET Core e .NET Standard 2
.NET Core, ASP.NET Core e .NET Standard 2
 
.NET com contêineres Windows e Linux
.NET com contêineres Windows e Linux.NET com contêineres Windows e Linux
.NET com contêineres Windows e Linux
 
Async e await com JavaScript: entenda e use agora
Async e await com JavaScript: entenda e use agoraAsync e await com JavaScript: entenda e use agora
Async e await com JavaScript: entenda e use agora
 
Compartilhando código entre frontend e backend com Node.js
Compartilhando código entre frontend e backend com Node.jsCompartilhando código entre frontend e backend com Node.js
Compartilhando código entre frontend e backend com Node.js
 
Construindo uma ferramenta CLI multiplataforma com Node.js
Construindo uma ferramenta CLI multiplataforma com Node.jsConstruindo uma ferramenta CLI multiplataforma com Node.js
Construindo uma ferramenta CLI multiplataforma com Node.js
 
O Futuro do C#: C#8
O Futuro do C#: C#8O Futuro do C#: C#8
O Futuro do C#: C#8
 
Um mergulho nos containers windows
Um mergulho nos containers windowsUm mergulho nos containers windows
Um mergulho nos containers windows
 
Build e release pipeline com docker
Build e release pipeline com dockerBuild e release pipeline com docker
Build e release pipeline com docker
 
Release contínuo de um microsserviço com Docker ASP.net core e Azure Containe...
Release contínuo de um microsserviço com Docker ASP.net core e Azure Containe...Release contínuo de um microsserviço com Docker ASP.net core e Azure Containe...
Release contínuo de um microsserviço com Docker ASP.net core e Azure Containe...
 
Backend na nuvem com docker
Backend na nuvem com dockerBackend na nuvem com docker
Backend na nuvem com docker
 

Desenvolvendo com BDD

Notas del editor

  1. Disclaimer: Vocêfaz testes? Naosabe o queé TDD? Desculpe, mas temos um problema…
  2. Dan North diz que é pra testar interações, usando mocksMartin Fowler diz que é pra estar estado, usando stubs somente
  3. BDD != TDD principalmente porque o vemos de forma diferente
  4. Acerte as palavras também vale na linguagem com o clienteBDD vai te obrigar a pensar no negócio, modelar o negócio
  5. 19 minutos