• Aucun résultat trouvé

IFT3913 Qualité du logiciel et métriques TP1 Conception et implantation d’un parseur présenté à M. Sahraoui Houari par Nicola Grenon GREN30077303 (grenonni) le jeudi 15 février 2007

N/A
N/A
Protected

Academic year: 2022

Partager "IFT3913 Qualité du logiciel et métriques TP1 Conception et implantation d’un parseur présenté à M. Sahraoui Houari par Nicola Grenon GREN30077303 (grenonni) le jeudi 15 février 2007"

Copied!
1
0
0

Texte intégral

(1)

IFT3913

Qualité du logiciel et métriques

TP1

Conception et implantation d’un parseur

présenté à M. Sahraoui Houari

par

Nicola Grenon

GREN30077303 (grenonni)

le jeudi 15 février 2007

(2)

Introduction

Dans le cadre d'un apprentissage sur les mesures et processus, nous avions, dans un premier temps, à créer un parseur pour des données fournies via un fichier texte de syntaxe data warehouse. Les données ainsi traitées devaient avoir une représentation interne aisément manipulable pour usage ultérieur (prochains travaux).

Nous avions également à produire une interface graphique de base afin de faciliter la visualisation de ces dites données.

Dans ce document se trouvent une description de la méthodologie de conception, de la manière d'utiliser le programme de même qu'une schématisation du format interne des données.

Utilisation

Fichiers fournis: parseur.java [ Le fichier exécutable (main) + outils de parsing ]

Syntaxe.Java [ Les classes associées à la syntaxe à traiter ]

Fenetre.java [ Les détails de l'interface visuelle ]

Compilation: make

Exécution: java parseur

Discussion

Comme structure pour représenter les données en mémoire, le choix simple était de rester collé le plus fidèlement possible à la syntaxe fournie sous forme de grammaire BNF. En effet, cette méthode de travail permettrait, entre autre, de facilement mettre la structure à jour s'il était nécessaire d'ajuster la syntaxe. En outre, cela simplifie également la mise en place en conservant une grande cohérence (facilement compréhensible) entre la structure et les données à stocker.

Les classes utilisées sont en fait simple et petites, directement liées au Schéma, Star, Fact table et Dimension table présentés. À ceci s'ajoute une classe Clef, afin de permettre une représentation objet de celles-ci, nous laissant ainsi la possibilité de conserver dans l'objet clef un lien vers sa classe dimension, ce qui pourrait nous donner la latitude de parcourir plus aisément notre base de données dans plusieurs sens.

(3)

Le parsing comme tel du texte a été laissé au soin de chaque classe. C'est-à-dire que chacune des classes structurelles reçoit grosso modo le texte au niveau du constructeur et s'organise pour le traiter, refilant possiblement à d'autres classes encore les sous parties nécessaires. Ceci permet de conserver dans un même secteur les références aux données de même type tout en rendant, encore une fois, plus faciles d'éventuelles modifications à la syntaxe.

Le principal point ayant demandé une attention plus pointue lors de la réalisation du programme fut de penser à traiter en premier lieu les Dimensions tables, soit avant la Fact table, lors de la création d'un Star. Le but de cette façon de faire est qu'ainsi nous pouvons directement référencer les clés primaires déjà créées sans devoir faire un retraitement dans une seconde passe, économisant ainsi des ressources.

(Évidemment cela sera plus pertinent dans le cas d'un exemple beaucoup plus lourd.) Un souci qui est resté présent lors du codage fut d'arriver à imaginer, avec le peu d'information disponible, des scénarios d'utilisation de la structure de données développée. C'est ainsi que s'est imposée l'idée de conserver des listes statiques dans les classes de même qu'un lien vers la classe mère dans l'objet clé primaire. De cette façon nous obtenons quelque chose qui sera d'avantage versatile.

D'un point de vue technique, il est apparu simple de générer dans l'ensemble des classes susmentionnées une méthode générique d'id, quitte à ce qu'elle délègue la question à une sous-classe dans le cas du Star. Dans le même esprit, les classes génèrent à l'interne les array qui sont directement utilisés par l'interface graphique, simplifiant grandement l'implémentation de celle-ci.

Finalement, notons qu'il aurait certes été possible de traiter indépendamment les données puis de créer les mêmes objets à partir de l'extérieur en passant les données compilées en paramètres. En fait c'eut été une autre approche intéressante, mais dans ce cas-ci, il me semble que la flexibilité et la solidité que confère l'idée d'intégrer le traitement des données aux classes elles-mêmes motive bien ce choix. Si nous voulions rendre plus robuste le traitement des données, il serait facile d'ajouter des tests un par un pour chaque cas, sans risque de "briser" le traitement global.

(4)

Diagramme

Voici un diagramme des classes associées aux éléments de la structure de données. À l'exception de ces classes qui représentent le cœur du programme, il suffit de mentionner les outils statiques inclus dans la classe parseur et l'interface graphique pour faire le tour de toutes les classes définies.

S c h e m a id e n t if ie r :S t r in g

+ id ( )

+ g e t A r r a y S t a r ( )

S t a r

+ id ( ) + g e t F a c t + g e t V e c t D im ( ) + g e t A r r a y D im ( )

F a c t id e n t if ie r :S t r in g

+ id ( )

+ g e t A r r a y C le f ( )

D im e n s io n a l id e n t if ie r :S t r in g

+ id ( )

+ g e t A r r a y C le f ( )

C le f id e n t if ie r :S t r in g

+ id ( ) + s e t P r im a r y ( ) + g e t P r im a r y ( )

1 1 . . n 1 1

1 . . n

1 . . n

1

0 . . n

1 . . n 1

(5)

Conclusion

En définitive, le traitement des données comme telles n'est pas un très grand problème: ce n'est pas très difficile à coder. Ce qui peut engendrer des problèmes, c'est d'un côté le niveau de robustesse désiré (ce qui ne s'applique pas vraiment ici, mais la forme employée laisse la porte ouverte à des ajouts) et de l'autre la nécessité de planifier les relations qui devront rester dynamiques entre certaines parties des données lors de la représentation interne de l'information (en prenant le temps d'imaginer les divers cas de figures possibles pour l'appel des informations à partir de telle ou telle autre donnée, on peut élaborer une bien meilleure représentation et ajouter des possibilités (par exemple le lien clef/table)).

Il est toutefois difficile d'aller plus loin dans l'analyse de ce travail, car nous n'en connaissons pas vraiment les objectifs à moyen terme. Le tout est quelque peu abstrait pour le moment. Ceci dit, des améliorations, qui n'étaient pas requises ici, pourraient bien entendu être faites au niveau de la robustesse de la syntaxe pour, par exemple, détecter les problèmes de pairage d'accolades ou autres.

Références

Documents relatifs

Il faut toutefois noter que pour la souris et le touchscreen, il faudrait prévoir soit un clavier numérique, soit ajouter à l'interface un petit clavier tel que celui-ci en haut ou

Il faut toutefois noter que pour la souris et le touchscreen, il faudrait prévoir soit un clavier numérique, soit ajouter à l'interface un petit clavier tel que celui-ci en

Ce pourrait être utile, voire nécessaire dans des cas plus complexes de traitement, mais ici, tant qu'on n'a pas à évaluer autre chose que des dénombrements de base, l'idée de

Ils pourraient certes être intégrés directement à la structure de donnée (donnant la responsabilités aux classes propres de conserver les comptes et d'effectuer les

Remarquons ici qu'il est probablement très fallacieux de déclarer que NFT, NDT, NMFT et NFK sont réellement indépendantes... les précédents TP ont eu le mérite de nous montrer le

La manière choisie pour implémenter le code, à savoir au moyen d'une classe abstraite dont je n'ai eu par la suite qu'à redéfinir la fonction d'ajout à la frange, m'a permis

Comme j'en ai parlé dans la méthodologie, en ajoutant des fonctionnalités internes à l'objet Fait, en l'occurrence simplement un lien vers la règle d'inférence utilisée pour

Pour nous permettre une utilisation pratique et une facilité de gestion, nous avons décidé de mettre en place un format de fichier d'entrée des données pour