Aller au contenu

Gérer les ensembles de prompts

La gestion des ensembles de prompts est accessible depuis l'espace Administration, sous-menu Entités, en cliquant sur l'ancre Ensembles de prompts.

Un ensemble de prompts est constitué d'une liste de prompts destinés à un usage donné de l'IA générative dans SquashTM. Chaque prompt est constitué d'un modèle de prompt système, d'un modèle de prompt utilisateur et, optionnellement, d'un modèle d'encapsulation du contexte. Ces modèles sont utilisés par SquashTM pour générer les messages envoyés à l'IA. Des exemples complets sont disponibles plus bas dans cette page.

Info

Actuellement, le seul usage de l'IA générative dans SquashTM consiste en la génération de cas de test classiques à partir d'une exigence. D'autres usages seront ajoutés dans les futures versions.

La gestion des ensembles de prompts est accessible avec une licence SquashTM Ultimate 💎.

Comprendre les ensembles de prompts et les prompts

Ensemble de prompts

Un ensemble de prompts regroupe plusieurs prompts dédiés à une utilisation donnée de l'IA dans SquashTM. Lors de la génération, l'utilisateur choisit le prompt qu'il souhaite utiliser parmi ceux de l'ensemble.

Chaque ensemble de prompts peut être lié à un ou plusieurs projets et contient un ou plusieurs prompts.

Prompt

Un prompt définit les données envoyées à l'IA. Il contient :

  • un modèle du prompt système : il définit le rôle de l'IA et les instructions qu'elle doit suivre ;
  • un modèle du prompt utilisateur : il contient la demande ou la question spécifique envoyée à l'IA, enrichie des données de l'exigence source (nom, description, nature…) ;
  • un modèle d'encapsulation du contexte (optionnel) : il structure le message envoyé à l'IA lorsque du contexte additionnel est fourni. Voir la section Encapsulation du contexte ci-dessous.

Ces modèles sont des patrons Handlebars prétraités par SquashTM avant d'être envoyés à l'IA.

Cela permet notamment :

  • d'inclure des données de SquashTM avec la syntaxe {{variable}} ;
  • de conditionner la présence de portions de texte avec {{#if}} … {{/if}} ;
  • de parcourir des listes avec {{#each}} ;

Encapsulation du contexte

Lorsque l'utilisateur fournit du contexte additionnel (exigences liées et/ou documents), le modèle d'encapsulation du contexte définit comment ces éléments sont intégrés au prompt textuel envoyé à l'IA. Si ce modèle est laissé vide, le panneau Contexte & Sources n'est pas proposé lors de la génération.

Les variables Handlebars disponibles dans ce modèle sont décrites dans la section Placeholders Handlebars disponibles.

Info

Les ensembles de prompts fournis par défaut contiennent un modèle d'encapsulation du contexte pré-configuré qui peut servir de base pour créer des ensembles personnalisés.

Ensembles de prompts fournis par défaut

SquashTM fournit deux ensembles de prompts pré-configurés, l'un en français (Ensemble de prompts du système - Génération de cas de test classiques) et l'autre en anglais (System prompt set - Classic test case generation). Chaque ensemble contient trois prompts de complexité progressive :

PromptMétadonnées utiliséesImportanceRéférenceJeux de données
Génération standardtous les champs de l'exigence
Génération détailléetous les champs de l'exigence
Génération détaillée avec jeux de donnéestous les champs de l'exigence

Les trois prompts partagent un même modèle d'encapsulation du contexte qui intègre le prompt utilisateur, les exigences liées (nom et description) et les noms des documents de référence fournis.

Les ensembles par défaut sont identifiés par le badge "S" (Ensemble de prompts du système) dans le tableau de gestion. Ils sont :

  • en lecture seule : leur contenu ne peut pas être modifié ;
  • protégés : ils ne peuvent pas être supprimés.

Astuce

Pour personnaliser les prompts, créez un nouvel ensemble en vous inspirant du contenu des ensembles par défaut, puis associez-le à vos projets.

Ajouter, modifier, supprimer un ensemble de prompts

Ajouter un ensemble de prompts

Depuis le tableau de gestion des ensembles de prompts, il est possible d'ajouter Icône ajouter ou de supprimer Icône supprimer des ensembles de prompts de façon unitaire ou en masse.

Tableau de gestion des ensembles de prompts

Lors de la création d'un ensemble de prompts, il faut renseigner :

  • le champ Nom : il doit être unique et est obligatoire ;
  • le champ Usage : il est obligatoire et non modifiable par la suite. Sa valeur par défaut est Génération de cas de test classique ;
  • le champ Description : facultatif.

Pop-up de création d'un ensemble de prompts

Modifier un ensemble de prompts

En cliquant sur le numéro de ligne (#) ou le nom de l'ensemble de prompts, la page de consultation de l'ensemble de prompts s'affiche pour permettre la modification de ses informations et l'ajout de prompts.

Gérer les prompts d'un ensemble

Ajouter un prompt

Depuis la page de consultation de l'ensemble de prompts, il est possible d'ajouter Icône ajouter des prompts.

Pop-up ajout prompt

Lors de l'ajout d'un prompt, il faut renseigner :

  • le champ Nom : il permet de sélectionner le prompt souhaité lors de l'utilisation d'une fonctionnalité liée à l'IA. Il doit être unique au sein de l'ensemble de prompts.
  • le champ Modèle du prompt système : il définit le modèle du prompt système qui sera envoyé à l'IA.
  • le champ Modèle du prompt utilisateur : il définit le modèle du prompt utilisateur qui sera envoyé à l'IA.
  • le champ Modèle d'encapsulation du contexte (optionnel).

Modifier un prompt

Pour afficher les détails d'un prompt :

  • cliquer sur l'icône Icône flèche de la ligne correspondante ;
  • ou cliquer sur le bouton Ouvrir pour afficher tous les prompts.

Tous les éléments sont modifiables directement.

Supprimer un prompt

Pour supprimer un prompt, cliquer sur l'icône Icône supprimer sur la ligne correspondante.

Prompts pour la génération de cas de test classiques

Dans le cas de la génération de cas de test classiques à partir d'une exigence, le modèle du prompt système définit le format JSON que l'IA doit produire en sortie, tandis que le modèle du prompt utilisateur et le modèle d'encapsulation du contexte exploitent des variables Handlebars pour injecter les données de SquashTM.

Format JSON attendu en sortie

Le modèle du prompt système doit décrire la structure JSON que l'IA doit retourner. Les champs de base sont name, description, prerequisites et testSteps (avec action et expectedResult). Trois champs supplémentaires peuvent être ajoutés selon le niveau de détail souhaité : weight, reference et datasets.

Champs weight et reference

La génération par l'IA peut renseigner deux champs supplémentaires sur les cas de test créés :

  • weight (Importance) : correspond au champ Importance du cas de test dans SquashTM. Valeurs acceptées : VERY_HIGH, HIGH, MEDIUM, LOW.
  • reference (Référence) : correspond au champ Référence du cas de test. L'IA propose un identifiant court et unique (ex : TC_AI_LOGIN_01).

Pour que l'IA renseigne ces champs, ils doivent être inclus dans le format JSON attendu au sein du modèle du prompt système. Les prompts par défaut Génération détaillée et Génération détaillée avec jeux de données les incluent.

Jeux de données

L'IA peut générer des cas de test variabilisés, c'est-à-dire contenant des paramètres dont les valeurs varient selon le scénario testé (nominal, erreur, cas limite). Ces variantes sont exprimées sous forme de jeux de données (datasets).

La syntaxe des paramètres et les contraintes associées sont décrites dans la section Jeux de données.

Lors de l'enregistrement d'un cas de test généré avec jeux de données, SquashTM crée automatiquement le cas de test, ses paramètres et ses jeux de données associés. Ceux-ci sont visibles dans le bloc Paramètres et jeux de données du cas de test.

Exemple de format JSON complet

L'exemple ci-dessous illustre l'ensemble des champs pouvant être demandés à l'IA, y compris weight, reference et datasets :

{
  "testCases": [
    {
      "name": "Titre explicite du cas de test",
      "reference": "TC_AI_<domain>_<number>",
      "description": "Objectif du test",
      "weight": "HIGH",
      "prerequisites": "Prérequis avec ${parametre1}",
      "testSteps": [
        {
          "action": "Action avec ${parametre1}",
          "expectedResult": "Résultat attendu : ${parametre2}"
        }
      ],
      "datasets": [
        {
          "name": "Scénario nominal - description claire",
          "parameters": {
            "parametre1": "valeur1",
            "parametre2": "valeur2"
          }
        },
        {
          "name": "Cas d'erreur - description claire",
          "parameters": {
            "parametre1": "valeur_erreur1",
            "parametre2": "valeur_erreur2"
          }
        }
      ]
    }
  ]
}

Placeholders Handlebars disponibles

Dans le modèle du prompt utilisateur

requirement est un objet représentant l'exigence actuellement sélectionnée. Il expose notamment les champs suivants :

  • name : nom.
  • reference : référence.
  • criticality : criticité.
  • category : catégorie.
  • nature : nature.
  • description : description.

Si un champ n'est pas renseigné dans l'exigence, le placeholder correspondant génère une valeur vide.

Dans le modèle d'encapsulation du contexte

Trois variables Handlebars sont disponibles :

  • {{ userPrompt }} : le prompt utilisateur généré (après substitution des variables).
  • {{ providedRequirements }} : les exigences ajoutées comme contexte (chaque élément expose name et description).
  • {{ providedDocuments }} : permet de récupérer les noms des documents joints envoyés depuis le panneau de contexte (chaque élément expose name). Les documents eux-mêmes sont toujours transmis à l'IA en tant que pièces jointes, que cette variable soit utilisée ou non dans le modèle.

Exemples de prompts pour la génération de cas de test

Les ensembles de prompts par défaut fournis par SquashTM proposent trois prompts de complexité progressive, illustrant les différentes capacités de la génération par IA :

PromptDescriptionSortie JSON
Génération standardCas de test basiques à partir de l'exigence. Couvre le scénario nominal et les principaux cas d'erreur.name, description, prerequisites, testSteps
Génération détailléeExploite toutes les métadonnées de l'exigence. Inclut un raisonnement interne et des garde-fous anti-hallucination. Adapte la profondeur de test à la criticité.+ weight, reference
Génération détaillée avec jeux de donnéesCas de test variabilisés : les scénarios sont exprimés par des jeux de données plutôt que par des cas de test séparés. Les paramètres utilisent la syntaxe ${nomDuParametre}.+ weight, reference, datasets

Les trois prompts partagent un même modèle d'encapsulation du contexte permettant d'injecter des exigences liées et des documents de référence.

Le contenu complet de chaque prompt et du modèle d'encapsulation du contexte est consultable ci-dessous.

Génération standard
Vous êtes un expert en test logiciel. Vous générez des cas de test fonctionnels à partir d'une exigence.

Règles :
1. Couvrir le scénario nominal (Happy Path) et les principaux cas d'erreur.
2. "prerequisites" doit être une chaîne de caractères simple, et non un tableau ou un objet.
3. Chaque "action" est une interaction utilisateur claire.
4. Chaque "expectedResult" décrit le comportement attendu du système.
5. Utilisez uniquement les informations présentes dans l'exigence fournie. Si une information est manquante, indiquez-le dans "prerequisites" en commençant par "Hypothèse :".

Format de sortie (JSON uniquement, rien d'autre) :
{
  "testCases": [
    {
      "name": "Titre explicite du cas de test",
      "description": "Objectif du test",
      "prerequisites": "Prérequis nécessaires",
      "testSteps": [
        {
          "action": "Action du testeur",
          "expectedResult": "Résultat attendu"
        }
      ]
    }
  ]
}

La réponse doit être un objet JSON valide et uniquement cela : pas de balises de code, pas de commentaires, pas de formatage markdown.
Tout caractère en dehors du JSON invalide la réponse.
Générez des cas de test pour l'exigence suivante :

Nom : {{requirement.name}}
Référence : {{requirement.reference}}
Criticité : {{requirement.criticality}}
Catégorie : {{requirement.category}}
Nature : {{requirement.nature}}

Description :
{{requirement.description}}
{{ userPrompt }}

{{#if providedRequirements}}
--- EXIGENCES LIÉES (contexte additionnel) ---
{{#each providedRequirements}}
[{{@index}}] {{this.name}} : {{this.description}}
{{/each}}
{{/if}}

{{#if providedDocuments}}
--- DOCUMENTS DE RÉFÉRENCE ---
{{#each providedDocuments}}
- {{this.name}}
{{/each}}
{{/if}}
Génération détaillée
Vous êtes un expert senior en Assurance Qualité Logicielle (QA).
Votre objectif est de concevoir des cas de test fonctionnels pour vérifier qu'un besoin métier est satisfait.

Règles :
1. Couvrir le scénario nominal (Happy Path) et les cas d'erreur fonctionnels (champs obligatoires, formats de données, règles métier).
2. "prerequisites" doit être une chaîne de caractères simple, et non un tableau ou un objet.
3. Adapter la profondeur de test à la criticité de l'exigence : une criticité "Critique" exige une couverture exhaustive, une criticité "Mineure" peut se limiter au nominal.
4. Chaque "action" est une interaction utilisateur claire.
5. Chaque "expectedResult" décrit le comportement attendu du système.
6. Le champ "weight" reflète l'importance du cas de test et accepte 4 valeurs : "LOW", "MEDIUM", "HIGH" ou "VERY_HIGH".
7. Le champ "reference" est un identifiant court et unique pour le cas de test qui suit le formalisme "TC_AI_<domain>_<number>".

Raisonnement interne (ne pas afficher) :
Avant d'écrire le JSON, effectuez silencieusement :
(1) extraire les règles métier + champs obligatoires + entités clés,
(2) déduire les conditions d'erreur,
(3) générer les cas de test uniquement à partir des faits extraits.

Contraintes de fiabilité (très important) :
- Utilisez uniquement les informations explicitement présentes dans le besoin métier et le contexte fournis.
- Si un test nécessite des informations manquantes, ne les inventez pas.
  Écrivez l'hypothèse dans "prerequisites" en commençant par "Hypothèse :".
- Ne référencez pas des éléments d'interface ou des écrans qui ne sont pas mentionnés dans les données d'entrée.

Format de sortie (JSON uniquement, rien d'autre) :
{
  "testCases": [
    {
      "name": "Titre explicite du cas de test",
      "reference": "TC_AI_<domain>_<number>",
      "description": "Objectif du test",
      "weight": "HIGH",
      "prerequisites": "Prérequis nécessaires",
      "testSteps": [
        {
          "action": "Action du testeur",
          "expectedResult": "Résultat attendu"
        }
      ]
    }
  ]
}

La réponse doit être un objet JSON valide et uniquement cela : pas de balises de code, pas de commentaires, pas de formatage markdown.
Tout caractère en dehors du JSON invalide la réponse.
Générez des cas de test pour l'exigence suivante :

Nom : {{requirement.name}}
Référence : {{requirement.reference}}
Criticité : {{requirement.criticality}}
Catégorie : {{requirement.category}}
Nature : {{requirement.nature}}

Description :
{{requirement.description}}
{{ userPrompt }}

{{#if providedRequirements}}
--- EXIGENCES LIÉES (contexte additionnel) ---
{{#each providedRequirements}}
[{{@index}}] {{this.name}} : {{this.description}}
{{/each}}
{{/if}}

{{#if providedDocuments}}
--- DOCUMENTS DE RÉFÉRENCE ---
{{#each providedDocuments}}
- {{this.name}}
{{/each}}
{{/if}}
Génération détaillée avec jeux de données
Vous êtes un expert senior en Assurance Qualité Logicielle (QA).
Votre objectif est de concevoir des cas de test fonctionnels variabilisés pour vérifier qu'un besoin métier est satisfait.

Règles :
1. Chaque cas de test doit contenir au moins un jeu de données nominal et au moins un jeu de données d'erreur ou de cas limite.
2. "prerequisites" doit être une chaîne de caractères simple, et non un tableau ou un objet.
3. Adapter la profondeur de test à la criticité de l'exigence.
4. Chaque "action" est une interaction utilisateur claire.
5. Chaque "expectedResult" décrit le comportement attendu du système.
6. Le champ "weight" reflète l'importance du cas de test et accepte 4 valeurs : "LOW", "MEDIUM", "HIGH" ou "VERY_HIGH".
7. Le champ "reference" est un identifiant court et unique pour le cas de test qui suit le formalisme "TC_AI_<domain>_<number>".

Contraintes de fiabilité (très important) :
- Utilisez uniquement les informations explicitement présentes dans le besoin métier et le contexte fournis.
- Si un test nécessite des informations manquantes, ne les inventez pas.
  Écrivez l'hypothèse dans "prerequisites" en commençant par "Hypothèse :".
- Ne référencez pas des éléments d'interface ou des écrans qui ne sont pas mentionnés dans les données d'entrée.

Raisonnement interne (ne pas afficher) :
Avant d'écrire le JSON, effectuez silencieusement :
(1) extraire les règles métier + champs obligatoires + entités clés,
(2) identifier les variables qui changent entre les scénarios (ce sont vos paramètres),
(3) vérifier que chaque paramètre apparaît au moins une fois dans "prerequisites", "action" ou "expectedResult",
(4) générer les jeux de données couvrant nominal, erreurs et cas limites.

Stratégie de variabilisation :
- Si possible, ne générez qu'un seul cas de test bien variabilisé qui couvre tous les scénarios (nominal + erreurs) grâce aux jeux de données.
- Les paramètres s'écrivent ${nomDuParametre} et peuvent être utilisés dans "prerequisites", "action" et "expectedResult", mais pas dans "name" et "description".
- Règle critique : chaque paramètre défini dans les jeux de données doit absolument apparaître au moins une fois dans "prerequisites", "action" ou "expectedResult".
  Un paramètre défini mais jamais utilisé est une erreur.
  Inversement, un ${parameter} utilisé dans les pas de test mais absent des jeux de données est une erreur.
- Pour les noms de paramètres : uniquement lettres ASCII, chiffres, tirets et underscores.
  Pas d'espaces. Maximum 255 caractères.
- Chaque jeu de données représente un scénario de test (nominal, erreur, cas limite).
  Le champ "name" du jeu de données décrit le scénario couvert.

Format de sortie (JSON uniquement, rien d'autre) :
{
  "testCases": [
    {
      "name": "Titre explicite du cas de test",
      "reference": "TC_AI_<domain>_<number>",
      "description": "Objectif du test",
      "weight": "HIGH",
      "prerequisites": "Prérequis avec ${parametre1}",
      "testSteps": [
        {
          "action": "Action avec ${parametre1}",
          "expectedResult": "Résultat attendu : ${parametre2}"
        }
      ],
      "datasets": [
        {
          "name": "Scénario nominal - description claire",
          "parameters": {
            "parametre1": "valeur1",
            "parametre2": "valeur2"
          }
        },
        {
          "name": "Cas d'erreur - description claire",
          "parameters": {
            "parametre1": "valeur_erreur1",
            "parametre2": "valeur_erreur2"
          }
        }
      ]
    }
  ]
}

La réponse doit être un objet JSON valide et uniquement cela : pas de balises de code, pas de commentaires, pas de formatage markdown.
Tout caractère en dehors du JSON invalide la réponse.
Générez des cas de test variabilisés avec jeux de données pour l'exigence suivante :

Nom : {{requirement.name}}
Référence : {{requirement.reference}}
Criticité : {{requirement.criticality}}
Catégorie : {{requirement.category}}
Nature : {{requirement.nature}}

Description :
{{requirement.description}}
{{ userPrompt }}

{{#if providedRequirements}}
--- EXIGENCES LIÉES (contexte additionnel) ---
{{#each providedRequirements}}
[{{@index}}] {{this.name}} : {{this.description}}
{{/each}}
{{/if}}

{{#if providedDocuments}}
--- DOCUMENTS DE RÉFÉRENCE ---
{{#each providedDocuments}}
- {{this.name}}
{{/each}}
{{/if}}

Supprimer un ensemble de prompts

Il est possible de supprimer un ensemble de prompts depuis sa page de consultation ou directement depuis le tableau de gestion.

Focus

La suppression d'un ensemble de prompts entraîne la suppression de tous les prompts qu'il contient. Si cet ensemble est lié à l'usage IA d'un projet, la fonctionnalité concernée ne fonctionnera plus tant qu'un nouvel ensemble de prompts n'aura pas été associé.

Info

Les ensembles de prompts par défaut (badge "S") sont protégés et ne peuvent pas être supprimés.