¿Behavior Driven Development ayudará a que los proyectos de desarrollo de software se completen a tiempo y dentro del presupuesto? ¿Cómo?

Sí, eso creo. Mi experiencia con BDD proviene principalmente del uso de Cucumber and Gherkin para crear y mantener las llamadas especificaciones ejecutables. Si no está familiarizado con el último término, una especificación ejecutable es una especificación que se puede ejecutar como una prueba automatizada. (Además: Gherkin es un lenguaje para escribir especificaciones ejecutables y Cucumber es una herramienta para automatizarlas).

Para aquellos que son nuevos en el tema, así es como se ve una especificación de estilo BDD muy simple escrita en Gherkin:

Característica: envío gratis

Esquema del escenario: los pedidos superiores a $ 100 deben enviarse de forma gratuita

Artículos dados que valen en el carrito de John
Cuando John procede a pagar
Entonces se le debe ofrecer

Ejemplos:
El | compra | envío |
El | $ 99 | $ 5 de envío |
El | $ 100 | envío gratis |

El concepto de ejecución de especificaciones puede tener profundas implicaciones para sus proyectos. En esta respuesta, me gustaría hablar sobre una posible mejora: rastrear y finalmente eliminar los bumeranes.

Los bumeranes son funcionalidades que se rompen de vez en cuando, a pesar de los mejores esfuerzos de su equipo para arreglar el código roto para siempre. Los bumeranes obviamente afectan los presupuestos, los plazos y la moral negativamente porque el equipo tiene que perder el tiempo volviendo a la misma funcionalidad varias veces, mientras que las otras características tienen que esperar en la cola. Los bumeranes también son importantes para identificar y contener porque resaltan claramente las áreas en las que carece de conocimiento de dominio y donde aparecen problemas de comunicación. No es tan fácil prevenir los boomerangs como identificarlos, pero las especificaciones ejecutables pueden ayudarlo a disminuir el riesgo de que aparezca un boomerang.

Los bumeranes pueden aparecer cuando

  • una funcionalidad trata con reglas de dominio complejas que son difíciles de entender para los extraños de la industria
  • el equipo no identificó a una parte interesada importante que tuviera voz en el proceso de toma de decisiones
  • el equipo no logró satisfacer a una parte interesada, subestimando sus solicitudes
  • el equipo permitió el cuello de botella de un empleado y no documentó ni transfirió el conocimiento sobre las dificultades de una funcionalidad a otros miembros del equipo en caso de que ocurriera una rotación
  • los clientes aún no están satisfechos con la solución a pesar de que se implementó exactamente como fue diseñada

Las especificaciones ejecutables con ejemplos pueden ayudarlo a reducir la probabilidad de la mayoría de las razones enumeradas anteriormente.

¿Cómo sucede eso? Cada especificación ejecutable es también una prueba de aceptación automatizada. Ahora, si está familiarizado con el concepto de prueba de regresión, ya puede sospechar hacia dónde se dirige mi razonamiento. En la mayoría de las situaciones de desarrollo de software, se considera una buena práctica de codificación, cuando se localiza y corrige un error, registrar una prueba que exponga el error y volver a ejecutar esa prueba regularmente después de los cambios posteriores en el programa. La prueba que verifica estos cambios se convierte en una prueba de regresión . Entonces, si agregamos pruebas de regresión a nuestras especificaciones ejecutables existentes cada vez que descubramos un mal funcionamiento, disminuiremos la probabilidad de reaparición de bumeranes. Y debido a que las especificaciones ejecutables se ocupan de características de alto nivel que son importantes para el negocio, ¡podemos estar seguros de que nuestras pruebas de regresión también serán importantes para el negocio!

Ahora, un ejemplo muy simple de una prueba de regresión en una especificación ejecutable sería algo como esto: volvamos a la especificación de envío en la parte superior de mi respuesta. Entiendo que lo que voy a escribir será un poco simplista, pero por favor tengan paciencia conmigo y verán lo que tengo en mente. Digamos que descubrimos que debido a un error banal en el envío gratuito de código solo se aplica a compras de $ 100. Entonces, si compra algo por $ 101, el error no le permitió obtener su envío gratis. Tan pronto como descubras eso, el equipo lo arregla. Pero pueden agregar una prueba de regresión a su especificación ejecutable:

Ejemplos:
El | compra | envío |
El | $ 99 | $ 5 de envío |
El | $ 100 | envío gratis |
El | $ 101 | envío gratis |

Debido a que la especificación es ejecutable, cada uno de los tres ejemplos anteriores tendrá que ser automatizado como prueba por desarrolladores y evaluadores. Pero ahora todo el equipo puede estar seguro de que el conjunto de pruebas automatizadas verificará si este error específico no reaparece cada vez que queramos implementar nuestros cambios en una instancia de producción.

A veces, los bumeranes pueden regresar varias veces. Cuanto más regresan, más importancia se merecen: más pruebas, más ejemplos. Se convierten en documentación. Ser una fuente única de verdad significa que cuando las partes interesadas se preparan para implementar una nueva historia de usuario o reparar una corrección de errores, pueden usar la suite para leer escenarios relevantes y verificar ejemplos importantes. Confiando en el conocimiento escrito a largo plazo en lugar de la memoria humana falible, pueden detectar inconsistencias y áreas problemáticas mucho más fácilmente y antes. Es por eso que los bumeranes, en caso de que aparezcan, definitivamente merecen tener un lugar destacado en sus especificaciones de pepino. Y volveremos al tema de los bumeranes que pertenecen al sistema de documentación viva en el capítulo 7, que hablará sobre la documentación.

Si desea leer más sobre el análisis de boomerangs y escribir especificaciones ejecutables, escribí un libro sobre el tema. “Escribir excelentes especificaciones” explora el arte de analizar los requisitos y lo ayudará a hacer que las especificaciones ejecutables escritas en Gherkin sean una parte central de su proceso de desarrollo. Los ejemplos anteriores están tomados del capítulo 5, llamado Elección de ejemplos para esquemas de escenarios . El libro también contiene otras técnicas que, combinadas con el poder de las especificaciones ejecutables, pueden ayudar a los equipos de BDD a entregar un excelente software a tiempo y dentro del presupuesto.

Si está interesado en comprar “Escribir excelentes especificaciones”, puede ahorrar un 39% con el código de promoción 39nicieja2 🙂

Sí, definitivamente puede ayudar a terminar el “proyecto” a tiempo y dentro del presupuesto (si el tiempo y el presupuesto fueron razonables desde el primer día), pero también eliminará la mayoría de las características irrelevantes del alcance.

Cuando usa BDD junto con Historias de usuarios, puede eliminar muchas de las funciones no necesarias simplemente pensando en el objetivo comercial de la función que va a implementar. Por lo general, la mayor parte de la funcionalidad (¿principio de Pareto 80–20?) Solo es agradable de tener y no es necesario implementarla en la primera versión del software (si está implementada).

Un BDD bien implementado también lo ayudará a utilizar un enfoque incremental para su desarrollo, implementando características separadas entre sí, una tras otra.

Si ordena bien su cartera de pedidos, puede lanzar la primera versión de su software muy pronto y recopilar comentarios en esta etapa en lugar de implementar todo y esperar mucho tiempo los comentarios del mercado. De esa forma, puede probar su próxima hipótesis implementando pequeños cambios incrementales y lanzándola tan a menudo como sea necesario. Puede apoyar su proceso de toma de decisiones haciendo algunas pruebas A / B, etc. Gracias a eso, puede resolver el problema que era el objetivo del proyecto de manera más rápida y económica que con el enfoque estándar del proyecto (Cascada).

Por cierto: la definición estándar de “proyecto” no se ajusta a la mayoría del desarrollo de software hoy en día. Estamos construyendo un enfoque de producto y “proyecto” que no se ajusta al “ciclo de vida” moderno del producto, donde los productos se mejoran y cambian continuamente, con muchos pivotes antes de que tengan éxito.

Puede, dependiendo de lo que quieras decir con “completo”. Yo uso BDD por dos razones principales:

  1. Para aumentar las opciones relacionadas con la elección de las características que se suman a un producto que podemos vender.
  2. Para reducir el costo de los desacuerdos y las diferencias de interpretación sobre esas características.

Cuando practico BDD, no trato de “completar proyectos”. Esta frase parece implicar que hemos elegido un conjunto fijo de tareas que debemos completar para juzgar el proyecto como un éxito. En esencia, BDD descarta esta suposición. En cambio, utilizo BDD para ayudarme a descubrir cómo refundir características como piezas de trabajo independientes para poder planearlas en (casi) cualquier secuencia, lo que hace que sea más fácil encontrar un camino más corto hacia Cash In My Pocket . Hago esto en lugar de “completar proyectos”. Considero que este es el verdadero poder de BDD.

Entonces, en lugar de los “proyectos completos a tiempo y dentro del presupuesto”, utilizo BDD para encontrar caminos para obtener ganancias antes de la inversión en agregar características a un producto .

¡Saludos a todos!

Escuché sobre BDD que es útil para completar todas las tareas del proyecto. Pero creo que no hay necesidad de usarlo si la estimación del proyecto está bien diseñada y todos los riesgos se tienen en cuenta. Aquí puede leer más información sobre el tema y ver los casos de la vida real. Espero que esto sea lo que necesitabas!

¡Buena suerte!)

More Interesting

¿Qué tipo de trabajo se asigna en las ramas indias de gigantes de software como Google y Facebook?

¿Qué aspecto tiene su definición de hecho si está practicando Scrum?

Tiene una gran cantidad de casos de prueba con tiempo y recursos limitados. ¿Cómo se realizan las pruebas de regresión?

¿Hay un buen libro de introducción o guía sobre cómo programar simulaciones (económicas, comerciales, físicas, etc.)?

¿Cuáles son los mejores recursos para la estimación y planificación de proyectos de software empresarial a gran escala?

¿Cuáles fueron los roles y los perfiles de trabajo de los ingenieros de software, informática y informática en la década de 1990?

Cómo escribir código para un fondo de pantalla que cambia semanalmente

¿Qué es el desarrollo de software y cómo puedo comenzar a aprenderlo?

Quiero hacer ingeniería de software en Estados Unidos. Actualmente estoy haciendo B.Sc.¿Qué debo hacer?

¿Qué consejo tienes para un estudiante de ingeniería de software de segundo año? ¿En qué lenguajes de programación debería centrarme? ¿Cuál es la mejor manera de dominar un lenguaje de programación?

¿Qué tan difícil es aprender Clojure?

¿Qué campo de ingeniería es mejor para alguien que quiere desarrollar software o construir productos electrónicos como ventiladores eléctricos, auriculares, ratones y teclados?

¿Con qué rapidez las personas adoptan los estándares más nuevos de C ++ en el trabajo profesional?

¿Hay otros recursos como el radar de tecnología ThoughtWorks?

¿Son los ingenieros de software los trabajadores de cuello azul, frente a los gerentes de producto de cuello blanco?