Getty Images

L’essentiel sur les tests avec des données synthétiques

Les données synthétiques peuvent reproduire des scénarios réels dans les tests de logiciels. Découvrez les principaux avantages, défis et méthodes liés à cette pratique.

Pour accomplir leur mission, les testeurs ont besoin de données de haute qualité, diversifiées et sécurisées. Ces data sets sont parfois difficiles à obtenir.

Dès lors, la reproduction d’un bug ou la confirmation du bon fonctionnement d’une nouvelle « feature » s’avèrent délicates. Il en va de même au moment de tester les performances d’une application, vouée à être fortement sollicitée. C’est là que les données synthétiques entrent en scène.

Qu’est-ce qu’une donnée synthétique ?

Le mot « synthétique » décrit des substances artificielles ou falsifiées, mais créées pour imiter un élément original. Les données synthétiques sont générées artificiellement pour remplacer, du moins temporairement, les données d’un environnement de production. Elles sont utiles à la fois pour les tests exploratoires et automatisés.

Les développeurs emploient les données synthétiques pour augmenter la quantité d’informations uniques avec lesquelles ils peuvent travailler. Généralement, il y a plus de données en production que dans un environnement de test. Le fonctionnement de certains chemins de code s’avère donc plus difficile à vérifier. En conséquence, ces données générées automatiquement promettent de faire gagner beaucoup de temps aux testeurs.

Les cas d’usage des données synthétiques lors de tests

Dans les tests logiciels, il existe deux principales façons pour les équipes de découvrir des problèmes : les tests manuels et les tests automatisés.

Dans les tests manuels, les données synthétiques ont plusieurs cas d’usage :

  • Elles évitent d’exposer des données réelles, potentiellement confidentielles ou sensibles.
  • Elles génèrent des données similaires à celles d’un environnement de production.
  • Elles servent à simuler un ensemble de données de taille réelle et obtenir des résultats de test plus réalistes.

Dans les tests automatisés, elles servent à :

  • S’assurer que les tests automatisés sont déterministes, c’est-à-dire que les tests sont plus fiables et répétables grâce au type et à la qualité des données générées.
  • Déployer des scénarios de tests négatifs, lorsqu’il est nécessaire de valider une gestion correcte des erreurs. Cela s’applique aussi bien à l’interface utilisateur qu’aux interfaces API.

Par ailleurs, ces données synthétiques peuvent être créées de manière programmatique pendant l’exécution d’un test automatisé.

Au-delà des deux principaux types de tests mentionnés ci-dessus, les données synthétiques sont utiles dans de nombreux usages spécifiques, tels que :

  • Les tests d’intégration. Les données synthétiques peuvent aider à évaluer différents points d’intégration entre les applications et à identifier les endroits où les données ne sont pas correctement transmises.
  • Les tests de performance. Les testeurs peuvent générer de grands volumes de données synthétiques pour vérifier la capacité d’une application à fonctionner sous de fortes charges de trafic.
  • Les tests de régression. Les programmeurs peuvent utiliser des données synthétiques pour déterminer si des modifications du code introduisent des bugs ou perturbent la fonctionnalité de l’application.
  • Les tests unitaires. Ces fausses données réalistes servent aussi à éprouver des composants d’une application de manière isolée.

 

Tests : les avantages des données synthétiques

Généralement, il y a plus de données en production que dans un environnement de test. [...] En conséquence, ces données générées automatiquement promettent de faire gagner beaucoup de temps aux testeurs.

L’utilisation de données synthétiques dans les tests présente plusieurs avantages par rapport au fait de copier des informations réelles.

La qualité. Les équipes de test peuvent concevoir des données synthétiques pour répondre aux normes de qualité et limiter le nombre d’erreurs dans leur formatage, ce qui conduit à des tests dans l’ensemble plus fiables.

La quantité. Les équipes QA peuvent générer de grandes quantités de données synthétiques sans effort conséquent.

La diversité. Les données synthétiques sont personnalisables. Les équipes peuvent les adapter pour répondre à leurs cas d’usage. Il leur suffit d’ajouter des données pour représenter des situations qui ne sont pas présentes dans les data sets réels, ou de modeler les jeux de données synthétiques afin d’imiter des situations réelles.

La confidentialité, la sécurité et la conformité. Les données synthétiques protègent les informations personnelles sensibles des clients puisqu’elles sont fictives tout en étant formellement proches des originaux. Ainsi, les entreprises se conforment plus aisément aux réglementations sur la protection des données et réduisent les risques juridiques ainsi que les dommages potentiels à la réputation de l’entreprise.

Les défis des données synthétiques dans les tests logiciels

Malgré les avantages des données synthétiques, les équipes de développement peuvent rencontrer plusieurs défis lors de leur utilisation :

    • Une activité chronophage. La génération de données synthétiques pour chaque cas de test ou scénario peut être longue, en fonction de l’approche et des besoins.
    • Outils. La création de données synthétiques nécessite des outils et des techniques spécifiques. Sans cela, la tâche demeure fastidieuse.
    • Courbe d’apprentissage. Se familiariser avec les modèles de données et la manière dont les données sont structurées dans un entrepôt demeure un enjeu de taille pour les professionnels.
    • Programmation. Concevoir et construire une méthode fiable pour générer des données synthétiques nécessitera des compétences spécifiques et une organisation bien huilée.

Comment générer et utiliser des données synthétiques

Les méthodes pour générer des données synthétiques ne manquent pas. En voici un florilège.

La génération de données aléatoires

Il existe des bibliothèques pour tous les langages de programmation courants qui permettent de générer des données synthétiques. Ces librairies doivent faciliter la création de prénoms, de noms de famille, de numéros de téléphone, d’adresses mail, de mots de passe, d’URL, de noms d’entreprise (etc.) factices. Elles aident à infuser un caractère aléatoire dans des données pour les tests manuels ou automatiques. À noter que ces bibliothèques peuvent être quelque peu déterministes (par exemple, pour une adresse ou un code postal).

La génération basée sur des règles

Les mêmes types de bibliothèques génèrent aussi des données synthétiques basées sur des règles. Voici quelques exemples :

    • Une plage de nombres avec un minimum de 1 et un maximum de 500.
    • Un nombre à cinq chiffres compris entre 00 000 et 99 999.
    • Un nom de société de moins de 25 caractères.
    • Des données basées sur un tableau de huit éléments différents provenant d’une liste déroulante.
    • Un string qui peut vérifier l’injection de scripts intersites.
      "<script>alert('XSS')</script>"​

Cette génération de données basée sur des règles est plus précise que le mode aléatoire. Les testeurs peuvent l’utiliser dans le cadre de tests automatisés non seulement pour générer certains types de données, mais aussi pour exploiter des valeurs différentes en fonction de certaines règles. Par exemple, si un test se déroule le week-end et que le logiciel n’autorise pas la création de factures dont la date d’échéance est le samedi ou le dimanche, les testeurs peuvent créer une règle qui génère une date d’échéance. Ils pourraient établir une règle capable de générer à l’avenir une date d’échéance qui serait systématiquement un jour ouvrable. Cela rend les données plus déterministes par nature, ce qui est toujours un objectif dans l’automatisation des tests.

Masquage et anonymisation des données

L’anonymisation et le masquage peuvent constituer une stratégie risquée et complexe. Cela consiste à copier des données réelles d’un environnement de production – contenant potentiellement des informations sensibles ou personnellement identifiables – et à tenter de les anonymiser en remplaçant le contenu de certains champs, tels que les prénoms et les noms de famille, par des variables aléatoires. Il est facile d’oublier un scénario ou une colonne de données lorsque l’on travaille avec des data sets plus importants.

L’anonymisation des données peut également s’appuyer sur la dissociation des données. Avec cette méthode, les évaluateurs utilisent les données réelles, mais intervertissent les noms et prénoms des individus de manière aléatoire ou rattachent les adresses réelles à des clients différents. L’objectif est de faire en sorte que les informations ou les données des usagers finaux ne soient plus reconnaissables de manière irréversible.

Une autre approche consiste à masquer certaines informations dans les données. Il peut s’agir de conserver la première et la dernière lettre d’un nom et de remplacer le reste des caractères par des astérisques. Bien qu’elle présente un intérêt certain pour les données de type string, cette opération peut s’avérer délicate en fonction des données autorisées dans l’application via l’interface utilisateur ou l’API. L’UI peut bloquer les caractères spéciaux, tels que « * ». Cela entraînera alors des erreurs lors des tests ou de la modification de ces champs de données pendant l’exécution du cas de test.

Tant pour l’anonymisation que pour le masquage, la transformation des données est nécessaire. Il s’agit généralement du « T » du processus d’extraction, de transformation et de chargement (ETL). Pour chaque colonne ou ligne de données utilisée dans un magasin de données, les données doivent être extraites du système source, transformées à l’aide d’une logique d’anonymisation ou de masquage (à élaborer et à maintenir), puis chargées dans le système cible. Il existe de nombreux outils commerciaux qui offrent cette possibilité. En revanche, ils sont coûteux et de nombreuses équipes choisissent de créer et de maintenir leurs propres outils. De toutes les manières de générer des données, c’est la plus coûteuse, mais aussi celle qui génère les données les plus réalistes.

Les modèles d’IA générative

Les modèles d’IA sont de plus en plus populaires dans la création de données de test. Il existe de nombreux outils sur le marché qui facilitent ce processus. Recherchez des outils capables de générer de grands volumes de données synthétiques, mais dont les résultats sont obtenus ou confirmés à l’aide d’un modèle statistique. L’outil doit continuer à créer des corrélations et des distributions similaires à celles de l’ensemble des données d’origine. L’idée est d’apprendre au modèle d’IA à imiter l’ensemble de données de production grâce à l’entraînement. Pour cela, il est souhaitable de réaliser un fine-tuning léger du modèle statistique ou du LLM (grand modèle de langage) exploité.

Les étapes typiques pour générer des données de test à l’aide de modèles d’IA générative sont les suivantes :

  1. Indiquer une source de données ou un fichier de données CSV avec des colonnes et des lignes (c’est-à-dire une table de base de données).
  2. Entraîner le modèle à partir de ces données de production, de préférence anonymisées.
  3. Fournir au modèle des paramètres de sortie indiquant la quantité de données à générer.
  4. Recevoir un fichier de données CSV contenant des données de test synthétiques et entièrement anonymes, générées par l’intelligence artificielle.

Puis, à partir du fichier de données nouvellement créé, l’importer dans la base de données de test. Maintenant que le testeur dispose de cet ensemble de données, il n’aura généralement pas besoin de régénérer ces données, à moins que de nouvelles colonnes de données ne soient ajoutées. Dans ce cas, les testeurs peuvent répéter le même processus pour l’ensemble de la table ou uniquement pour la nouvelle colonne.

Pour approfondir sur Outils de développement