Exploración de la prueba inteligente de Baidu en el campo de la generación automática de pruebas

"Descubriendo la ampliación de las pruebas inteligentes de Baidu" presenta cómo dividir las actividades de prueba en cinco pasos: entrada de prueba, ejecución de prueba, análisis de prueba, posicionamiento de prueba y evaluación de prueba para promover la escala y la integración de los puntos de prueba inteligentes, líneas, superficies y cuerpos aterrizaje. Este capítulo se centra en la generación automática de pruebas de dominio que son muy importantes en el proceso de entrada de pruebas. La generación automática de pruebas, a través de la combinación orgánica de datos, algoritmos, ingeniería y otras tecnologías relacionadas, realiza automáticamente el conjunto de detección de errores de "alta cobertura, alta simulación, verificación completa" en la etapa de entrada de prueba, que generalmente incluye generación de datos de prueba, caso de prueba generación, generación de conjuntos de acción, generación de aserción de prueba, etc., tienen una excelente investigación y práctica tanto en la academia como en la industria. La metodología generalmente incluye métodos basados ​​en gráficos de flujo de control, modelado basado en datos o una combinación de ambos. Este capítulo presentará los objetivos, las ideas, los puntos técnicos involucrados y los efectos de los campos relacionados desde múltiples perspectivas prácticas, con la esperanza de brindarle alguna referencia.

01. Tecnología de generación de caso de prueba único anormal basada en AST revelada

La generación automática de casos de uso a nivel de código se usa para resolver los problemas de las pruebas unitarias de escritura de RD difíciles y que consumen mucho tiempo, y explora un método que puede generar automáticamente códigos de prueba unitaria basados ​​en la estructura del código y la información del código.

La tecnología de generación de casos de prueba única de excepción de nivel de código basada en AST es un método de prueba para problemas casi conscientes del código. Sus tecnologías principales incluyen la comprensión del código, la generación de datos de casos de uso y la generación de código basada en casos de uso.

El enlace de comprensión del código abstrae el lenguaje del código en datos de características de funciones estructuradas a través del escaneo de código estático. Los datos de características incluyen: método de llamada de función, método de declaración y asignación de variables, relación variable, valor literal variable, punto simulado y otra información.

En el enlace de generación de datos del caso de uso, las fuentes de datos básicas incluyen valores límite, valores aleatorios, valores de mutación, valores de código literal, valores de parámetros de instrumentación de funciones y algunos datos definidos por el negocio. Para evitar la explosión de casos de uso, sobre la base de la construcción tradicional basada en generación de datos de casos de uso, además del protocolo de interfaz de destino bajo prueba, selección de variables de alto riesgo, selección de ruta, ejecución simbólica y generación basada en búsqueda algoritmos (como algoritmos genéticos, use la fórmula de aptitud para evaluar la calidad de los casos de uso) para guiar la generación de datos de casos de uso, asegúrese de que el conjunto de casos de uso cubra la lógica del código en más ramas, combine información de cobertura y pila de problemas, alimentar respalde el algoritmo de generación de casos de uso y reduzca la generación de casos de uso no válidos Genere casos de uso más valiosos con costos de prueba limitados para garantizar la capacidad de descubrir errores.

El caso de uso impulsa el enlace de generación de código, basándose en plantillas multilingües y de pruebas múltiples como (requisitos de sintaxis gtest) para establecer un conjunto de operadores de generación, basado en datos estructurados de código y datos de casos de uso, llamar a diferentes operadores de generación, combinados con operadores inteligentes de generación de simulacros, generan código de caso de prueba ejecutado compilable.

Ahora tiene la capacidad de generación de casos de uso de C++/GO/OC en tres idiomas, recordando más de 1000 excepciones (núcleo, bucle infinito, pánico) y otros problemas.

02. Generación automática de casos de uso a nivel de interfaz

La generación automática de casos de uso de interfaz está dirigida principalmente a la escena donde las solicitudes de API se generan automáticamente en el nivel de interfaz de servicio en lugar de escribir casos de uso manualmente, y resuelve problemas como casos de uso incompletos escritos por humanos y una gran carga de trabajo.

La API de interfaz siempre ha tenido una buena capacidad de prueba. Bajo varios escenarios, existen aplicaciones de prueba de interfaz automatizadas relacionadas, pero con más y más uso, también surgirán nuevos desafíos. Por ejemplo, el costo de mano de obra del caso, debido a que es necesario agregar continuamente nuevas pruebas de casos y mantener el caso anterior, el costo de mantenimiento humano para el caso también es cada vez más alto; la calidad del caso automatizado puede escribir mucho de casos, pero no hay mucho útil en absoluto, o la calidad del caso no se puede discernir, y se acumula y no se puede mantener. Por lo tanto, en vista de los problemas anteriores, se propone la generación automática inteligente de casos de uso de interfaz.La idea principal es obtener la definición de cada estándar de interfaz de acuerdo con el formato de interfaz definido, incluidas las herramientas de gestión de definición de api, registros de sistemas comerciales, paquete interceptación, etc., y luego, junto con la comprensión del peinado manual, se imponen algunas condiciones en algunos campos y, finalmente, a través de la definición y las restricciones de la interfaz, los lotes de casos de prueba se pueden generar automática e inteligentemente, y la interfaz contrata pruebas y Las pruebas de regresión se pueden realizar rápidamente. Además de la generación automática de casos de uso de la interfaz, la afirmación de la interfaz también se actualizó de forma automática e inteligente. La idea principal es juzgar en primer lugar que los cuerpos de la interfaz de retorno de todos los casos posteriores son consistentes de acuerdo con los resultados operativos de los casos históricos. , y no habrá ninguna pregunta de anidamiento estructural. Además, de acuerdo con las características de los valores de cada campo devuelto por la interfaz histórica, se puede generar de forma automática e inteligente una aserción para cada valor para determinar rápidamente si la interfaz es anormal. En la actualidad, hay casos 2w+ generados de forma inteligente por la interfaz, lo que representa más del 80 % de la magnitud total del caso.

03. Generación automática de casos de uso de interacción superficial de interfaz de usuario

Las pruebas de automatización de la interfaz de usuario pueden realizar pruebas de extremo a extremo, verificación de regresión de las funciones comerciales y mejorar en gran medida la eficiencia de las pruebas. En la actualidad, existen limitaciones obvias en este campo: 1. El costo de escribir casos de uso es alto, 2. La capacidad de recordar casos de uso es débil, 3. Los costos de mantenimiento de los casos de uso son altos. Sin embargo, algunas interacciones de la interfaz de usuario empresarial no son complicadas. Por ejemplo, en productos que se centran en estilos de presentación o funciones de interacción superficial, por un lado, el control de calidad debe realizar una verificación de estilo en cientos o miles de páginas basadas en datos; Se verifican docenas de elementos en la página, y tratamos de usar tecnología visual para resolver dicha generación de casos de uso para reemplazar el trabajo manual.

Trabajo técnico de generación de casos de interacción superficial de interfaz de usuario, incluido el módulo de minería de datos fuera de línea y el módulo de ejecución de tareas en tiempo real: en el enlace de minería de datos, el objeto de operación es el producto de referencia en línea, utilizamos la tecnología de detección de objetos DNN para entrenar y generar nivel de control y clasificación a nivel de página y Regresar al modelo de tarea, y luego usar tecnología de mina para registrar la operación de exploración de elementos Dom clave en la página, generar una secuencia de operación con contexto y finalmente usar estas acciones e imágenes como los pasos del caso de uso generado ; luego, en el enlace de ejecución de tareas en tiempo real, alinear El siguiente módulo de prueba realiza la reproducción de ruta y la verificación de tecnología visual ui-diff para realizar la prueba de verificación de regresión del caso.

Todo el conjunto de mecanismos de generación de interacciones superficiales de casos de uso de la interfaz de usuario puede generar casos automatizados de bajo costo y alta recuperación. Actualmente, esta tecnología cubre múltiples líneas de productos y se han encontrado 16 problemas efectivos. En la canalización previa al acceso de un determinado negocio , Se han generado más de 1000 casos , Durante la fase de juicio, se han retirado 3 casos de problemas. 

04. Generación automática de conjuntos de acciones transversales de GUI

Las introducciones anteriores son tecnologías de generación de código, interfaz y nivel de interfaz de usuario. Esta sección aborda la generación automática de conjuntos de acciones. Dichos escenarios se utilizan ampliamente en el recorrido, la inspección y el mono de la interfaz de usuario. Es decir, cómo explorar un conjunto de funciones antropomórficas eficientes. soluciones transversales.

El conjunto de acciones transversales de GUI se genera automáticamente. El núcleo es generar automáticamente un conjunto de acciones con alta cobertura y tasa de exposición de problemas bajo la premisa de equilibrar recursos e ingresos. El conjunto de acciones de GUI se refiere a una serie de flujos de eventos de usuario aleatorios (como operación de botones, operación de pantalla táctil, entrada de gestos, etc.) enviados a la máquina o simulador móvil real, y es una colección de operaciones como hacer clic, deslizar, y entrada que simulan usuarios reales. Los puntos principales son más rápidos (misma tasa de recuperación, menos tiempo), más (misma cantidad de operaciones, mayor tasa de cobertura), más precisos (mismo tiempo de máquina, mayor tasa de cobertura incremental); Traversal aleatorio tradicional de Monkey, la velocidad es extremadamente Las operaciones rápidas, pero inválidas, consumen muchos recursos. El método más inteligente es el método transversal ponderado basado en controles. Este método extrae la estructura de la página en un árbol de control y asigna diferentes pesos a estos controles según los atributos y las condiciones históricas de operación. Finalmente , la página se abstrae como "punto" y el control se abstrae como "borde", de modo que la generación del conjunto de acciones se transforma en el problema de atravesar el gráfico dirigido y circular; este tipo de recorrido no tiene comparación de escena, y hay muchos bucles en el gráfico, lo cual es muy fácil Al caer en un bucle local, es necesario dar cierta retroalimentación durante el proceso transversal para ayudar al conjunto de acciones a salir del bucle muerto. basado en Deep-Q-Learning se introduce para usar si puede ingresar una nueva página como incentivo Hay retroalimentación durante el proceso transversal, y combinado con Se agrega una variedad de escenarios al negocio, de modo que la generación de conjuntos de acciones puede ser autoexplorado y autoaprendido bajo el mecanismo de retroalimentación, y se introduce aún más la idea de antropomorfismo, y el conjunto de acciones tiene cierta lógica a través del mecanismo de incentivo y castigo. En comparación con la aleatoriedad pura, la tasa de cobertura del recorrido inteligente aumenta en un 33 % en el mismo período de tiempo y el tiempo de prueba se reduce en un 75 % para la misma tasa de cobertura.

05. Los casos de uso de front-end generan afirmaciones automáticamente

Hay problemas como la irregularidad, la gran carga de trabajo y la incompletitud en la redacción de las afirmaciones de las pruebas, lo que da como resultado que muchos problemas que deberían haberse recordado no se hayan denunciado a tiempo a la policía. Esta etapa es para resolver dichos problemas.

Las aserciones de prueba se utilizan para verificar la corrección del comportamiento del sistema bajo prueba, es decir, proporcionando una entrada al sistema bajo prueba y evaluando los resultados con la salida esperada para determinar si los resultados generados son correctos. En el campo de la automatización front-end, una gran cantidad de comportamientos de prueba manuales se reemplazan por automatización, y los casos de uso de automatización tienden a generarse automáticamente. ¿Cómo juzgar efectivamente si la ejecución cumple con las expectativas? El punto clave es cómo generar automáticamente aserciones completas y calificadas. Las ideas principales son: primero, hay un recuerdo de referencia, es decir, la versión histórica o la versión actual de un determinado modelo se usa como referencia correcta, y la versión probada se compara con la versión correcta; el segundo es sin referencia recordar, es decir, las características de los problemas obvios se extraen de antemano, y la inspección Si golpea después de que se ejecuta el caso de uso, como pantalla blanca y caracteres ilegibles. En la práctica de Baidu, hemos agregado comprensión de páginas de varios niveles y algoritmos de extracción de funciones para resolver problemas como las diferentes posiciones relativas de múltiples versiones de dispositivos y el difícil reconocimiento de páginas complejas, y realizar una verificación tridimensional de extremo a extremo. En la actualidad, se ejecuta cientos de miles de veces al día, con una tasa de precisión de la estrategia de más del 97 % y más de 2000 errores interceptados.

Supongo que te gusta

Origin blog.csdn.net/weixin_41888295/article/details/124630156
Recomendado
Clasificación