¿La unidad está probando el desarrollo o las pruebas?

24

Tuve una discusión con un gerente de pruebas sobre el papel de las pruebas de unidad e integración. Ella solicitó que los desarrolladores informaran sobre qué han probado la unidad y la integración y cómo. Mi perspectiva es que las pruebas de unidad e integración son parte del proceso de desarrollo, no del proceso de prueba. Más allá de la semántica, lo que quiero decir es que las pruebas de unidad e integración no deben incluirse en los informes de prueba y los probadores de sistemas no deben preocuparse por ellas. Mi razonamiento se basa en dos cosas.

  1. Las pruebas unitarias y de integración se planifican y realizan contra una interfaz y un contrato, siempre. Independientemente de si utiliza contratos formalizados, aún prueba lo que, por ejemplo, se supone que debe hacer un método, es decir, un contrato.

    En las pruebas de integración, prueba la interfaz entre dos módulos distintos. La interfaz y el contrato determinan cuándo pasa la prueba. Pero siempre prueba una parte limitada de todo el sistema. Las pruebas de sistemas, por otro lado, se planifican y se realizan según las especificaciones del sistema. La especificación determina cuándo pasa la prueba.

  2. No veo ningún valor en comunicar la amplitud y profundidad de las pruebas unitarias y de integración al probador (de sistemas). Supongamos que escribo un informe que enumera qué tipo de pruebas unitarias se realizan en una clase de capa empresarial particular. ¿Qué se supone que debe quitar de eso?

    A juzgar por lo que debe y no debe probarse a partir de eso, es una conclusión falsa porque el sistema aún puede no funcionar de la manera que requieren las especificaciones a pesar de que pasan todas las pruebas de unidad e integración.

Esto puede parecer una discusión académica inútil, pero si trabajas en un ambiente estrictamente formal como yo, en realidad es importante para determinar cómo hacemos las cosas. De todos modos, ¿estoy totalmente equivocado?

Rubio
fuente
99
¿Importa?
Yannis
55
@YannisRizos Por el título, no. De toda la pregunta, parece seguro para la persona que pregunta
Ludwig Magnusson
2
@Rubio De su pregunta, acepto que los informes sobre las pruebas unitarias son inútiles para el probador del sistema. Las pruebas unitarias son una herramienta útil para el desarrollador. ¿Cómo motiva su gerente de pruebas la necesidad de estos informes?
Ludwig Magnusson
2
@LudwigMagnusson Cierto, sin embargo, si solo le importa a la persona que pregunta, eso está demasiado localizado.
Yannis
55
los desarrolladores que informan al administrador de pruebas están equivocados, pase lo que pase. Si pasó esa solicitud a través de su ( gerente de desarrollo ), solo tendría que hacer lo que su jefe le dijo. "Hablar con mi gerente" es el arma que uno necesita saber cómo usar en un "ambiente estrictamente formal" como el suyo
mosquito

Respuestas:

30

Escribir pruebas automatizadas es el trabajo de un desarrollador; las pruebas son parte de la base de código y deben tratarse como tales; deben estar sujetas a las mismas revisiones de código, estándares de codificación, disciplina de control de fuente, etc., que el resto del proyecto.

La ejecución de dichas pruebas se realiza por dos razones: Primero, como una herramienta para guiar a los desarrolladores. Ejecuta pruebas para verificar que el código que acaba de escribir hace lo que se supone que debe hacer, las usa como documentación adicional y para verificar que los cambios no rompan ninguna funcionalidad existente. Si realiza TDD real, las pruebas también son una fuente autorizada de especificaciones técnicas. La segunda razón para usar las pruebas es durante el control de calidad y la implementación. La ejecución de todas las pruebas automatizadas debería ser uno de los primeros pasos en cada ronda de pruebas; ejecutar pruebas automatizadas es barato (prácticamente no se requiere mano de obra), y no tiene mucho sentido realizar pruebas manuales si las automatizadas fallan.

Esto significa que las responsabilidades deberían ser así:

  • Los desarrolladores escriben pruebas automatizadas
  • Los desarrolladores ejecutan pruebas automatizadas individuales según sea necesario, como parte de su flujo de trabajo de desarrollo
  • QA ejecuta todas las pruebas automatizadas como una de las primeras etapas de prueba

Si tiene un servidor de compilación, la tarea de control de calidad (con respecto a las pruebas automatizadas) se reduce a "abrir el informe del servidor de compilación y verificar que todo esté verde".

tdammers
fuente
Excelente publicación, exactamente en la línea que iba a publicar. Solo que Qualm depende demasiado de las pruebas unitarias, así como las pruebas de integración pueden conducir a problemas en el futuro. No estoy de acuerdo con el hecho de que la tarea de QA se reduce a verificar el servidor de compilación (supongo que te refieres a algo como Hudson). Esto está poniendo toda la carga de las pruebas en los desarrolladores para escribir pruebas que cubran TODA la lógica empresarial, todo el tiempo, lo que parece estar poniendo demasiado peso en los desarrolladores.
Dardo
44
@dardo: Por supuesto, las pruebas automatizadas no son las únicas pruebas que debe ejecutar, de lo contrario, podría deshacerse del control de calidad por completo. Eso sería ridículo: muchos aspectos cruciales de cualquier producto de software simplemente no pueden probarse automáticamente. Lo que quiero decir es que, dada la existencia de pruebas automatizadas, el control de calidad no debería tener que preocuparse por ellas más allá de verificar la salida del servidor de compilación; después de eso, hacen lo normal: pruebas manuales y semiautomáticas en la compilación completada.
tdammers
Ah, sí, de acuerdo al 100% como un punto de control, ¿están allí, pasan, etc.
Dardo
@tdammers: las pruebas son solo una pequeña parte de la garantía de calidad.
Matthew Flynn
2
Excelente respuesta, sin embargo, no estoy de acuerdo en que las pruebas se consideren así an authoritative source of technical specifications. Las pruebas deben ser una confirmación de las especificaciones, pero ciertamente no un reemplazo. Eso no quiere decir que estoy abogando por una gran especificación inicial tampoco, sino que estoy haciendo la distinción de que aplicamos pruebas para validar las cosas que sabemos sobre la forma en que debe comportarse un sistema, en lugar de tener el Las pruebas definen el comportamiento. Una distinción pedante quizás, pero importante de todos modos.
S.Robins
10

Creo que lo más importante para usted sería aclarar por qué ella necesita ese informe.

Puede haber diferentes explicaciones (como lo sugieren varias respuestas), que requieren estrategias muy diferentes.

  • Si ella es una persona razonable, simplemente desea obtener información para ayudar al trabajo de su equipo de evaluación, tiene sentido llegar a un entendimiento común y encontrar una solución que sea adecuada para ambos. Puede discutir con ella la naturaleza de las pruebas unitarias y la diferencia fundamental entre las pruebas unitarias vs funcionales / del sistema / de aceptación. Esperemos que pueda hacerle entender que funcionan en niveles muy diferentes y que ninguno puede reemplazar al otro.
  • si ella es una fanática del control o una burócrata, que exige un informe solo por el bien, puede generar algo para satisfacer sus caprichos con la menor cantidad de esfuerzo (por ejemplo, lo que sugirió @Doc :-).
  • si le gusta algún juego de poder, puede preguntarse si tiene derecho a exigir informes de los desarrolladores. En mi experiencia, los desarrolladores generalmente no deben informar al departamento de control de calidad.
Péter Török
fuente
Buenos puntos. Ella parece una persona razonable. Mi temor, que no dejé muy claro, es que las pruebas unitarias llevan a los probadores en la dirección equivocada y falsa seguridad en lo que necesitan y no necesitan probar.
Rubio
2
@Rubio, de hecho, debes aclararle que las pruebas unitarias no pueden reemplazar las pruebas del sistema. De hecho, ¡la alta cobertura de prueba unitaria de un módulo específico puede ser incluso una señal de advertencia de que ese módulo necesita atención adicional durante la prueba del sistema! Si los desarrolladores se tomaron la molestia de escribir tantas pruebas, el código puede haber sido cambiado / extendido drásticamente últimamente, y / o está lleno de errores.
Péter Török
7

Creo que el papel del control de calidad y el desarrollo, y la interacción, pueden variar mucho entre las organizaciones. Pero en general, en mi equipo, les digo a los miembros que se unen que básicamente pretendan que no hay un equipo de control de calidad, en el sentido de que son responsables de los cambios que están impulsando en la producción. A su vez, nuestro equipo de control de calidad no asume mucho sobre las pruebas de desarrollador, y hace una buena cantidad de pruebas del sistema como un todo funcional.

Por esta razón, a nuestro equipo de control de calidad no le importa mucho lo que se prueba y no se prueba antes de comenzar a probar.

Creo que es útil que el equipo de control de calidad comprenda lo que las pruebas unitarias cubren y no cubren, a un alto nivel, para que podamos trabajar colectivamente para identificar brechas y áreas que podrían necesitar más rigor. Entonces, tal vez su colega busque un resumen de alto nivel, en lugar de los detalles sangrientos.

Paul Sanwald
fuente
5

Insistió en que los desarrolladores informan de qué han probado la unidad y la integración y cómo.

¿Realmente está tratando de discutir si este tipo de prueba está realmente en el ámbito del "desarrollo", o solo está tratando de averiguar qué tan bien su código está cubierto por las pruebas unitarias? Con solo mirar la información que ha proporcionado, parece que solo quiere saber qué partes del código están cubiertas y dónde debe enfocar el esfuerzo de su equipo.

Trabajé en un equipo de evaluación justo fuera de la escuela antes de pasar a un rol de desarrollo, y puedo ver cómo esto podría ser valioso para ella y su equipo.

Jason
fuente
1
Pero, ¿no debería venir el foco de las especificaciones? Hay situaciones en las que los cambios en el código tienen repercusiones inesperadas y luego es muy importante que el desarrollador comunique que las pruebas también deberían cubrir esto y esto.
Rubio
1
@Rubio: Por supuesto, pero desde un punto de vista puramente práctico, intente verlo desde su perspectiva. Suponiendo que todas las partes de la aplicación no tendrán cantidades de código perfectamente iguales cubiertas por las pruebas unitarias, ¿no le gustaría dedicar más de sus recursos limitados a las partes de la aplicación con menos cobertura? Para mí, es simplemente una cuestión de mirar el informe y decirle a mi equipo: "Hola chicos, parece que el Área X tiene menos código cubierto por las pruebas que el Área Y, tratemos de concentrarnos en ejecutar pruebas en el Área X"
Jason
@Rubio: sí, pero si está haciendo TDD (es decir, BDD) correctamente, sus pruebas deben estar en contra de las especificaciones en primer lugar. Si su empresa estaba realmente iluminada, entonces el equipo de prueba podría escribir las pruebas para el equipo de desarrollo.
gbjbaanb
2
Lo que se prueba: informe de cobertura de código generado automáticamente. Cómo se prueba: lea el código de prueba de la unidad. @gbjbaanb: "el equipo de prueba podría escribir las pruebas para el equipo de desarrollo". Hay tantas cosas mal con esa afirmación, que no sé por dónde empezar, excepto para decir, Muy mala idea .
BryanH
5

No veo que importe demasiado.

Si no los proporciona al control de calidad / pruebas, y no realizan las pruebas adecuadas, y falla en la producción, es su culpa por dejar que el control de calidad entre en producción sin verificar que funciona como se especifica.

Si los proporciona a QA / Testing, y no realizan las pruebas adecuadas ... el mismo resultado que si no los hubiera proporcionado.

Sin embargo, si los proporciona, también podrían compararlos con la especificación, y / o sugerir qué pruebas pueden ser defectuosas o si es necesario cambiarlas porque encontraron un error.

Realmente, no veo muchos inconvenientes en proporcionarlos. Todavía está en QA / testing para validar contra la especificación. Si toman el camino perezoso y solo confían en que su prueba es lo suficientemente buena porque todos pasaron, son ellos los que fallaron en su trabajo. Mientras sigan teniendo la especificación también, los resultados de las pruebas de unidad / integración son simplemente imprecisos y no deberían ser capaces de lastimarlo de una forma u otra. Esta es la razón por la que tenemos dev y QA. Múltiples controles que la aplicación realiza según lo especificado.

Los desarrolladores cometen errores, el control de calidad comete errores, idealmente no ambos cometen un error en el mismo elemento ... y si lo hacen ... es potencialmente un analista quien dejó caer la pelota escribiendo una especificación poco clara.

CaffGeek
fuente
2
La desventaja para mí es el trabajo extra que proporciona poco o nada de valor.
Rubio
@Rubio, ¿qué trabajo extra? Simplemente imprima el resultado. Si se nombran bien, les dice lo que está probando. No debería necesitar el código real o la descripción de cómo funciona el método. Si lo hacen, pueden buscarlo ellos mismos.
CaffGeek
1
Generar un informe de las 3500 pruebas de unidad / integración que pasaron probablemente sería de poca ayuda para el probador, incluso si las pruebas estaban bien nombradas (lo que deberían ser pero no lo son). Para proporcionar a los probadores información significativa sobre la prueba unitaria, el desarrollador tendría que profundizar en la prueba unitaria asociada con una característica particular y de alguna manera comunicarle al probador lo que realmente se prueba y cómo se afirma. Eso es mucho trabajo.
Rubio
1
@Rubio: la automatización es tu amiga. Puede configurar un servidor de integración continua que envíe informes por correo cada vez que haya un registro (esto también lo ayudará). Si QA solicita una explicación de las pruebas y el código, entonces parece que han ido más allá del nivel de razonabilidad y han entrado en el ámbito de "no comprender el concepto". Si no pueden o no leerán el código, entonces son inútiles. En ese momento, un chat con su gerente sería beneficioso, y puede exponerlo como, "QA quiere que pase el x% de mi tiempo ayudándoles a leer el código, ¿está bien?"
BryanH
1
+1 por decir que no exime a QA de su responsabilidad de probar el software de forma independiente .
2

Las pruebas unitarias son responsabilidad de los desarrolladores de que las pruebas pueden ser útiles para comprender cómo funcionan las piezas de código por sí mismas. Algunos pueden ver esto como una forma de documentación y, por lo tanto, tiene algún valor, aunque puede haber una sobrecarga si las pruebas unitarias se cambian regularmente.

El otro valor al pasar las pruebas es que esto puede evitar duplicar las pruebas que pueden ser redundantes en términos de garantizar la funcionalidad básica.

También hay pruebas de aceptación del usuario que están separadas de todo esto, ya que el usuario final puede tener su propia comprensión de cómo debe funcionar un sistema.

JB King
fuente
1
Las pruebas redundantes son lo que a menudo se usa como argumento y a veces puede ser cierto. Sin embargo, las pruebas del sistema siempre se realizan en todo el sistema, mientras que las pruebas de unidad / integración se centran en una unidad específica. Veo un peligro aquí.
Rubio
2

Si su empresa tiene una metodología definida para garantizar la calidad de sus productos (si cumplen con SOX o intentan mejorar su nivel de CMMI, probablemente lo hagan), entonces los productos deben ser capaces de resistir la auditoría para mostrar que el proceso fue seguido.

A menudo, el proceso definido incluye pruebas unitarias (que es algo bueno). Desafortunadamente, esto también significa que tiene que documentar sus pruebas unitarias y demostrar que se ejecutaron para resistir la auditoría. Eso significa que necesita una forma de informar sobre sus pruebas unitarias.

Mire una herramienta como Sonar para ayudarlo: informará el nivel de cobertura del código y los resultados de las pruebas de unidad.

Matthew Flynn
fuente
SOX no, CMMI sí. Nuestras pruebas de unidad / integración son parte del proceso de revisión de código y eso resiste la auditoría. Puedo obtener un informe generado de una ejecución de prueba de unidad / integración, pero eso es bastante críptico para un probador. La cobertura también está en el informe, pero eso en sí mismo no significa nada.
Rubio
Primero, no le dé a sus exámenes nombres crípticos. Echa un vistazo a dannorth.net/introducing-bdd . En segundo lugar, la cobertura del código puede no decir mucho sobre la calidad de las pruebas, pero al menos muestra que las unidades que se están probando no explotan cuando se ejecuta la mayor parte del código.
Matthew Flynn
Buen enlace, gracias. Recuerdo haber leído un excelente artículo de una revista que exploraba diferentes formas de nombrar las pruebas unitarias, pero no puedo encontrarlo ahora. Puede haber sido Visual Studio Magazine o Code Magazine.
Rubio
2

Esto realmente depende de la compañía, pero desde mi experiencia, habiendo trabajado tanto como probador de sistemas en un enfoque tradicional como también como probador trabajando en un equipo ágil en un modelo de CD, saber lo que ha sido probado en la unidad y la integración es extremadamente útil.

La calidad es responsabilidad del equipo: tanto los desarrolladores, los evaluadores como la gestión de productos y trabajar juntos es la mejor manera de garantizarlo.

Por lo tanto, el administrador de pruebas quiere saber qué se ha probado con la unidad y la integración y es un poco más de trabajo adicional para los desarrolladores, ¡pero ahorra el trabajo general para el proyecto! Al proporcionar la información al gerente de pruebas, pueden enfocar el esfuerzo de su equipo de prueba en lo que es crítico e importante. Como se mencionó anteriormente, si un área de código no se prueba unitariamente, el equipo puede concentrar su esfuerzo allí en comparación con un área que está muy probada: ¿por qué duplicar el esfuerzo? Todos están trabajando hacia el mismo objetivo final de software de mayor calidad lanzado a tiempo.

Lauren
fuente
1

Creo que sería beneficioso proporcionar este tipo de cosas. La cobertura de prueba unitaria debe ser algo que se conoce por desarrollo y prueba para que puedan dar cuenta de eso.

Obviamente, tienes que probar las cosas críticas del negocio sin importar qué. Debe probar la funcionalidad de uso común de manera dura, independientemente de si tiene una gran cobertura de prueba de unidad. No estaría de más hacerles saber qué otros lugares están cubiertos por las pruebas unitarias. ¿El código ya comprueba los casos límite en este pequeño control? Es útil saber este tipo de cosas en todos los aspectos del negocio.

Chad Stewart
fuente
Estaba a punto de escribir una respuesta similar. Si bien las pruebas unitarias deben estar en el dominio del desarrollador de software, dar al equipo de prueba una idea de la cobertura del código puede ayudar al equipo de prueba a comprender y enfocarse en áreas específicas que pueden requerir una mayor atención por parte de los probadores. También puede ser una forma de mantener a los desarrolladores en su juego en términos de garantizar que tengan en cuenta tantos casos extremos como sea rentable para hacerlo. Esto permite que el equipo de prueba no solo valide la totalidad del sistema, sino que también tenga en cuenta todas las cosas que de otro modo podrían considerarse costosas de probar.
S.Robins
1

Vale la pena mencionar el enfoque discutido en el libro "Cómo prueba Google el software": las pruebas y el control de calidad son responsabilidad de todos, y los estándares son rigurosos.

El papel real de lo que tradicionalmente se llama el departamento de "Pruebas", es en realidad la productividad del desarrollador; es decir, automatización para permitir que la organización alcance el nivel de rigor requerido económicamente.

William Payne
fuente