Las principales técnicas de prueba para pruebas unitarias no incluyen
1. Métodos básicos de pruebas unitarias
Los métodos básicos de pruebas unitarias son: análisis estático manual, análisis estático automático, pruebas dinámicas automáticas y pruebas dinámicas manuales.
Análisis estático manual: encuentre errores leyendo manualmente el código. Generalmente, los programadores verifican el código de los demás y pueden encontrar errores característicos y no característicos.
Análisis estático automático: utilice herramientas para escanear el código y descubrir e informar posibles errores en el código en función de ciertas características de error preestablecidas. El análisis estático automático solo puede encontrar errores característicos de sintaxis.
Pruebas dinámicas automáticas: utilice herramientas para generar automáticamente casos de prueba y ejecutar el programa bajo prueba, y descubrir e informar errores capturando ciertas características de comportamiento (como excepciones/fallos del programa, etc.). solo puede detectar errores de características de comportamiento y es completamente impotente contra errores no característicos. Por ejemplo, la función de suma mencionada anteriormente tiene el código más simple y el error más simple, pero las pruebas dinámicas automáticas aún no pueden encontrarlo porque la herramienta de prueba no puede comprender automáticamente el código. . función.
Prueba dinámica manual: configure manualmente la entrada del programa y la salida correcta esperada, ejecute el programa y determine si la salida real cumple con las expectativas. De lo contrario, informe automáticamente un error. El "manual" mencionado aquí solo significa que la entrada y la salida esperada del caso de prueba se configuran manualmente. Otros trabajos se pueden realizar de forma manual o automática con la ayuda de herramientas. Las pruebas dinámicas manuales pueden encontrar errores característicos y errores no característicos. Por ejemplo, para la función de suma mencionada anteriormente, siempre que cree manualmente un caso de prueba, ingrese dos 1, juzgue si la salida es igual a 2 y ejecute el. prueba, puede encontrar que el código contiene un error.
Los cuatro métodos anteriores se pueden subdividir aún más. Por ejemplo, las pruebas dinámicas manuales tienen muchas formas de diseñar casos de prueba. Si los casos de prueba se diseñan en función de la función del programa, se trata de pruebas de caja negra. Si los casos de prueba se diseñan en función del código, el diseño de casos de prueba basados en la estructura lógica del código se denomina prueba de caja blanca.
2. Selección de métodos de prueba
¿Realiza todo tipo de métodos de prueba en el trabajo independientemente de su gravedad? Obviamente no, el cronograma y el presupuesto del proyecto no lo permitirán y no está en línea con el principio de eficiencia. Se debe seleccionar un método como método de prueba principal y los demás deben elegirse en función de la situación.
El análisis estático automático y las pruebas dinámicas automáticas solo pueden encontrar errores de características. Juntos, estos dos métodos solo pueden encontrar errores de características en el mejor de los casos, mientras que la mayoría de los errores de características gramaticales pueden ser descubiertos por el compilador, muchos errores de características de comportamiento. se expondrá automáticamente durante el proceso de desarrollo, o durante las pruebas de integración y las pruebas del sistema, por lo que estos dos métodos no son adecuados como métodos de prueba principales.
Aunque el análisis estático manual puede encontrar errores característicos y errores no característicos, obviamente es demasiado difícil encontrar todos los errores por completo.
Las pruebas dinámicas manuales pueden encontrar errores característicos y errores no característicos, tienen un amplio margen de desarrollo y pueden utilizarse como método de prueba principal.
3. Pruebas de caja negra y pruebas de caja blanca
A menudo se ve que "las pruebas unitarias son pruebas de caja blanca" y "las pruebas unitarias también tienen cajas negras", lo que puede causar fácilmente confusión. . La caja negra y la caja blanca son en realidad métodos de prueba. La caja negra prueba las características externas del sistema y trata el sistema de destino como una caja negra sin considerar la estructura interna. Se pueden utilizar métodos de caja negra y métodos de caja blanca en cada fase de prueba, es decir, ya sean pruebas unitarias, pruebas de integración o pruebas de sistemas, se pueden utilizar métodos de caja negra y métodos de caja blanca.
La prueba de caja negra también se denomina prueba funcional. Primero debemos probar si el programa implementa funciones básicas. Por lo tanto, la prueba de caja negra es una prueba básica. El principal defecto de las pruebas de caja negra es que es difícil medir la integridad, y las pruebas de caja blanca pueden compensar este defecto.
Las pruebas de caja blanca miden la integridad a través de una cobertura lógica, con indicadores numéricos que se pueden contar con precisión. Las unidades lógicas incluyen principalmente: declaraciones, ramas, condiciones, valores de condición, combinaciones de valores de condición y rutas. Cobertura de declaraciones significa cubrir todas las declaraciones, y así sucesivamente. También existe un tipo de cobertura de condición de juicio, que en realidad es una combinación de cobertura de sucursal y cobertura de condición.
Hay tres tipos de cobertura relacionados con las condiciones: la cobertura de condiciones se refiere a cubrir todas las expresiones condicionales, es decir, todas las expresiones condicionales se calculan al menos una vez, independientemente del resultado del cálculo. La cobertura de valores condicionales se refiere a cubrir todos los valores posibles. del valor de la condición, es decir, el valor verdadero y el valor falso de cada condición deben calcularse al menos una vez. La cobertura de combinación de valor de condición se refiere a cubrir todas las combinaciones posibles de todos los valores de condición. Los errores directamente relacionados con las condiciones son principalmente errores de operadores lógicos, por ejemplo: || se escribe como &&, falta, etc. Estos errores se pueden encontrar básicamente usando una combinación de cobertura de rama y cobertura de condición, mientras que cobertura de valor de condición y condición. La cobertura combinada de valor a menudo requiere una gran cantidad de casos de prueba. Por lo tanto, la rentabilidad de la cobertura de valor de condición y la cobertura de combinación de valor de condición es baja. Las tasas de cobertura más valiosas son la cobertura de declaración, la cobertura de condición, la cobertura de sucursal y la cobertura de ruta.
4. Casos de prueba
Las pruebas dinámicas manuales requieren el diseño manual de casos de prueba. Un caso de prueba consiste en establecer datos de entrada, ejecutar el programa bajo prueba y determinar si el resultado cumple con las expectativas. Si el resultado es el esperado, la prueba pasa; de lo contrario, la prueba falla. En términos generales, las herramientas de prueba deberían poder informar automáticamente las pruebas fallidas.
El contenido principal del caso de prueba son los datos de entrada y la salida esperada, denominados entrada y salida. Una vez determinada la entrada, la salida correcta esperada se establece de acuerdo con la función de. el programa.
Si consideramos la función como una unidad de prueba, entonces los datos de entrada son los datos externos leídos por la función probada y los valores iniciales de estos datos. "Datos externos" se refiere a la función bajo prueba, que son otros datos además de las variables locales, y se dividen en varias categorías: parámetros, variables miembro, variables globales y medios IO. Los medios IO se refieren a archivos, bases de datos u otros medios que almacenan o transmiten datos. Por ejemplo, si la función bajo prueba lee datos de un archivo o base de datos, entonces los datos originales en el archivo o base de datos también son datos de entrada.