BDD (Behavior-Driven Development)

  • View
    1.084

  • Download
    6

Embed Size (px)

Text of BDD (Behavior-Driven Development)

  1. 1. Renato Groffe Maio/2015
  2. 2. Mais de 15 anos de experincia na rea de Tecnologia Ps-graduao em Engenharia de Software nfase em SOA Cursando MBA em Business Intelligence (FIAP) Graduao em Sistemas de Informao Tcnico em Processamento de Dados MTAC (Microsoft Technical Audience Contributor), MCP, Microsoft Specialist, MCTS, OCA, ITIL, COBIT
  3. 3. Pgina no Facebook https://www.facebook.com/RenatoGroffeSW Perfil no Facebook https://www.facebook.com/renatogroff LinkedIn http://br.linkedin.com/in/renatogroffe
  4. 4. Visual Studio 2013 (preferencialmente com o Update 4) SpecFlow Visual Studio Unit Testing Framework (tambm conhecido como MS Test)
  5. 5. Cenrios comuns dentro do desenvolvimento de software Test-Driven Development (TDD): uma viso geral Testes Unitrios no Visual Studio: um exemplo simples Behavior-Driven Development (BDD) BDD na plataforma .NET
  6. 6. Para efetuar o download das solues aqui apresentadas acesse: https://gallery.technet.microsoft.com/Exemplo-de-aplicaes-7dd7cbf1
  7. 7. Presses por rpida entrega Prazos muito curtos Equipes reduzidas Mudanas frequentes em requisitos reas de Negcio e Tcnica no falam mesma lngua Testes no so levados to a srio como se deveria
  8. 8. Conciliar tempo reduzido com mudanas frequentes ao longo do projeto Busca de equilbrio entre qualidade e produtividade Melhoria na comunicao entre os envolvidos em um projeto XP (Extreme Programming) e Scrum so os exemplos mais famosos
  9. 9. Testes unitrios so uma forma rpida e flexvel de se validar classes e mtodos trata-se de uma proposta em conformidade com o conceito gil XP foi um dos primeiros mtodos geis a incentivar o uso de testes unitrios automatizados Testes unitrios foram a base para o surgimento da metodologia conhecida como TDD (Test-Driven Development)
  10. 10. Rapidez na execuo Implementados com facilidade, normalmente a partir de um framework pr-existente Alternativas na plataforma .NET: Visual Studio Unit Testing Framework (MS Test) NUnit (http://www.nunit.org/) xUnit.net (https://github.com/xunit) Automatizados e repetveis Possibilitam reuso em aes futuras
  11. 11. Testes unitrios codificados antes mesmo da implementao das partes que sero submetidas a anlises evita-se assim a elaborao de testes viciados Prioriza-se uma melhor organizao do cdigo, favorecendo prticas como separao de responsabilidades, alta coeso e baixo acoplamento
  12. 12. A implementao de uma funcionalidade segue um ciclo chamado Red-Green-Refactor (os testes unitrios so executados em todos os estgios)
  13. 13. Clculo do Fatorial Casos de Teste: Classe esttica a ser implementada: Estrutura esperada para a soluo (Class Library + Unit Test Project):
  14. 14. Metodologia para desenvolvimento de softwares proposta por Dan North em 2006 (este especialista tambm criou o framework JBehave, primeira implementao de BDD voltada plataforma Java) Surgiu da experincia de North ministrando treinamentos sobre TDD, com o mesmo se deparando com a dificuldade de desenvolvedores em aplicar esta abordagem: Por onde comear com os testes unitrios? O que testar ou no? Quando e quanto testar? Que nomenclatura utilizar nos testes? Por quais razes um teste falhou?
  15. 15. Foco errado na adoo de testes verificar aspectos e pontos isolados de uma aplicao muitas vezes no suficiente Depender apenas de testes unitrios no garantia nenhuma de sucesso comum que surjam problemas durante a verificao da integrao de diferentes partes de um sistema
  16. 16. Desenvolvedores experientes realizam testes enfatizando o comportamento das funcionalidades Testes de aceitao permitem a usurios finais simular operaes cotidianas, analisando se as expectativas foram atendidas Testes unitrios como documentao no so compreendidos por usurios de negcio (sem background tcnico)
  17. 17. Metodologia baseada em user stories (histrias): Histrias descrevem os comportamentos esperados para funcionalidades Uso de uma linguagem ubqua (em ingls ubiquitous language) vocabulrio comum baseado em elementos de negcio e dominado por todos os envolvidos no projeto Uma user story contm sentenas que seguem algumas regras de sintaxe de fcil compreenso Algumas sentenas representam cenrios simulaes de comportamento em diferentes situaes Frameworks permitem que as user stories sejam executadas como testes automatizados
  18. 18. Teste de aceitao User story que serve de base para a implementao de uma funcionalidade e posterior validao da mesma
  19. 19. Melhor comunicao entre os profissionais envolvidos em um projeto padronizao atravs de uma linguagem comum Documentao simples e gerada de forma dinmica Facilita o compartilhamento de conhecimentos a respeito de um projeto User stories apresentam objetivos mais claros e bem definidos desenvolvedores trabalham de forma mais direcionada Instrumento de grande valia em equipes que seguem metodologias geis (como em Scrum, no qual tambm se empregam user stories)
  20. 20. O SpecFlow talvez hoje a principal soluo para a adoo das prticas de BDD em projetos no Visual Studio Site: http://www.specflow.org/ Baseado em um framework chamado Cucumber, o qual foi concebido inicialmente para a linguagem Ruby Empregado em conjunto com frameworks de testes unitrios (MS Test, NUnit) Faz uso de um mecanismo conhecido como Gherkin Parser que se baseia na utilizao de uma linguagem estruturada Sintaxe simples e no-tcnica, capaz de ser entendida por pessoas da rea de negcios Possui suporte internacionalizao
  21. 21. Instalao de extenso para uso do SpecFlow menu Tools
  22. 22. Extenso que integra o SpecFlow ao Visual Studio
  23. 23. Classe a ser criada: Converso de temperatura em graus Fahrenheit (F) para o equivalente nas escalas Celsius (C) e Kelvin (K): Estrutura esperada para a soluo (Class Library + Unit Test Project):
  24. 24. Adicionar o SpecFlow ao projeto de testes via NuGet:
  25. 25. Alterar o app.config do projeto de testes, de forma que a user story possa ser escrita em portugus (alm de utilizar o framework MS Test):
  26. 26. Adicionar uma Feature ao projeto de testes:
  27. 27. Embora o contedo inicial do arquivo ConvTemperatura.feature esteja em ingls, o Visual Studio j exibir como opes palavras-chaves em portugus:
  28. 28. A user story/especificao a ser criada dever levar em conta os seguintes casos de teste:
  29. 29. A seguir est um possvel contedo para a user story:
  30. 30. O prximo passo ser a criao de uma classe baseada no template SpecFlow Step Definition esta estrutura far a conexo entre a user story e a classe ConversorTemperatura:
  31. 31. Em termos prticos, este novo arquivo conter uma classe responsvel por validar os diferentes cenrios especificados anteriormente:
  32. 32. Expresses regulares sero utilizadas como placeholders, a fim de possibilitar a correta leitura dos parmetros Cada mtodo definido em ConvTemperaturaStepDefinition corresponde ao mapeamento de uma sentena definida na user story (os atributos equivalem s palavras-chaves em ingls):
  33. 33. Uma possvel implementao para ConvTemperaturaStepDefinition (utilizando a classe Assert do framework MS Test) seria:
  34. 34. possvel tanto a execuo, quanto o debug de uma user story:
  35. 35. Num primeiro momento a execuo da user story resultar em falhas em todos os cenrios:
  36. 36. Regras para a implementao da classe ConversorTemperatura: C = (F 32) / 1,8 K = C + 273,15
  37. 37. Uma possvel implementao da classe ConversorTemperatura:
  38. 38. Uma nova execuo da user story indicar ento sucesso em todos os cenrios:
  39. 39. Uma possvel refatorao da classe ConversorTemperatura:
  40. 40. Aps a refatorao:
  41. 41. Dvidas, sugestes???
  42. 42. Behavior Driven Development (BDD) com Specflow http://www.devmedia.com.br/behavior-driven-development-bdd- com-specflow/29405 Introducing BDD http://dannorth.net/introducing-bdd/ Testes Unitrios no Visual Studio http://www.devmedia.com.br/testes-unitarios-no-visual-studio- 2012/27215 TDD - Test-Driven Development http://pt.slideshare.net/renatogroff1/tdd-renato-groffe
  43. 43. Obrigado!!!