Behavior-Driven Development
OU COMO CODIFICAR TESTES COM UMA LINGUAGEM AMIGÁVEL
Renato Groffe
Microsoft Most Valuable Professional (MVP)
Microsoft Technical Audience Contributor (MTAC)
MCP, MCTS, OCA, ITIL, COBIT
Mais de 15 anos de experiência na área de Tecnologia
Articulista e Palestrante
Contatos
◦ Facebook: https://www.facebook.com/renatogroff
◦ Site: http://renatogroffe.net/
◦ Canal .NET: https://www.facebook.com/canaldotnet
◦ LinkedIn: http://br.linkedin.com/in/renatogroffe
Agenda
◦ Testes de software e sua importância
◦ Behavior-Driven Development
◦ Exemplo prático utilizando o framework SpecFlow
Por que testar um software?
◦ Garantir que o projeto atende às especificações
◦ Detectar falhas e defeitos antes da subida para produção
Alguns tipos de testes
◦ Teste de unidade
◦ Teste de integração
◦ Teste de sistema
◦ Teste de regressão
Software esperado x entregue
A área de software atualmente (ainda...)
Testes são realmente importantes?
Cenários comuns – área de software
◦ Pressões por rápida entrega
◦ Prazos muito curtos
◦ Equipes reduzidas
◦ Mudanças frequentes em requisitos
◦ Áreas de Negócio e Técnica não falam mesma língua
◦ Testes não são levados tão a sério como se deveria
Surgem as metodologias ágeis...
Metodologias ágeis
◦ Conciliar tempo reduzido com mudanças frequentes ao longo do
projeto
◦ Busca de equilíbrio entre qualidade e produtividade
◦ Melhoria na comunicação entre os envolvidos em um projeto
◦ XP (Extreme Programming) e Scrum são os exemplos mais famosos
Metodologias ágeis e testes de unidade
◦ Testes de unidade são uma forma rápida e flexível de se validar
classes e métodos
◦ XP foi pioneiro na adoção desta prática
◦ Foram a base para o surgimento de TDD (Test-Driven
Development)
Testes de unidade bem definidos
◦ Rapidez na execução
◦ Implementados com facilidade, a partir de um framework pré-
existente
◦ Automatizados e repetíveis
◦ Possibilitam reuso em ações futuras
Test-Driven Development (TDD)
◦ Desenvolvimento cíclico baseado na
codificação e execução de testes de
unidade
◦ Testes são escritos antes mesmo da
codificação de classes ou métodos
◦ Abordagem comumente associada às
metodologias ágeis
Test-Driven Development (Red-Green-Refactor)
Um exemplo (xUnit.net)
Dificuldades na adoção de TDD
◦ Verificar pontos isolados (métodos, classes) nem sempre é uma solução
eficiente ou garantia de sucesso
◦ Problemas costumam surgir durante a integração de partes relacionadas
◦ Testes de unidade são compreendidos apenas por pessoas com um perfil
mais técnico
E como superar tais dificuldades?
A abordagem conhecida como Behavior-Driven Development pode
ser uma resposta a esta pergunta
Behavior-Driven Development (BDD)
◦ Metodologia de desenvolvimento proposta por Dan North em 2006
◦ User stories (histórias) descrevem o comportamento de features
(funcionalidades)
Estrutura de uma user story
Behavior-Driven Development (BDD)
◦ Ciclo de desenvolvimento muito semelhante àquele existente para TDD
Behavior-Driven Development (BDD)
◦ As histórias fazem uso de uma linguagem ubíqua (compreendida por todos
os envolvidos no projeto)
Behavior-Driven Development (BDD)
◦ Frameworks permitem que as user stories sejam executadas como testes de
aceitação ou regressão a partir de uma IDE
◦ Cucumber → primeira ferramenta a suportar BDD e base utilizada pelos principais
frameworks
◦ Gherkin → mecanismo utilizado pelo Cucumber para interpretar uma história;
suporte à internacionalização
BDD - Benefícios
◦ Melhor comunicação entre os profissionais envolvidos em um projeto
◦ Documentação simples e gerada de forma dinâmica
◦ Facilita o compartilhamento de conhecimentos a respeito de um projeto
◦ User stories apresentam objetivos mais claros e bem definidos
◦ Instrumento de grande valia em equipes que seguem metodologias ágeis
BDD e a plataforma .NET
◦ A opção mais utilizada na atualidade é o framework gratuito SpecFlow
http://www.specflow.org/
◦ O SpecFlow trabalha com especificações de funcionalidades, baseando-se para isto
em user stories
◦ Cenários correspondem a diferentes casos de teste no SpecFlow
◦ A utilização do SpecFlow costuma acontecer em conjunto com outros frameworks
SpecFlow e outros frameworks
◦ MS Test, Nunit, xUnit.net, Selenium, Moq e Nsubstitute são algumas das
opções possíveis...
MS Test
Exemplo prático
Recursos Utilizados
◦ Microsoft Visual Studio Community 2015 Update 3
◦ MS Test
◦ SpecFlow
Exemplo de uso do SpecFlow
◦ Funcionalidade para conversão de alturas em pés para o equivalente em
metros
◦ Classe a ser implementada:
Exemplo de uso do SpecFlow
◦ Fórmula a ser considerada:
◦ Casos de teste:
◦ Considerar 4 casas decimais para arredondamento da distância em metros
Distância em m = Pés * 0,3048
Exemplo de uso do SpecFlow
◦ User story:
Fontes:
https://github.com/renatogroffe/ExemploBDDQANinjaConf
Dúvidas?
Obrigado!

Behavior-Driven Development (BDD) - QA Ninja Conf 2016

  • 1.
    Behavior-Driven Development OU COMOCODIFICAR TESTES COM UMA LINGUAGEM AMIGÁVEL
  • 2.
    Renato Groffe Microsoft MostValuable Professional (MVP) Microsoft Technical Audience Contributor (MTAC) MCP, MCTS, OCA, ITIL, COBIT Mais de 15 anos de experiência na área de Tecnologia Articulista e Palestrante Contatos ◦ Facebook: https://www.facebook.com/renatogroff ◦ Site: http://renatogroffe.net/ ◦ Canal .NET: https://www.facebook.com/canaldotnet ◦ LinkedIn: http://br.linkedin.com/in/renatogroffe
  • 3.
    Agenda ◦ Testes desoftware e sua importância ◦ Behavior-Driven Development ◦ Exemplo prático utilizando o framework SpecFlow
  • 4.
    Por que testarum software? ◦ Garantir que o projeto atende às especificações ◦ Detectar falhas e defeitos antes da subida para produção
  • 5.
    Alguns tipos detestes ◦ Teste de unidade ◦ Teste de integração ◦ Teste de sistema ◦ Teste de regressão
  • 6.
  • 7.
    A área desoftware atualmente (ainda...)
  • 8.
  • 9.
    Cenários comuns –área de software ◦ Pressões por rápida entrega ◦ Prazos muito curtos ◦ Equipes reduzidas ◦ Mudanças frequentes em requisitos ◦ Áreas de Negócio e Técnica não falam mesma língua ◦ Testes não são levados tão a sério como se deveria
  • 10.
  • 11.
    Metodologias ágeis ◦ Conciliartempo reduzido com mudanças frequentes ao longo do projeto ◦ Busca de equilíbrio entre qualidade e produtividade ◦ Melhoria na comunicação entre os envolvidos em um projeto ◦ XP (Extreme Programming) e Scrum são os exemplos mais famosos
  • 12.
    Metodologias ágeis etestes de unidade ◦ Testes de unidade são uma forma rápida e flexível de se validar classes e métodos ◦ XP foi pioneiro na adoção desta prática ◦ Foram a base para o surgimento de TDD (Test-Driven Development)
  • 13.
    Testes de unidadebem definidos ◦ Rapidez na execução ◦ Implementados com facilidade, a partir de um framework pré- existente ◦ Automatizados e repetíveis ◦ Possibilitam reuso em ações futuras
  • 14.
    Test-Driven Development (TDD) ◦Desenvolvimento cíclico baseado na codificação e execução de testes de unidade ◦ Testes são escritos antes mesmo da codificação de classes ou métodos ◦ Abordagem comumente associada às metodologias ágeis
  • 15.
  • 16.
  • 17.
    Dificuldades na adoçãode TDD ◦ Verificar pontos isolados (métodos, classes) nem sempre é uma solução eficiente ou garantia de sucesso ◦ Problemas costumam surgir durante a integração de partes relacionadas ◦ Testes de unidade são compreendidos apenas por pessoas com um perfil mais técnico
  • 18.
    E como superartais dificuldades? A abordagem conhecida como Behavior-Driven Development pode ser uma resposta a esta pergunta
  • 19.
    Behavior-Driven Development (BDD) ◦Metodologia de desenvolvimento proposta por Dan North em 2006 ◦ User stories (histórias) descrevem o comportamento de features (funcionalidades)
  • 20.
    Estrutura de umauser story
  • 21.
    Behavior-Driven Development (BDD) ◦Ciclo de desenvolvimento muito semelhante àquele existente para TDD
  • 22.
    Behavior-Driven Development (BDD) ◦As histórias fazem uso de uma linguagem ubíqua (compreendida por todos os envolvidos no projeto)
  • 23.
    Behavior-Driven Development (BDD) ◦Frameworks permitem que as user stories sejam executadas como testes de aceitação ou regressão a partir de uma IDE ◦ Cucumber → primeira ferramenta a suportar BDD e base utilizada pelos principais frameworks ◦ Gherkin → mecanismo utilizado pelo Cucumber para interpretar uma história; suporte à internacionalização
  • 24.
    BDD - Benefícios ◦Melhor comunicação entre os profissionais envolvidos em um projeto ◦ Documentação simples e gerada de forma dinâmica ◦ Facilita o compartilhamento de conhecimentos a respeito de um projeto ◦ User stories apresentam objetivos mais claros e bem definidos ◦ Instrumento de grande valia em equipes que seguem metodologias ágeis
  • 25.
    BDD e aplataforma .NET ◦ A opção mais utilizada na atualidade é o framework gratuito SpecFlow http://www.specflow.org/ ◦ O SpecFlow trabalha com especificações de funcionalidades, baseando-se para isto em user stories ◦ Cenários correspondem a diferentes casos de teste no SpecFlow ◦ A utilização do SpecFlow costuma acontecer em conjunto com outros frameworks
  • 26.
    SpecFlow e outrosframeworks ◦ MS Test, Nunit, xUnit.net, Selenium, Moq e Nsubstitute são algumas das opções possíveis... MS Test
  • 27.
  • 28.
    Recursos Utilizados ◦ MicrosoftVisual Studio Community 2015 Update 3 ◦ MS Test ◦ SpecFlow
  • 29.
    Exemplo de usodo SpecFlow ◦ Funcionalidade para conversão de alturas em pés para o equivalente em metros ◦ Classe a ser implementada:
  • 30.
    Exemplo de usodo SpecFlow ◦ Fórmula a ser considerada: ◦ Casos de teste: ◦ Considerar 4 casas decimais para arredondamento da distância em metros Distância em m = Pés * 0,3048
  • 31.
    Exemplo de usodo SpecFlow ◦ User story:
  • 32.
  • 33.
  • 34.