Découvrez comment la solution Parasoft Continuous Quality permet de contrôler et de gérer les environnements de test pour fournir des logiciels de haute qualité en toute confiance. Inscrivez-vous pour la démo >>

BLOG

Qu'est-ce que l'intelligence artificielle dans les tests logiciels?

Qu'est-ce que l'intelligence artificielle dans les tests logiciels? Temps de lecture : 8 minutes

L'intelligence artificielle est l'un des mots à la mode les plus récents dans l'industrie du développement de logiciels. Mais qu'est-ce que cela signifie vraiment ? Comment L'IA dans le contexte de l'automatisation des tests logiciels diffère de sa définition plus large?

Que voulons-nous dire quand nous parlons de AI et son terme sœur, machine learning? Je pensais que je clarifierais notre utilisation pour que ce soit clair comment nous utilisons l'IA et l'apprentissage automatique pour faire progresser les tests d'API de pointe.

Comment mettre en œuvre l'intelligence artificielle dans les tests de logiciels (ce n'est pas seulement Buzz)

L'intelligence artificielle est l'un des mots à la mode les plus surchargés du marché numérique. «AI» évoque des images de choses comme des super-ordinateurs tout-puissants, un enfer voué à la destruction humaine; assistance à la commande vocale à la manière d'Alexa ou de Siri; adversaires d'échecs informatiques; ou des voitures autonomes.

Wikipédia définit la recherche sur l'IA comme «… L'étude des «agents intelligents»: tout appareil qui perçoit son environnement et entreprend des actions qui maximisent ses chances d'atteindre avec succès ses objectifs.«Mais c'est un peu trop abstrait. J'aime penser à l'IA comme la capacité d'un programme informatique ou d'une machine à penser (raison pour elle-même) et apprendre (collecter des données et modifier le comportement futur de manière bénéfique). C'est dans cette définition que nous commençons à voir quelque chose de plus significatif dans le contexte de ce que l'IA signifie pour les outils et la technologie de développement logiciel.

Il est également important de comprendre que la portée de ce qui est considéré comme «IA» change avec le temps. À un moment donné, par exemple, les gens considéraient que la reconnaissance optique de caractères (OCR) était à la pointe de la technologie en matière d'IA. Ou les réponses aux questions et réponses de Siri et Alexa, où à un moment donné l'impact était considéré comme à la pointe de la technologie, sont désormais largement considérées comme acquises et ne sont pas toujours considérées comme un système d'IA. La même chose se produira avec les outils de test logiciel - les innovations en matière d'automatisation d'aujourd'hui deviendront attendues à mesure que de nouvelles capacités évolueront. Mais pour l'instant, considérons l'IA dans l'automatisation des tests logiciels en 2019.

Révolutionnez votre pratique de test d'API en tirant parti de l'intelligence artificielle

L'IA dans l'automatisation des tests logiciels

L'utilisation de l'IA dans le développement de logiciels n'en est encore qu'à ses balbutiements et le niveau d'autonomie est bien inférieur à celui observé dans des domaines de travail plus évolués tels que les systèmes de conduite autonome ou la commande vocale, bien qu'il continue d'avancer dans la direction de tests autonomes. L'application de L'IA dans les outils de test de logiciels se concentre sur la simplification du cycle de vie du développement logiciel. Grâce à l'application du raisonnement, de la résolution de problèmes et, dans certains cas, de l'apprentissage automatique, l'IA peut être utilisée pour aider à automatiser et à réduire le nombre de tâches banales et fastidieuses dans le développement et les tests.

"Les outils d'automatisation de test ne le font-ils pas déjà?" vous pourriez demander.

Et la réponse est bien sûr: «Oui! Ils font!" … Mais ils ont des limites.

Là où l'IA brille dans le développement de logiciels, c'est lorsqu'elle est appliquée pour supprimer ces limitations, pour permettre aux outils d'automatisation des tests logiciels de fournir encore plus de valeur aux développeurs et aux testeurs. La valeur de l'IA vient de la réduction de l'implication directe du développeur ou du testeur dans les tâches les plus banales. (L'intelligence humaine est encore très nécessaire dans l'application de la logique métier, etc.)

Par exemple, considérez que la plupart des outils d'automatisation des tests (sinon tous) exécutent des tests pour vous et fournissent des résultats. La plupart ne savent pas quels tests exécuter, ils les exécutent donc tous ou un ensemble prédéterminé. Alors, que se passe-t-il si un robot activé par l'IA peut examiner l'état actuel du statut des tests, les modifications récentes du code, la couverture du code et d'autres mesures, décider des tests à exécuter, puis les exécuter? Apporter une prise de décision basée sur des données changeantes est un exemple d'application de l'IA (Et Parasoft le fait, d'ailleurs). Le logiciel est effectivement capable de remplacer le développeur / testeur dans le processus de prise de décision. L'avantage de l'appliquer à un pipeline CI / CD est clair.

AI et apprentissage automatique

Alors, qu'en est-il de l'apprentissage automatique? L'apprentissage automatique peut augmenter l'IA en appliquant des algorithmes qui permettent à l'outil de s'améliorer automatiquement en collectant les quantités abondantes de données produites par les tests.

La recherche sur l'apprentissage automatique est un sous-ensemble de la recherche globale sur l'IA, avec un accent sur la gestion de la prise de décision basée sur des données précédemment observées. Il s'agit d'un aspect important de l'IA dans son ensemble, car l'intelligence nécessite de modifier la prise de décision à mesure que l'apprentissage s'améliore. Dans les outils de test logiciel, cependant, l'apprentissage automatique n'est pas toujours nécessaire - Parfois, il est préférable d'ajuster manuellement un outil activé par l'IA pour l'adapter à l'organisation qui l'utilise, puis la même logique et le même raisonnement peuvent être appliqués à chaque fois, quel que soit le résultat.

Dans d'autres cas, la collecte de données est essentielle au processus de prise de décision, et l'apprentissage automatique peut être extrêmement précieux, nécessitant certaines données au départ, puis s'améliorant ou s'adaptant à mesure que davantage de données sont collectées. Par exemple, la couverture de code, les résultats d'analyse statique, les résultats de test ou d'autres mesures logicielles, au fil du temps, peuvent informer l'IA sur l'état du projet logiciel.

L'apprentissage en profondeur

L'apprentissage automatique a son propre sous-ensemble appelé Deep Learning, qui repose sur le traitement d'une grande quantité de données à partir desquelles apprendre. Ces données, dans la plupart des cas, sont représentées par des réseaux de neurones analytiques multicouches - ce sont des modèles inspirés du réseau de neurones humains, aidant les ordinateurs à acquérir de nouvelles connaissances et à raisonner de manière très intelligente.

L'aspect clé de l'apprentissage profond est une énorme quantité d'informations représentées par les réseaux de neurones pour guider le processus de prise de décision. Une telle quantité de données n'est pas toujours disponible ou non applicable dans les tests logiciels - c'est peut-être pourquoi nous ne voyons pas encore beaucoup de cas d'utilisation du Deep Learning dans ces domaines. Un exemple possible serait d '«apprendre» à partir de dizaines de millions de lignes de code pour comprendre différents types de violations de sécurité et de mettre en œuvre un moteur d'analyse statique basé sur un modèle d'apprentissage en profondeur.

Exemples réels d'IA et d'apprentissage automatique dans les tests de logiciels

C'est un domaine important de recherche et développement chez Parasoft. Fait intéressant, nos offres actuelles ne sont que le début, et nos recherches en cours sur l'IA et le ML continuent d'apporter de nouvelles façons d'intégrer ces technologies dans nos produits. Voici quelques façons dont nous les avons déjà introduits.

Utilisation de l'intelligence artificielle pour automatiser la génération et le paramétrage des tests unitaires

Ce premier exemple est dans Jtest Parasoft, notre solution de test logiciel pour les développeurs Java qui comprend l'analyse statique, les tests unitaires, la couverture et la traçabilité, etc. En appliquant l'IA ici, nous avons publié la génération automatique de cas de test, qui aide les développeurs à combler les lacunes lorsqu'ils partent d'un harnais JUnit clairsemé.

Le plug-in IDE de Parasoft Jtest ajoute une automatisation utile au pratique des tests unitaires avec des actions simples en un clic pour créer, mettre à l'échelle et maintenir des tests unitaires. En utilisant Jtest compatible avec l'IA, les utilisateurs peuvent obtenir une couverture de code plus élevée tout en réduisant de moitié le temps et les efforts nécessaires pour créer une suite complète et significative de cas de test Junit.

Pour ce faire, il est notamment possible de créer plus facilement des stubs et des simulacres pour isoler le code testé. L'IA sous-jacente permet à Jtest d'observer l'unité sous test pour déterminer ses dépendances sur d'autres classes, et lorsque des instances de ces dépendances sont créées, il suggère de les moquer à l'utilisateur pour créer des tests plus isolés. La création automatique des simulations et des stubs nécessaires réduit l'effort sur l'une des parties les plus chronophages de la création de tests.

Parasoft Jtest détecte également automatiquement le code qui n'est pas couvert par les suites de tests existantes et parcourt le chemin de contrôle du code source pour déterminer quels paramètres doivent être passés dans une méthode en cours de test, et comment les subs / mocks doivent être initialisés pour atteindre ce code. En activant cette IA, Jtest peut générer automatiquement de nouveaux tests unitaires, en appliquant des paramètres modifiés pour augmenter la couverture de code globale de l'ensemble du projet.

Utilisation de l'IA et de l'apprentissage automatique pour automatiser la génération et la maintenance des tests d'API

Un autre bon exemple, en ajoutant l'apprentissage automatique dans le mix, est Parasoft SOAtest's Générateur de test d'API intelligent, qui va au-delà des tests d'enregistrement et de lecture, tirant parti de l'IA et de l'apprentissage automatique pour convertir les tests d'interface utilisateur manuels en scénarios de test d'API complets et automatisés.

Le Smart API Test Generator utilise le raisonnement pour comprendre les modèles et les relations dans les différents appels d'API effectués lors de l'exercice de l'interface utilisateur. À partir de cette analyse, une série d'appels d'API est construite qui représente les appels d'interface sous-jacents effectués pendant le flux d'interface utilisateur. Il applique ensuite l'apprentissage automatique en observant ce qu'il peut sur les différentes ressources de l'API et en les stockant sous forme de modèle dans une structure de données propriétaire. Cette structure interne est mise à jour en examinant d'autres cas de test dans la bibliothèque de l'utilisateur pour apprendre différents types de comportement lors de l'exercice des API, par exemple, une assertion, ou en ajoutant un en-tête particulier au bon endroit.

Le but de l'IA ici est de créer des tests plus avancés (et pas seulement de répéter ce que l'utilisateur faisait, comme vous le faites avec de simples tests d'enregistrement et de lecture). L'outil reconnaît les modèles à l'intérieur du trafic, crée un modèle de données complet des paramètres observés, génère tests API automatisés, et permet d'appliquer des modèles appris à d'autres tests d'API pour les améliorer et aider les utilisateurs à créer des scénarios de test automatisés plus avancés. Les tests d'API automatisés qui en résultent sont plus complets, réutilisables, évolutifs et résistants au changement.

Utilisation de l'apprentissage automatique pour auto-guérir l'exécution des tests de sélénium

Validation automatique de la couche UI est un autre élément essentiel de votre stratégie de test pour vous assurer que le produit est entièrement vérifié avant d'entrer en production. Le framework Selenium a été largement adopté pour les tests d'interface utilisateur en tant que choix clair de l'utilisateur, mais les utilisateurs luttent toujours contre les défis courants des tests Selenium en matière de maintenabilité et de stabilité. C'est là que les technologies d'IA et, en particulier, l'apprentissage automatique, peuvent aider, en fournissant une auto-réparation au moment de l'exécution pour résoudre les problèmes de maintenabilité courants associés à l'exécution des tests d'interface utilisateur.

Nous fournissons cette fonctionnalité avec Parasoft Selenic, qui peut «apprendre» sur votre structure de données interne lors de votre exécution régulière des tests Selenium. Le moteur Selenic surveille chaque exécution et capture des informations détaillées sur le contenu de l'interface utilisateur Web de l'application testée. Il extrait les éléments DOM, leurs attributs, localisateurs, etc., et les met en corrélation avec les actions effectuées par les tests pilotés par l'interface utilisateur. Selenic utilise l'approche de modélisation de données propriétaire de Parasoft, stockant ces informations dans son moteur d'intelligence artificielle, et le modèle est mis à jour en permanence, analysant l'exécution historique de tous les tests pour continuer à devenir «plus intelligent».

Il s'agit d'un gain de temps critique dans les cas où les éléments d'interface utilisateur des pages Web sont déplacés ou modifiés de manière significative, entraînant l'échec des tests. Avec Selenic, les heuristiques d'IA utilisées par le moteur peuvent «faire correspondre» ces éléments modifiés avec les données historiques représentées par le modèle, et générer automatiquement des «localisateurs intelligents» résistants aux changements, pour récupérer l'exécution des tests Selenium au moment de l'exécution. Les informations sur ces modifications sont automatiquement propagées dans le modèle et la future génération de nouveaux localisateurs est ajustée en fonction de ces modifications.

Utilisation de logiciels de test de l'intelligence artificielle pour améliorer l'adoption de l'analyse statique

L'un des obstacles à adoption réussie d'outils d'analyse statique gère un grand nombre d'avertissements et traite les faux positifs (avertissements qui ne sont pas de vrais bugs) dans les résultats. Les équipes logicielles qui analysent une base de code héritée ou existante ont du mal avec les résultats initiaux qu'elles obtiennent avec l'analyse statique et sont suffisamment découragées par cette expérience pour ne pas poursuivre leurs efforts. Une partie de la raison pour être submergé est le nombre de normes, de règles (vérificateurs), de recommandations et de métriques qui sont possibles avec les outils d'analyse statique modernes.

Les équipes de développement de logiciels ont des exigences de qualité uniques et il n'y a pas de recommandations uniques pour les vérificateurs ou les normes de codage. Chaque équipe a sa propre définition du faux positif, ce qui signifie souvent «s'en moque» plutôt que «c'est techniquement incorrect». La solution de Parasoft à cela consiste à appliquer l'IA et l'apprentissage automatique pour hiérarchiser les résultats rapportés par l'analyse statique afin d'améliorer l'expérience utilisateur et l'adoption de ces outils.

Parasoft utilise une méthode pour classer rapidement les résultats dans la sortie d'un outil d'analyse statique comme quelque chose que l'équipe veut voir ou quelque chose que l'équipe veut supprimer en examinant un petit nombre de résultats et en construisant un classificateur basé sur les métadonnées associées à ces résultats. Ce classificateur est basé sur les résultats des classifications manuelles précédentes des résultats de l'analyse statique dans le contexte à la fois des suppressions historiques des avertissements non pertinents et de la priorisation préalable des résultats significatifs à corriger dans la base de code.

Les résultats finaux sont classés de deux manières:

  • Il est intéressant pour l'équipe d'enquêter.
  • Éléments qui peuvent être supprimés.

Cela améliore considérablement l'expérience utilisateur en orientant les développeurs vers les avertissements les plus susceptibles de s'appliquer à leur projet. Grâce à ces innovations, les organisations peuvent réduire immédiatement les efforts manuels lors de leur adoption et de leur utilisation de l'analyse statique.

L'avenir de l'intelligence artificielle et de l'apprentissage automatique

Alors qu'est-ce qui vient ensuite? Nous sommes en R&D active dans ce domaine, continuant à rechercher d'autres applications de l'intelligence artificielle et de l'apprentissage automatique pour augmenter notre suite d'outils de test de logiciels. Il existe de nombreuses voies de recherche, mais l'objectif final est clair: pour aider les équipes à développer et tester leur code de manière plus efficace et efficiente, pour créer rapidement des logiciels de meilleure qualité.

Accélérez la création de tests d'API grâce à l'intelligence artificielle.
Demandez une démo maintenant
Écrit par

Igor Kirilenko

Vice-président du développement de Parasoft, Igor est responsable de la stratégie technique, de l'architecture et du développement des produits Parasoft. Igor apporte plus de 20 ans d'expérience dans la direction d'équipes d'ingénierie, avec une spécialisation dans l'établissement et la promotion des meilleures pratiques agiles dans les environnements de développement logiciel.

Recevez les dernières nouvelles et ressources sur les tests de logiciels dans votre boîte de réception.