Behavior-Driven Development
DESENVOLVIMENTO ORIENTADO A COMPORTAMENTO
Renato Groffe
Microsoft Technical Audience Contributor (MTAC), MCP, MCTS, OCA, ITIL, COBIT
Mais de 15 anos de experiência na área de Tecnologia
Articulista e Palestrante (Devmedia, .NET Magazine,
Canal .NET, .NET Coders, TechNet Wiki)
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 aceitação
◦ 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/ExemploBDD_GDGSP
Dúvidas?
Obrigado!

BDD (Behavior-Driven Development) - GDG-SP - Julho/2016

  • 1.
  • 2.
    Renato Groffe Microsoft TechnicalAudience Contributor (MTAC), MCP, MCTS, OCA, ITIL, COBIT Mais de 15 anos de experiência na área de Tecnologia Articulista e Palestrante (Devmedia, .NET Magazine, Canal .NET, .NET Coders, TechNet Wiki) 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 aceitação ◦ 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.