SlideShare uma empresa 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

Mais conteúdo relacionado

Mais de Giovanni Bassi

Mais 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 Outside In com BDD

Notas do 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