Exploration du test intelligent Baidu dans le domaine de la génération automatique de tests

"Découverte de la mise à l'échelle des tests intelligents de Baidu" explique comment diviser les activités de test en cinq étapes : entrée de test, exécution de test, analyse de test, positionnement de test et évaluation de test pour promouvoir l'échelle et l'intégration des points de test intelligents de Baidu, lignes, surfaces et corps. Ce chapitre se concentre sur la génération automatique de tests de domaine qui sont très importants dans le processus de saisie des tests. La génération automatique de tests, grâce à la combinaison organique de données, d'algorithmes, d'ingénierie et d'autres technologies connexes, réalise automatiquement l'ensemble de détection d'erreurs "couverture élevée, simulation élevée, vérification complète" dans l'étape d'entrée du test, comprenant généralement la génération de données de test, le cas de test La génération, la génération d'ensembles d'actions, la génération d'assertions de test, etc., ont d'excellentes recherches et pratiques à la fois dans le milieu universitaire et dans l'industrie. La méthodologie comprend généralement des méthodes basées sur des graphiques de flux de contrôle, une modélisation basée sur des données ou une combinaison des deux. Ce chapitre présentera les objectifs, les idées, les points techniques impliqués et les effets des domaines connexes à partir de multiples perspectives pratiques, dans l'espoir de vous donner quelques références.

01. La technologie de génération de cas de test unique anormal basée sur AST révélée

La génération automatique de cas d'utilisation au niveau du code est utilisée pour résoudre les problèmes des tests unitaires d'écriture RD difficiles et chronophages, et explore une méthode qui peut générer automatiquement des codes de test unitaire basés sur la structure du code et les informations de code.

La technologie de génération de cas de test unique d'exception au niveau du code basée sur AST est une méthode de test pour les problèmes proches du code. Ses technologies de base incluent la compréhension du code, la génération de données de cas d'utilisation et la génération de code basée sur les cas d'utilisation.

Le lien de compréhension de code résume le langage de code en données de fonctionnalité de fonction structurées via une analyse de code statique. Les données de fonctionnalité comprennent : la méthode d'appel de fonction, la méthode de déclaration et d'affectation de variable, la relation variable, la valeur littérale variable, le point fictif et d'autres informations.

Dans le lien de génération de données de cas d'utilisation, les sources de données de base incluent des valeurs limites, des valeurs aléatoires, des valeurs de mutation, des valeurs littérales de code, des valeurs de paramètre d'instrumentation de fonction et certaines données définies par l'entreprise. Afin d'éviter l'explosion des cas d'utilisation, sur la base de la construction traditionnelle basée sur la génération de données de cas d'utilisation, en plus du protocole d'interface cible testé, la sélection de variables à haut risque, la sélection de chemin, l'exécution symbolique et la génération basée sur la recherche algorithmes (tels que les algorithmes génétiques, utiliser la formule de fitness pour évaluer la qualité des cas d'utilisation) pour guider la génération de données de cas d'utilisation, s'assurer que l'ensemble de cas d'utilisation couvre la logique du code sous plusieurs branches, combiner les informations de couverture et de pile de problèmes, alimenter sauvegardez l'algorithme de génération de cas d'utilisation et réduisez la génération de cas d'utilisation invalides.Générez des cas d'utilisation plus précieux avec des coûts de test limités pour garantir la capacité de découvrir les erreurs.

Le cas d'utilisation pilote le lien de génération de code, en s'appuyant sur des modèles multilingues et multi-tests tels que (exigences de syntaxe gtest) pour établir un ensemble d'opérateurs de génération, basé sur des données structurées de code et des données de cas d'utilisation, appeler différents opérateurs de génération, combinés avec opérateurs de génération de simulation intelligents, génèrent du code de cas de test exécuté compilable.

Il dispose désormais de la capacité de génération de cas d'utilisation des trois langages C++/GO/OC, rappelant plus de 1000 exceptions (noyau, boucle infinie, panique) et d'autres problèmes.

02. Génération automatique de cas d'utilisation au niveau de l'interface

La génération automatique de cas d'utilisation d'interface est principalement destinée à la scène où les demandes d'API sont générées automatiquement au niveau de l'interface de service au lieu d'écrire manuellement des cas d'utilisation, et résout des problèmes tels que des cas d'utilisation incomplets écrits par des humains et une charge de travail importante.

L'API d'interface a toujours eu une bonne testabilité. Dans divers scénarios, il existe des applications de test d'interface automatisées connexes, mais avec une utilisation de plus en plus importante, de nouveaux défis surgiront également. Par exemple, le coût de la main-d'œuvre du cas, car il est nécessaire d'ajouter en permanence de nouveaux tests de cas et de maintenir l'ancien cas, le coût de maintenance humaine du cas est également de plus en plus élevé ; la qualité du cas automatisé peut écrire beaucoup de cas, mais il n'y a pas grand-chose d'utile du tout, ou la qualité du cas ne peut pas être discernée, et elle s'accumule et ne peut pas être maintenue. Par conséquent, compte tenu des problèmes ci-dessus, la génération automatique intelligente de cas d'utilisation d'interface est proposée. L'idée principale est d'obtenir la définition de chaque norme d'interface en fonction du format d'interface défini, y compris les outils de gestion de définition d'API, les journaux du système d'entreprise, les paquets interception, etc., puis Couplé à la compréhension du peignage manuel, certaines conditions sont imposées à certains champs, et enfin à travers la définition et les restrictions de l'interface, des lots de cas de test peuvent être générés automatiquement et intelligemment, et les tests de contrat d'interface et les tests de régression peuvent être effectués rapidement. En plus de la génération automatique des cas d'utilisation de l'interface, l'affirmation de l'interface a également été mise à jour automatiquement et intelligemment. L'idée principale est de premièrement juger que les corps d'interface de retour de tous les cas suivants sont cohérents en fonction des résultats d'opération des cas historiques. , et il n'y aura pas de question d'imbrication structurelle. De plus, selon les caractéristiques des valeurs de chaque champ renvoyées par l'interface historique, une assertion pour chaque valeur peut être générée automatiquement et intelligemment pour déterminer rapidement si l'interface est anormale. À l'heure actuelle, il y a 2w+ cas générés intelligemment par l'interface, représentant plus de 80 % de l'ampleur globale des cas.

03. Génération automatique de cas d'utilisation d'interaction superficielle de l'interface utilisateur

Les tests d'automatisation de l'interface utilisateur peuvent réaliser des tests de bout en bout, une vérification de régression des fonctions commerciales et améliorer considérablement l'efficacité des tests. À l'heure actuelle, il existe des limites évidentes dans ce domaine : 1. Le coût d'écriture des cas d'utilisation est élevé 2. La capacité de rappel des cas d'utilisation est faible 3. Les coûts de maintenance des cas d'utilisation sont élevés. Cependant, certaines interactions de l'interface utilisateur métier ne sont pas compliquées. Par exemple, dans les produits qui se concentrent sur les styles de présentation ou les fonctions d'interaction peu profondes, d'une part, le contrôle qualité doit effectuer une vérification de style sur des centaines ou des milliers de pages basées sur les données ; l'interaction des opérations de des dizaines d'éléments sur la page sont vérifiés, et nous essayons d'utiliser la technologie visuelle pour résoudre une telle génération de cas d'utilisation pour remplacer le travail manuel.

Travail technique de génération de cas d'interaction superficielle de l'interface utilisateur, y compris le module d'exploration de données hors ligne et le module d'exécution de tâches en temps réel : dans le lien d'exploration de données, l'objet de l'opération est le produit de base en ligne, nous utilisons la technologie de détection d'objet DNN pour former et générer un niveau de contrôle et la classification au niveau de la page et revenir au modèle de tâche, puis utiliser la technologie minière pour enregistrer l'opération d'exploration des éléments Dom clés sur la page, générer une séquence d'opérations avec contexte, et enfin utiliser ces actions et images comme étapes de cas d'utilisation générées , puis dans le lien d'exécution de tâche en temps réel, aligner Le module de test suivant effectue la lecture du chemin et la vérification de la technologie visuelle ui-diff pour effectuer des tests de vérification de régression du cas.

L'ensemble du mécanisme de génération d'interactions superficielles de cas d'utilisation de l'interface utilisateur peut générer des cas automatisés à faible coût et à rappel élevé. Actuellement, cette technologie couvre plusieurs gammes de produits et 16 problèmes efficaces ont été trouvés. Dans le pipeline de pré-accès d'une certaine entreprise , 1000+ cas ont été générés , Pendant la phase d'essai, 3 cas de problèmes ont été rappelés. 

04. Génération automatique d'ensembles d'actions de traversée de l'interface graphique

Les introductions précédentes concernent les technologies de génération de code, d'interface et d'interface utilisateur. Cette section traite de la génération automatique d'ensembles d'actions. De tels scénarios sont largement utilisés dans la traversée, l'inspection et le singe de l'interface utilisateur. solutions de traversée.

L'ensemble d'actions de traversée de l'interface graphique est généré automatiquement. Le cœur est de générer automatiquement un ensemble d'actions avec une couverture élevée et un taux d'exposition aux problèmes sous le principe d'équilibrer les ressources et les revenus. L'ensemble d'actions de l'interface graphique fait référence à une série de flux d'événements utilisateur aléatoires (tels que l'utilisation d'un bouton, l'utilisation d'un écran tactile, la saisie d'un geste, etc.) envoyés à la machine réelle mobile ou au simulateur, et est un ensemble d'opérations telles que cliquer, glisser, et des entrées qui simulent de vrais utilisateurs. Les points de base sont plus rapides (même taux de rappel, moins de temps), plus (même nombre d'opérations, taux de couverture plus élevé), plus précis (même temps machine, taux de couverture incrémentiel plus élevé) ; traditionnel Monkey Random Traversal, la vitesse est extrêmement rapides, mais les opérations invalides consomment beaucoup de ressources. La méthode la plus intelligente est la méthode de parcours pondéré basée sur les contrôles. Cette méthode extrait la structure de la page dans une arborescence de contrôle et attribue différents poids à ces contrôles en fonction des attributs et des conditions de fonctionnement historiques. Enfin , la page est abstraite en tant que "point" et le contrôle est abstrait en tant que "bord", de sorte que la génération de l'ensemble d'actions est transformée en un problème de parcours du graphe orienté et circulaire ; ce type de parcours n'a pas de comparaison de scène, et il y a beaucoup de boucles dans le graphe, ce qui est très facile Tomber dans une boucle locale, il est nécessaire de donner un certain retour pendant le processus de parcours pour aider l'ensemble d'actions à sortir de la boucle morte. Pour cela, le parcours intelligent basé sur Deep-Q-Learning est introduit pour utiliser si vous pouvez entrer une nouvelle page comme incitation. Il y a des commentaires pendant le processus de traversée, et combinés avec Une variété de scénarios sont ajoutés à l'entreprise, de sorte que la génération d'ensembles d'actions peut être auto-exploré et auto-appris dans le cadre du mécanisme de rétroaction, et l'idée d'anthropomorphisme est davantage introduite, et l'ensemble d'actions a une certaine logique à travers le mécanisme d'incitation et de punition. Par rapport au hasard pur, le taux de couverture de la traversée intelligente est augmenté de 33 % dans le même laps de temps, et le temps de test est raccourci de 75 % pour le même taux de couverture.

05. Les cas d'utilisation frontaux génèrent automatiquement des assertions

Il existe des problèmes tels que l'irrégularité, la lourde charge de travail et l'incomplétude dans la rédaction des assertions de test, ce qui fait que de nombreux problèmes qui auraient dû être rappelés ne sont pas signalés à la police à temps.Cette étape consiste à résoudre ces problèmes.

Les assertions de test sont utilisées pour vérifier l'exactitude du comportement du système testé, c'est-à-dire en fournissant une entrée au système testé et en évaluant les résultats avec la sortie attendue pour déterminer si les résultats générés sont corrects. Dans le domaine de l'automatisation frontale, un grand nombre de comportements de test manuels sont remplacés par l'automatisation, et les cas d'utilisation de l'automatisation ont tendance à être générés automatiquement. Comment juger efficacement si l'exécution répond aux attentes ? Le point clé est de savoir comment générer automatiquement des assertions complètes et qualifiées. Les idées principales sont : premièrement, il y a un rappel de référence, c'est-à-dire que la version historique ou la version actuelle d'un certain modèle est utilisée comme référence correcte, et la version testée est comparée à la version correcte ; la seconde n'est pas une référence rappel, c'est-à-dire que les caractéristiques des problèmes évidents sont extraites à l'avance, et l'inspection s'il frappe après l'exécution du cas d'utilisation, comme l'écran blanc et les caractères brouillés. Dans la pratique de Baidu, nous avons ajouté des algorithmes de compréhension de pages et d'extraction de fonctionnalités à plusieurs niveaux pour résoudre des problèmes tels que les positions relatives différentes de plusieurs versions d'appareils et la reconnaissance difficile de pages complexes, et réaliser une vérification tridimensionnelle de bout en bout. À l'heure actuelle, il s'exécute des centaines de milliers de fois par jour, avec un taux de précision stratégique de plus de 97 % et plus de 2 000 bogues interceptés.

Guess you like

Origin blog.csdn.net/weixin_41888295/article/details/124630156