Behavior Driven Development
Behavior Driven Development
Driven
Development:
Transformando
la Prueba de
Software
Un Enfoque Colaborativo
desde la Perspectiva del
Equipo de Pruebas
Omar S. Guzmán
Nombre:
Omar S. Guzmán
Matrícula:
2022-0866
Asignatura:
Administración de proyectos
Docente:
Francisco Genao
Tema:
Fecha:
08/08/2024
Institución:
1
ÍNDICE
Contenido
Concepto ................................................................................................................................................... 4
Beneficios y funciones .............................................................................................................................. 4
1. Feature Files (Archivos de Características) ....................................................................................... 6
2. Step Definitions (Definiciones de Pasos) .......................................................................................... 6
3. Runner Scripts (Scripts de Ejecución) ............................................................................................... 7
Cucumber .................................................................................................................................................. 8
SpecFlow ................................................................................................................................................... 9
Behat ....................................................................................................................................................... 10
JBehave ................................................................................................................................................... 12
Gatling (para pruebas de rendimiento BDD) .......................................................................................... 13
2
INTRODUCCIÓN
¿Qué lenguaje utilizaremos para obtener los requerimientos del cliente? Si tenemos un
problema técnico, ¿qué palabras usaremos para dejar claro lo que sucede sin utilizar
expresiones difíciles? ¿Cómo comunicaremos nuestro avance a una persona interesada que
tiene poco o ningún conocimiento de tecnología? A principios del 2000, los equipos de
desarrollo de software empezaron a encontrarse cada vez más con estas preguntas. El enfoque
tradicional de pruebas unitarias, aunque esencial, ya no era suficiente para asegurar que el
producto final reflejara correctamente los requisitos del cliente.
En los primeros años del siglo XXI, la industria del software se encontraba en una fase de
evolución rápida. Las metodologías ágiles empezaban a ganar popularidad, y con ellas, surgía
una mayor conciencia sobre la importancia de la colaboración efectiva y la comunicación clara
en los equipos de desarrollo. A pesar de los avances, muchos proyectos aún fracasaban debido
a malentendidos en los requisitos del cliente y la falta de alineación entre las expectativas de
los interesados y los entregables del equipo técnico. Los equipos de pruebas necesitaban una
manera de validar que el software se comportara como se esperaba en escenarios reales de
uso. Esto implicaba una transición de la simple verificación de código a una validación más
holística, donde los comportamientos del sistema fueran definidos claramente desde el
principio, alineándose con los deseos y necesidades del usuario. Esta transición no solo
mejoraría la calidad del software, sino que también fortalecería la comunicación dentro del
equipo y con los stakeholders, asegurando que todos compartieran la misma visión del
producto final.
Para abordar este desafío, surgió un enfoque que permitía a los equipos de pruebas definir,
implementar y verificar los comportamientos esperados del sistema desde una perspectiva de
usuario. Esta metodología no solo cerraba la brecha entre el equipo de pruebas, los
desarrolladores y los clientes, sino que también permitía una mayor alineación en torno a los
objetivos del proyecto, garantizando que el software entregado cumpliera con las expectativas
del usuario final.
3
¿Que es BDD?
Concepto
Pero, puede que alguien se pregunte ¿qué tenían de malo los test? La respuesta es nada, pero
hacía falta una mejor garantía de que se está desarrollando lo que el cliente pidió. El mismo
Dan North asegura que utiliza más la palabra “comportamiento” que “prueba”. Esto nos deja
un principio moderno del desarrollo: los métodos de prueba no describen de forma exacta el
comportamiento de una aplicación. El desarrollo se vuelve mucho más sencillo cuando
pensamos en acciones que ejecuta el sistema y no en un test. North dice: “¿Cómo llamar a tu
prueba? Es fácil: es una oración que describe el siguiente comportamiento en el que estás
interesado. ¿Cuánto probar? Se vuelve irrelevante: solo puedes describir cierto
comportamiento en una sola oración”. Y añade: “Cuando una prueba falla, simplemente sigue
el proceso descrito anteriormente: o introdujiste un error, el comportamiento cambió o la
prueba ya no es relevante” (North, 2006).
Beneficios y funciones
4
inicio del proyecto. Las discusiones sobre el comportamiento esperado del sistema ayudan a
asegurar que todos los miembros del equipo tengan un entendimiento compartido de los
requisitos.
Actualmente, el Desarrollo Guiado por Comportamiento (BDD) está relacionado con las
metodologías ágiles, especialmente Desarrollo Guiado por Pruebas (TDD) y el Diseño Guiado
por el Dominio (DDD). Aunque BDD surgió de TDD, lo cierto es que ha resultado más eficiente
en el manejo de proyectos con requisitos cambiantes. Cierto autor inglés asegura que BDD se
ajusta tan bien a la realidad que sigue el principio que dice “Cuando el terreno no concuerda
con el mapa, confía en el terreno” (Ferguson, 2014). Así que, BDD nos ayuda a comprender lo
que tenemos que desarrollar de una manera más profunda que cualquier plan o prueba.
5
Partes de BDD
Los archivos de características son documentos que contienen los escenarios de BDD
escritos en un lenguaje simple y comprensible. Estos archivos se estructuran en un
formato Given-When-Then, que ayuda a describir el comportamiento del sistema de
manera clara y accesible. Cada escenario en un archivo de características representa
una funcionalidad específica del sistema y está diseñado para ser fácilmente entendible
tanto por los desarrolladores como por los stakeholders. El formato Given-When-Then
se descompone de la siguiente manera:
Las definiciones de pasos actúan como el puente entre los escenarios escritos en los
archivos de características y el código de prueba que se ejecuta. En este componente, se
implementan las acciones y verificaciones especificadas en los escenarios. Cada paso en
un escenario tiene una definición correspondiente en el código, donde se especifica
cómo realizar la acción o comprobación descrita en el archivo de características. Esto
permite que el lenguaje natural utilizado en los escenarios se traduzca en código
ejecutable que interactúa con la aplicación o sistema bajo prueba. Las definiciones de
pasos facilitan la integración entre el comportamiento esperado y la implementación
real, asegurando que las pruebas sean precisas y útiles.
6
3. Runner Scripts (Scripts de Ejecución):
Estos componentes trabajan juntos para proporcionar un enfoque estructurado y efectivo para
la prueba de software basado en el comportamiento esperado del sistema. Al utilizar BDD, los
equipos pueden garantizar que el software cumpla con las expectativas del usuario final y que
todos los miembros del equipo compartan una comprensión común de los requisitos del
proyecto.
7
Herramientas de BDD y ejemplos
Cucumber
Cucumber es una herramienta de BDD ampliamente utilizada que permite escribir escenarios
de pruebas en un lenguaje legible por humanos, utilizando el formato Gherkin. Cucumber se
integra con múltiples lenguajes de programación y es compatible con diversas herramientas de
automatización.
Ejemplo de uso:
8
// Implementación para crear una cuenta con la cantidad especificada
SpecFlow
SpecFlow es una herramienta de BDD para el ecosistema .NET. Permite escribir escenarios en el
formato Gherkin y se integra estrechamente con herramientas de pruebas de .NET como NUnit
y MSTest.
Ejemplo de uso:
9
Step Definitions (Definiciones de Pasos en C#):
Behat
Behat es una herramienta de BDD para PHP que permite definir escenarios en lenguaje
Gherkin. Está diseñada para trabajar con el ecosistema de PHP y facilita la integración con
frameworks de pruebas y automatización.
10
Ejemplo de uso:
11
JBehave
JBehave es una herramienta de BDD para Java que permite escribir escenarios en lenguaje
natural. Es conocida por su flexibilidad y su capacidad para integrar pruebas de
comportamiento en aplicaciones Java.
Ejemplo de uso:
12
}
Gatling es una herramienta para pruebas de rendimiento que también puede utilizarse con un
enfoque BDD para describir escenarios de carga y rendimiento.
Ejemplo de uso:
.exec(http("Request")
.get("/home")
.check([Link](200)))
setUp(
[Link](atOnceUsers(100))
).protocols(httpProtocol)
Cada una de estas herramientas ofrece una manera única de implementar BDD en diferentes
lenguajes y entornos. Al elegir la herramienta adecuada, los equipos pueden mejorar la
comunicación entre los miembros del proyecto, garantizar que el software cumpla con los
requisitos del usuario y automatizar las pruebas de manera efectiva.
13
Conclusion
El Desarrollo Guiado por Comportamiento (BDD) ha emergido como una metodología crucial en
el ámbito del desarrollo de software moderno, especialmente en el contexto de las
metodologías ágiles. Su enfoque en la colaboración y la comunicación clara entre todos los
miembros del equipo, así como con los stakeholders, ha demostrado ser fundamental para el
éxito de los proyectos de software.
Los componentes clave de BDD, como los Feature Files, Step Definitions y Runner Scripts,
juegan un papel fundamental en la implementación efectiva de esta metodología. Los Feature
Files proporcionan una forma estructurada y comprensible de definir los comportamientos del
sistema, mientras que las Step Definitions conectan estos comportamientos con el código de
prueba ejecutable. Los Runner Scripts coordinan la ejecución de las pruebas, asegurando que se
realicen en el entorno adecuado y facilitando la integración continua.
Las herramientas de BDD, como Cucumber, SpecFlow, Behat, JBehave y Gatling, ofrecen
diversas opciones para implementar BDD en distintos entornos de desarrollo y lenguajes de
programación. Cada herramienta tiene sus propias características y ventajas, adaptándose a
diferentes necesidades y preferencias. Por ejemplo, Cucumber y SpecFlow son altamente
valorados en sus respectivos ecosistemas de Ruby y .NET, mientras que Behat es una opción
destacada para PHP y JBehave para Java. Gatling, aunque orientada a pruebas de rendimiento,
también aplica el enfoque BDD para describir escenarios de carga.
14
Este enfoque continúa evolucionando y adaptándose a las demandas cambiantes del desarrollo
de software, reafirmando su relevancia y utilidad en la creación de soluciones efectivas y bien
alineadas con las expectativas de los usuarios finales.
Referencias
Ferguson Smart, J. (2014). BDD In Action. Behavior-Driven Development For The Whole
Software Lifecycle. Recuperado el 08 de agosto de 2024, de [Link]
[Link]/download/a/bdba704-bf94-4c86-ac9a-
a8c9353bee14/BDD_CH01.pdf
North, D. (2006, septiembre 20). Introducing BDD. En Dan North & Associates Limited.
Recuperado el 08 de agosto de 2024, de [Link]
15