BDD em Ação

Uilian Ries
Uilian RiesSoftware Developer C/C++ em Khomp
Khomp
Behavior Driven Development
Uilian Ries
AGENDA
● Desafios no desenvolvimento de
SW
● E o TDD?
● O que é BDD?
● TDD e BDD
● BDD numa casca de noz
● Os três amigos
● User Stories
● Especificações do comportamento
○ Gherkin
○ Gauge
● Frameworks
● Integração contínua
● Ciladas
● Benefícios do BDD
● Desafios para implementar BDD
Desafios no desenvolvimento de SW
● Problemas de comunicação durante o processo de desenvolvimento
● Atingir uma linguagem comum que atenda todos os envolvidos no projeto
● Entregar uma documentação que reflita o negócio
● Validar os requisitos com precisão
E o TDD?
● TDD se baseia em pequenos ciclos de repetições
● Criar um Teste que inicialmente não passa (Red)
● Adicionar uma nova funcionalidade do sistema
● Fazer o Teste passar (Green)
● Refatorar o código da nova funcionalidade (Refactoring)
● Escrevemos o próximo Teste
● Feedback rápido sobre a nova funcionalidade
● Código limpo e simples para o teste passar
● Maior cobertura de código
O que é BDD?
O que é BDD?
● Exemplos
● Compreensão compartilhada
● Software que importa
O que é BDD?
● BDD não é sobre usar Behave, Cucumber ou Specflow
● BDD começa com colaboração, conversação e compreensão
● No BDD a comunicação vem antes da automação
O que é BDD?
● Colaboração
○ Uma técnica de colaboração
○ Compreensão sobre o valor de cada feature
○ Como entregar cada feature em tempo otimizado
● Construir o software certo
○ Quais features possuem o maior valor
○ Descobrir o valor por colaboração, conversação e feedback
O que é BDD?
● Documentação
○ A documentação faz parte do fluxo
● Automação
○ Acelerar o feedback se está criando algo certo
○ Reproduzir o mesmo cenário sempre que necessário
BDD e TDD
● Mesmo ciclo de desenvolvimento
● BDD tem foco em comunicação
● No BDD todos falam a mesma língua
● TDD utiliza linguagem para dev e tester
● No BDD o comportamento é mais importante do que software escrito
BDD e TDD
● ATDD (Acceptance Test Driven Development)
○ Encoraja toda a equipe a definir os critérios de aceitação de um
software antes de começar seu desenvolvimento
○ Geralmente envolve o estabelecimento dos critérios em primeiro lugar
○ Os testes de aceitação são desenvolvidos e executados para ver os
resultados da falha com o código certo com base em exemplos.
ATDD (Acceptance Test Driven Development)
BDD numa casca de noz
BDD numa casca de noz
● Processo de desenvolvimento tradicional
○ Existem muitas oportunidades para perda de informação
○ Risco de compreensão equivocada
○ Falta de clareza na descrição
BDD numa casca de noz
BDD numa casca de noz
● Processo de desenvolvimento BDD
○ As especificações são elaboradas colaborativamente
○ As especificações utilizam uma linguagem comum (ubíqua)
○ A execução das especificações resultam em rápido feedback
Os três amigos
● 3 membros de times
○ desenvolvedor
○ testador
○ PO ou analista de negócios
● Juntos discutem features e desenham exemplos
● O testador possui grande atenção em casos esquecidos por outro membros
● O desenvolvedor aponta considerações técnicas
● O PO julga a relevância e valor de cada cenário
User Stories
● São partes do comportamento desejado de um sistema de software
● Amplamente utilizados em dividir funcionalidade para fins de planejamento
● Encoraja um estilo mais informal e conversacional de exigências
● Pode ser escrita em um único cartão de nota
● Critério de aceitação ajudam a validar uma user story
● Uma maneira comum de formular é a "Como ... Eu quero ... Para, ...".
● A frase "Como" refere-se a quem quer a história
● "Eu quero" descreve o que é a funcionalidade
● "para que" descreva por que eles querem essa funcionalidade
User Stories
● Exemplo vending machine
Consulta de itens disponíveis na máquina pelo browser
Como um cliente, eu gostaria de consultar
os itens disponíveis na máquina pelo browser,
para decidir qual o produto que irei comprar
antecipadamente.
Critério de aceitação
- Precisa suportar IE 8
User Stories
● Exemplo vending machine
Investigar estado da máquina pelo browser
Como um técnico, eu gostaria de consultar
o estado de cada sensor pelo browser,
para definir quais os reparos serão necessários.
Critério de aceitação
- Precisa apresentar log de erro do sensor
User Stories
● Ponto de entrada para obter uma linguagem ubíqua
● Base para os 3 amigos poderem descrever os cenários
● Importante para o QA desenvolver seu trabalho
Especificações do comportamento
● Para poder testar users stories cenários precisam ser definidos
● Para poder definir os cenários, detalhes serão necessários
● Cenários são definidos em contexto, ações e verificação
Especificações do comportamento
● Linguagens e ferramentas para verificar o comportamento
○ Gherkin
○ Gauge
Gherkin
https://github.com/cucumber/cucumber/wiki/Gherkin
● É um idioma legível para o negócio e específico do domínio
● Permite descrever o comportamento sem detalhar a implementação
● Possui dois propósitos: documentação e automatização de testes
● Pode ser utilizado Given-When-Then para descrição de passos
Gherkin
https://github.com/cucumber/cucumber/wiki/Given-When-Then
● Given When Then
○ Given, coloca o sistema em um estado conhecido
○ When, descreve a ação executada
○ Then, observa os resultados
Gherkin - Exemplo vending machine
Feature: Diagnosticar sensores pelo browser
Como um técnico, eu gostaria de consultar o estado de cada sensor
pelo browser, para definir quais os reparos serão necessários.
Scenario: Diagnosticar sensor com falha
Given acesso a página de manutenção
And o termômetro apresentando falha
When eu inicio um diagnóstico de sensores pelo botão “diagnosticar”,
Then o resultado indica erro de leitura somente na temperatura
Gauge
https://gauge.org
● Ferramenta criada pela Thoughtworks
● Licença GPL-3
● Suporta múltiplas linguagens: Ruby, Java, C#, Python e Javascript
● Baseado em markdown
● Suporta o conceito de documentação executável
Gauge
https://docs.gauge.org/longstart.html
● Terminologias
○ Specifications, descrição de feature (arquivo)
○ Specification Heading, descrição de feature (título)
○ Scenarios, mesmo que no Gherkin
○ Steps, vale por Given/When/Then
Gauge - Exemplo vending machine
Diagnosticar sensores pelo browser
===========================
O técnico deve ser capaz de consultar o estado de cada sensor pelo browser
Diagnosticar sensor com falha
----------------------------------------
* O técnico acessa a página de diagnóstico através do browser
* Inicia um diagnóstico de sensores pelo botão “diagnosticar”
* O resultado indica erro de leitura somente na temperatura
Frameworks
● Cucumber
● https://cucumber.io
● Licença MIT
● Suporta Gherkin
● Inicialmente feito para Ruby, mas possui suporte para diversas linguagens,
incluindo C++, JavaScript e Lua
Frameworks
● Behave
● https://pythonhosted.org/behave/
● Licença MIT
● Suporta Gherkin
● Suporte para Python
Frameworks
● E muito mais ...
Ferramenta Linguagem Licença
pytest-bdd Python MIT
SpecFlow C# BSD-3
Lettuce Python GPL-3.0
Chai JavaScript MIT
behat PHP MIT
Integração Contínua
● BDD não é dependente de CI
● Contudo, acreditamos que automação e CI podem contribuir para um
melhor desenvolvimento
● Frameworks para automação de teste podem ser combinados com CI
○ Exemplo: Behave + Splinter + Gitlab
● Segunda parte desta apresentação visitará a prática neste campo
Ciladas
● Ciladas são anti-patterns do BDD
● Analista ou PO escreve os cenários e passa a frente
○ Desvio entre os “3 amigos”
○ Problema em descobrir o cenário
○ Não estará revisando o documento
○ Feedback poderá não ser eficiente
Ciladas
● O Testador escreve os cenários no final para implementar
os testes automatizados
○ Mas ele usa Behave
○ Mas é para cobrir código legado
Ciladas
● O desenvolvedor inventa os cenários quando o encontro
dos “3 amigos” não resulta em algo válido
○ Idealmente sessão deve resultar em exemplos concretos
○ Ou pelo menos em cenários válidos
Ciladas
● Os cenários são mais focados em detalhes ao invés de
valores do negócio
○ Quando “O quê” vem na frente de “Por quê?” e “Como”
○ Importante se perguntar o porquê estão escrevendo o cenário
Benefícios do BDD
● Redução de tempo
○ Ajuda as equipes a se concentrar em recursos alinhados com os
objetivos comerciais
○ Desenvolver o software certo diminui no número de bugs
Benefícios do BDD
● Mudanças mais fáceis e seguras
○ Qualquer é fácil de ser compreendida por ambos os lados
○ A documentação acompanha o software
● Entregas mais rápidas
○ Não é mais necessário escrever uma descrição de teste durante a
homologação
Desafios para implementar BDD
● BDD requer grande envolvimento e colaboração comercial
● BDD funciona melhor usando contexto Agile or iterativo
● BDD não funciona bem em um ambiente isolado
● Testes pobres podem levar a maiores custos de manutenção
REFERÊNCIAS
John Ferguso
Dan North
Agile Alliance
Martin Fowler
BDD in Action
Rodrigo Urubatan
BDD em Ação
1 de 42

Recomendados

Introdução a BDD por
Introdução a BDDIntrodução a BDD
Introdução a BDDIsmael
4.6K visualizações20 slides
BDD (Behavior-Driven Development) por
BDD (Behavior-Driven Development)BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)Renato Groff
3.5K visualizações48 slides
Apresentação BDD por
Apresentação BDDApresentação BDD
Apresentação BDDTiago Link
1K visualizações19 slides
Introdução ao BDD com Gherkin por
Introdução ao BDD com GherkinIntrodução ao BDD com Gherkin
Introdução ao BDD com GherkinValquíria Duarte D'Amato
1.5K visualizações18 slides
Teste de software - aula 01 (motivação) por
Teste de software - aula 01 (motivação)Teste de software - aula 01 (motivação)
Teste de software - aula 01 (motivação)Elmano Cavalcanti
179 visualizações66 slides
Como descrever cenários de teste utilizando Gherkin de forma correta por
Como descrever cenários de teste utilizando Gherkin de forma corretaComo descrever cenários de teste utilizando Gherkin de forma correta
Como descrever cenários de teste utilizando Gherkin de forma corretaTesting Dojo Uai
1.9K visualizações38 slides

Mais conteúdo relacionado

Mais procurados

Qualidade de Software por
Qualidade de SoftwareQualidade de Software
Qualidade de SoftwareTiago Antônio da Silva
5.9K visualizações73 slides
BDD & Cucumber por
BDD & CucumberBDD & Cucumber
BDD & CucumberVladimir Arutin
376 visualizações51 slides
Iwot2017 teamwork in software development por
Iwot2017 teamwork in software developmentIwot2017 teamwork in software development
Iwot2017 teamwork in software developmentTorgeir Dingsøyr
742 visualizações46 slides
Conceitos de básicos de qualidade de software por
Conceitos de básicos de qualidade de softwareConceitos de básicos de qualidade de software
Conceitos de básicos de qualidade de softwareRonney Moreira de Castro
8.4K visualizações62 slides
Bdd Introduction por
Bdd IntroductionBdd Introduction
Bdd IntroductionSkills Matter
9.7K visualizações35 slides
An introduction to Behavior-Driven Development (BDD) por
An introduction to Behavior-Driven Development (BDD)An introduction to Behavior-Driven Development (BDD)
An introduction to Behavior-Driven Development (BDD)Suman Guha
7.5K visualizações17 slides

Mais procurados(20)

BDD & Cucumber por Vladimir Arutin
BDD & CucumberBDD & Cucumber
BDD & Cucumber
Vladimir Arutin376 visualizações
Iwot2017 teamwork in software development por Torgeir Dingsøyr
Iwot2017 teamwork in software developmentIwot2017 teamwork in software development
Iwot2017 teamwork in software development
Torgeir Dingsøyr742 visualizações
Conceitos de básicos de qualidade de software por Ronney Moreira de Castro
Conceitos de básicos de qualidade de softwareConceitos de básicos de qualidade de software
Conceitos de básicos de qualidade de software
Ronney Moreira de Castro8.4K visualizações
Bdd Introduction por Skills Matter
Bdd IntroductionBdd Introduction
Bdd Introduction
Skills Matter9.7K visualizações
An introduction to Behavior-Driven Development (BDD) por Suman Guha
An introduction to Behavior-Driven Development (BDD)An introduction to Behavior-Driven Development (BDD)
An introduction to Behavior-Driven Development (BDD)
Suman Guha7.5K visualizações
Programação Estruturada 2 - Curso Completo por thomasdacosta
Programação Estruturada 2 - Curso CompletoProgramação Estruturada 2 - Curso Completo
Programação Estruturada 2 - Curso Completo
thomasdacosta1.4K visualizações
Fundamentos da Engenharia de Software por Álvaro Farias Pinheiro
Fundamentos da Engenharia de SoftwareFundamentos da Engenharia de Software
Fundamentos da Engenharia de Software
Álvaro Farias Pinheiro2.7K visualizações
TDD and BDD and ATDD por Anuar Nurmakanov
TDD and BDD and ATDDTDD and BDD and ATDD
TDD and BDD and ATDD
Anuar Nurmakanov1.2K visualizações
Behavior Driven Development Pros and Cons por Iosif Itkin
Behavior Driven Development Pros and ConsBehavior Driven Development Pros and Cons
Behavior Driven Development Pros and Cons
Iosif Itkin25.3K visualizações
Algoritmos - Aula 02 - Construcao de algoritmos por Rodrigo Kiyoshi Saito
Algoritmos - Aula 02 - Construcao de algoritmosAlgoritmos - Aula 02 - Construcao de algoritmos
Algoritmos - Aula 02 - Construcao de algoritmos
Rodrigo Kiyoshi Saito1.6K visualizações
Gerência de configuração ágil por Claudia Melo
Gerência de configuração ágilGerência de configuração ágil
Gerência de configuração ágil
Claudia Melo1.2K visualizações
Analise de Requisitos por elliando dias
Analise de RequisitosAnalise de Requisitos
Analise de Requisitos
elliando dias9K visualizações
Aumentando a produtividade e Automatizando Processos com Jira por Luís Cesar Teodoro
Aumentando a produtividade e Automatizando Processos com JiraAumentando a produtividade e Automatizando Processos com Jira
Aumentando a produtividade e Automatizando Processos com Jira
Luís Cesar Teodoro1.4K visualizações
Apresentação | Gestão de QA | Modelo Human driven | Qualidade de software | ... por Rosa Sampaio
Apresentação | Gestão de QA |  Modelo Human driven | Qualidade de software | ...Apresentação | Gestão de QA |  Modelo Human driven | Qualidade de software | ...
Apresentação | Gestão de QA | Modelo Human driven | Qualidade de software | ...
Rosa Sampaio718 visualizações
O que é Teste de Software? por testedesoftwarepe
O que é Teste de Software?O que é Teste de Software?
O que é Teste de Software?
testedesoftwarepe918 visualizações
Qualidade de software por Alvaro Oliveira
Qualidade de softwareQualidade de software
Qualidade de software
Alvaro Oliveira870 visualizações
Introdução à Qualidade e Testes Ágeis de Software por Claudia Melo
Introdução à Qualidade e Testes Ágeis de SoftwareIntrodução à Qualidade e Testes Ágeis de Software
Introdução à Qualidade e Testes Ágeis de Software
Claudia Melo1.2K visualizações
[NDC 2018] 테라 콘솔 포팅기 - UE3 게임 현세대 콘솔로 이식하기 por Haechan Lee
[NDC 2018] 테라 콘솔 포팅기 - UE3 게임 현세대 콘솔로 이식하기[NDC 2018] 테라 콘솔 포팅기 - UE3 게임 현세대 콘솔로 이식하기
[NDC 2018] 테라 콘솔 포팅기 - UE3 게임 현세대 콘솔로 이식하기
Haechan Lee1.8K visualizações

Similar a BDD em Ação

Teste sua aplicação antes que ela teste você por
Teste sua aplicação antes que ela teste vocêTeste sua aplicação antes que ela teste você
Teste sua aplicação antes que ela teste vocêTiago Link
574 visualizações42 slides
Codigo limpo por
Codigo limpoCodigo limpo
Codigo limpodiegomcunha
2.4K visualizações44 slides
TDD e BDD - Developers-SP - Abril/2017 por
TDD e BDD - Developers-SP - Abril/2017TDD e BDD - Developers-SP - Abril/2017
TDD e BDD - Developers-SP - Abril/2017Renato Groff
1.2K visualizações39 slides
DDD + BDD + TDD + Scrum por
DDD + BDD + TDD + ScrumDDD + BDD + TDD + Scrum
DDD + BDD + TDD + ScrumEduardo Bregaida
2.8K visualizações139 slides
Programação Pragmática por
Programação PragmáticaProgramação Pragmática
Programação Pragmáticaelliando dias
1.5K visualizações34 slides
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter... por
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...Renato Groff
160 visualizações24 slides

Similar a BDD em Ação(20)

Teste sua aplicação antes que ela teste você por Tiago Link
Teste sua aplicação antes que ela teste vocêTeste sua aplicação antes que ela teste você
Teste sua aplicação antes que ela teste você
Tiago Link574 visualizações
Codigo limpo por diegomcunha
Codigo limpoCodigo limpo
Codigo limpo
diegomcunha2.4K visualizações
TDD e BDD - Developers-SP - Abril/2017 por Renato Groff
TDD e BDD - Developers-SP - Abril/2017TDD e BDD - Developers-SP - Abril/2017
TDD e BDD - Developers-SP - Abril/2017
Renato Groff1.2K visualizações
DDD + BDD + TDD + Scrum por Eduardo Bregaida
DDD + BDD + TDD + ScrumDDD + BDD + TDD + Scrum
DDD + BDD + TDD + Scrum
Eduardo Bregaida2.8K visualizações
Programação Pragmática por elliando dias
Programação PragmáticaProgramação Pragmática
Programação Pragmática
elliando dias1.5K visualizações
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter... por Renato Groff
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...
Renato Groff160 visualizações
5 dicas para estruturar seu teste de performance por Ariane Izac
5 dicas para estruturar seu teste de performance5 dicas para estruturar seu teste de performance
5 dicas para estruturar seu teste de performance
Ariane Izac326 visualizações
Mocking Test - ThinkUp! - Abril/2017 por Renato Groff
Mocking Test - ThinkUp! - Abril/2017Mocking Test - ThinkUp! - Abril/2017
Mocking Test - ThinkUp! - Abril/2017
Renato Groff1.3K visualizações
Todas as abordagens de testes dentro do ágil por Elias Nogueira
Todas as abordagens de testes dentro do ágilTodas as abordagens de testes dentro do ágil
Todas as abordagens de testes dentro do ágil
Elias Nogueira5.7K visualizações
Indo além dos testes de classes com BDD (Behavior-Driven Development) - DevOp... por Renato Groff
Indo além dos testes de classes com BDD (Behavior-Driven Development) - DevOp...Indo além dos testes de classes com BDD (Behavior-Driven Development) - DevOp...
Indo além dos testes de classes com BDD (Behavior-Driven Development) - DevOp...
Renato Groff35 visualizações
Treinamento TDD - Atech por cesarcneto
Treinamento TDD - AtechTreinamento TDD - Atech
Treinamento TDD - Atech
cesarcneto757 visualizações
Dicas para sua carreira de Desenvolvedor PHP por Douglas V. Pasqua
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHP
Douglas V. Pasqua743 visualizações
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei... por Renato Groffe
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei...Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei...
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei...
Renato Groffe74 visualizações
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Hertz - Janeiro-2018 por Renato Groff
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Hertz - Janeiro-2018Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Hertz - Janeiro-2018
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Hertz - Janeiro-2018
Renato Groff1.5K visualizações
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Grupo Bandeirantes - ... por Renato Groff
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Grupo Bandeirantes - ...Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Grupo Bandeirantes - ...
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Grupo Bandeirantes - ...
Renato Groff859 visualizações
Treinamento Agile com scrum por Eduardo Bregaida
Treinamento Agile com scrumTreinamento Agile com scrum
Treinamento Agile com scrum
Eduardo Bregaida346 visualizações

Mais de Uilian Ries

Gitlab - Creating C++ applications with Gitlab CI por
Gitlab - Creating C++ applications with Gitlab CIGitlab - Creating C++ applications with Gitlab CI
Gitlab - Creating C++ applications with Gitlab CIUilian Ries
11K visualizações45 slides
Conan.io - The C/C++ package manager for Developers por
Conan.io - The C/C++ package manager for DevelopersConan.io - The C/C++ package manager for Developers
Conan.io - The C/C++ package manager for DevelopersUilian Ries
3.9K visualizações44 slides
Git Workflow por
Git WorkflowGit Workflow
Git WorkflowUilian Ries
344 visualizações29 slides
Meetup C++ Floripa - Conan.io por
Meetup C++ Floripa - Conan.ioMeetup C++ Floripa - Conan.io
Meetup C++ Floripa - Conan.ioUilian Ries
625 visualizações42 slides
Poco Bibliotecas C++ por
Poco Bibliotecas C++Poco Bibliotecas C++
Poco Bibliotecas C++Uilian Ries
355 visualizações48 slides
Conan a C/C++ Package Manager por
Conan a C/C++ Package ManagerConan a C/C++ Package Manager
Conan a C/C++ Package ManagerUilian Ries
1.5K visualizações25 slides

Mais de Uilian Ries(11)

Gitlab - Creating C++ applications with Gitlab CI por Uilian Ries
Gitlab - Creating C++ applications with Gitlab CIGitlab - Creating C++ applications with Gitlab CI
Gitlab - Creating C++ applications with Gitlab CI
Uilian Ries11K visualizações
Conan.io - The C/C++ package manager for Developers por Uilian Ries
Conan.io - The C/C++ package manager for DevelopersConan.io - The C/C++ package manager for Developers
Conan.io - The C/C++ package manager for Developers
Uilian Ries3.9K visualizações
Git Workflow por Uilian Ries
Git WorkflowGit Workflow
Git Workflow
Uilian Ries344 visualizações
Meetup C++ Floripa - Conan.io por Uilian Ries
Meetup C++ Floripa - Conan.ioMeetup C++ Floripa - Conan.io
Meetup C++ Floripa - Conan.io
Uilian Ries625 visualizações
Poco Bibliotecas C++ por Uilian Ries
Poco Bibliotecas C++Poco Bibliotecas C++
Poco Bibliotecas C++
Uilian Ries355 visualizações
Conan a C/C++ Package Manager por Uilian Ries
Conan a C/C++ Package ManagerConan a C/C++ Package Manager
Conan a C/C++ Package Manager
Uilian Ries1.5K visualizações
Software Development Tools for C/C++ por Uilian Ries
Software Development Tools for C/C++Software Development Tools for C/C++
Software Development Tools for C/C++
Uilian Ries231 visualizações
Testes Unitários com GTest e Catch por Uilian Ries
Testes Unitários com GTest e CatchTestes Unitários com GTest e Catch
Testes Unitários com GTest e Catch
Uilian Ries1.6K visualizações
SECCOM 2017 - Conan.io o gerente de pacote para C e C++ por Uilian Ries
SECCOM 2017 - Conan.io o gerente de pacote para C e C++SECCOM 2017 - Conan.io o gerente de pacote para C e C++
SECCOM 2017 - Conan.io o gerente de pacote para C e C++
Uilian Ries223 visualizações
Elements of C++11 por Uilian Ries
Elements of C++11Elements of C++11
Elements of C++11
Uilian Ries2.1K visualizações
Unisinos - Proposta TCC 2015 por Uilian Ries
Unisinos - Proposta TCC 2015Unisinos - Proposta TCC 2015
Unisinos - Proposta TCC 2015
Uilian Ries884 visualizações

BDD em Ação

  • 2. AGENDA ● Desafios no desenvolvimento de SW ● E o TDD? ● O que é BDD? ● TDD e BDD ● BDD numa casca de noz ● Os três amigos ● User Stories ● Especificações do comportamento ○ Gherkin ○ Gauge ● Frameworks ● Integração contínua ● Ciladas ● Benefícios do BDD ● Desafios para implementar BDD
  • 3. Desafios no desenvolvimento de SW ● Problemas de comunicação durante o processo de desenvolvimento ● Atingir uma linguagem comum que atenda todos os envolvidos no projeto ● Entregar uma documentação que reflita o negócio ● Validar os requisitos com precisão
  • 4. E o TDD? ● TDD se baseia em pequenos ciclos de repetições ● Criar um Teste que inicialmente não passa (Red) ● Adicionar uma nova funcionalidade do sistema ● Fazer o Teste passar (Green) ● Refatorar o código da nova funcionalidade (Refactoring) ● Escrevemos o próximo Teste ● Feedback rápido sobre a nova funcionalidade ● Código limpo e simples para o teste passar ● Maior cobertura de código
  • 5. O que é BDD?
  • 6. O que é BDD? ● Exemplos ● Compreensão compartilhada ● Software que importa
  • 7. O que é BDD? ● BDD não é sobre usar Behave, Cucumber ou Specflow ● BDD começa com colaboração, conversação e compreensão ● No BDD a comunicação vem antes da automação
  • 8. O que é BDD? ● Colaboração ○ Uma técnica de colaboração ○ Compreensão sobre o valor de cada feature ○ Como entregar cada feature em tempo otimizado ● Construir o software certo ○ Quais features possuem o maior valor ○ Descobrir o valor por colaboração, conversação e feedback
  • 9. O que é BDD? ● Documentação ○ A documentação faz parte do fluxo ● Automação ○ Acelerar o feedback se está criando algo certo ○ Reproduzir o mesmo cenário sempre que necessário
  • 10. BDD e TDD ● Mesmo ciclo de desenvolvimento ● BDD tem foco em comunicação ● No BDD todos falam a mesma língua ● TDD utiliza linguagem para dev e tester ● No BDD o comportamento é mais importante do que software escrito
  • 11. BDD e TDD ● ATDD (Acceptance Test Driven Development) ○ Encoraja toda a equipe a definir os critérios de aceitação de um software antes de começar seu desenvolvimento ○ Geralmente envolve o estabelecimento dos critérios em primeiro lugar ○ Os testes de aceitação são desenvolvidos e executados para ver os resultados da falha com o código certo com base em exemplos.
  • 12. ATDD (Acceptance Test Driven Development)
  • 13. BDD numa casca de noz
  • 14. BDD numa casca de noz ● Processo de desenvolvimento tradicional ○ Existem muitas oportunidades para perda de informação ○ Risco de compreensão equivocada ○ Falta de clareza na descrição
  • 15. BDD numa casca de noz
  • 16. BDD numa casca de noz ● Processo de desenvolvimento BDD ○ As especificações são elaboradas colaborativamente ○ As especificações utilizam uma linguagem comum (ubíqua) ○ A execução das especificações resultam em rápido feedback
  • 17. Os três amigos ● 3 membros de times ○ desenvolvedor ○ testador ○ PO ou analista de negócios ● Juntos discutem features e desenham exemplos ● O testador possui grande atenção em casos esquecidos por outro membros ● O desenvolvedor aponta considerações técnicas ● O PO julga a relevância e valor de cada cenário
  • 18. User Stories ● São partes do comportamento desejado de um sistema de software ● Amplamente utilizados em dividir funcionalidade para fins de planejamento ● Encoraja um estilo mais informal e conversacional de exigências ● Pode ser escrita em um único cartão de nota ● Critério de aceitação ajudam a validar uma user story ● Uma maneira comum de formular é a "Como ... Eu quero ... Para, ...". ● A frase "Como" refere-se a quem quer a história ● "Eu quero" descreve o que é a funcionalidade ● "para que" descreva por que eles querem essa funcionalidade
  • 19. User Stories ● Exemplo vending machine Consulta de itens disponíveis na máquina pelo browser Como um cliente, eu gostaria de consultar os itens disponíveis na máquina pelo browser, para decidir qual o produto que irei comprar antecipadamente. Critério de aceitação - Precisa suportar IE 8
  • 20. User Stories ● Exemplo vending machine Investigar estado da máquina pelo browser Como um técnico, eu gostaria de consultar o estado de cada sensor pelo browser, para definir quais os reparos serão necessários. Critério de aceitação - Precisa apresentar log de erro do sensor
  • 21. User Stories ● Ponto de entrada para obter uma linguagem ubíqua ● Base para os 3 amigos poderem descrever os cenários ● Importante para o QA desenvolver seu trabalho
  • 22. Especificações do comportamento ● Para poder testar users stories cenários precisam ser definidos ● Para poder definir os cenários, detalhes serão necessários ● Cenários são definidos em contexto, ações e verificação
  • 23. Especificações do comportamento ● Linguagens e ferramentas para verificar o comportamento ○ Gherkin ○ Gauge
  • 24. Gherkin https://github.com/cucumber/cucumber/wiki/Gherkin ● É um idioma legível para o negócio e específico do domínio ● Permite descrever o comportamento sem detalhar a implementação ● Possui dois propósitos: documentação e automatização de testes ● Pode ser utilizado Given-When-Then para descrição de passos
  • 25. Gherkin https://github.com/cucumber/cucumber/wiki/Given-When-Then ● Given When Then ○ Given, coloca o sistema em um estado conhecido ○ When, descreve a ação executada ○ Then, observa os resultados
  • 26. Gherkin - Exemplo vending machine Feature: Diagnosticar sensores pelo browser Como um técnico, eu gostaria de consultar o estado de cada sensor pelo browser, para definir quais os reparos serão necessários. Scenario: Diagnosticar sensor com falha Given acesso a página de manutenção And o termômetro apresentando falha When eu inicio um diagnóstico de sensores pelo botão “diagnosticar”, Then o resultado indica erro de leitura somente na temperatura
  • 27. Gauge https://gauge.org ● Ferramenta criada pela Thoughtworks ● Licença GPL-3 ● Suporta múltiplas linguagens: Ruby, Java, C#, Python e Javascript ● Baseado em markdown ● Suporta o conceito de documentação executável
  • 28. Gauge https://docs.gauge.org/longstart.html ● Terminologias ○ Specifications, descrição de feature (arquivo) ○ Specification Heading, descrição de feature (título) ○ Scenarios, mesmo que no Gherkin ○ Steps, vale por Given/When/Then
  • 29. Gauge - Exemplo vending machine Diagnosticar sensores pelo browser =========================== O técnico deve ser capaz de consultar o estado de cada sensor pelo browser Diagnosticar sensor com falha ---------------------------------------- * O técnico acessa a página de diagnóstico através do browser * Inicia um diagnóstico de sensores pelo botão “diagnosticar” * O resultado indica erro de leitura somente na temperatura
  • 30. Frameworks ● Cucumber ● https://cucumber.io ● Licença MIT ● Suporta Gherkin ● Inicialmente feito para Ruby, mas possui suporte para diversas linguagens, incluindo C++, JavaScript e Lua
  • 31. Frameworks ● Behave ● https://pythonhosted.org/behave/ ● Licença MIT ● Suporta Gherkin ● Suporte para Python
  • 32. Frameworks ● E muito mais ... Ferramenta Linguagem Licença pytest-bdd Python MIT SpecFlow C# BSD-3 Lettuce Python GPL-3.0 Chai JavaScript MIT behat PHP MIT
  • 33. Integração Contínua ● BDD não é dependente de CI ● Contudo, acreditamos que automação e CI podem contribuir para um melhor desenvolvimento ● Frameworks para automação de teste podem ser combinados com CI ○ Exemplo: Behave + Splinter + Gitlab ● Segunda parte desta apresentação visitará a prática neste campo
  • 34. Ciladas ● Ciladas são anti-patterns do BDD ● Analista ou PO escreve os cenários e passa a frente ○ Desvio entre os “3 amigos” ○ Problema em descobrir o cenário ○ Não estará revisando o documento ○ Feedback poderá não ser eficiente
  • 35. Ciladas ● O Testador escreve os cenários no final para implementar os testes automatizados ○ Mas ele usa Behave ○ Mas é para cobrir código legado
  • 36. Ciladas ● O desenvolvedor inventa os cenários quando o encontro dos “3 amigos” não resulta em algo válido ○ Idealmente sessão deve resultar em exemplos concretos ○ Ou pelo menos em cenários válidos
  • 37. Ciladas ● Os cenários são mais focados em detalhes ao invés de valores do negócio ○ Quando “O quê” vem na frente de “Por quê?” e “Como” ○ Importante se perguntar o porquê estão escrevendo o cenário
  • 38. Benefícios do BDD ● Redução de tempo ○ Ajuda as equipes a se concentrar em recursos alinhados com os objetivos comerciais ○ Desenvolver o software certo diminui no número de bugs
  • 39. Benefícios do BDD ● Mudanças mais fáceis e seguras ○ Qualquer é fácil de ser compreendida por ambos os lados ○ A documentação acompanha o software ● Entregas mais rápidas ○ Não é mais necessário escrever uma descrição de teste durante a homologação
  • 40. Desafios para implementar BDD ● BDD requer grande envolvimento e colaboração comercial ● BDD funciona melhor usando contexto Agile or iterativo ● BDD não funciona bem em um ambiente isolado ● Testes pobres podem levar a maiores custos de manutenção
  • 41. REFERÊNCIAS John Ferguso Dan North Agile Alliance Martin Fowler BDD in Action Rodrigo Urubatan