L’IA dans Squash ?
Retour sur la présentation faite au Club Qualité Logicielle du 5/11/2024
Pour la 31ème édition du Club Qualité Logicielle et de son Club Utilisateurs Squash, près de 80 participants étaient réunis à Voie 15 (Paris 15ème) pour assister aux conférences et aux présentations prévues tout au long de la journée. L’occasion d’échanger notamment autour du DevSecOps, des bonnes pratiques et de l’outillage de test. La session de l’après-midi s’est clôturée avec la question du chantier de l’intégration de l’IA générative dans Squash.
L’IA dans Squash : pourquoi l’intégrer ?
L’ère numérique a connu de nombreuses révolutions, qui s’enchaînent à un rythme soutenu :
- Années 1990 : grâce à l’avènement d’Internet, l’information se diffuse à large échelle. Le e-commerce et les applications web client s’installent, repoussant les frontières géographiques.
- Années 2000 : l’arrivée des réseaux sociaux pousse l’information et la connaissance vers l’interactivité. C’est également le début de l’ère du cloud computing et d’offres « Software as a Service » (SaaS).
- Années 2010 : de nouveaux modes collaboratifs apparaissent. Le commerce collaboratif, la blockchain, le bitcoin… L’intelligence devient collective, le partage d’information favorisant le partage des connaissances. Et l’agilité se propage.
- Années 2020 : l’intelligence artificielle générative [1] [2] et les techniques de traitements du langage naturel se démocratisent et se répandent, dans tous les secteurs et à grande vitesse. Ces technologies permettent la recherche, l’analyse, la synthèse et la génération d’information dans une masse gigantesque de données grâce à la sémantique (création de lien de sens entre les documents).
Pour aider le testeur, il nous semblait alors primordial chez Henix d’étudier ce nouveau paradigme et ses emplois afin d’intégrer l’IA dans Squash. Restait à définir pour quels usages et comment.
La cartographie des cas d’usage pertinents
Nous avons commencé par cartographier les cas d’usage pertinents pour cette intégration, c’est-à-dire les cas où l’IA générative apporterait un bénéfice immédiat ou cumulatif.
Nous avons porté une attention particulière à ne pas se limiter aux cas d’usage de l’automatisation des tests. L’IA générative est un accélérateur. C’est un effet cumulé des gains sur l’ensemble des étapes et pratiques de tests qui va in fine amener à plus d’automatisation des tests. D’autant plus que certains cas d’utilisation de l’automatisation (la génération de code) seront adressés au niveau SI pour d’autres pratiques (le développement par exemple).
Cette phase d’étude consistait à cartographier puis à sélectionner le premier cas d’usage en fonction :
- De la criticité du cas d’utilisation
- Des gains potentiels
- De la complexité de mise en œuvre (génération des jeux de données, nécessitant déjà de gérer correctement la donnée)
Voilà le résultat de cette cartographie :
Premier cas d’usage : l’identification et la génération des cas de tests avec l’IA
La raison principale du choix pour ce premier cas d’usage fut la volonté de mettre en place rapidement une première étape simple à implémenter, en mode Minimum Viable Product (MVP) de l’Agile, de façon à :
- Expérimenter l’intégration technique de ces nouvelles technologies ; dans le cas présent les Grands Modèles de Langages (LLM) ;
- Obtenir un feedback rapide de nos utilisateurs.
En outre, le choix de ce cas d’utilisation permettait également les bénéfices suivants :
- Identifier et écrire les cas de tests nécessaires pour couvrir une exigence est au cœur du métier de testeur. Aider le testeur dans cette tâche facilite directement son quotidien. Et on obtient un bénéfice immédiat : en augmentant sa productivité grâce à l’IA, on a un retour direct sur investissement.
- S’assurer de la cohérence du patrimoine de test et de sa structure est un enjeu majeur de l’activité de tests. Favoriser la standardisation des cas de tests par des outils génératifs, qui vont générer des cas de tests selon une trame donnée, est une façon « amont » de répondre à cette problématique. La façon « aval » étant d’aider à la revue de patrimoine de test, Cf. cartographie ci-dessus.
L’objectif est alors de générer à partir d’une exigence les cas de tests (CT) la couvrant et pour chaque CT le scénario correspondant.
Le principe : mettre en place une interface via laquelle un utilisateur va demander la génération des CT à partir d’une exigence du référentiel d’exigences.
L’interface, en requêtant le modèle de langage (à l’aide d’un « prompt » pré-configuré), fait une proposition de cas de tests à l’utilisateur.
L’utilisateur peut alors valider tout/ou partie des test générés, qui sont alors stockés dans le référentiel de tests.
Les avantages : l’interface est une façade du modèle de langage qui masque la complexité de l’interaction avec le modèle et facilite la prise en main par les utilisateurs.
Cela permet de rester agnostique et de fonctionner avec tous les modèles (GPT4, Claude 3.5 Sonnet, Llama, Mistral Large…) et hébergeurs (OpenAI, Anthropic, Together, Hugging Face…).
Les limitations : l’exigence servant à la génération doit être autoporteuse ou le langage de modèle va être sujet aux « hallucinations » pour pallier les informations manquantes. Les réponses d’un modèle générique ne peuvent pas prendre compte le « contexte » de l’entreprise (cas de test existants, documents et exigences liés).
Mise en pratique dans Squash
La version 7.0 de Squash sortie en juin 2024 permet désormais :
Une compatibilité avec tous les modèles (déclaration et configuration de serveur d’IA dans Squash)
Une activation par projet
L’identification et la génération de cas de test par l’IA à partir d’une exigence
La recherche des cas de test générés par l’IA
Voici un exemple de prompt générant un cas de test via le modèle GPT-4
Un premier bilan de cette expérience
Il faut dépasser les limites des modèles génériques et les limites d’un éditeur.
La grande limitation de la génération de cas de test via une exigence, vient des hallucinations des modèles de langages génériques lorsque l’exigence n’est pas autoporteuse. Ces informations sont souvent portées par d’autres exigences et/ou d’autres documents au niveau de l’entreprise.
L’enjeu est donc d’affiner le résultat produit par l’IA générative ; deux axes s’offrent à nous :
- Piloter la génération de cas de test
En permettant à l’utilisateur de modifier son prompt ou de donner des instructions facultatives pour la génération du CT ;
En utilisant un Chat pour que l’utilisateur communique avec le modèle pour guider l’affinage du résultat. - Compléter les informations fournies au modèle
Fournir au modèle des éléments complémentaires : les images contenues dans l’exigence ; des exigences périphériques, voire des textes, images, documents annexes… fournis soit manuellement par l’utilisateur, soit automatiquement (exemple : RAG). Ou permettre au modèle de « demander » plus d’informations (en utilisant ses capacités d’invocation d’outils).
Concernant le contexte, nous étudions à l’heure actuelle les pistes suivantes pour dépasser ces limites :
- Le Retrieval-Augmented Generation (RAG)
Cette approche avancée de l’IA combine la recherche d’informations et la génération de texte, en deux étapes :
- Récupération : recherche dynamique d’informations pertinentes et contextuelles dans une vaste base de connaissances (données, documents…)
- Génération : utilisation des bribes récupérées comme contexte supplémentaire pour affiner la réponse - Le context caching
- Son principe : tirer parti du fait que la limite liée au nombre de tokens en cache tend à ne plus être un facteur limitant. L’interface met alors en cache une sélection voire l’ensemble des exigences. Plus d’infos ici : https://cloud.google.com/vertex-ai/generative-ai/docs/context-cache/context-cache-overview?hl=fr
- Son coût : le coût intervient sur la mise en place et/ou le rafraîchissement du cache. Mais il peut être mutualisé. - Les Tools
- Son principe : proposer des « hooks » pour que le grand modèle de langage (LLM) « demande les infos » qui lui manquent. Plus d’infos ici : https://python.langchain.com/docs/how_to/#tools
- Son coût : le coût est lié à l’implémentation du « endpoint ». Comment fournir les informations pertinentes lorsque le LLM le demande ?
Une difficulté pour nous, éditeur logiciel, que n’ont pas forcément d’autres consommateurs de l’IA Générative, réside dans la construction de patrimoines de tests conséquents qui puissent servir de données de tests viables pour ces fonctionnalités d’IA. De même, le retour d’utilisateurs « réels » nous est crucial pour évaluer la pertinence des solutions proposées, qui ne sont viables que si elles apportent valeurs et gains aux testeurs.
L’intégration de l’IA dans Squash en est à ses prémices, et il reste beaucoup de chemin à parcourir ! Nous travaillons notamment actuellement à la facilitation d’écriture de cas de test en langage semi-structuré (Gherkin) sur deux axes :
- Une auto-complétion intelligente via recherche sémantique dans la bibliothèque d’actions
- La maintenance et la recherche de doublons potentiels dans cette bibliothèque.
Nous publierons un nouvel article dès qu’une prochaine étape aura été franchie.
N’hésitez pas à vous abonner à la newsletter de Squash pour recevoir les dernières nouvelles d’avancement de ce grand chantier.
Pour en savoir plus :
Découvrir Squash :
Consulter la documentation en ligne de Squash :
Pour l’Équipe Squash
Florian GAUTIER
Responsable du domaine de compétences Autom-DevOps
[1] Dans ce texte, pour des facilités de lecture, nous utiliserons de façon interchangeable et parfois un peu abusive les termes Intelligence Artificielle Générative (IAG), Intelligence Artificielle (IA), Grand Modèle de langage (LLM). Il faut alors entendre IA Générative si l’on parle de l’outillage permettant de générer à partir d’un document (Texte, Image, Vidéo, …) un autre document. De même, il faudra entendre Grand Modèle de Langage (LLM) si l’on parle du moteur algorithmique (Réseaux de neurones profonds couplés à des moteurs d’« embeddings » — représentations vectorielles des mots constituant un document — ).
[2] Le but de ce document n’est pas de faire une synthèse sur l’ensemble des méthodes de l’intelligence artificielle (IA), mais bien de se concentrer sur les apports pour les testeurs du sous-ensemble appelé IA Générative.