¿BDD es realmente escribible por no programadores?


24

El desarrollo basado en el comportamiento con su emblemática sintaxis de escenarios "dado-cuándo-entonces" últimamente ha sido muy publicitado para sus posibles usos como un objeto límite para la evaluación de la funcionalidad del software.

Definitivamente estoy de acuerdo en que Gherkin , o la secuencia de comandos de definición de características que prefiera, es un DSL legible para el negocio y ya proporciona valor como tal.

Sin embargo, no estoy de acuerdo con que sea escribible por no programadores (como lo hace Martin Fowler ).

¿Alguien tiene cuentas de escenarios escritos por no programadores y luego instrumentados por desarrolladores?

Si efectivamente existe un consenso sobre la falta de capacidad de escritura, ¿vería un problema con una herramienta que, en lugar de comenzar con los escenarios e instrumentarlos, generaría escenarios legibles para el negocio a partir de las pruebas reales?

Actualización: con respecto a la herramienta "generador de escenarios", por supuesto, no adivinaría el lenguaje de negocios mágicamente;) Pero, al igual que actualmente utilizamos los comparadores de expresiones regulares para crear pruebas en un enfoque de arriba hacia abajo (en la dimensión de abstracción), podríamos usar constructores de cadenas para crear escenarios en un enfoque ascendente.

Un ejemplo de "solo dar una idea":

Given I am on page ${test.currentPage.name}
And I click on element ${test.currentAction.element}
…

Pasará mucho tiempo antes de que los humanos puedan venir con un lenguaje común legible por otros humanos de manera exacta, incluso después de que las computadoras ya puedan escribir código para las computadoras.

Irónicamente, JBehave 1 (la primera herramienta BDD) comenzó generando escenarios legibles para el negocio. No analizamos el inglés hasta Pepino. Creo JBehave 1 era realmente útil para recordar a la gente que tenían que hablar de ellos primero ...
Lunivore

Respuestas:


20

Lo he visto. No terminó bien.

Creo que el pepino es engorroso (<- lol: D) abstracción por esta razón exacta. Demasiado difícil para las personas no técnicas escribir por sí mismas; demasiado detallado para gente técnica.

Las personas no técnicas simplemente no han aprendido a pensar como programadores. Es nuestro privilegio comprender el conocimiento abstracto, desglosarlo, construirlo de nuevo y aún así poder escapar de la ambigüedad con éxito. Eso es lo que nos pagan.

Si efectivamente existe un consenso sobre la falta de capacidad de escritura, ¿vería un problema con una herramienta que, en lugar de comenzar con los escenarios e instrumentarlos, generaría escenarios legibles para el negocio a partir de las pruebas reales?

La herramienta en sí no podrá generarlos. La computadora no sabe nada sobre el dominio comercial. Al final, el programador sería responsable de dibujar lo que debe generarse de todos modos e incluso entonces, es probable que esos escenarios sean demasiado detallados / crípticos para sus usuarios finales.


20
Non technical people just haven't learned to think like programmers. La verdad. Este mismo concepto ha sido promocionado y reinventado varias veces en los últimos 20 años y casi siempre termina con malos resultados. A las empresas les gusta el concepto de obtener software sin tener que pagar a esos codiciosos desarrolladores de software de sanguijuelas chupadores de sangre, pero se olvidan de que la parte más difícil del desarrollo de software es la mayor parte del tiempo comprender las reglas comerciales de manera más profunda e intrincada que los propios empresarios.
maple_shaft

2
"Las personas no técnicas simplemente no han aprendido a pensar como programadores". Sí, la capacidad de descomponer problemas y expresarlos dentro de términos lógicos atómicos especificados es probablemente lo que hace que uno sea un programador / analista. La idea de que parecerse al inglés hace que Gherkin sea utilizable por cualquier persona me parece increíblemente ingenua. Gracias por confirmarlo :) Computer knows nothing about business domain.Por supuesto. No hice mi idea muy clara, lo siento. Agregaré información a la pregunta.
MattiSG

8
@maple_shaft: ¿Los últimos 20 años? Prueba los últimos 60 años. Algunos de los primeros comentarios sobre COBOL fue que la gente de negocios podía escribirlo, eliminando la necesidad de programadores. Cuando eso no sucedió, a la gente se le ocurrió un montón de lo que llamaron idiomas de cuarta generación que se suponía que debían hacer lo mismo.
David Thornley

11

Parte de la dificultad en términos de que el cliente redacte un documento de especificaciones es que el cliente a menudo no sabe cómo traducir las cosas que el cliente quiere a un idioma que realmente describa lo que el cliente necesita. Si bien el cliente puede decir que desea que exista un determinado comportamiento en un sistema, generalmente no está tan preocupado por las minucias hasta que haya visto y utilizado y experimentado que el software funciona de una manera que el cliente considera que no coincide con sus necesariamente.

Cuando los clientes describen un proceso de negocios, a menudo dejan fuera mucha información relevante. A menudo, esta información se relaciona con cosas sobre un proceso que comúnmente se entienden dentro del dominio particular del cliente y que, por lo tanto, se da por sentado y a menudo no se transmite al programador. En otras ocasiones, el cliente en realidad no sabe cómo lidiar con todas las condiciones límite dentro de un sistema, y ​​está buscando ayuda del programador. A veces es todo un caso simple de usabilidad, con el cliente pensando que quiere que algo funcione de una manera, pero luego cambia de opinión cuando se hace más claro que las cosas deberían funcionar de manera diferente.

Ok, basta de "relaciones con los clientes 101 para programadores". La pregunta es si todavía hay valor en hacer que el cliente use un DSL legible para el negocio para definir cómo definir una especificación. Creo que con orientación, la respuesta es un "sí" tentativo, y digo tentativo porque la siguiente pregunta que viene a la mente es, ¿por qué un cliente crearía un DSL cuando puede hacer que un programador defina más fácilmente uno que ¿Proporcionar a un cliente un lenguaje simple pero rico para definir cómo debe funcionar un sistema?

Cuando haya proporcionado a un cliente un lenguaje para describir cómo le gustaría que funcione un sistema, terminará con declaraciones que dicen algo como:

"for a given 'subsystem', as a 'business entity' I want 'some feature' so that I might achieve 'some result'".

Este tipo de declaración termina describiendo un requisito de una manera muy clara, proporcionando la forma general que el cliente básicamente desea que asuma el sistema, u otra forma de verlo es que el cliente está describiendo qué es el sistema. Si desea que su cliente piense un poco más sobre las cosas, puede pedirles que describan las reglas que la característica debe cumplir utilizando una serie de afirmaciones similares, tal vez a:

"Given 'some system state', When 'some action occurs', Then expect 'some result'

Nuevamente descripciones muy claras, esta vez sobre cómoEl sistema debe comportarse. La cuestión es que esto no reemplazará la necesidad de que un desarrollador de software complete todos los espacios en blanco y descubra más detalles de los que el cliente puede tener conocimiento periférico. Si bien el cliente puede ser 'capacitado' por el programador para describir características y comportamientos en un formato agradable para el programador, el cliente realmente no tendrá las habilidades o el conocimiento para generar casos de prueba significativos, ni para proporcionar la implementación código. Creo que este fue el punto del artículo de Martin Fowler al que se ha referido el OP. Entonces, sí, el software en sí no puede ser escrito por el cliente, pero la descripción del software ciertamente puede, y en mi humilde opinión, debe ser escrita por el cliente. Por lo que vale, no leí el artículo de Fowler diciendo que el cliente no debería

Siento que los programadores a veces podemos olvidar que nuestros clientes son generalmente muy inteligentes en cuanto a su comprensión de sus negocios y procesos comerciales, ciertamente mucho mejor que nosotros. Cuando no tienen un programador que les diga cómo construir un sistema de software, los clientes generalmente recurren a otros medios, quizás menos eficientes, para resolver sus problemas particulares de gestión empresarial. Con esto me refiero a bases de datos simples (piense en Access) u hojas de cálculo, o incluso en libros escritos a mano, y con reglas y procedimientos bien definidos para administrar esos procesos. Lo que a muchos clientes les falta no es un medio para determinar cómo debe funcionar un sistema, sino cómo debe construirse y, lo que es más importante, qué tan eficientemente se describen las reglas de comportamiento de un sistema a las personas queno tienen las habilidades para construir realmente el sistema.

Si efectivamente existe un consenso sobre la falta de capacidad de escritura, ¿vería un problema con una herramienta que, en lugar de comenzar con los escenarios e instrumentarlos, generaría escenarios legibles para el negocio a partir de las pruebas reales?

Creo que esto está analizando el problema al revés. Vería un gran problema con una herramienta que genera documentación a partir de pruebas si esa documentación tuviera la intención de representar una especificación de alguna manera. Para probar un escenario, debe comprenderlo, por lo tanto, el escenario ya debe existir para que ambos definan una prueba para él. Si describe el escenario en una sintaxis BDD, entonces ya lo ha especificado y, por lo tanto, solo puede instrumentar los escenarios después del hecho. Si, por otro lado, tuviera una herramienta que le permitiera al cliente describir un sistema en un buen DSL amigable con la programación, y si esa herramienta pudiera usarse para generar las plantillas de código que se usarían como un conjunto de pruebas, entonces yo ' Yo diría que habría un gran valor en tal herramienta. No vería al cliente sacar a los programadores de la ecuación, y ayudaría a reducir el esfuerzo requerido para cumplir con los deseos del cliente y generar requisitos codificados por prueba de una manera BDD, y tal vez haría que los deseos del cliente se entiendan más fácilmente. Sin embargo, no sería un sustituto de tener a mano un desarrollador de software experimentado para ayudar al cliente a separar las necesidades del cliente de sus deseos.


"Para probar un escenario, debe comprenderlo, por lo tanto, el escenario ya debe existir para que ambos definan una prueba para él". Estoy de acuerdo. Lo que estoy cuestionando es si vale la pena imponer restricciones de lenguaje. No pretendo que debamos escribir solo pruebas; pero me pregunto si no deberíamos aceptar el hecho de que la descripción del negocio será (y probablemente debería ser) siempre descripciones simples y libres . Por lo tanto, tendríamos descripciones comerciales puras, y generaríamos escenarios legibles, permitiendo a los humanos decidir si coinciden; en lugar de pretender que usamos descs reales para probar.
MattiSG

@MattiSG ...whether enforcing language constraints is worth anything. Esta es una buena pregunta. Las descripciones de forma libre son más expresivas y naturales para el escritor, pero resultan en comentarios confusos que requieren disección para obtener una especificación útil. Al definir 'reglas' formales (también conocidas como DSL) para escribir requisitos y especificaciones, tiene un lenguaje común que tanto el cliente como el programador pueden entender, lo que limita los malentendidos. Si obtiene las descripciones correctas, se pueden usar textualmente como una plantilla para sus pruebas. Por lo tanto, no se necesitan herramientas complejas para "generar" nada.
S.Robins

@MattiSG FWIW, usar un DSL y BDD es el sistema que yo mismo uso. Los requisitos se definen como declaraciones de Entidad-Característica-Beneficio, y se siguen con una especificación que extiende las declaraciones de requisitos iniciales usando declaraciones AAA (Ie: Given-When-Then) ... esencialmente declaraciones de escenario. La dificultad al intentar decodificar texto libre es que sin un DSL, no tiene un medio fácil para definir un algoritmo que pueda generar escenarios de recopilación significativos. Mi punto era que usar las pruebas como punto de partida para generar escenarios es algo al revés.
S.Robins

5

He visto desarrolladores escribir escenarios; los evaluadores escriben escenarios e incluso el propietario de un producto escribe escenarios. También he tenido conversaciones explícitamente diseñadas para mostrar escenarios: "Dado <este otro contexto>, ¿cuándo debería suceder entonces?" - y anotó las palabras que usa el negocio.

Los mejores resultados que obtuve fueron tener una conversación con el propietario del producto mientras estaba en la oficina, capturarlos en un wiki y luego enviárselos para que pudiera corregirlos y agregar más. Encontró una pareja que habíamos extrañado en nuestras conversaciones. Eso se sacudió.

Los peores escenarios que he visto son los que los desarrolladores escribieron ellos mismos sin ninguna conversación con el negocio. Puedo decirlo porque usan términos como "Cuando realizo una búsqueda" o "Cuando envío el formulario con una fecha de hoy + 3". Por lo general, no son escenarios muy interesantes, muchos de ellos, un nivel de detalle demasiado bajo y, por lo tanto, completamente imposible de mantener. El negocio tampoco lee estos.

Mucho mejor para centrarse en las conversaciones de la OMI. He visto algunos equipos hacer esto ahora por un par de meses con grandes mejoras en la calidad, independientemente de la automatización. Un equipo logró que la automatización funcionara en un entorno muy difícil algunas semanas después, ¡para alegría del probador! Pero en realidad, mientras el equipo tenga conversaciones y use escenarios para dibujar otros escenarios, no creo que importe quién los escriba.


La comunicación de +1 es realmente la clave, y los escenarios realmente deben estar en los términos que nos ocupa la gente de negocios, por lo que, de acuerdo con la pregunta de los OP, si creamos un DSL, esto realmente necesita ser una coincidencia más cercana a lo que el cliente va a decir, y no a lo que los programadores piensan que el cliente debería decir.
S.Robins

0

Mi experiencia es que es mejor dejar que el BA (Business Analyst) escriba los GWT ( Given-When-Then ) s (experiencia usando SpecFlow). El BA puede traducir los requisitos del Cliente al GWT y la empresa puede leerlo. Los clientes entienden los sistemas, pero no tienen la tecnología para escribir los requisitos de una manera que podamos usar.

Idealmente, el BA escribiría algo de GWT, yo haría algunas revisiones, el BA revisaría / revisaría repetir hasta que el BA y las empresas tuvieran confianza en la cobertura. Prácticamente la licenciatura me daría un borrador que yo limpiaría y haría el trabajo. El Negocio se encoge de hombros diciendo que está seguro y luego se pregunta por qué no cubrió algunas áreas en las que nadie pensó.


¿Podría por favor explicar qué significa GWT para usted? :)
MattiSG

@ MattiSG: supongo que es para Given-When-Then (ver OP).
sleske

@MattiSG: se actualizó la publicación de buenas capturas.
SoylentGray
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.