Fut un temps, les tests étaient simples : les développeurs créent un produit et le transmettent à l'équipe d'assurance qualité. Celle-ci testait alors le produit et signalait les éventuels bogues aux développeurs. Une fois les bogues corrigés et testés, le produit pouvait être déployé. Ce modèle convenait parfaitement au monde pré-Agile en cascade. Cependant, les choses sont aujourd'hui très différentes.
Dans le monde Agile, le cycle de vie du développement logiciel (SDLC) est beaucoup moins linéaire. Désormais, les tests doivent être effectués de manière plus flexible. Nous sommes passés d'un monde d'applications monolithiques installées sur les machines des utilisateurs à des applications web avec des backends basés sur le cloud. D'une certaine manière, il s'agit d'un retour à l'époque des ordinateurs centraux. Mais les machines clientes d'aujourd'hui sont infiniment plus puissantes et performantes.
L'une des principales tendances récentes est l'essor des outils d'automatisation des tests alimentés par l'intelligence artificielle. L'intelligence artificielle offre certains avantages uniques qui promettent d'améliorer l'automatisation des tests. Cependant, ces outils sont souvent relativement immatures et doivent donc prouver leur efficacité.
Formation : Dans la phase de formation, le modèle de machine learning doit être formé sur un ensemble de données organisationnelles spécifiques, y compris la base de code, l'interface de l'application, les journaux, les cas de test et même les documents de spécification. Le fait de ne pas disposer d'un ensemble de données d'entraînement suffisamment important peut réduire l'efficacité de l'algorithme.
Certains outils ont des modèles pré-entraînés qui sont mis à jour par l'apprentissage continu pour des applications spécifiques comme les tests d'interface utilisateur afin que l'apprentissage généralisé puisse être utilisé dans une organisation spécifique.
Sortie / Génération de résultats : Selon le cas d'utilisation, le modèle génère des cas de test, vérifie les cas de test existants pour la couverture du code, l'exhaustivité, la précision, et même effectue des tests. Dans tous les cas, un testeur doit vérifier la sortie générée pour obtenir une validation et s'assurer qu'elle est utilisable.
Amélioration continue : Au fur et à mesure qu'une société utilise régulièrement l'outil, les données de formation ne cessent d'augmenter, ce qui accroît potentiellement la précision et l'efficacité des réseaux formés existants. Le système d'IA continue d'apprendre et de s'améliorer.
Examinons de plus près certaines applications de l'IA dans l'automatisation des tests, notamment les tests unitaires, les tests d'interface utilisateur, les tests d'API et la maintenance d'une suite de tests d'automatisation.
Les tests unitaires, souvent utilisés dans le cadre des tests continus, de l'intégration continue et de la livraison continue (CI / CD) dans DevOps.
En général, les développeurs passent beaucoup de temps à créer et à maintenir des tests unitaires, ce qui est loin d'être aussi plaisant que d'écrire du code d'application. Dans ce cas, les produits basés sur l'IA pour la création automatisée de tests unitaires peuvent être utiles, en particulier pour les organisations qui prévoient d'introduire des tests unitaires tard dans le cycle de vie du produit.
Avantages :
Les tests unitaires automatisés basés sur l'IA constituent une avancée significative par rapport à la génération de tests unitaires automatisés basés sur des modèles et utilisant une analyse statique ou dynamique. Les tests ainsi générés sont du code réel, et pas seulement des stubs.
Les tests unitaires basés sur l'IA peuvent être générés très rapidement, ce qui est utile pour une base de code existante importante.
Les développeurs n'ont qu'à modifier les tests et peuvent mettre en place la suite de régression unitaire relativement rapidement.
Limites :
Les tests unitaires générés par l'IA reflètent simplement le code sur lequel ils sont construits. Ils ne peuvent pas encore deviner la fonctionnalité prévue du code. Si le code ne se comporte pas comme prévu, le test unitaire généré pour ce code reflétera ce comportement non voulu. Il s'agit d'un inconvénient important, car l'objectif des tests unitaires est de faire respecter et de vérifier un contrat implicite ou explicite.
Les tests unitaires générés à l'aide du machine learning peuvent briser les tests unitaires existants, et c'est au développeur de s'assurer que cela ne se produise pas.
Les développeurs doivent écrire eux-mêmes les tests pour la logique métier complexe.
Même sans l'IA, l'automatisation des tests d'API n'est pas une tâche triviale puisqu'elle implique de comprendre l'API, puis de mettre en place des tests pour une multitude de scénarios afin de garantir la profondeur et l'étendue de la couverture.
Les outils actuels d'automatisation des tests d'API, comme Tricentis et SoapUI, enregistrent les activités et le trafic de l'API pour les analyser et créer des tests. Cependant, la modification et la mise à jour des tests obligent les testeurs à se plonger dans les moindres détails des appels et paramètres REST, puis à mettre à jour la suite de tests d'API.
Les outils de test d'automatisation des API basés sur l'IA tentent d'atténuer ce problème en examinant le trafic et en identifiant les modèles et les connexions entre les appels d'API, en les regroupant efficacement par scénario. Les outils utilisent également les tests existants pour connaître les relations entre les API, s'en servir pour comprendre les changements apportés aux API, et mettre à jour les tests existants ou créer de nouveaux tests basés sur des scénarios.
Avantages :
La gestion des changements serait nettement plus facile étant donné qu'au moins une partie des changements d'API peut être gérée par un outil d'automatisation de l'IA.
Limites :
En général, les tests d'API sont difficiles à mettre en place, et peu d'outils offrent des capacités basées sur le machine learning dans ce domaine.
Dans les tests d'interface utilisateur basés sur l'IA, les outils d'automatisation des tests analysent le DOM et le code connexe pour vérifier les propriétés des objets. Ils utilisent également des techniques de reconnaissance d'image pour naviguer dans l'application et vérifier visuellement les objets et les éléments de l'interface utilisateur afin de créer des tests d'interface utilisateur.
Les systèmes de test d'IA utilisent des tests exploratoires pour trouver des bogues ou des variations dans l'interface utilisateur de l'application et générer des captures d'écran pour une vérification ultérieure par un ingénieur QA. De même, les aspects visuels du système sous test (SUT) tels que la disposition, la taille et la couleur peuvent être vérifiés.
Avantages :
Les tests automatisés de l'interface utilisateur peuvent conduire à une augmentation de la couverture du code.
Les déviations mineures de l'interface utilisateur n'entraînent pas l'échec de la suite de tests. Les modèles d'IA de produit peuvent les gérer.
Limites :
Pour toute application moderne, le nombre de plateformes, de versions d'applications et de versions de navigateurs est important. Les performances de l'automatisation de l'interface utilisateur basée sur l'IA dans ces conditions ne sont pas claires. Cependant, les outils de test dans le cloud peuvent exécuter des tests en parallèle.
La génération de données de test est un autre domaine prometteur pour les modèles d'IA. Le machine learning peut facilement générer des ensembles de données sur la base de modèles de machine learning formés en utilisant des ensembles de données de production existants pour apprendre.
De cette façon, les données de test générées sont très similaires aux données de production, ce qui est idéal pour une utilisation dans les tests de logiciels. Le modèle de machine learning qui génère les données s'appelle un réseau adversarial génératif (GAN).
Les outils basés sur l'IA peuvent évaluer les changements apportés au code et corriger plusieurs tests existants qui ne s'alignent pas sur ces changements, surtout si ces changements de code ne sont pas trop complexes. Les mises à jour des éléments de l'interface utilisateur, des noms de champs, etc. ne doivent plus nécessairement interrompre la suite de tests.
Certains outils d'IA surveillent les tests en cours et essaient des variantes modifiées pour les tests qui ont échoué en choisissant des éléments d'interface utilisateur en fonction de la meilleure adéquation. Ils peuvent également vérifier la couverture des tests et combler les lacunes si nécessaire.