2011-03-01 11 views
25

¿Es mejor si una persona es responsable de escribir pruebas y otra para cumplirlas o si el codificador y el escritor de pruebas deben ser la misma persona, idealmente?¿Quién debería escribir pruebas?

Respuesta

19

Pruebas unitarias es algo que usted hace mientras escribe el código. Esta prueba es probando su vista cómo deberían funcionar las cosas (en el nivel de clase/método/algoritmo) y le ayuda al desarrollar, ya que puede ejecutar las pruebas antes y después de hacer cambios para ver que las cosas siguen de acuerdo con el pruebas que tiene en su lugar. Vea esto como algo que ayudará al programador mientras trabaja. Además, las pruebas también proporcionarán una manera de ver cómo se supone que algo funciona para cualquiera que mire el código. TDD no está cambiando este concepto, sino que resalta que la codificación necesita primero pensar cómo debería funcionar y qué esperar.

Si hay un problema al no ver sus propios problemas, puede probar la programación de pares, revisiones de códigos u otras formas de ver las cosas con más ojos y más cerebro. Todavía creo firmemente que unit testing es una herramienta para el programador y no es algo que haya hecho nadie más.

Llegando a otros tipos de pruebas, como las pruebas de integración , pruebas funcionales o incluso (sistema) pruebas de rendimiento, podría ser bueno tener otras personas haciendo esto. Especialmente si desea automatizar esta prueba, se requiere saber cómo hacer las cosas y también un nivel más alto de conocimientos empresariales sobre qué probar y cómo hacerlo.

La respuesta a su pregunta también depende de la cultura y cómo funciona su organización, sin embargo, creo que en todos los casos desea realizar pruebas unitarias como parte del desarrollo del código. Si esto resulta en problemas, puede haber algo más que esté roto en la organización o algo que deba ser examinado.

actualización

Estas son algunas cosas que he visto en las organizaciones que afectan a la unidad de prácticas de prueba:

  • algunas personas no quieren escribir pruebas unitarias;
  • algunas personas pueden no saber cómo escribir buenas pruebas unitarias, lo que puede socavar los beneficios de hacerlo y que podría usarse como una "prueba" de que las pruebas unitarias son malas;
  • la organización puede no llevar a las personas a trabajar juntas, sino que tienen responsabilidades distintas, como el código de los codificadores, la prueba de los probadores, etc., lo que podría obligar a las pruebas unitarias a alguien;
  • Algunas personas pueden ser contratadas para escribir pruebas unitarias, por lo que si este rol no se cambia, contradice las pruebas de unidad de escritura a medida que codifica;
  • puede haber una organización muy pequeña que implícitamente puede significar que todos hacen un poco de todo;
  • la organización como un todo no reconoce los beneficios de las pruebas unitarias, sino más bien código-tan-rápido-como-posible-y-tratar-con-problemas-posterior,
  • que está impulsando el esfuerzo para hacer la unidad ¿pruebas? ¿Es una persona? Desarrolladores? ¿Administración?
  • es la organización libre de decidir quién hace las pruebas unitarias?

Si hay un acuerdo para tener pruebas unitarias, las cosas de arriba pueden ser problemas con los que lidiar para poner a la organización en un estado donde las cosas simplemente funcionen naturalmente. Si tiene personas con buenas prácticas de pruebas unitarias y experiencia, déjelas liderar las cosas para que el resto del equipo vea la magia de la prueba de unidad.

Personalmente, creo que si las personas ven los beneficios de la unidad de pruebas, puede escribir pruebas unitarias buenas, automatizarlos con construye, y si el equipo puede decidir por sí mismos cómo organizar cómo obtener las pruebas unitarias escritas que se todos caen naturalmente en el lugar para que los desarrolladores escriban pruebas unitarias mientras desarrollan el código, cualquiera puede en cualquier momento agregar más pruebas unitarias para cualquier código que estén viendo. Si hay testers, se se enfocarán en otros tipos de pruebas, como pruebas funcionales o pruebas exploratorias.

+0

Las pruebas unitarias están probando el código en unidades, átomos funcionales en aislamiento. "probar tu opinión de cómo deberían funcionar las cosas" podría aplicarse a cualquier tipo de prueba. – StuperUser

+0

Bueno, claro que eso es un poco vago, suponiendo que sepamos qué pruebas unitarias hay aquí. ¿Qué te gustaría leer? :) – murrekatt

+0

podría dar ejemplos de los problemas que podrían surgir, lo que podría romperse o debe ser examinado? – Henno

7

Con TDD, la unidad de revelado (lea un programador o un par) debe escribir las pruebas.

TDD (desarrollo impulsado por prueba): las pruebas de unidad suelen ser a nivel técnico. La unidad en desarrollo debe escribirlos a medida que vienen a implementar la clase. El problema con el que se puede encontrar si otros escriben las pruebas es que la fuerza externa influirá en el diseño. TDD funciona bien cuando los desarrolladores están haciendo el diseño.

Con BDD/ATDD debe involucrarse el QA/PO.

BDD (desarrollo conducido por comportamiento) y ATDD (desarrollo impulsado por prueba de aceptación) se escriben típicamente en un nivel menos granular. Las mejores pruebas se escriben teniendo en cuenta al interesado. Así que las mejores personas para escribir estos son QA (Aseguramiento de la calidad), PO (Propietarios de productos) o BA (Analistas de negocios). Eso no quiere decir que un desarrollador no pueda escribirlos, solo necesitas entrar en ese rol.

La belleza de trabajar en parejas es que si su pareja escribe las pruebas, hay una comprobación de cordura automática de las pruebas a medida que se escriben.

+0

Tengo mucha curiosidad sobre este tema, pero no conozco la terminología.¿Te importaría expandir 'TDD', 'BDD', 'ATDD', 'QA' y 'PO', por favor? –

+0

@Delan - Diferencia entre TDD y BDD: http://stackoverflow.com/questions/2509/what-are-the-primary-differences-between-tdd-and-bdd –

+0

@Liutauras y @John, ¡gracias por eso! –

10

Esta pregunta invitará a muchas respuestas diferentes, algunas basadas en cómo funcionan las organizaciones, algunas basadas en las calificaciones para la planificación y las pruebas. Hay muchas maneras diferentes de organizar las pruebas, especialmente dado que los tamaños de las organizaciones son diferentes y pueden o no tener recursos para contratar diferentes equipos.

Existen diferentes tipos de pruebas:

  • pruebas unitarias
  • Pruebas de Integración
  • Pruebas funcionales
  • No Funcional Testing - el estrés, la penetración y muchos otros tipos
  • usuario Pruebas de Aceptación

I n mi experiencia:
Prueba unitaria (átomos de funcionalidad en aislamiento, p. una sola acción de controlador) y Las pruebas de integración (aquellos átomos que trabajan juntos, por ejemplo, un controlador que trabaje con los objetos de nivel de dominio, objetos de nivel de dominio que trabajan con objetos de nivel de datos) deben hacerlo el desarrollador .

funcionales prueba (sistema funciona como los estados de especificaciones) debe ser realizado por un equipo de control de calidad independiente .

Ensayos no funcional se puede hacer por un equipo de control de calidad o arquitecto/tecnología conducir.

UAT (sistema es adecuado para el propósito) debe ser realizado por el cliente.

El razonamiento detrás de esto es, como Unidad automatizada y pruebas de integración son caja blanca (se puede ver el interior de la aplicación, por ejemplo el código), que tendrán que ser completada por un desarrollador (no necesariamente siempre el desarrollador responsable de la código bajo prueba).
Pruebas funcionales y UAT son caja negra (no se puede ver dentro de la aplicación) por lo que es más probable que lo haga alguien no técnico, pero experto en análisis de prueba.
Las pruebas no funcionales pueden ser en blanco o negro dependiendo de lo que se pruebe y la estrategia general.

Es importante tener en cuenta que se encuentran más defectos al probar el trabajo de otro que al probar el suyo. El probador pensará diferente y, por lo tanto, buscará/probará cosas que no se habrían tenido en cuenta durante el desarrollo, y las personas protegen su código de forma natural (sin importar lo difícil que sea tratar de ser objetivo).

Si no hay un equipo de prueba independiente, es bueno que los desarrolladores prueben el código de los demás.

Para responder a su pregunta un poco más, cuando era un probador fui responsable del análisis de prueba (decidir qué pruebas funcionales se requerían para probar las especificaciones) y escribir scripts de prueba y ejecutarlos manualmente. Una vez que se escribieron esas secuencias de comandos, cualquier probador podría ejecutarlas, pero era importante que el análisis de prueba se realizara por separado para el trabajo del desarrollador en la aplicación.

+0

+1, la parte responsable está relacionada con el tipo de prueba. Las pruebas de software no son un proceso monolítico. – mcyalcin

+0

@mcyalcin, ¿puedes comentar tu comentario? :-) – Henno

+0

@Henno, no cabe mucho en un comentario, pero: las pruebas unitarias se refieren a los micro módulos y es responsabilidad del desarrollador; las pruebas de integración pueden ser de desarrolladores (plural), de arquitecto; analista o tester de pruebas funcionales (persona de lectura con conocimiento de dominio pero no programador); las pruebas no funcionales tienen varios componentes, con expertos discretos, por ej. la seguridad de los analistas de seguridad y las pruebas de carga por probadores de sistemas (léase personas que pueden trasladar las pruebas funcionales a las herramientas de prueba de carga). UAT es básicamente los dos últimos realizados por el cliente. Existen otros tipos/niveles. – mcyalcin

1

una política informal en mi equipo de desarrollo es

Todo el mundo hace de todo.

Es decir, no hay Probadores, Programadores o Arquitectos. Se espera que todos hagan un poco de todas las actividades.

Esto es para evitar un proceso de cascada. Si una actividad es exclusiva de una persona, el desarrollo puede ser secuencializado, con personas que manejan el trabajo en el futuro y sin ser conscientes de las consecuencias totales de las decisiones que toman.

Esto no significa que todos trabajen en todas las tareas al mismo tiempo. Significa que cada persona trabaja en cada tipo de tarea en algún momento

+0

Esta es una buena política – Morten

+0

Esta es una solución no escalable. Cuando tienes un equipo de más de 10 desarrolladores y una aplicación masiva (no todo es una aplicación de ejemplo de la lista Todo), la separación de esfuerzos no solo se recomienda, sino que se requiere. –

+0

@SSHThis Absolutamente. Observe que el número de vías de comunicación se descontrola rápidamente con más de unas pocas personas en el equipo: (n * (n - 1))/2. – BryanH

Cuestiones relacionadas