BDD com Cucumber

  • View
    1.541

  • Download
    0

Embed Size (px)

DESCRIPTION

Introdução ao BDD com Cucumber

Text of BDD com Cucumber

  • 1. DesenvolvimentoBaseado em TestesBDD + CucumberEduardo Mendesedumendes@gmail.com

2. @dudumendesIntroduo 3. AgendaBDDCucumber 4. @dudumendesBDD 5. TDD Abordagem de desenvolvimento de software em que os testes direcionam a implementao do software 6. TDDFavorece o design de softwareExpressa o comportamento do cdigoDocumenta o cdigo 7. @dudumendesTestes unitrios Uma forma de aplicar o TDD Traduzem as expectativas dos desenvolvedores sobre o comportamento do cdigo Fragilidade: Muito acoplado implementao No traduz as expectativas dos usurios 8. Expectativas dos usuriosCasos de UsoEstrias de UsurioAmbas no possuem mecanismos de validao quetraduzam as expectativas dos usurios 9. @dudumendes BDDBehaviour Driven Development 10. @dudumendesBDDBehaviour Driven Design 11. @dudumendesBDDBehaviour-Driven Development is about implementingan application by describing its behaviour from theperspective of its stakeholders. David Chemlimsky 12. Entender o mundo a partir da visao doBDD STK_HD Para entregar COISAS UTEIS Entender o seu domnio Seus desafios e oportunidades As palavras que ele usa para descrever o comportamento que ele quer da aplicao Mais que da viso de um stakeholder Do ponto de vista de qualquer que estDesenvolvimento orientado a comportamento diz envolvido no projetorespeito a implementar uma aplicao pela descriodo seu comportamento a partir da perspectiva de seusstakeholders. David Chemlimsky 13. Behaviour Driven DevelopmentUma abordagem no estilo TDDDocumentao executvelMelhora a comunicao dos timesEsclarece os mal-entendimentos entre clientes,especialistas de domnio, desenvolvedoresPode ser utilizada por todos os envolvidos noprojeto 14. @dudumendesBDDPrincpiosEnough is enoughDeliver stakeholder valueIts all behaviour 15. @dudumendesBDDPrincpiosO bastante o bastanteTrabalhar para alcanar as expectativas dos stakeholders, masevitar fazer mais do que se necessrio fazerEntregar valor ao stakeholderSe voc est fazendo algo que no entrega valor ou no aumentasua habilidade de entrega de valor, pare e faa outra coisaTudo sobre comportamentoAssim como podemos descrever o comportamento a partir daperspectivas dos stakeholders, tambm podemos descrever ocomportamento de um cdigo a partir de outro cdigo que o utiliza 16. @dudumendesredCiclo do BDDredrefactor green refactor Passo green Cenrio 17. @dudumendesBDDO Ciclo Stakeholder e analista discutem os requisitosos requisitos so organizados em funcionalidades(features)podem ser quebradas em estriasfazem sentido para o stakeholder 18. @dudumendesBDDO Ciclo Stakeholder, analista e testador determinam os escopos das estriaso analista pensa na funcionalidade de forma geralo testador pensa em cenrios concretos, comvalores de entradas e sada 19. @dudumendesBDDO Ciclo Cenrios prioritrios so identicadosStakeholder especica exatamente o que querentregueDesenvolvedores implementam o bastante parasatisfazer os cenrios e nada mais 20. @dudumendesBDDO Ciclo DesenvolvedoresAutomatizam cenrios que orientam odesenvolvimentoDescrevem comportamentos esperadosImplementam os comportamentosRefatoram 21. @dudumendesProcesso do BDD 22. @dudumendesEstrias no BDD 23. BDDEstrias e Comportamento Estrias Correspondem s Estrias de Usurio Expressam o comportamento das explicaes em alto nvel Necessidade de frameworks de estrias Cucumber, JBehave 24. BDDEstrias e ComportamentoComportamento (ou Spec)Correspondem s expectativas em nvel declasseExpressam o comportamento a nvel de servio/componente 25. Estrias e ComportamentoEstrias de UsurioFormado por um conjunto de Cenrios(Scenarios)critrios de aceitaoCada cenrios possuientradas, eventos e resultadosUtilizados em projetos geisBehaviourExpressado como mtodos de testesDene o que aplicao deve e no deve fazer 26. Estrutura de uma estriaConnextra Format Ttulo Narrativa As a [algum_papel] I want [alguma_necessidade] So that [benecio/valor_da_caracteristica] Critrios de aceitao (cenrios) Given [alguma(s)_condicao(oes)] When [evento_ocorrer] Then [certico_algum_resultado] 27. Estrutura de uma estriaTtuloNarrativaComo um [algum_papel]Eu quero [alguma_necessidade]Para que [benecio/valor_da_caracteristica]Critrios de aceitao (cenrios)Dado [alguma(s)_condicao(oes)_entrada]Quando [evento_ocorrer]Ento [certico_algum_resultado] 28. redCiclo do BDDrefactorred gre refactor Passo gre Cenrio 29. @dudumendesCucumber 30. Cucumber Framework BDD Open Source baseado em RSpec Criado por Aslak Hellesy Verso atual 1.2.1 31. CucumberCaractersticasImplementao em RubyEstrias de usurio baseadas em textosSuporte a Injeo de dependncias 32. Cucumberem 03 passos Escrever uma estria e executar a estria (.feature) obter os snippets com os passos do teste Criar o arquivos de passos a partir dos snippets Dar implementao aos passos 33. @dudumendesCucumber em 03 passosPasso 1 - Escrever uma estria 34. Estrutura de uma estria Narrativa As a [algum_papel] I want [alguma_necessidade] So that [benecio/valor_da_caracteristica] Cenrio Given [alguma(s)_condicao(oes)] When [evento_ocorrer] Then [certico_algum_resultado] 35. Estrutura de uma estria Narrative: In order to [benecio/valor_da_caracteristica] As a [algum_papel] I want to [alguma_necessidade] Scenario: Nome do Cenrio Given [alguma(s)_condicao(oes)] When [evento_ocorrer] Then [certico_algum_resultado] 36. @dudumendesEstrias no Cucumberarquivosde texto com extenso .featurelocalizaodiretrio featureso comando procura por um diretrio featuresexecuocomando cucumber busca o diretrio 37. Cucumber em 03 passosPasso 1 - Escrever uma estriaFeature: greeter says helloIn order to test CucumberAs a developerI want a greeter to say helloScenario: greeter says helloGiven a greeterWhen I send it the greet messageThen I should see "Hello Cucumber"gretter_say_hello.feature 38. @dudumendescucumber 39. @dudumendescontinuao: snippets 40. @dudumendesResultadoO cucumber encontrou a featuretentou execut-lamas no sabe como execut-laO cucumber sugeriu algumas dicas do cdigo 41. @dudumendesCucumber em 03 passosPasso 2 - Criar o arquivo de passos 42. @dudumendesEstrias no Cucumberarquivosem Ruby com suxo _stepslocalizaofeatures/step_denitionsexecuocomando cucumber 43. @dudumendes greeter_steps.rbGiven /^a greeter$/ dopending # express the regexp above with the code you wish you hadendWhen /^I send it the greet message$/ dopending # express the regexp above with the code you wish you hadendThen /^I should see "(.*?)"$/ do |arg1|pending # express the regexp above with the code you wish you hadend 44. @dudumendesCucumber em 03 passosPasso 3 - Dar implementao s estrias 45. @dudumendesgreeter_steps.rbGiven /^a greeter$/ do@greeter = CucumberGreeter.newendWhen /^I send it the greet message$/ do@message = @greeter.greetendThen /^I should see "(.*?)"$/ do |greeting|@message.should == greetingend 46. @dudumendes 47. @dudumendesclass CucumberGreeterdef greet"Hello Cucumber"endendGiven /^a greeter$/ do@greeter = CucumberGreeter.newendWhen /^I send it the greet message$/ do@message = @greeter.greetendThen /^I should see "(.*?)"$/ do |greeting|expect(@message).to eql greetingend 48. @dudumendes 49. Cucumber PassosEscrever uma estriaArquivo de texto de extenso .featureRecuperar os snippetsCriar o arquivo de passos 50. Estrias no CucumberEstrias em arquivos de textos01 Narrativa (Narrative)* Cenrios (Scenarios)NarrativaOpcionalAs a, In order to, I want to 51. Cenrios no CucumberCenrios consistem em:TtuloPassos:Given, When, ThenAnd possvel colocar then antes do whenCenrios podem depender de outrosComentrios (!-- ) 52. @dudumendesGherkinFeaturesStep denitionsFeature: AplicaoScenario:Given When ThenInternacionalizaoIngls o padro# language: pt 53. @dudumendesGherkinFeatureThenScenario AndScenario Outline ButScenarios|GivenWhen # 54. @dudumendesGherkin --i18n cucumber --i18n pt 55. @dudumendesExerccio Criar uma verso em portugus para o Hello World 56. Esquema de CenriosScenario Outline comum em testes de aceitao denir-se exemplosde cenrios reais com valores para vericar o estadode pronto da aplicaoNeste caso possvel se utilizar esquemas de cenrios 57. Esquemas de cenriosNos cenrios os parmetros devem ser envolvidoscom sinais < e >Eles devem ser declarados como esquemas decenriosAps um cenrio informam-se os valores vlidos paraos parmetros em um tabela determinada porCenrios: 58. @dudumendes# language: ptFuncionalidade: Depositar DinheiroEsquema do Cenrio: Depositar DinheiroDado um cliente especial com saldo atual de reaisQuando ele realizar um deposito no valor reaisEnto o deposito deve ser realizadoE o saldo da conta atualizado para reaisCenarios: valores possiveis| saldo_inicial | deposito | saldo_final || 200 | 100 | 300 || 200 | 100 | 300 || 200 | 100 | 300 || 200 | 100 | 300 | 59. @dudumendesO comando cucumber 60. @dudumendesOrganizando featuresComando cucumber sem opessero procurados todos os arquivos .rb e .featureabaixo do diretrio featuresgera snippets para features indenidascada Cenrio e Passo tem comentrios no nal dalinhalocalizao do cenrionome do arquivo e nmero da linha 61. @dudumendes# language: ptFuncionalidade: Futuro hospede reserva um quartoA fim de proporcionar mais comodidadeComo dono do hotelEu gostaria que os futuros hospedes reservassem quartos pela internetCenario: Reserva com sucessoDado um hotel com "10" quartos e "0" reservas 62. @dudumendesOrganizando features 63. @dudumendesOrganizando featuresComando cucumber sem opessero procurados todos os arquivos .rb e .featurePara projetos pequenoscaminho mais simples organizar os arquivos dentro dodiretrio featuresPara projetos maiorescrie subdiretorios para cada feature vrios arquivos em cada diretrio com um subconjunto de cerios coesos 64. @dudumendesOrganizando featuresfeatures segurocucumber featuresmedicoexecuta todosdentario cucumber features/segurovidaapenas os de seguro previdencia cucumber f