Valid XHTML     Valid CSS2    

 

Projet de programmation en Licence professionnelle

(année 2016/2017)

 

Génération universelle de données pour tests logiciels

 

 

Présentation du projet

Lorsqu'on écrit un programme informatique ou lorsqu'on conçoit un système d'informations avec des bases de données, on a souvent besoin de jeux de données de tests, parfois très structurés et avec de gros volumes de données.

Il serait très utile de pouvoir disposer d'un générateur avancé de telles données. Le but du projet est de concevoir les types de données et de structures de données liées à des générations automatiques de données pour tests et d'implémenter un tel générateur qui fonctionnera en ligne de commandes et via une interface Web. La configuration de la génération sera décrite dans un fichier XML.

 

Détails du projet

Dans un premier temps d'analyse, on viendra recenser les types de données simples et structurées à générer, comme par exemple des colonnes de noms de personnes et d'âges, ou comme des clés primaires et des clés étrangères pour deux tables de données. A la suite de cette analyse, on décidera de la structure XML du fichier de paramètres pour configurer les données à générer.

Dans un deuxième temps, on viendra à la fois générer et analyser (sommairement) les données produites. Par exemple on pourra compter les nombres de personnes de chaque sexe dans les données générées, ou produire le code MySQL pour comptabiliser les données.

Il n'est pas sans doute pas indispensable de tout réaliser mais par contre, essayer de tout (!) prévoir en termes de conception de données est une partie importante du projet.

A titre d'exemple, voici le descriptif de données à générer pour un sujet d'examen -- on pourra vérifier qu'on a suffisamment de données pour répondre aux questions...


     On suppose qu'on dispose de trois tables de données dans la base
     STADATA nommées langues, mots et règles.
     
     -  la table langues contient, entre autres, les champs :
     
        idLangue, clé primaire identifiante de la langue ;
        langue, le nom de la langue.
     
     -  la table mots contient, entre autres, les champs :
     
        idMot, clé primaire identifiante du mot ;
        refLangue,  clé étrangère qui sert de référence pour la langue utilisée ;
        refRegle,  clé étrangère qui sert de référence pour la règle à appliquer ;
        mot, le mot au singulier dans cette langue ;
        pluriel, le pluriel de ce mot dans cette langue.
     
     -  la table regles contient, entre autres, les champs :
     
        idRegle, clé primaire identifiante de la règle de grammaire à appliquer ;
        refLangue, clé étrangère qui sert de référence pour la langue utilisée ;
        numRegle, numéro de la règle ;
        txtRegle, texte de la règle.
     
     Question 1
     
         Donner une expression MYSQL qui permet de compter le nombre de règles par langue.
     
         On affichera les langues et leur nombre de règles par nombre de règles décroissant,
         avec un tri alphabétique sur la langue en cas d'égalité du nombre de règles.
     
     Question 2
     
         Donner une expression MYSQL qui permet de trouver la langue pour laquelle il y a le plus de mots
         enregistrés et qui affiche ce nombre de mots et la langue.
     
         En cas d'égalité, on affichera par par ordre alphabétique croissant de langue.
     

Il peut s'agir d'un sujet d'ampleur, car on peut potentiellement générer de très grosses structures, comme des stocks d'entreprise, des annuaires d'associations, des arbres binaires ou n-aires, des graphes pour des benchmarks logiciels... On prévoiera donc de nombreux formats de sorties, dont les formats TXT, CSV[2], XML et SQL.

L'utilisation du générateur, contrairement au site generatedata, se fera à la fois en ligne de commandes et via une page Web, même si la génération pourra produire des fichiers HTML, Javascript etc. On pourra s'inspirer du site generatedata mais les données devront impérativement être plus "francisées", avec des accents éventuels, parfois des prénoms doubles, avec si possible des lois de distribution plus sophistiquées qu'un simple tirage pseudo-aléatoire uniforme... On prévoiera aussi des valeurs manquantes, en nombre absolu ou en pourcentage.

On commencera bien sûr par écrire la version en ligne de commandes, plus facile à développer et à tester.

Tout le projet sera réalisé en PHP.

 

 

Détail des consignes pour la partie 2 du développement du générateur

La première partie du projet avait pour but de montrer la faisabilité d'un tel générateur. La deuxième partie vient professionaliser le programme et lui ajouter une interface Web.

A propos de la génération

On viendra normaliser le fichier XML (tous les noms en français) et adapter la grammaire XSD en conséquence. Pour le choix des formats de sortie, on utilisera les valeurs 0 et 1 plutôt que TRUE et FALSE et on vérifiera qu'au moins un format de sortie est choisi. On ajoutera un élément <description> en texte libre pour référence, obligatoire mais pouvant être vide, afin d'identifier l'auteur, la date etc. tout au début du fichier XML.

On trouvera un moyen de générer des noms et des prénoms composés avec des espaces et/ou des tirets. Après avoir lu la page de référence stats du manuel PHP, on ajoutera d'autres lois statistiques de génération.

Pour les variables numériques, on mettra les valeurs MIN=0 et MAX=12 comme valeurs par défaut. Pour les variables caractères, on rajoutera un type élémentaire nommé email.

Pour les champs multiples dans une même table, on commencera par générer Mr/Me + Prénom + Nom avec des options majuscules/minuscules pour fournir par exemple le(s) prénom(s) en minuscules avec seulement l'initiale en majuscule et les noms tout en majuscules. On essaiera ensuite de fournir des adresses multiples avec des couples cohérent code postal/communes.

On trouvera et on implémentera un formalisme pour décrire le mécanisme clé primaire/clé secondaire pour des champs de deux tables distinctes.

A propos du rapport

Le rapport devra commencer par afficher la date et l'heure et afficher tout de suite la graine de génération. Une durée du temps de génération sera affichée et on viendra ensuite analyser les données produites afin de fournir un rapport complet sur l'ensemble des données générées. Ce rapport affichera la position des valeurs NULL quand ces valeurs existent, leur nombre et leur fréquence (à une décimale près).

De plus, si l'utilisateur a demandé une sortie SQL, on fournira le code SQL qui permet d'analyser [sommairement] la base de données et le rapport d'exécution issu de ce code.

A propos des formats de sortie

On ajoutera les formats de sortie JSON et XHTML et on essaiera de trouver un système efficace de visualisation pour les données XHTML avec des "volets figés" comme sous Excel.

A propos de l'interface Web

On choisira une interface «évoluée» après avoir comparé les éléments d'interface (que l'on listera dans un fichier Excel) pour les sites Web trouvés dans la première partie du projet.

On prévoiera de pouvoir charger au choix un ancien fichier XML correspondant à une génération ou un fichier SQL de commandes CREATE pour définir le générateur avec modifications possibles.

On écrira l'interface en PHP conceptuel, quitte à rajouter des fonctions pour HTML5.

A propos du programme et de l'interface Web

L'interface Web utilisera le programme de génération en ligne de commandes pour générer les données après avoir construit le fichier XML du modèle de génération. On prendra grand soin d'avoir un code PHP «propre et concis» bien commenté, avec des fonctions qui factorisent au maximum le code.

Code-source de la page.

 

 

retour gH    Retour à la page principale de   (gH)