La mejor manera de mantener sincronizados el desarrollo y las pruebas

Tenemos 1 desarrollador frontend y 2 desarrolladores backend y 1 control de calidad. QA es responsable de escribir las pruebas de extremo a extremo usando Cypress. El desarrollador de FE escribe las pruebas unitarias. Los desarrolladores de back-end escriben las pruebas unitarias en el repositorio de back-end, mientras que el control de calidad escribe la integración de microservicios y las pruebas de e2e.

Me gustaría que el control de calidad y los desarrolladores puedan trabajar en sincronía, de modo que cuando el desarrollador cree la solicitud de incorporación de cambios, se revise, pero debe fusionarse solo cuando las pruebas de integración y e2e estén listas para el control de calidad que debería funcionar. en la misma rama de función.

¿Es este el enfoque correcto? ¿Cuál es la mejor manera de mantener sincronizados el desarrollo y las pruebas?

A los desarrolladores no parece gustarles mucho este enfoque, ya que necesitan que su código se fusione con la rama de desarrollo lo antes posible para que su próxima rama de funciones que se crea a partir de desarrollo tenga los cambios recientes.

¿Qué sugirieron sus desarrolladores? Quiero decir que son los que tienen que trabajar con este sistema.
@nvoigt ¿no aborda eso el último párrafo del OP?
Hay tantas cosas incorrectas con este enfoque... :) ¿Los desarrolladores ni siquiera escriben pruebas para la API REST ellos mismos? Ese es un nuevo nivel de pereza :) ¿Escribes pruebas e2e (¿sospecho que te refieres a Selenium/Puppeteer?) para las funciones que acaban de desarrollarse? Este es el código más caro que tendrá en toda su base de código. Debe haber pocas pruebas e2e y deben escribirse para una funcionalidad estable que tenga pocas posibilidades de cambio. Es mejor que obtenga un control de calidad manual que realmente se encargue de la funcionalidad en lugar de alguien que esté trabajando para desarrolladores perezosos.
@StanislavBashkyrtsev Gracias por señalarlo. Dev está escribiendo las pruebas unitarias para los microservicios. No pruebas de integración y e2e para los microservicios. ¿No es así como debería ser? QA escribiendo e2e quise decir Cypress. Además, QA está escribiendo e2e para microservicios. Estaba pensando que podríamos impulsar la integración de microservicios para el desarrollador, pero ¿es así que el desarrollador también debería escribir e2e para microservicios?
Empujaría la mayor cantidad posible de automatización a los desarrolladores. A menudo es difícil convencerlos de que escriban pruebas e2e de interfaz de usuario, pero escribir pruebas para API (ya sean e2e o no) es una norma. Y no importa quién las escriba: la cantidad de pruebas de UI e2e debe ser pequeña, si es el comienzo del proyecto, probablemente menos de 10. Son un gran dolor de cabeza y rara vez dan sus frutos. Ciertamente está bien NO escribirlos justo después de que la función esté lista: los usuarios/partes interesadas pueden solicitar cambiar la funcionalidad después de comenzar a usarla, entonces, ¿vale la pena invertir tanto tiempo en algo que cambiará pronto?

Respuestas (4)

Un enfoque que podría intentar es hacer que el control de calidad trabaje antes que los desarrolladores.

Funcionaría algo como esto:

  • Los desarrolladores de back-end escriben llamadas a la API que imitan el comportamiento de la funcionalidad terminada
  • Los desarrolladores de UI crean un front-end de placa de caldera que llama a la API (obteniendo resultados devueltos de los stubs)
  • En esta etapa no hay código de implementación escrito, solo código de marco
  • Esto debería ser rápido de hacer
  • El control de calidad comienza a trabajar en la escritura de sus pruebas de integración y de extremo a extremo, utilizando el front-end de la placa de caldera y la API stub.
  • Los desarrolladores se dispusieron a hacer la implementación real
  • QA termina sus pruebas antes de que los desarrolladores completen
  • Los desarrolladores ahora no dependen del control de calidad; pueden usar las pruebas existentes para confirmar que su código funciona como se espera.

Esto requerirá algo de coordinación y tendrá que planificar las cosas con cuidado. En efecto, es un desarrollo basado en pruebas realizado a nivel de características.

TLDR: Optimice el rendimiento y su gente se volverá en forma de T.


En primer lugar, debo abordar

¿Es este el enfoque correcto?

A lo que mi respuesta es "No preguntes a extraños en Internet. Pruébalo y verás". Agile incorpora dos conceptos que son relevantes aquí:

  1. Ciclos de intento-inspección-iteración
  2. Equipos autogestionados

Respecto a lo primero... pruébalo y verás. Asegúrese de tener una línea de base medible, como el rendimiento (el tiempo que lleva obtener un ticket individual de 'En progreso' a 'Terminado'). Luego pruebe el cambio sugerido durante una semana o tres. Luego mida nuevamente e inspeccione.

Sin embargo, debido a lo segundo, recomendaría encarecidamente no imponer esto al equipo. El enfoque de 'probar y ver' debería ayudar un poco en esto, pero aún deberá abordar sus inquietudes. Lo que me lleva a...

Los desarrolladores necesitan que su código se fusione con la rama de desarrollo lo antes posible para que su próxima característica [...]

A lo que mi sugerencia sería ... no salte inmediatamente a la siguiente función. La función que acaba de "terminar" puede estar lista, ¡pero aún no está terminada! En lugar de saltar a algo nuevo y acumular más trabajo en progreso, concéntrese en obtener ese boleto hasta el final primero.

Ahora, sí, los desarrolladores que no son de control de calidad no tienen experiencia con

integración de microservicios y pruebas e2e

¿pero entonces? Pueden aprender. Uno de ellos puede emparejarse con el control de calidad mientras que otro investiga por su cuenta y el tercero puede trabajar en un proyecto favorito no relacionado (por ejemplo). Al incluir el tiempo de inactividad ( optimización para el rendimiento en lugar de la utilización ), se enfoca en completar los tickets individuales mientras permite que los miembros de su equipo afilen sus sierras . De esta manera, con el tiempo, sus desarrolladores obtendrán nuevas habilidades (se volverán en forma de T) y podrán asumir algunas de las tareas de control de calidad por sí mismos, lo que permitirá al equipo obtener tickets de En progreso a Listo lo más rápido posible.

Que al final es lo que quieres, ¿no?

Gracias por tu comentario. Estaba un poco preocupado por dejar mucho trabajo a los desarrolladores y que pudiera afectar el ritmo de desarrollo. En general, ¿se supone que los desarrolladores deben escribir la integración de microservicios y las pruebas de e2e?
@SKhurana Con respecto a "Estaba un poco preocupado por dejar mucho trabajo a los desarrolladores y que podría afectar el ritmo de desarrollo", funciona en ambos sentidos. Una vez que se realiza el control de calidad, el control de calidad no tendrá ningún trabajo directo que hacer, por lo que también puede ayudar a los desarrolladores. Si puede escribir pruebas de integración, también puede aprender a escribir pruebas unitarias.
Con respecto a "En general, ¿se supone que los desarrolladores deben escribir la integración de microservicios y las pruebas de e2e?", Si desea mi opinión personal, sí, pero nuevamente, solo soy un extraño en Internet. Cada empresa es diferente.

Una posible solución técnica aquí podría consistir en pedirles que creen una segunda rama de control de versiones. Cuando los desarrolladores creen que han terminado su trabajo, pasan a una rama de "prueba de control de calidad pendiente". Las fusiones finales en producción tienen lugar solo desde esa rama.

En ese caso, ¿a partir de qué crean los desarrolladores sus nuevas ramas? @mike robinson Los desarrolladores desean tener la copia reciente del código base cuando están creando una nueva rama.
Los desarrolladores de @SKhurana se ramificarían de la rama 'devDonePreQa'. Este enfoque podría funcionar, aunque podría complicarse si se encuentra un error y de repente tiene que propagar la solución a varias ramas.
En la IC moderna, las mejores estrategias de bifurcación son aquellas que utilizan la menor cantidad posible de bifurcaciones. El más avanzado de ellos es el desarrollo basado en troncos donde solo hay 1 rama. Así que sin duda consideraría otras opciones antes de pensar en sucursales.

Esta es una estrategia que funciona muy bien para mí, como gerente de proyectos que también tiene una larga historia en el desarrollo de software puro: "que hay dos manifestaciones distintas de la idea de 'pruebas de software'". Aunque se usa el mismo término , son de hecho actividades disjuntas. Cada uno se aplica en un momento diferente, con un fin igualmente legítimo.

(1) "Desarrollo basado en pruebas" se refiere a la noción de que el desarrollador de software individual no puede "cerrar el ticket" y "aceptar su cambio" hasta que proporcione el cambio de código fuente y una prueba que demuestre no solo que su cambio funciono pero que no rompio nada. (Estas pruebas se convertirán en parte de una biblioteca cada vez mayor de pruebas que se pueden aplicar de forma automática y continua mediante "el proceso de construcción".) Esto se lleva a cabo a un nivel "bastante microscópico" la mayor parte del tiempo.

(2) El "control de calidad clásico" (a falta de un término mejor...) es una actividad independiente y más centrada en el negocio, también frecuentemente automatizada, pero de una manera diferente, que debe ser realizada por un equipo completamente separado. . Esto busca especialmente problemas visibles para el cliente y con impacto comercial "que no tienen nada que ver per se con 'el código fuente' o 'el último cambio'".

Y existe, y se pretende que exista, una relación sinérgica entre los dos. Si lo desea, "uno se enfoca en 'cómo', mientras que el otro se enfoca en 'qué'". Si ese pez equivocado va a "salir al río y causar problemas", tendrá que pasar dos redes de pesca diferentes !