14
Cucumber – Um breve review Felipe Haack Schmitz, Henrique Becker e La´ ıs de Figueiredo Berlatto Universidade de Passo Fundo – Curso de Ciˆ encia da Computac ¸˜ ao Disciplina de Qualidade e Teste de Software

Cucumber: um breve review

Embed Size (px)

DESCRIPTION

Trabalho acerca da ferramenta Cucumber

Citation preview

Page 1: Cucumber: um breve review

Cucumber – Um breve review

Felipe Haack Schmitz, Henrique Becker e Laıs de Figueiredo Berlatto

Universidade de Passo Fundo – Curso de Ciencia da ComputacaoDisciplina de Qualidade e Teste de Software

Page 2: Cucumber: um breve review

2

0.1 ResumoIntroduz-se a ferramenta Cucumber, explicando-se a ligacao da ferramenta com a tecnica deprogramacao BDD. A relacao do BDD com a ferramenta e demonstrada, tanto em termos dodesign da mesma, quanto historicos. E feita uma revisao das varias linguagens e ambientessuportados pela ferramente, sem, no entanto, o objetivo de ser um revisao exaustiva. O funci-onamento basico da ferramenta e descrito, e apresenta-se um relatorio da instalacao e uso damesma, em um ambiente definido, para uma aplicacao escolhida. Por fim, nas consideracoesfinais, e levanta-se a hipotese que a principal desvantagem encontrada na ferramenta possavir a ser considerada, tambem, a sua maior vantagem.

0.2 IntroducaoCucumber (pepino, em ingles) e uma ferramenta[1] e um framework[2] para automacao detestes de aceitacao, fundamentada na tecnica de programacao BDD (Behavior Driven Deve-lopment, em ingles, ou desenvolvimento orientado ao comportamento, em uma traducao li-vre). O conceito desta ferramenta e a sua criacao estao intrinsecamente ligados a essa tecnicade programacao (“Embora Cucumber possa ser vista como uma ferramenta ‘para teste’, oobjetivo da ferramenta e dar suporte ao BDD”[1]), faz-se necessario, portanto, uma brevedescricao dessa tecnica.

O BDD pode ser visto como uma evolucao da tecnica de programacao TDD[3] (TestDriven Development, em ingles, ou desenvolvimento orientado a testes, em uma traducaolivre), e compartilha com essa tecnica a caracterıstica principal de se escrever testes antes deescrever a implementacao do que esta sendo testado, para entao desenvolve-la ate que o testepasse. Outra forma de se ver o BDD e como uma nova compreensao sobre o processo deTDD que estabelece que o teste nao e o ponto central real da tecnica, mas sim a descoberta ecompreensao, atraves da definicao dos testes, do comportamento que esta se querendo obtercom um codigo[4].

O processo de BDD incrementa o TDD de forma a resolver algumas questoes em aberto1

com as seguintes praticas: cada funcionalidade deve ser claramente compreendida por am-bas partes (desenvolvedores e clientes), para isso se deve usar uma linguagem para os ca-sos de teste compreensıvel a ambas partes, uma vez que os casos de teste sao na realidadeespecificacoes de comportamento; cada funcionalidade deve possuir um valor claro e veri-ficavel para o negocio, de modo a priorizar o mais importante e evitar o que pode nao vira ser necessario; deve-se planejar a frente o mınimo possıvel, escrevendo testes para o me-nor e mais prioritario subconjunto de funcionalidades possıvel e o desenvolvendo antes deadicionar mais funcionalidades[3].

1Nao se entrara em detalhes sobre estas questoes, para mais informacoes leia http://en.wikipedia.org/w/index.php?title=Behavior_Driven_Development&oldid=498181922

Page 3: Cucumber: um breve review

3

0.3 A ferramenta CucumberCucumber foi, originalmente, escrito em Ruby e sua implementacao de referencia (e mais uti-lizada) ainda o e[5], mas ela possui uma serie de implementacoes em outras linguagens, comoveremos em uma das proximas secoes. Independentemente disso, porem, o Cucumber podeser usado com diversas bibliotecas que simulam ou fazem interfaces com navegadores[1],sendo possıvel, desta forma, testar sites e aplicacoes web em, teoricamente, qualquer lingua-gem com qualquer de suas implementacoes.

Cucumber funciona basicamente atraves da leitura de arquivos com a extensao feature,os quais descrevem em linguagem natural uma funcionalidade e casos de teste (chamadoscenarios) para a mesma. Como os testes estao escritos em uma linguagem natural, e nao deprogramacao, Cucumber precisa pesquisar pelo codigo associado aos “passos” que formamo cenario em arquivos fonte auxiliares. A linguagem em que o codigo estara depende daimplementacao do Cucumber (na de referencia e Ruby). O “passo” (step, no original, emingles) e o nome dado a cada linha em linguagem natural (nos arquivos feature) com umaporcao especıfica de codigo associada a ela, em um arquivo fonte auxiliar, a essa porcao decodigo e dado o nome de “definicao do passo” (step definition, no original, em ingles)[6].

O uso do Cucumber pode ou nao implicar na programacao em Ruby (ou na linguagemda implementacao utilizada). Caso se utilize uma biblioteca de definicoes de passo pronta epossıvel somente escrever os arquivos feature a fim de utilizar o Cucumber. Esse comporta-mento, no entanto, foi criticado[7] causando repercursoes no uso dessas bibliotecas.

A interpretacao dos arquivos feature e feita pelo Gherkin. Gherkin e o nome dado a lin-guagem usada nos arquivos feature para o uso de linguagem natural, que consiste em algumapoucas palavras-chave fixas e regras de identacao, e e, tambem, o nome do interpretador dessalinguagem2. Algumas implementacoes (em especial a de referencia) fazem uso do Guerkin,outros reimplementam sua funcionalidade em sua linguagem[5]. Gherkin e considerada umalinguagem de domınio especıfico, legıvel para todos os envolvidos no negocio (o termo usadono original, em ingles, e Business Readable, Domain Specific Language)[8].

O arquivo feature do Cucumber e considerado uma “especificacao executavel” e, tambem,uma “documentacao viva”[9, p.1]. Ambos termos estao ligados ao fato destes arquivos ser-virem de documentacao, testes automatizados e suporte ao desenvolvimento em um unicoformato[10]. Uma especificacao do comportamento do sistema que cresce com ele, e podeser usada para verificar sua conformidade de forma automatizada.

0.4 HistoricoA historia do desenvolvimento do Cucumber e intrinsecamente ligada a criacao do BDDcomo ja foi dito na introducao a ferramenta. Dan North, criador do BDD, iniciou, em final de2003, a escrita de uma ferramenta para Java com o intuito de substituir o framework JUnit,com uma alternativa ligada ao BDD, chamada JBehave[11]. Em marco de 2006 um artigo

2A implementacao do Gherkin usada pela implementacao de referencia do Cucumber se encontra em:https://www.ruby-toolbox.com/projects/gherkin

Page 4: Cucumber: um breve review

4

introduzindo BDD foi publicado por ele na revista “Better Software”3. No final deste artigoele fala que Dave Astels estava promovendo a criacao de uma versao do JBehave (que erapara Java) para Ruby, o RBehave, na qual ele estava tambem envolvido.

O RBehave e integrado ao RSpec em torno de outubro de 2007, de forma que DavidChelimsky adiciona suporte a texto plano, evitando que as historias tenham de ser escritasem codigos-fonte em Ruby. O RSpec foi inspirado pelo Cucumber[12] e e hoje a ferramentamais popular dentro da categoria “Testing Frameworks” segundo o site “The Ruby Toolbox”4,Cucumber e mostrada como a ferramenta mais popular dentro da categoria “Acceptance TestFrameworks”.

Em abril de 2008, Aslak Hellesøy comeca o projeto Cucumber a fim de corrigir algunsproblemas no “RSpec Story Runner”[10]. Outros programadores citados na pagina oficialdo projeto5 tambem contribuıram a partir dali com melhoramentos pontuais e a manutencaodo projeto Cucumber. Em julho de 2011, o blog do site BestVendor6 divulgou uma pesquisafeita com 550 empregados em novas empresas, sendo metade delas na area de tecnologia, nelaCucumber aparece como a quinta ferramenta mais usada na secao “Frameworks de teste” com9%, enquanto RSpec aparece em primeiro lugar com 18%[13].

0.5 Ambientes e linguagens suportadosA primeira (e a principal atualmente) implementacao do Cucumber foi escrita em Ruby. Issosignifica que Cucumber executa sobre qualquer plataforma que possua suporte a linguagemRuby. A secao de downloads do site oficial da linguagem Ruby7 aponta os metodos parasua instalacao nas seguintes plataformas: Linux (Debian e Arch possuem pacotes prontos),MacOS (Tiger, Lion, Leopard e para Snow Leopard), Solaris (8 ao 10) e OpenIndiana eWindows. Alem disso e possıvel executar Ruby em qualquer plataforma que tenha umaJVM com suporte a JRuby. Algumas versoes do Cucumber portadas para outras linguagensapresentadas nesta secao tambem podem extender as plataformas nas quais se pode fazeruso do Cucumber. Os fontes da implementacao de referencia da linguagem estao escritosem C, e teoricamente tambem seria possıvel executa-lo sobre plataformas que possuam umcompilador C para sua arquitetura.

Cucumber nao tem nenhuma IDE padrao[9], embora possam ser encontrados plugins paravarias IDE’s genericas. Algumas das IDE’s que possuem suporte ou plugin para o Cucumbersao: Eclipse8, NetBeans9, Visual Studio10, Vim11 e Emacs12.

3O artigo encontra-se disponıvel, tambem, no seguinte endereco: http://dannorth.net/introducing-bdd/

4Cujo o endereco e: https://www.ruby-toolbox.com/5O endereco da pagina oficial do projeto Cucumber e: http://cukes.info/6Cujo o endereco e: http://blog.bestvendor.com/7A pagina oficial da linguagem Ruby se encontra no seguinte endereco: http://www.ruby-lang.

org/en/downloads/8Disponıvel em: http://github.com/QuBiT/cucumber-eclipse-plugin9Disponıvel em: http://www.pmamediagroup.com/2009/04/

what-netbeans-651-can-now-recognize-my-cucumber-feature-files/10Disponıvel em: http://github.com/henritersteeg/cuke4vs11Disponıvel em: http://www.vim.org/scripts/script.php?script_id=297312Disponıvel em: https://github.com/michaelklishin/cucumber.el

Page 5: Cucumber: um breve review

5

Cucumber (em pelo menos sua principal implementacao) se integra com varias bibliote-cas, as quais lhe permitem controlar um navegador. Desta forma e possıvel testar aplicacoesWeb escritas em qualquer linguagem, com uma boa variedade de opcoes de biblioteca enavegadors. Algumas das opcoes de bibliotecas sao: Webrat, Capybara, Watir WebDriver,Celerity e Selenium WebDriver13, alguns dos navegadores suportados por elas sao: InternetExplorer, Opera, Mozilla Firefox, Chrome, e navegadores proprios sem interface com e semsuporte a Javascript.

Observa-se que, no caso da implementacao principal ao menos, as definicoes dos passosainda terao de ser escritas em Ruby para os casos descritos acima. No entanto, Cucumbertambem foi portado para ser capaz de interagir com varias outras linguagens, e escreveras definicoes de passos nelas. Ha, por exemplo, o Cucumber-JVM, o qual possui suportenativo, nao so a Java como, tambem, Scala, Groovy, Clojure, Ioke, e suporte atraves deinterpretadores a JavaScript (pelo interpretador Rhino), Python (pelo interpretador Jython) eRuby (pelo interpretador JRuby). Ele e o sucessor do Cuke4Duke que era a implementacaoprincipal do Cucumber (em Ruby), rodando atraves do JRuby[14][15]. Pode-se executar oCucumber-JVM atraves da linha de comando ou do JUnit (e por consequencia atraves dequalquer coisa que use o JUnit).

Algumas outras linguagens suportadas sao C++14, Haskell15, Lua16, Ada17, PHP18, .NET19,Perl20, Objective-C (permitindo assim testar aplicacoes para o iPhone, mas nao no iPhone,com Cucumber21), entre outras, nao sendo viavel uma lista exaustiva.

Observa-se tambem, que uma busca no GitHub22 (atualmente o site mais popular parahospedagem de codigo aberto[16], e onde esta hospedado o projeto Cucumber original), em22 de junho de 2012, por repositorios com a palavra chave “cucumber” na descricao ou nomedo projeto, retornaria 1185 resultados categorizados em 27 linguagens. Nao foi viavel paraescrita deste trabalho a verificacao de quantos desses projetos sao relacionados a ferramentaCucumber e seu grau de relevancia. Uma rapida observacao dos cem primeiros resultadosindicou que poucos destes repositorios nao estavam relacionados a ferramenta.

Outros suportes a interacoes da ferramente com aplicacoes encontradas, mas que naocaem exatamente na categoria linguagens ou ambientes suportados foram: o uso do Cu-cumber como shell script[17], a interacao de Cucumber com o Excel[18], e com interfacesWPF[19].

13Para uma lista mais completa favor acessar: https://github.com/cucumber/cucumber/wiki/14Atraves do projeto cucumber-cpp, https://github.com/cucumber/cucumber-cpp/15Atraves do projeto haskell-cucumber, https://github.com/sakari/haskell-cucumber16Atraves do projeto calabash, https://github.com/pib/calabash/tree/

2c837819bd3d5c9fa618a06f898c5fc80c2bf48017Atraves do projeto XReq, http://xreq.forge.open-do.org/18Atraves do projeto Cuke4PHP, https://github.com/olbrich/cuke4php/wiki19Pelo projeto IronRuby, https://github.com/cucumber/cucumber/wiki/

IronRuby-and-.NET20Para a qual constam algumas implementacoes no GitHub, https://github.com/search?q=

cucumber&repo=&langOverride=&start_value=1&type=Repositories&language=Perl

21Projeto iCuke, https://github.com/unboxed/icuke22Essa busca pode ser re-executada per meio do seguinte endereco: https://github.com/search?

langOverride=&language=&q=cucumber&repo=&start_value=5&type=Repositories

Page 6: Cucumber: um breve review

6

0.6 Funcionamento basicoComecaremos a explanacao sobre o funcionamento do Cucumber pelo arquivo feature, e seuformato, que e a principal entrada da ferramenta. Cada arquivo de feature tem por objetivodescrever uma funcionalidade, para quem ela tem valor, e porque tem valor. Arquivos dotipo feature sao divididos em duas secoes, a feature (funcionalidade) em si, e os scenario(cenarios)[6].

Excerto de codigo 1 A secao feature do arquivo addition.featureFeature: Addition

In order to avoid silly mistakesAs a math idiotI want to be told the sum of two numbers

A secao feature e formada pelo nome da funcionalidade e uma historia. O nome dafuncionalidade pode ser usado para se referir a esta posteriormente, e a historia nao tem deseguir obrigatoriamente nenhum formato, nem tem alguma utilidade para ferramenta. Elaque da uma descricao informal da funcionalidade e explicita para quem ela e importante emotivo. A historia esta relacionada a filosofia do BDD, em especıfico, com um de seus tresprincipios basicos, o de que qualquer funcionalidade deve ter um valor claro e verificavelpara o negocio[3]. Como foi dito, ela nao possui nenhum formato obrigatorio, no entanto,a convencao usada nos exemplos proporcionados nos exemplos do repositorio que contem aferramenta e em sua Wiki e “In order . . . As a . . . I want . . . ” (Para . . . Como um . . . Eu quero. . . ). Outra convencao e “As a . . . I want . . . so that . . . ” (Como um . . . eu quero . . . de modoque . . . ), introduzida por Dan North (criador do BDD), em marco de 2006, em um artigo deintroducao ao BDD[11].

Excerto de codigo 2 Uma secao scenario do arquivo addition.featureScenario: Add two numbers

Given I have entered 50 into the calculatorAnd I have entered 70 into the calculatorWhen I press addThen the result should be 120 on the screen

Um arquivo feature possui uma secao feature e um numero qualquer de secoes scenario.Os cenarios sao basicamente casos de teste em alto nıvel, a intencao deles e formar a descricaodo comportamento da funcionalidade. Um cenario e formado pelo seu nome e pelos seuspassos. Os passos sao cada linha dentro da definicao de um cenario[6]. Ha tres principaispalavras chave que iniciam um passo, elas sao: Given (Dado que), When (Quando), e Then(Entao). Given e usado para inicializar o ambiente daquele cenario. When e usado paradescrever as acoes que devem ser executadas durante o teste. Then verifica se o teste deu oresultado esperado. Elas normalmente sao dadas na ordem que foi apresentada. A palavrachave And (e), tambem pode ser usada para adicionar mais um passo, ela tera o mesmosignificado da palavra-chave do passo imediatamente anterior[2].

Page 7: Cucumber: um breve review

7

Excerto de codigo 3 O fonte addition steps.rb que define os passos utilizados anteriormenteBefore do

@calc = Calculadora.newend

After doend

Given /I have entered (.+) into the calculator/ do |n|@calc.push n.to_i

end

When ’I press add’ do@result = @calc.soma

end

Then /the result should be (.+) on the screen/ do |result|@result.should == result.to_i

end

A definicao dos passos descritos nos arquivos feature e feita em codigos-fonte da lingua-gem utilizada pela implementacao do Cucumber. A sintaxe exata para definicao do passovaria para cada implementacao do Cucumber em uma diferente linguagem. Aqui foi apre-sentada a sintaxe em Ruby. As definicoes de passo usualmente consistem na palavra-chavecorrespondente e uma expressao regular que casa com o texto correspondente, escrito apos apalavra-chave, no arquivo feature.

Uma expressao regular e uma forma de denotar padroes23 em cadeias de caracteres. Oexcerto “(.+)”, por exemplo, pode ser decomposto em tres componentes, o “.”, o “+” e osparenteses envolvendo-os. O “.” casa com um caracter qualquer, e o “+” muda o significadodo sımbolo anterior (o “.” neste caso) para casar com uma ou mais ocorrencias do mesmo(neste caso um ou mais caracteres). Os parenteses informam que a porcao de texto que forcasada com a expressao dentro deles deve ser capturada como argumento (no caso do exemploisso significa que a sequencia de dıgitos naquela posicao da cadeia definira o valor de n, ouresult).

O uso de uma expressao regular, como pode ser visto acima, so e necessario caso sejanecessario capturar uma determinada porcao variavel do texto como argumento para o codigoda definicao do passo.

As secoes “Before do . . . end” (Antes faca . . . fim) e “After do . . . end” (Depois faca. . . fim) sao “hooks” (ganchos), elas permitem definir um bloco de codigo para ser execu-tado antes e depois, respectivamente, de cada cenario.

A convencao de organizacao dos arquivos do Cucumber e a seguinte: a pasta base se

23O artigo da wikipedia em ingles possui uma boa introducao a espressoes regulares: http://en.wikipedia.org/wiki/Regex

Page 8: Cucumber: um breve review

8

chama “features”, dentro dela deve haver os arquivos feature e a pasta “step definitions”,que contem os codigos-fonte que definem os passos. Pode haver, tambem, dentro da pasta“features”, a pasta “support”, nela devem estar quaisquer inicializacoes globais comuns paramais de um arquivo de funcionalidade, o nome convencional ao fonte principal desta pasta e“env”[20].

A saıda do Cucumber e normalmente o texto dos arquivos feature de entrada, colorindocada passo conforme seu estado, e mais um pequeno resumo dos resultados dos testes. Casovoce execute o Cucumber sem ter definido os passos ele lhe sugerira os cabecalhos dasdefinicoes para preenchimento dos blocos de codigo. Ha varios estados que um passo podeassumir, os mais comuns sao passed (passou), failed (falhou), undefined (nao definido) e skip-ped (ignorado), cujas cores padrao sao respectivamente verde, vermelho, amarelo e ciano. Osignificado de cada estado, passed, failed, undefined e skipped, sao, repectivamente, o passoocorreu sem erro, o passo causou um erro ao executar, nao foi encontrada uma definicao parao passo, e o passo foi ignorado porque o anterior falhou.

0.7 Passos para instalacaoNesta secao descrevem-se os passos usados para instalacao do Cucumber e de algumas bibli-otecas relacionadas. Estes passos sao necessarios para a reproducao dos exemplos de caso deteste apresentados em uma das proximas secoes. Esses passos e os casos de teste foram exe-cutados sobre uma maquina com a distribuicao Ubuntu 12.04 (precise) 64-bit, com o kernel3.2.0-23-generic.

Instalou-se o gerenciador de pacotes padrao do Ruby, RubyGems, na versao 1.8, que erauma das disponıveis no gerenciador de pacotes da distribuicao. A partir do RubyGems, entao,se instalou o Cucumber, o RSpec e o Watir. O RSpec e um framework de BDD para Rubye o Watir e uma biblioteca que permite o controle, por meio de codigo Ruby, de diversosnavegadores. Executou-se o de uso do Cucumber com o Watir da pasta de exemplos dorepositorio do Cucumber para verificar a instalacao. Para que este funcionasse corretamentefoi necessario fazer duas pequenas modificacoes nos fontes do exemplo.

Excerto de codigo 4 Comandos usados para instalacao do Cucumber e demais gemas$ sudo apt-get install rubygems$ export PATH=/var/lib/gems/1.8/bin:$PATH$ sudo gem install cucumber$ sudo gem install rspec$ sudo gem install watir-webdriver

0.8 Caso exemplo de uso da ferramentaDemonstrar-se-a, nesta secao, um exemplo do uso da ferramenta Cucumber, para o teste deuma aplicacao Web, no ambiente descrito na secao anterior. O software a ser testado e umasimples aplicacao Web, desenvolvida pelos autores, que permite fazer a media aritmetica de

Page 9: Cucumber: um breve review

9

Excerto de codigo 5 Versao final do arquivo env.rb do exemplo com o Watir, adaptado parausar a versao instalada do Watirbegin require ’rspec/expectations’; rescue LoadError;require ’spec/expectations’; end

require ’watir-webdriver’Browser = Watir::Browser

browser = Browser.new

Before do@browser = browser

end

# "after all"at_exit do

browser.closeend

Excerto de codigo 6 A linha comentada e adicionada, respectivamente, ao arquivo se-arch steps.rb, devido a mudanca do nome do botao do Google# @browser.button(:name, ’btnG’).click

@browser.button(:name, ’btnI’).click

Page 10: Cucumber: um breve review

10

Figura 1: Saıda do Cucumber sobre o exemplo

um conjunto qualquer de valores. A funcionalidade a ser testada e a unica da aplicacao que eo calculo da media aritmetica.

Excerto de codigo 7 O conteudo do arquivo arithmetic mean.featureFeature: Arithmetic mean

The user inform two numbers positiveAnd He want to knowThe their arithmetic mean

Scenario: Arithmetic meanGiven I have the number 20And I have the number 30When I ask for the arithmetic meanThen I should be given the value 25

Scenario: Input errorGiven I have the number 1And I have the number aWhen I ask for the arithmetic meanThen I should be given the value Expressao invalida!

Foi usado o mesmo codigo do arquivo env.rb para definicao do browser usado pelo exem-plo do Watir, descrito no excerto 5. A organizacao dos arquivos seguiu a convencao doCucumber explicada na secao “Funcionamento basico”. A linha de comando utilizada paraexecutar o Cucumber e a demonstrada no excerto 9, ela foi chamada de dentro da pasta fea-tures, e teve a saıda apresentada na figura 1.

A execucao dos testes faz o navegador Mozilla Firefox abrir, carregar a pagina com aaplicacao Web, preencher o campo, clicar o botao e checar o resultado contra o especificadono cenario. As pausas de dois segundos foram feitas para que o processo de teste pudesse serobservado. Nem as pausas, nem o uso de um navegador interface seriam usados em um testeautomatizado, salvo a possıvel necessidade de testar a compatibilidade com o browser em es-pecıfico ou o acompanhamento humano do teste. Uma screenshot da aplicacao e apresentadana figura 2.

Page 11: Cucumber: um breve review

11

Excerto de codigo 8 O fonte arithmetic mean steps.rb que define os passos utilizados ante-riormentenumbers = []

Given /I have the number (.+)/ do |numero|numbers << numero

end

When /I ask for the arithmetic mean/ [email protected] ’http://inf.upf.br/˜106396’sleep [email protected](:id, ’clean’).clicksleep 5

expressao = ""for i in 0..numbers.length-1

if i < numbers.length-1expressao = expressao + numbers[i] + ", "

elseexpressao = expressao + numbers[i]

endend

@browser.text_field(:id, ’dados’).set(expressao)sleep [email protected](:id, ’calc’).clicksleep 5

end

Then /I should be given the value (.+)/ do |resultado|resultado.should == @browser.text_field(:id, ’resultado’).valuesleep 5numbers.clear

end

Excerto de codigo 9 Linha de comando utilizada para executar o Cucumber sobre o exemplo$ cucumber -r features/step_definitions/arithmetic_mean_steps.rb-r features/support/env.rb

Page 12: Cucumber: um breve review

12

Figura 2: Captura da execucao do navegador durante o teste

0.9 Consideracoes FinaisCucumber e uma ferramenta que suporta uma ampla variedade de linguagens e ambientes,nao sendo isso razao para nao adota-la. Cucumber, no entanto, como foi visto, e intrinse-camente ligado a filosofia do BDD, sendo uma ferramenta que dificilmente seria adotadapor um grupo que nao tivesse conhecimento de, ou pretendesse utilizar-se, dessa tecnica deprogramacao. Nao e somente a historia do BDD que e ligada ao Cucumber, mas o BDDtambem influenciou por completo a concepcao da ferramenta.

A compreensao do funcionamento da ferramenta, principalmente em relacao ao sistemade passos em linguagem natural e as definicoes dos passos em codigo, pode ser confusa emprincıpio. Essa confusao pode ser creditada a aparente falta de motivos para esta organizacao.Essa separacao leva a ter de se manter dois artefatos sincronizados, ao inves de so um codigode testes, logo deve haver um vantagem nela. A primeira vantagem que poderia ser inferida eque, a partir de um determinado momento, se passaria a usar somente as definicoes de passosja prontos, e se manteria somente um artefato o qual pode ser lido tambem pelos clientes donegocio. Essa assuncao, no entanto, e invalidada pelas crıticas de que o uso de bibliotecade passos prontos levava a escrita de cenarios difıceis de ler, tediosos e em baixo nıvel deabstracao[7], as quais tiveram respaldo da comunidade.

Podemos compreender essa decisao do design da ferramenta se considerarmos que a des-vantagem de ter de dar manutencao a esses dois artefatos sincronizados e, tambem, uma van-tagem. Se cada modificacao na especificacao do comportamento da ferramenta (o arquivofeature) quebra os testes e forca a observar o seu codigo, e cada alteracao do codigo leva areflexao se o passo ainda e refletido por aquela nova definicao, se ganha uma especificacaoque e tecnica e nao-tecnica simultaneamente e que liga forcosamente ambos os lados. Dessaforma, a especificacao do comportamento do sistema e unificada, e a mudanca dos pontosde vista de cada um dos lados (desenvolvedores e clientes) passa a forcar a observacao destapelo outro.

Page 13: Cucumber: um breve review

Referencias Bibliograficas

[1] TEAM, C. Cucumber Wiki. 2012. [Online; acessado em 25/06/2012]. Disponıvel em:<https://github.com/cucumber/cucumber/wiki/>.

[2] ASTELS, D. Introduction to BDD with Cucumber. 2009. [Online; acessado em25/06/2012]. Disponıvel em: <http://www.engineyard.com/blog/2009/cucumber-introduction/>.

[3] AL., D. N. et. Behavior-Driven Development. 2009. [Online; acessado em 25/06/2012].Disponıvel em: <http://behaviour-driven.org/>.

[4] RIMMER, C. et al. Introduction – Behavior-Driven Development. 2010. [Online;acessado em 25/06/2012]. Disponıvel em: <http://behaviour-driven.org/Introduction>.

[5] LAWRENCE, R. Cucumber. 2011. [Online; acessado em 25/06/2012]. Disponıvel em:<http://www.methodsandtools.com/tools/cucumber.php>.

[6] HELLESøY, A.; SCOTT, A.; SEDEnO, D. Feature Introduction - Cucumber Wiki.2012. [Online; acessado em 25/06/2012]. Disponıvel em: <https://github.com/cucumber/cucumber/wiki/Feature-Introduction>.

[7] HELLESøY, A. The training wheels came off. 2011. [Online; acessado em 25/06/2012].Disponıvel em: <http://aslakhellesoy.com/post/11055981222/the-training-wheels-came-off>.

[8] HELLESøY, A. et al. Gherkin - Cucumber Wiki. 2011. [Online; acessado em25/06/2012]. Disponıvel em: <https://github.com/cucumber/cucumber/wiki/Gherkin>.

[9] FLORINIER, D. de; ADZIC, G. The Secret Ninja Cucumber Scrolls: Strictly Confiden-tial. 2010. Disponıvel em: <http://cuke4ninja.com/>.

[10] TEAM, C. Cucumber – Making BDD Fun. 2012. [Online; acessado em 25/06/2012].Disponıvel em: <http://cukes.info/>.

[11] NORTH, D. Introducing BDD. 2006. [Online; acessado em 25/06/2012]. Disponıvelem: <http://dannorth.net/introducing-bdd/>.

13

Page 14: Cucumber: um breve review

14

[12] GIBBS, E. JBehave and RSpec History. 2007. [Online; acessado em25/06/2012]. Disponıvel em: <http://edgibbs.com/2007/12/02/jbehave-and-rspec-history/>.

[13] VENDOR, B. The Startup’s Toolkit. 2011. [Online; acessado em25/06/2012]. Disponıvel em: <http://blog.bestvendor.com/2011/07/survey-results-the-startups-toolkit/>.

[14] HELLESøY, A. Cucumber-JVM 1.0.0. 3 2012. [Online; acessado em 25/06/2012].Disponıvel em: <http://aslakhellesoy.com/post/20006051268/cucumber-jvm-1-0-0>.

[15] TEAM, C.-J. Cucumber JVM – Github. 2012. [Online; acessado em 25/06/2012]. Dis-ponıvel em: <https://github.com/cucumber/cucumber-jvm>.

[16] FINLEY, K. Github Has Surpassed Sourceforge and Google Code in Popularity. 6 2011.[Online; acessado em 25/06/2012]. Disponıvel em: <http://www.readwriteweb.com/hack/2011/06/github-has-passed-sourceforge.php>.

[17] HOLMWOOD, L. Using Cucumber as a scripting language. 11 2009.

[18] DOMOKOS, A. Testing Excel with Cucumber. 3 2010. [Online; acessadoem 25/06/2012]. Disponıvel em: <http://www.adomokos.com/2010/03/testing-excel-with-cucumber.html>.

[19] HALL, B. Testing a WPF UI using Ruby, Cucumber and WiP-Flash.dll. 3 2010. [Online; acessado em 25/06/2012]. Disponıvelem: <http://codebetter.com/benhall/2010/03/16/testing-a-wpf-ui-using-ruby-cucumber-and-wipflash-dll/>.

[20] GROUP, A. T. S. Cucumber Test Engine (Ruby). 10 2009. [Online; acessadoem 25/06/2012]. Disponıvel em: <http://autotestgroup.com/en/blog/77.html>.