Para dibujar aspectos de algunas respuestas juntas y agregar mi 2p ...
Nota: mis comentarios se relacionan particularmente con las pruebas de bases de datos y no con las pruebas de IU (aunque obviamente se aplica algo similar)
Las bases de datos necesitan pruebas tanto como las aplicaciones front-end, pero tienden a ser probadas en base a '¿funciona con el front-end?' o '¿los informes producen el resultado correcto?', que en mi opinión está probando muy tarde en el proceso de desarrollo de la base de datos y no es muy robusto.
Tenemos una serie de clientes que utilizan pruebas de unidad / integración / sistema para su base de datos del almacén de datos además de la UAT / performance / et al habitual. pruebas Encuentran que con una integración continua y pruebas automatizadas, resuelven muchos problemas antes de llegar a UAT tradicional, lo que ahorra tiempo en UAT y aumenta las posibilidades de éxito de UAT.
Estoy seguro de que la mayoría estaría de acuerdo en que se debe aplicar un rigor similar a las pruebas de bases de datos como a las pruebas de front end o de informe.
La clave con las pruebas es probar pequeñas entidades simples, asegurando su corrección, antes de proceder a combinaciones complejas de entidades, asegurando su corrección antes de expandirse al sistema más amplio.
Entonces, dando un poco de contexto a mi respuesta ...
Examen de la unidad
- tiene un enfoque de prueba para demostrar que la unidad funciona, por ejemplo, una tabla, vista, función, procedimiento almacenado
- debería 'tropezar' las interfaces para eliminar dependencias externas
- proporcionará sus propios datos. Necesita un estado inicial conocido de los datos, por lo que si existe la posibilidad de que exista una prueba previa de datos, entonces deben ocurrir truncamientos / eliminaciones antes de la población
- correrá idealmente en su propio contexto de ejecución
- se borrará después de sí mismo y eliminará los datos que utilizó; esto solo es importante cuando no se usan trozos.
Las ventajas de hacer esto son que está eliminando todas las dependencias externas de la prueba y está realizando la menor cantidad de pruebas para demostrar la corrección. Obviamente, estas pruebas no se pueden ejecutar en la base de datos de producción. Es posible que haya varios tipos de pruebas que realizará, según el tipo de unidad, que incluyen:
- verificación de esquema, algunos podrían llamar a esto una prueba de "contrato de datos"
- valores de columna que pasan por
- El ejercicio de rutas lógicas con diferentes valores de datos para funciones, procedimientos, vistas, columnas calculadas
- prueba de caso límite: NULL, datos incorrectos, números negativos, valores que son demasiado grandes
(Unidad) Pruebas de integración
Esta publicación SE me pareció útil al hablar sobre varios tipos de pruebas.
- tiene el enfoque de prueba para demostrar que las unidades se integran juntas
- realizado en varias unidades juntas
- debería 'tropezar' las interfaces para eliminar dependencias externas
- proporcionará sus propios datos, para eliminar los efectos de influencias externas de datos
- correrá idealmente en su propio contexto de ejecución
- se borrará después de sí mismo y eliminará los datos creados; esto solo es importante cuando no se usan trozos.
Al pasar de las pruebas unitarias a estas pruebas de integración, a menudo habrá un poco más de datos, para probar una variedad más amplia de casos de prueba. Obviamente, estas pruebas no se pueden ejecutar en la base de datos de producción.
Esto luego pasa a las Pruebas del sistema , Pruebas de integración del sistema (también conocidas como pruebas de extremo a extremo 2), con volúmenes de datos crecientes y un alcance creciente. Todas estas pruebas deberían formar parte de un marco de pruebas de regresión. Los usuarios pueden elegir algunas de estas pruebas para realizarlas como parte de la UAT, pero UAT son las pruebas definidas por los usuarios , no según lo definido por TI, ¡un problema común!
Entonces, ahora que he dado un poco de contexto, para responder a sus preguntas reales
- la prepoblación de datos para pruebas de unidad e integración puede causar errores de prueba espurios y debe evitarse.
- La única forma de garantizar pruebas consistentes es no hacer suposiciones sobre los datos de origen y controlarlos rigurosamente.
- un contexto de ejecución de prueba separado es importante, para garantizar que un probador no entre en conflicto con otro probador que realice las mismas pruebas en una rama diferente del código de la base de datos controlada por la fuente.