Vamos a aclarar las prioridades primero ...
En su rol de cliente, su principal preocupación no es la prueba unitaria
Si está utilizando proveedores que producen software para usted, entonces realmente no debería preocuparse si están utilizando una metodología u otra. Lo que está en juego es adquirir algún tipo de solución que lo ayudará a alcanzar sus objetivos. Lo único que debería importarle es si esa solución es aceptable o no. Es por eso que tenemos pruebas de aceptación, ya que recae en su responsabilidad de asegurarse de que obtenga lo que desea. Es en el momento crucial de la aceptación del cliente que el dinero se transferirá de los bolsillos de su empresa al bolsillo del proveedor.
Podría exigir pruebas unitarias como requisito de entrega, pero hay varios problemas de herencia con ellos, el más grave es que no hay una forma segura de determinar las métricas de antemano:
- ¿Cuál es la cantidad aceptable de pruebas unitarias?
¿Debería haber 10 pruebas? ¿Qué tal 100 pruebas? ¿Qué tal 1000 pruebas? En realidad, es bastante difícil determinar al principio cuántas pruebas necesitará. El número real es indeterminable realmente ... como el problema de detención ... pero no estamos resolviendo ese problema.
Solo desea un software que tenga pruebas unitarias para que pueda continuar el desarrollo. Las pruebas unitarias aún no dicen lo que has roto, pero son increíblemente adecuadas para decirte cuándo el código tiene un error de regresión.
- ¿Cuál es un nivel aceptable de cobertura de código?
"100%, por supuesto!" pensarías Lamentablemente, esa métrica es engañosa; incluso si tuviera una cobertura de código del 100%, ¿está realmente seguro de que las cosas funcionan como se esperaba? Es posible tener una cobertura del 100%, pero no se puede hacer.
Lo que realmente necesita hacer es una prueba exploratoria, es decir, encontrar a alguien que sea realmente bueno rompiendo cosas y dejar que haga la prueba. Para encontrar los errores que ningún desarrollador ha pensado.
Además, el 100% a veces es inalcanzable con pruebas unitarias puras si tiene algunos trucos de rendimiento necesarios y usa patrones de diseño que son difíciles de probar (busque "singleton" y "tdd" en su motor de búsqueda favorito y encontrará algunos ejemplos).
Desea que el software entregado funcione y el documento de especificación es su única garantía de que lo hará.
Va a necesitar un mayor nivel de prueba
Su documento de especificación tiene que ser verificado de alguna manera. Cada punto tiene que pasar con sus proveedores que tengan objetivos claros y criterios de aceptación. Una organización de control de calidad que funcione bien (o un probador impresionante si tiene un presupuesto limitado y un alcance limitado) proporcionaría los casos de prueba para verificar estos criterios de aceptación. También necesita a alguien para verificar esos criterios de aceptación.
Hay varias formas de verificar sus objetivos, y si alguien me dice que no puede establecer objetivos razonables de calidad, rendimiento y eficiencia, los alcanzaré en la cabeza con libros grandes y pesados sobre pruebas exploratorias, de rendimiento y de usabilidad, respectivamente. Puede ser fácil exagerar con los objetivos, pero el conocimiento y la comunicación lo ayudarán a establecer objetivos realistas.
No soy un abogado, pero la mayoría de los contratos de proyectos (que es básicamente la madre de todas las especificaciones para el proyecto) que he leído generalmente tienen un criterio de relación de defectos que estipula cuántos errores se consideran aceptables. Los errores generalmente se determinan a través de la gravedad, los errores que detienen la exposición que se encuentran por QA tienen una baja tolerancia, mientras que las imperfecciones menores tienen una alta tolerancia. En proyectos reales es difícil exigir que el software tenga 0 defectos. Los plazos generalmente ponen fin a esa práctica. Es en estas situaciones que debe comenzar a negociar el alcance.
La mayoría del software suministrado que he visto generalmente no se entrega con pruebas unitarias. Podría argumentar que los proveedores deben ser lo suficientemente profesionales como para entregar esto, sin embargo, la razón principal por la que desea que se le entreguen las pruebas unitarias es para asegurarse de que no obtenga errores de regresión y también permita la refactorización. En la vida real con proyectos con plazos ajustados, tanto el proveedor como el cliente reducirán el alcance y las pruebas unitarias generalmente desaparecerán y se eliminarán de la lista de resultados requeridos.
Es un poco triste que el software de código abierto de alto perfil se entregue con pruebas unitarias, pero un desarrollador de software profesional no puede, ¿verdad?
Entonces, ¿cuándo, como cliente, me preocupo por las pruebas unitarias?
Yo diría que la única vez que realmente le interesaría la prueba unitaria es si el software entregable es un componente autosuficiente que no se ejecuta como un programa independiente, para lo cual la prueba más gruesa que puede hacer es una prueba unitaria . Las bibliotecas de clases serían un tipo de producto que se puede entregar junto con pruebas unitarias.