Wednesday, January 16, 2013

Behavior-Driven Development (BDD): Cucumber

Desarrollo guiado por comportamiento, o Behavior Driven Development (BDD) es una técnica de Desarrollo Agil de Software que fomenta la colaboración entre desarrolladores, testers, analistas y personas del negocio en un proyecto de software. Crea un entendimiento común de todos los involucrados y ayuda a eliminar malos entendidos sobre lo que el sistema debe hacer.

Frameworks de BDD

 Las herramientas de BDD se centran en describir el comportamiento de un software de una manera muy comprensible para todos los involucrados. En este post vamos a describir la herramienta Cucumber

Cucumber

Cucumber es una herramienta que permite ejecutar tests a partir de una descripción funcional en texto plano.
El poder de Cucumber radica en la facilidad de describir un comportamiento determinado. Esta descripción se realiza en Gherkin, un Business Readable DSL que permite que cualquier persona defina reglas sin necesidad de contar con conocimientos de programación.

Estos tests brindan la posibilidad de ser verificados por analistas y personas no técnicas que quizás sean expertos en el dominio de la aplicación.

Features

Una feature es algo que el software hace o debería hacer. La estructura general de una feature es la siguiente:

Feature: <short description>
<story>
<scenario 1>
...
<scenario n>

El formato común para el <story> es:

As a <role>
I want <feature>
so that <business value>

que responde a tres cuestiones importantes: 
  1. ¿Quién está usando el sistema?
  2. ¿Qué están haciendo?
  3. ¿Por qué les importa?

Scenarios

Una feature es definida por uno o más escenarios. Un escenario es una secuencia de pasos.
Un escenario se compone de tres secciones relacionadas con los 3 tipos de medidas:

1. Given: Esto crea condiciones previas, o el contexto para el escenario.
2. When: Comportamiento que se está enfocando.
3. Then: Postcondiciones ... comprueba que se hace lo correcto en el comportamiento que se está enfocando en el paso 2.

La forma general de un escenario es la siguiente:

Scenario: <description>
<step 1>

<step n>


Proceso de instalación y ejemplo de ejecución

        En el GEMFILE añadir:

group :test do

    gem 'cucumber-rails'
    gem 'capybara'
    gem 'database_cleaner'

end

  • Ejecutar bundle install en una consola.
  • Ejecutar rails generate cucumber:install (genera las carpetas necesarias, entre ellas la de features)

La estructura que toma dentro del proyecto es la siguiente:

features:

step_definitions

    web_steps.rb

support

    env.rb (configuration file cucumber)

    paths.rb (Maps a name to a path)

        rails generate cucumber:feature “nombre de la feature” (rails generate cucumber:feature “Article”)

Creara los archivos: manage_articles.feature donde se definen los posibles escenarios y article_steps.rb donde se definen los pasos intermedios:

features:
→ step_definitions

    web_steps.rb

    article_steps.rb

→ support

    env.rb (configuration file cucumber)

    paths.rb (Maps a name to a path)

→ manage_articles.feature

Ejemplo

Definimos en manage_articles.feature un escenario de la forma:

Feature: Manage articles

In order to make a blog

As an author

wants to create and manage articles

Scenario: Articles List

Given I have articles titled Pizza, Breadsticks

When I go to the list of articles

Then I should see "Pizza"

And I should see "Breadsticks"

Se procede a definir los “steps” relevantes (cada step se va a corresponder con cada una de las líneas identificadas para el escenario definido), que atienden a expresiones regulares :

En article_steps.rb:

Given /^I have articles titled (.+)$/ do |titles|

titles.split(', ').each do |title|

Article.create!(:title => title)

end

end

En web_steps.rb está definido el step para la segunda línea del escenario

“When I go to the list of articles”:

When /^(?:|I )go to (.+)$/ do |page_name|

visit path_to(page_name)

end




        cucumber features

Using the default profile...

....

1 scenario (1 passed)

4 steps (4 passed)

0m0.529s

No comments:

Post a Comment