Beruflich Dokumente
Kultur Dokumente
Frdric Petitdemange
SOMMAIRE
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! " $ % & ' ( ) * ' + ' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! , # ! - ( . ' & ' & & ( //' & ' % 0000000000000000000000000000000000000000000000000000000000000000000000000000 1 0202 0 2 0 # !# # !< # !@ # !B # !" < 3 4
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 3 4
6 6 4 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 - 89 & : ' ' / 8( ; ; / ( 0000000000000000000000000000000000000000000000000000000000000000000000000000000 2 - ' ; % = > ' ' ( ? ( / 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 2 - ' & ? ' // ' & A ( / % & ' = ( % ' & 00000000000000000000000000000000000000000000000000000000000 2 - ' & C ' & & A ' / & 0000000000000000000000000000000000000000000000000000000000000000000000000000000 2 - ' & & ( ( ' / 8' ' ; & ' 00000000000000000000000000000000000000000000000000000000000000000000000000000000 2
D ' & !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! B < ! - 8( 9 ' ' & E & > = ' 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 2 0202 < !# 3 4 F G 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 2 3 H I J 7
K
L
M 00000000000000000000000000000000000000000000 2 N 0 2 0 - 8( 9 ' ' ' & ; ( . ' & O ' C 000000000000000000000000000000000000000000000000000000000000000000000000000000 2 N 0 0 2 < !< 3
P Q
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 N 3 6
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 0 0 - ( C ( & ' ' % ' & 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 25 0 0 2 0 0 0 0 0 0 < !@ < !B < !" < !X < !, < !Y < ! Z < ! 3
G
000000000000000000000000000000000000000000000000000000 2 5 3 G
0000000000000000000000000000000000000000000000000000000000000000000000000000000000 R
I
S T H U 3 00000000000000000000000000000000000000000000000000000000000000000000000 5
7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2
V ( /E & ' ' W ' 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 2 D ' & ' & > . / ' & ' A ' = ' 0000000000000000000000000000000000000000000000000000 V ( /E & ' ' & . / & % 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000 V ( /E & ' ' / ( & % % 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - ' & C ' & & A ' / & ( + 0000000000000000000000000000000000000000000000000000000000000000000000000 - ' & C ' & & A ' / & ( + 00000000000000000000000000000000000000000000000000000000000000000 - ' & C ' & & ( + ? ' 0000000000000000000000000000000000000000000000000000000000000000000000000 V ( /E & ' ' / ( ' & 0000000000000000000000000000000000000000000000000000000000000000000000000000000
@ B
[ ( / % ' / 8( ; ; / ( !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! < " - ' & % ? / & % ' & & ( ' & & ' ' /( ' & !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! < Y B ! - 8( 9 ' ' & E & > = ' 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 5 B !# B !< - 8( 9 ' ' ' & ; ( . ' & O ' C 000000000000000000000000000000000000000000000000000000000000000000000000000000 5 \ ( & ' ' % ' & ' ; = & ( 0000000000000000000000000000000000000000000000000000000000000000000000000 0 0 2 0 0 B !@ 3 H K L M 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 3 G
0000000000000000000000000000000000000000000000000000000000000000000000000000000000
- ' ' & ' 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 2 _ & ' ' A = ' ` * W W 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ ( & ' ' % ' & ' ; = & ( 0000000000000000000000000000000000000000000000000000000000000000000000000 * A = % & ' 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ' A ( ' & 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 * ' & ' a b _ - 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - ( . ' & ' & AA % ' & / ( . ( . ' & / & % & 0000000000000000000000000000000000000000000000000000000000 c 8( ' & C ' & ; ( : ' & O ' C 0000000000000000000000000000000000000000000000000000000000000000000000
"
- ' & C ' & ; ( : ' & % ? ' / ; ; ' = ' ] ^ \ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @ # " ! " !# " !< " !@ " !B " !" " !X
X ,
* / & !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @ @ V ' + ' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @ B , ! - & . A 9 ' d c / . !( & ; d ! 00000000000000000000000000000000000000000000000000000000000000000000000000 , !# , !< , !@ , !B - & . A 9 ' d - . # !( & ; d ! 0000000000000000000000000000000000000000000000000000000000000000000000000 N - & . A 9 ' d / . 9 ' e !( & ; d ! 0000000000000000000000000000000000000000000000000000000000000000000 1 - & . A 9 ' d * A A ' ' !( & ; d ! 00000000000000000000000000000000000000000000000000000000000000000000000000 5 - & . A 9 ' f d ' &g A = g & ( ? ' !( & ; d ! 00000000000000000000000000000000000000000000000000000000000
\ C / !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! B @
Figure 4 - Etat de la rservation des salles pour 0la journe en cours. 000000000000000000000000000000000000000000000000000000000000 2 2 Figure 5 - Formulaire de rservation d'une salle 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 Figure 6 - Formulaire de rservation rcurrente - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 Figure 7 - Formulaire de rservation rcurrente - 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 Figure 8 - Formulaire de rservation rcurrente - 3 00000000000000000000000000000000000000 2 Figure 9 - Formulaire de vrification des approvisionnements 000000000000000000000000000000000000000000000000000000000000 2 Figure 10 - Structure des fichiers de l'application 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 2 5 Figure 11 - plan du site intranet0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 Figure 12 - Le MLD reconstruit 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 Figure 13 - Le MCD reconstruit 0000000000000000000000000000000000000000000000000000000000 Figure 14 - Nouvelle structure des fichiers source 0000000000000000000000000000000000000000000000 2 Figure 15 - Le nouveau Modle Conceptuel de Donnes
1 Introduction
Le projet que je souhaite partager avec vous est celui qui m'a t offert de faire sur une petite application de type web dont la fonction principale est la gestion des salles de runion. Cette application est journalirement utilise soit par le personnel de la rception pour effectuer les rservations ncessaire soit par l'ensemble des membres de l'entreprise pour visualiser les disponibilits ou l'quipement des salles de runion. C'est donc une application la fois simple dans sa dfinition et importante du point de vue fonctionnel pour une entreprise effectuant beaucoup de runion avec ces clients, prestataires ou personnels internes. Pour effectuer notre travail de reconstruction de notre application, nous allons dans un premier temps effectuer une rtro conception de notre site en effectuant un "Design Recovery" afin de remonter au niveau d'abstraction le plus lev via une approche "Botton-up". Nous effectuerons par la mme occasion une "Redocumentation" de tout ou partie de la documentation manquante la bonne comprhension et la poursuite de la reconstruction du site. Enfin, nous approcherons la phase de "Restructuring" qui nous permettra d'effectuer une modification de la reprsentation actuelle des donnes, de la structure de l'application ou du code en une reprsentation plus proches du rel ou des bonnes pratiques de dveloppement. Mais aussi du "Refactoring" qui consiste simplifier, optimiser et documenter un code source. Ceci afin de prparer la phase de "Forward Engineering", phase classique et normale de conception vers l'avant d'une application (oppos aux phases de "Reverse Engineering" dans le sens du dveloppement).
l m n o p q r s t u v w x y z { x |} ~ x w u v z~ w zu v
Lors de la reconstruction de cette application, une question va trs vite surgir propos de l'approche choisie, l'approche "Botton-Up" versus "Top-Down". Dans un cadre dnu d'un intrt CNAMIEN pour l'laboration de ce projet, j'aurais de trs vite chang d'approche pour une approche "Top-Down". J'aurais repris par les fonctionnalits attendu en crivant le cahier des charges dans une phase normale de conception avanc de l'application et inclus une recherche sur l'tagre d'un logiciel existant. L'approche "Botton-Up" a t garde pour mettre en avant au travers de ce document les problmatiques de reconstruction d'un site web a travers une mthodologie ou manire de faire et en mettant en avant les problmatiques de qualit de l'application.
N
Le concept de la qualit est bas sur le contrle puis l'amlioration de cette qualit et enfin son management comme prsent par la figure suivante.
l m n o p q s t u v w x y z { x |} } |z
Ces deux concepts peuvent tre fusionn et toff pour donner un tableau crois des diffrents concepts de la reconstruction et de la qualit. Ce tableau pouvant servir dans ces deux dimensions pour faire d'un concept (Design recovery, refacturing ou d'autre) un lment permettant de faire de la reconstruction et de la qualit.
l mn o p q s } |x } w ~ u { x w u v w x y z { x ~ x w u v z~ w zu v x z { x } |z
C'est cette prsentation des donnes qui sera suivit tout au long de la prsentation de la reconstruction de notre application. Nous allons dans un premier temps prsenter l'application dans son contexte, puis prsenter la reconstruction effectue sur les donnes, son SGBD, la structure fichier de l'application, le code source et le design. En troisime phase, je prsenterai la phase de "restructuring" ou phase reconstructionvolution du modle, de la structure ou du code. Suivra une notation de la qualit de l'application, une prsentation de quelques bonnes pratiques du Web et je finirai par la conclusion.
2 Prsentation Contexte
L'application a t conu 6 ans plus tt dans un contexte trs fort de webisation outrance ou le client lger t le mode choisi par tous pour apporter les fonctionnalits demand par les clients/utilisateurs. A cette poque, le DSI et/ou le responsable des moyens gnraux en place ont pour des raisons non connu prfr de travailler avec un dveloppeur tranger (Pays-Bas). Le responsable des moyens gnraux n'avait aucune connaissance dans le dveloppement WEB et souhait fortement travailler avec ce dveloppeur tranger, le DSI qui avait une forte connaissance de ces projets puisque lui-mme chef de projet WEB en SSII n'avait par contre que peut de temps y consacrer. Les besoins ont t succinctement formaliss via email, cet email n'tant plus disponible ce jour. Les recherches d'informations sur cette application se sont soldes par: plus de dveloppeur il a totalement disparu de la scne et n'est plus joignable. aucune documentation (dfinition des besoins, cahier des charges, description fonctionnel, etc.), mme obsolte il n'y a rien, voir mme il semble qu'il n'y a jamais rien eu. perte de mmoire complet de la gestion de ce projet. Les seuls lments tangible restant notre disposition sont les utilisateurs, le responsable des moyens gnraux qui ne se rappelle plus de tout ce qui c'est dcid sur ce projet mais qui souhaiterait le voir voluer, et bien sure l'application elle-mme. Pourtant, quelques points positifs viennent s'ajouter ce descriptif. Le premier est que l'application fonctionne sur un serveur WEB intgrant un gestionnaire de base de donnes dont l'application fait usage (gage me semble t'il d'un minimum de srieux et d'intrt pour ce projet). Le second point positif est que l'application n'a jamais subi de problme technique hormis des problmes de performance lors de mise en charge du gestionnaire de base de donnes par des bases issue de nos propres clients pour y faire des d'analyses (gage me semble t'il du srieux du dveloppement et du modle conceptuelle de donnes utilis). Le troisime et non des moindre, est que les utilisateurs sont content de leur application.
Et les seconds ne font que visualiser l'ensemble des informations de rservation. 2.1.1 Le suivit des salles Le suivit des salles de runion consiste pour les membres de la rception de grer les salles, le besoins de ceux qui en on besoins en fonction des quipements install (systme de vidoconfrence, projecteur, lecteur DVD, systme de confrence tlphonique, etc.), et le rapprovisionnement de ces salles en boisson, caf et autres services. Les membres de la rception sont les seules pouvoir effectuer la cration, modification ou annulation de rservation des salles de runion. L'interview m'apprendra aussi qu'une rservation peut-tre rcurrente dans le temps et que l'interface graphique t volontairement choisi pour une utilisation la plus simple possible. Un intrimaire devant pouvoir effectuer une rservation simplement, rapidement et sans connaissance pralable. L'application a les interfaces graphiques suivant pour effectuer toute la gestion des salles de runion.
5
L'interface principale prsente la rservation des salles pour la journe en cours comme le prsente la Figure 4 - Etat de la rservation des salles pour la journe en cours.
2
Les formulaires suivants prsents la manire d'effectuer une rservation rcurrente. Le premier permet de slectionner la cration ou la suppression d'une rservation rcurrente.
2 2
L'tape suivante consiste dans le choix de la salle de runion et dans celui de la rcurrence de cette runion, soit : journalire hebdomadaire mensuelle
Enfin, la prise de rservation rcurrente se termine par la slection d'information horaire et de date.
2.1.2 Le suivit des approvisionnements Le suivit des rapprovisionnements consiste pour une personne de la rception vrifier que les besoins exprims par les utilisateurs lors de la rservation sont bien pris en compte lors de la prparation des salles et de dlivrer ce service en portant la bouteille d'eau, le caf ou les plateaux repas commands. Pour cela, elle on besoins de vrifier le jour d'avant les besoins pour effectuer les commandes ncessaire, le matin mme pour organiser l'installation dans les
2
salles des commandes et au cours de la journe pour s'assurer d'aucun oublie. A noter que notre application effectue un suivit des approvisionnements mais en aucun cas la commande de ceux-ci. Le formulaire suivant prsente le formulaire de vrification de l'approvisionnement des salles.
2
2
3 Reconstruction
La reconstruction du systme d'information se fera soit de manire squentiel soit de manire plus itrative lorsque la recherche des informations seront plus complexe. Pour effectuer notre travail de reconstruction de notre application, nous allons dans un premier temps effectuer une rtro conception de notre site en effectuant un "Design Recovery". Il s'agit de remonter au niveau d'abstraction le plus lev par une approche "Botton-up". Nous partons des lments de base qui sont mis en notre possession (base de donnes, schma de la base, code source,..) pour reconstruire ou recrer les documents de base permettant une comprhension sans quivoque du fonctionnement de l'application comme le modle conceptuel de donnes, la structure de l'application ou le cahier des charges fonctionnels de l'application. Nous effectuerons par la mme occasion une "Redocumentation" de tout ou partie de la documentation manquante la bonne comprhension et la poursuite de la reconstruction du site. Ce sont entre autre les documents dcrivant les lments prcdents la bonne comprhension de l'application. Enfin, nous approcherons la phase de "Restructuring" qui nous permettra d'effectuer les modifications de la reprsentation actuelle des donnes, de la structure de l'application ou du code source de l'application en une reprsentation plus proches du rel ou des bonnes pratiques de dveloppement. Ceci afin de prparer la phase de "Forward Engineering", phase classique et normale de conception vers l'avant d'une application (oppos aux phases de "Reverse Engineering" dans le sens du dveloppement) afin de prendre en compte les modifications demandes. Je commencerais par le plus simple et le plus visible, l'architecture du systme travers les lments cl (serveur Web, serveur de Base de Donnes,..). Puis la reconstruction de la structure des pages web de l'application. S'en suivra la reconstruction de la base de donnes, l'analyse du code, la recherche des rgles de fonctionnement, des rgles utilises pour le design et de la scurit. Enfin, je finirais par les besoins fonctionnels et non fonctionnels, les besoins non couvert et par une conclusion sur cette reconstruction. C'est une approche de type "Botton-up" ou l'on part de l'existant pour remonter vers le cahier des charges originel, vers le besoin exprim ou pas des utilisateurs.
3.1.2
Le Systme de Gestion de Base de Donnes Ayant trouv le serveur web hbergeant l'application, un rapide coup d'il ma permis de voir que ce serveur supportait aussi un moteur de SGBD de type SQL. J'ai alors vrifi dans les pages web source que c'tait bien un serveur MS SQL qui tait requt. A ma grande surprise, c'tait un moteur Microsoft de type MS Access 7.0. Le fichier "acces_base.inc" charg au dbut de plusieurs pages de l'application, pointait vers le fichier "RoomsParis.mdb", ne laissant aucun doute. Les pages crites en ASP dmontraient le besoins d'avoir des pages web dynamique. L'architecture de cette application est donc articule autour d'un serveur web IIS et d'un moteur de BD MS Access.
2N
dernires feuilles de l'arbre pointent vers la "home page" pour revenir au point de dpart. La premire page choisi est notre nud de dpart. A partir de ce nud, on dfini toutes les pages adresses par celle-ci crant un arc reliant notre nud principale au nud(s) secondaire(s). Chaque page point (nud de l'arborescence) devient une branche qu'il faudra parcourir. On itre ainsi chaque page adress afin de parcourir toutes les branches de l'arborescence. Une fois cela fait, il faut effectuer cette recherche sur toutes les autres pages non parcouru. Il se peut en effet que l'on n'ait pas commenc par le dbut ou qu'il y ait plusieurs commencements possibles. La premire page choisit fut celle propos par le serveur web et indiqu par le serveur DNS. J'ai donc commenc la construction de mon graphe partir de la page "Home.asp". L'itration des pages ASP fut rapide puisqu'il n'y avait que vingtquatre pages. La figure suivante prsente la structure des fichiers se trouvant dans le rpertoire racine de l'application.
Cette premire tape prsente la structure des fichiers utiliss par l'application.
2
Premier constat, la prsence d'un fichier non connect au graphe. A lors que le graphe doit tre connexe, Je dcouvre un fichier non connect. Cela m'indique qu'il ne sert pas l'application. Deuxime constat, la prsence de quatre possibilits pour ce connecter l'application. Cela dnote soit une tentative d'ajout de fonctionnalit, soit une tentative de maintenance. Les noms des quatre points de dpart me feront penser dans un premier temps une tentative d'ajout, mais l'utilisation je dcouvre un disfonctionnement majeur. S'agissait-il en faite d'une tentative d'ajout et de maintenance non rsolu jusqu' ces jours ? La tentative de modification est corrl par le faite que l'une des frames se nomme "Tool" est que justement cette application semble cruellement faire dfaut de page d'administration permettant par exemple de grer une salle de runion. Nous verrons plus loin la manire dont cela t fait lors de l'analyse de la base de donnes. La tentative de maintenance vient du faite que lorsque l'on se connecte la base, la premire page web charge la page ou s'effectue le login proprement dit et que celle-ci transmet l'ensemble des paramtres une autre page pour vrification. En fonction de quoi cette dite page retour le rsultat la toute premire page pour lui signifi une validation ou pas. L'un des arguments transmit outre la validation ou pas du login et le non de la frame L est l'erreur de programmation. Un mauvais nom de frame est transmit, l'application ne trouve pas et demande le chargement d'un second browser internet, mme s'il y a validation du login On se retrouve donc dans un fonctionnement normale de l'application avec deux pages web ouverte, l'une rest sur l'interface de login l'autre sur la page principale du site ouvert aprs login. A premire vue les pages terminales du graphe semblent retourner vers la page principale "home" du site. Nous verront plus loin qu'il n'en tait rien en faite, obligeant les utilisateurs faire un "back" sur le browser internet pour revenir la "home page" du site. Il n'y a pas circularit de notre graphe connexe ou les pages d'extrmits de notre graphe ne pointent pas vers notre page de dpart.
Mon graphe est donc ni connexe ni circulaire 3.2.2 Le plan du site A partir de l'analyse prcdente et de l'application nous en dduisons facilement le plan du site. Pour effectuer ce plan, il est important de se focaliser sur les grandes fonctions du site intranet. Le ou les services que l'application nous offre pour pouvoir effectuer la gestion
2 1
de nos salles de runion. C'est une analyse des fonctionnalits de notre application.
Cela correspond au formulaire de connexion l'application, la page principale, le rapport des approvisionnements, le dplacement dans le temps et les pages de rservation simple ou rcurrente d'une salle.
restauration de prvu, ce qui n'est pas forcment mauvais puisque l'application n'a absolument rien de critique. 3.3.2 La base de donnes Dtaillons plus en avant les tables afin de dcouvrir et de reconstruire les modles logique et conceptuel de donnes. Nous avons quatre tables qui sont: room reservation recurring administrator Le tableau suivant rcapitule les informations issues soit du systme d'exploitation pour dfinir la taille physique de la base, soit du schma de la base de donnes.
Nombre Volume du d'attribut schma de la table (en Ko) administrator 3 116 room 6 116 reservation 18 136 recurring 20 120 Nom de la table
Nombre d'occurrence
2 19 30446 60
Le volume total des donnes utiles avoisine les 4350 Ko soit 4,35 Mo. Ce qui dnote franchement avec la taille de la base de donnes qui fait prs de 18 Mo. Il semble qu'il n'y a jamais eu de maintenance complte sur cette base de donnes et qu'un nombre assez important de donnes a t supprim et qu'aucune dfragmentation de la base n'est jamais t faite. On voit ici une des caractristiques de ce type de base de donnes que de croitre sans s'optimiser naturellement. On peut donc aisment supposer que ni une maintenance des donnes ni une optimisation des tables n'ai jamais t effectues. Avanons un peu plus dans la dcouverte de nos tables et dcrivons-les.
La table "Administrator" administratorid Autonumber - Long Interger Administratoruser Text 50 Administratorpassword Text 50
Table 2 - Description de la table "Administrator"
no duplicate
Autonumber long Integer Text 50 Number Long Integer Number Long Integer
RecurringStartTime RecurringEndTime Recurring_RoomID RecurringDuration RecurringDayOfWeek RecurringWeekOfMont h RecurringCoffee RecurringFris RecurringBreakfast RecurringLunch RecurringText RecurringAmount RecurringMeetingEx RecurringmeetingRem arks RecurringCaseNum RecurringEmail
Number Long Integer Number Long Integer Number Long Integer Number Long Integer Number Long Integer Number Long Integer Text 50 Text 50 Text 50 Text 50 Text 50 Number Long Integer Text 50 Memo Text 100 Text 100
2
Autonumber Long Number ReservationName Text 50 ReservationDate Date - Time ReservationStartTime Number - single ReservationEndTime Number - single Reservation_RoomId Number - Long integer ReservationCoffee Text 50 ReservationFris Text 50 ReservationLunch Text 50 ReservationBreakfast Text 50 ReservationText Text 50 ReservationAmount Number - Long integer ReservationRecurringId Number - Long integer ReservationEmail Text 50 ReservationCheck Text 50 ReservationMeetingEx Text 50 ReservationmeetingRemarks memo ReservationCaseNum Text 100
Table 4 - Description de la table "Reservation"
La table "Rooms" Roomid Autonumber long integer Roomnaam Text 50 Roommax Number - Long integer Roomtext Text 50 Roomlocation Text 50 Roomtype Number - long integer
Nom de la salle
1=Aguesseau 2=Surene 1=normal room gebouw1 2=VP room gebouw1 3=normal room gebouw2 4=VP room gebouw2
Une lecture approfondie nous permet de dcouvrir quelques spcificits de ces tables que je vais passer en revue. La table Administrator: Elle n'est pas lie aux autres tables. C'est un cas classique des applications Web faisant appel une table pour grer les comptes de login une application lorsque l'application n'est pas connecter un systme de gestion des comptes d'entreprise comme un LDAP.
La table Recurring: Cette table possde onze attributs que l'on retrouve dans la table rservation. La table Rservation: Cette table possde douze attributs prsents dans la table Recurring. (les onze prcdents plus l'ID de recurring). La table Rooms: L'attribut "Roomnaam" n'est pas atomique. En effet, l'entretient avec les utilisateurs me donne la cl de cet attribut. Prenons la premire assertion de cette table "Boston A-20 + Beamer". Il est constitu du nom de la salle "Boston", puis de la lettre "A" pour la premire lettre de l'immeuble o est localis la salle, en l'occurrence "Aguesseau". Puis du nombre de personne maximum que celle-ci peut contenir "20" et enfin si celle-ci est quip d'un projecteur vido "Beamer". Ce qui nous donne pour cette attribut: "Boston A-20 + Beamer". L'attribut "Roomtext" est non utilis, il ne sert donc rien. L'attribut "Roomlocation" est du type texte de taille 50. Mais en faite ne contient que des "1" ou "2". A la vrification dans le code source, ces "1" et "2" sont traduis par le nom du btiment qui les abrite. Ce n'est pas judicieux car cela oblige l'application traduire ce champs et d'autre part l'entreprise tant trs active un autre btiment peux tre ajout contenant des salles de runion. Cela se traduirait par une modification obligatoire du code. En utilisant pleinement ce champ texte en y introduisant le nom du btiment directement, on pourrait viter au code d'effectuer une opration inutile et des problmes de maintenance du code. Dans l'ensemble, les types de champs utiliss ne semblent pas toujours opportuns. L'utilisation de champs de type "text" est sur-utilis comme par exemple pour l'attribut "ReservationBreakfast" qui est du type "text" et qui en faite devrait tre boolen. L'utilisation du type Boolen peut concerner jusqu' dix attributs de la base. Cela est d'autant plus vrai qu' la vrification dans le code source de l'application, celui-ci traduit systmatiquement le texte "yes" par une image "sticker" vert signifiant un oui. De plus, la taille de ces champs ne fait aucun doute sur le faite qu'elle n'a pas t l'objet d'une attention et qu'elle a t choisi large pour palier d'hypothtique problme ou modification. Le problme suivant qui retient mon attention est celui concernant ces attributs prsent la fois dans les tables
"Rservation" et "Recurring". Cela ressemble un hritage entre l'une et l'autre des tables, et c'est le cas. Nous avons ici un hritage car la rservation rcurrente est une sorte de rservation simple. A la lecture du contenu des tables, nous retrouvons plusieurs occurrences dont de nombreux attribut sont gaux entre ces deux tables "Recurring" et "Reservation" avec un Id commun qui est "Recurringid" gal "ReservationRecurringid". La lecture des donnes nous apprend aussi que des informations issues de la table "Reservation" diffre de la table "Recurring". Nous trouvons l'explication dans le code source et dans l'interview effectu auprs des htesses chargs d'utiliser l'application. Il est possible une fois la rservation rcurrente effectue de modifier une occurrence pour ajuster la demande de l'utilisateur en ajoutant ou supprimant la prsence d'un service (caf par exemple). Une lecture plus approfondie encore du code source vrifi ensuite par des tests sur l'application me rvle qu'une fois faite, la rservation rcurrente ne peux plus tre modifi. Mieux encore, suite un dfaut de programmation il n'est pas possible non plus de la supprimer. Alors la question se pose, est-il vraiment ncessaire d'avoir tout ces attributs en doublon dans nos deux tables ? C'est une nouvelle fois le code source qui nous donnera la rponse. Les informations redondante entre les deux tables sont temporaire dans la table "Recurring" afin de crer toutes les occurrences ncessaire dans la table "Rservation". L'occurrence de la table "Recurring" ne devenant utilisable plus que pour la supprimer en supprimant toutes les occurrences crer dans la table "Reservation". Ce qui comme je viens de le dire ne sert rien puisqu'un dfaut de programmation empche de visualiser la rservation rcurrente que l'on vient de crer. Les attributs en doublon sont donc inutile et doivent tre grer par l'application lors de la cration d'une rservation rcurrente. Par contre, les autres attributs de "Recurring" doivent servir pouvoir slectionner correctement la rservation rcurrente que l'on souhaite supprimer. Ces attributs sont donc utile, et le formulaire de suppression doit tre rcris en consquence. L'indexation des identifiants des tables existe mais MS Access ne permet pas aisment de retrouver leur lieu de stockage, leur taille ou toutes autres informations. Enfin, un autre problme survient qui me gnera tout au long de la reconstruction Je ne parle pas le nerlandais. C'est donc un problme de taille car l'utilisation de plusieurs langues dans la base et dans le code source cre une difficult de comprhension. On le voit donc clairement, la base de donnes ne semble pas avoir fait l'objet d'un travail srieux de mise au point. Les tables
ne sont pas normalises, le type des attributs n'a pas t choisi consciencieusement et les tailles des types d'attribut non plus. Enfin, nous avons des donnes qui peuvent tre en doublon et qui seront de toute manire inutile immdiatement aprs la cration des occurrences ncessaire dans la table "Reservation". Pourtant il y a ici une optimisation de la base qui mrite quand mme d'tre signale. L'aplatissement des attributs de service, ceux en doublon entre les tables "Reservation" et "Recurring". Cette aplatissement permet un gain et optimise ainsi la base et le traitement par l'application. Cela a-t-il t volontaire ? J'en doute vu le peut d'attention apport cette base mais le souligne ici. Les tableaux suivant prsentent pour l'exemple quelques occurrences des tables sauf pour la table "Administrator"
Exemple Reservation:
Reservation Id Reservation Name Reservation Date 29/05/2001 Reservation StartTime 7,75 Reservation EndTime 15 Reservation _RoomId Reservation Coffee Reserva tion Fris Reservation Lunch yes Reservation Breakfast yes Reservation Text 20 pts dej Pause 10h45 cafe the biscuits 20 petits dej Lina's pour 20 pers 20 petits dej 10h30 Lina's pour 20 pers 14 petit dej+17 plateaux mixte+2 thermos 13h OK Reservation Amount 20 Reservation Recurring Id Reservation Email 0 Candelon francois 0 Angela Paul 0 Angela Paul 0 BONNEFOI Yes Reunion avec des personnes de BCG Melbourne Reunion aves des personnes de BCG Melbourne Reservation Check Reservation Meeting Ex Reservationmeeting Remarks Reservation CaseNum 21123/08
2497 cf
8 8 8
20 20 17,5
10 yes 10 yes 10 yes 22 yes yes yes yes yes yes yes 20 20 20
Exemple Room:
RoomID 1 2 4 5 6 7 8 9 10 11 13 15 22 23 24 25 27 28 29 RoomNaam Boston A-20 + Beamer Buenos Aires A-4 Londres A-6 + Beamer Moscou A-3 Munich A-3 Shanghai A-4 Miami A-12 Plasma + VideoConf Kuala Lumpur S-8 + Beamer Grande Salle S-150 Paris A-12 + Beamer Jakarta (316) S-4 Tokyo A-12 Atlanta RJ S-50 + 2 Beamers Lisbon RJ S-14 + Beamer Oslo RJ S-18 + Beamer Sao Paulo (121) S-4 + TV/VHS San Francisco 114 S-16 Sur Formation Anglais 1 Sur Formation Anglais 2 RoomMax 25 4 8 3 3 5 12 8 150 12 4 12 50 14 18 4 16 1 1 RoomText RoomLocation RoomTYpe 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1
Exemple Recurring:
Recurring Name AG rec REC REC REC REC REC REC REC REC REC REC REC REC REC REC REC EP EP CC DP EG CH PL JGP CG DP Recurring Id 128 129 130 131 132 133 134 136 137 138 139 140 142 143 144 145 146 148 150 152 153 154 155 156 158 159 160 Recurring Type 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 Recurring Freq 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 Recurring StartTime 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 8 7 8 10 14 14 10 7 Recurring EndTime 14 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 14 14 18 22 22 12 15 15 11 22 Recurring _RoomID 9 2 2 4 5 6 7 4 5 6 7 2 4 5 7 6 5 4 4 1 18 12 6 12 8 7 19 Recurring Duration 4 52 52 52 52 52 52 52 52 52 52 52 52 1 52 52 52 2 1 1 1 1 2 1 1 1 4 Recurring DayOf Week 6 2 4 4 4 4 4 2 2 2 2 6 6 6 6 6 6 0 0 0 0 0 0 0 0 0 0 Recurring WeekOf Month 0 Recurring Coffee Recurring Fris Recurring Breakfast Recurring Lunch yes Recurring Text Recurring Amount 10 2 Yes 2 Yes 2 Yes 2 Yes 2 Yes 2 Yes 2 Yes 2 Yes 2 Yes 2 Yes 2 Yes 2 Yes 2 Yes 2 Yes 2 Yes 2 Yes yes yes Lina's (voir e Riva ) 6 6 11 4 6 2 2 2 3 5 PO Gervais Constantia petrou W Zein C Landi MMM formation roll out windows 2000 Formation roll out windows 2000 FINANCIAL GILEAD interne cours d'anglais ADM/PAR-00 22118/00 Recurring MeetingEx Recurring Meeting Remarks Recurring CaseNum 21625/08 RecurringEmail Gourevitch RECRUITING REC REC REC REC REC REC REC REC REC REC REC REC REC REC REC PENVEN Edwige PENVEN Edwige CALONNE CLEMENTINE Picard david Guillet edouard HALLEZ charlotte POMMIER Laurent PELADAN GARNIER PICARD david
CL
161
11
14
0 yes 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 14 2 0 30
MMM
L'analyse des tables de la base de donnes "Gestion des salles de runion" permet d'en dduire le modle logique de donnes suivant. Il est le reflet des tables en production dans notre base.
Issue du modle logique de donnes nous effectuons une volution de ce schma vers le modle conceptuel de donnes. Ce travail nous permettra par la suite de comprendre le fonctionnement de l'application et de pouvoir y porter les modifications attendues et demandes. Mais aussi les modifications ncessaires afin de rendre la base de donnes et le table normalises avec un fonctionnement optimal. Ce qui contrairement aux interviews n'est pas le cas
Les informations recueillis ne permettent pas d'entrevoir une sparation entre les donnes fixe et dynamique. On le voit, la base gre les donnes dynamiques, mais rien ne gre les donnes fixes. Et la lecture du code source me confirme que rien n'a t prvu. 3.3.3 Analyse des requtes SQL L'analyse des requtes faites sur les tables de la base montre que la table "administrator" n'est requte que pour vrifier l'accs l'application via le login afin de donner des accs de lecture-criture l'utilisateur. Aucune autre requte n'est effectue sur cette table. Les autres requtes sont pour la plus part du temps des jointures entre les tables. L'application gre l'intgrit entre les tables lorsqu'une suppression est effectue et qu'une rplication de cette suppression est ncessaire. L'application effectue donc une partie du travail qui devrait revenir la base de donnes. Plusieurs requtes ramne beaucoup plus d'information que ncessaire (exemple avec les pages "Coffee.asp" et "rec_form_delete.asp"). Le rsultat se solde soit par une impossibilit d'effectuer l'opration dans le cas de la suppression d'une rservation rcurrente ou l'affichage d'information inutile dans le cas de la gestion des approvisionnements.
Il n'y a pas de requte d'insert ou d'update proprement dite mais le dveloppeur utilise les fonctions internes lis l'ASP pour effectuer des updates, cela alourdit considrablement le code source. Voici pour exemple la manire utilis par le dveloppeur pour effectuer un "Update" d'une table.
sql2 ="select * From Reservations where ReservationId=0" rstSave.open sql2,Session("LinkToDatabase"),1,3 rstSave.AddNew rstSave.fields("ReservationName") = request("RecurringName") rstSave.fields("ReservationDate") = res(x) rstSave.fields("ReservationStartTime") = request("RecurringStartTime") rstSave.fields("ReservationEndTime") = request("RecurringEndTime") rstSave.fields("ReservationCoffee") = request("RecurringCoffee") rstSave.fields("ReservationFris") = request("RecurringFris") rstSave.fields("ReservationBreakfast") = request("RecurringBreakfast") rstSave.fields("ReservationLunch") = request("RecurringLunch") rstSave.fields("ReservationmeetingRemarks") = request("RecurringmeetingRemarks") rstSave.fields("ReservationMeetingEx") = request("RecurringMeetingEx") rstSave.fields("ReservationCaseNum") = request("RecurringCaseNum") rstSave.fields("ReservationEmail") = request("RecurringEmail") rstSave.fields("Reservation_roomid") = request("Recurring_roomid") rstSave.fields("ReservationAmount") = request("RecurringAmount") rstSave.fields("ReservationText") = request("RecurringText") rstSave.fields("ReservationRecurringId") = RecurringId rstSave.Update rstSave.close msg = "The reservation is made.<br>"
L'utilisation de ce code pour effectuer des modifications dans la base de donnes laisse penser que le dveloppeur peu ou pas du tout de connaissance en SQL. Ce qui pourrait expliquer le MCD de la base, des requtes toujours du mme niveau de complexit et pas toujours juste. Il n'est plus possible par exemple de supprimer une rservation rcurrente, soit par ce que l'interface ne le permet pas, soit par ce que la requte prend en compte toutes les rservations rcurrente mme pass au lieu des futurs ou en cours D'autre part, des requtes sont dupliques ou triples dans certaines pages du code source. Cela traduit un manque de fonction ddi ou le manque de programmation orient objet et une grande pratique du "copier-coller". Il n'y a aucune requte pour grer les salles de runion. Cellesci ont donc t cre manuellement directement sur la base de donnes. De la mme manire pour la suppression avec l'inconvnient dj analys que l'intgrit des tables n'est pas respect puisque l'on retrouve dans la table rservation des occurrences li des salles de runion qui n'existe plus.
Enfin, la charge de travail provoque par ces requtes n'a pas t mise en vidence, le serveur ayant des ressources suffisantes pour effectuer ce travail dans un temps tout fait acceptable. Mais, mme si la charge du serveur n'a pas t mise en vidence, la conception des requtes nous permet une optimisation facile afin d'obtenir de substantiel gain de performance et un meilleur fonctionnement de certains modules dvelopps. 3.3.4 Plan de maintenance Nous l'avons vu plus haut, dans la section 3.3 Base de donnes que le plan de maintenance ne concerne que le backup par un agent ddier cet effet sur les fichiers de la base et du code source. MS Access ne permettant, en automatique, rien d'autre. Il n'y a, ni ne semble avoir eu, d'optimisation ni de dfragmentation des tables.
et on est automatiquement renvoy aprs notre requte SQL vers la home page. Seulement pour effectuer ce renvoi, il utilise les services d'un formulaire dont tous les champs sont cachs. De la mme manire, le programmeur utilise la fonction "javascript.history.go(-1) lorsque l'on click sur un bouton "Back" dans le formulaire de saisie d'une rservation rcurrente ("rec_form.asp") afin de revenir en arrire. Comment fonctionne ce formulaire ? En faite, il est compos de plusieurs sous-formulaire comme prsent dans les Figure 6 - Formulaire de rservation rcurrente - 1, Figure 7 - Formulaire de rservation rcurrente - 2 et Figure 8 Formulaire de rservation rcurrente - 3. Si on va jusqu'au bout du formulaire puis que l'on revient en arrire nous obtenons des effets de bord intressant puisque cliquer deux fois sur le bouton "Back" avec cette fonction reviens revenir au formulaire que l'on vient de quitter. Il n'y a pas non plus de fichier de paramtrage permettant par exemple le paramtrage de l'accs la base de donnes, ni la mise en variable de paramtrage de tout ce qui peut tre modifi lors d'une migration. Il n'a nullement t pris en compte une gestion des donnes susceptibles d'tre un jour modifi. On ne peut facilement ajouter un service sans devoir rcrire certaine page de l'application. Les variables utilises le sont gnralement en Nerlandais, ne facilitant nullement la lecture et la comprhension, tout comme les trs rares commentaires Certaines contraintes de fonctionnement list dans les rgles de construction psent lourdement sur le code. C'est le cas de la gestion des minutes qui si elle n'avait pas t traduite aurait permis un gain vident tant dans le code que dans la comprhension gnrale. Enfin, nulle volont de segment les langages de l'application afin par exemple de crer des routines d'criture HTML partir de routine ou fonction en ASP. Cela aurait gagn en lisibilit et simplicit. Il n'y a pas non plus de vritable fichier d'inclusion avec une arborescence d'inclusion pour l'accs la base, charger les fonctions ncessaire au fonctionnement ou les fonctions ncessaire l'criture HTML des pages. Cela conduit un allongement excessif de certaines pages. La page "Home.asp" faisant prs de trente et une pages papier. Ce qui alourdit la comprhension gnral. Il n'y a pas de vraie mthodologie de dveloppement et hormis l'enchanement des pages web, rien ne semble vraiment structur. Aucune notion de programmation objet, mme symbolique, ni de structuration dans l'utilisation des langages utiliss.
Malgr la ncessit d'un login, on ne peut pas dire que la scurit soit optimale. Ce qui est corrobor par le faite que l'accs au fichier MDB ne soit pas protg et que les requtes soient effectues via le compte "SA" administrateur sans mot de passe. La base n'est pas scurise, mais pour autant, cette application ne semble ne rien avoir de critique. Si ce n'est que la venue d'un client et donc la rservation d'une salle et considr comme trs importante voir prioritaire sur d'autre runion. Ce point intressant me rappelle les raisons donne pour l'amlioration de l'application, celle de pouvoir traquer ce qui se passe, qui cre ou supprime une rservation. C'est surement l la raison de cette demande.
3.10
3.11
Analyse de la reconstruction
La reconstruction que nous venons d'effectuer nous a permis de reconstruire le puzzle de notre application au travers des fichiers ASP de l'application, du SGDB et de la base. Il n'est pas toujours simple de comprendre aprs coup et sans autres informations les motivations des dcisions qui ont conduit ce rsultat. Pourquoi une base Access ? Est-ce par mconnaissance du moteur MS SQL ? Estce par ce que le dveloppeur n'avait pas de licence MS SQL ? Est-ce pour des raisons de maintenance de la base Par contre, et on vient de le voir, notre esprit critique nous permet d'envisager l'architecture complte de l'application sous un jour diffrent. Les manquements important dans la conception, la ralisation et mme dans la livraison (puisqu'il manque au moins un module d'administration) nous dmontre que non seulement le MOA ne connaissait rien au dveloppement web, qu'il n'entendait rien non plus la gestion d'un projet de cette nature et qu'il n'tait encore moins l'utilisateur final car sans quoi, il se serait rendu compte de quelque chose Tout compte fait, ce n'est peut-tre pas un MOA
4 Qualit de l'application
Il est intressant dans un projet de reconstruction de confront le rsultat obtenu des critres de qualit. Cela mme que nous nous serions appliqu lors de la conception comme but obtenir. A la diffrence que l, ce n'est plus l'objectif que l'on se fixe mais le rsultat obtenu que l'on value. Pour la notation, j'utiliserai le modle suivant. 1 correspond la meilleure note possible et 5 la plus mauvaise. Il s'agit de note subjective bas sur le ressenti plutt que qualitative par rapport un modle mathmatique par exemple car l'application est petite et le modle conceptuelle est simple. Il n'est donc pas ncessaire de se report une modlisation plus complexe de la qualit que celle du ressenti. Je noterai dans un premier temps la qualit des donnes puis celle du Systme d'Information travers sa base, le code source et la structure fichier de l'application. Les critres de qualit des donnes sont prsents ici: Fiabilit confiance accorde aux donnes Fracheur comparaison date saisie et date du jour Compltude taux de valeurs non manquantes Exactitude taux de valeurs correctes Validit par rapport un format, type, etc Crdibilit vraisemblance Actualit taux de valeurs non obsoltes Disponibilit facilit d'accs Cohrence par rapport un ensemble de contraintes Fiabilit Fracheur Compltude Exactitude Validit Crdibilit Actualit Disponibilit Cohrence
Table 6 - Qualit des donnes
2 3 4 2 4 4 3 3 4
Puis, c'est sur l'application que je porterai mon jugement en notant la qualit de la base de donnes puis le code source de l'application. Pour cela, j'utiliserai les critres rserv un Systme d'Information, la base pouvant tre considr comme un sous systme d'information.
Les dimensions de la qualit d'un SI sont les suivantes: Facteurs de fonctionnement o l'exactitude, la fiabilit, l'efficience, l'intgrit l'utilisabilit Facteurs d'volution o la maintenabilit, la flexibilit et la testabilit Facteurs d'adaptation o la portabilit, la rutilisabilit et l'interoprabilit Deutsch & Willis o la scurit, la manageabilit, et la survivabilit
et
Les facteurs de fonctionnement de la base de donnes. l'exactitude 3 la fiabilit 5 l'efficience 4 l'intgrit 5 l'utilisabilit 4
Table 7 - Les facteurs de fonctionnement de la base de donnes
Les facteurs de Deutsch & Willis appliqu la base de donnes. la scurit 5 la manageabilit 4 la survivabilit 5
Table 10 - Les facteurs de Deutsch & Willis appliqu la base de donnes
J'ai souhait aussi noter les lments suivant de la base de donnes Pertinence des requtes 3 simplicit du schma 2 exactitude des types de donnes 4 compltude des besoins utilisateurs 3 documentation de la base 5 maintenabilit de la base 4
Table 11 - Qualit de la base
Ces dimensions viennent bien corrler l'apprciations faite jusqu'ici. Puis je note la qualit du code source en appliquant les mmes critres, ceux du Systme d'Information. On supposera comme pour la base de donnes que le code source reprsente un sous systme d'information du SI applicatif. Les facteurs de Deutsch & Willis appliqu la base de donnes. l'exactitude 4 la fiabilit 5 l'efficience 4 l'intgrit 5 l'utilisabilit 4
Table 12 - Les facteurs de Deutsch & Willis appliqu la base de donnes
4 4 4
5 5 5
Les facteurs de Deutsch & Willis appliqu au code source. la scurit 5 la manageabilit 4 la survivabilit 5
Table 15 - Qualit du code source
Pour la structure de l'application, il est plus complexe de noter la qualit de celle-ci car je ne peux pas certifier que cette application n'ai pas t modifie par une tierce personne depuis sa livraison. Je me bornerai qualifier les lments suivant. utilisation des concepts de gestion graphique standardise conformit une arborescence connexe conformit une arborescence circulaire
Table 16 - Qualit de la structure fichier
4 2 5
Enfin, j'effectuerai une qualification globale de l'application telle qu'on peut la ressentir la lecture des lments prcdents. La base Le source La structure avis utilisateur
Table 17 - Qualit de l'application
4 4 4 1
J'ai choisi de prendre en compte l'avis utilisateur qui va l'encontre de mon ressenti de la qualit de l'application car c'est surtout eux qui utilise au quotidien ce site web. L'ensemble des notes portes sont corrles avec les lments dcrit lors de la reconstruction de l'application au chapitre 3 page 15.
5.3.2
C'est maintenant, fort de nos interrogations et propositions faite plus haut que nous allons modifier notre MCD pour le rendre conforme au rel que nous souhaitons avoir en y ajoutant les modifications ncessaires et demandes. C'est le MCD suivant.
La premire remarque que l'on peut faire est que tous les noms d'attributs on chang afin de reflter le caractre international de l'entreprise. Cela doit permettre un dveloppeur d'une culture international (mme Nerlandais) de pouvoir effectuer de nouvelles modifications si cela devenait ncessaire. J'ai suivit mon raisonnement sur les attributs en doublon et ils ont disparu de la table "Recurring".
la charte graphique travers le CSS. On crera aussi des fichiers d'inclusions ddi aux diffrents langages utilis dans le code. La seconde opration sera de dbugger et de redvelopper les pages pour que les retours sur la page "Home" se fasse correctement et que le dveloppement soit conforme aux bonnes pratiques de la programmation WEB. Mais aussi de mettre en uvre plus de contrle des champs par l'utilisation du "JavaScript". Enfin, la troisime grande opration sera la mise en uvre des fonctionnalits demandes ou manquantes (comme les pages d'administrations). Quoi que pas tout fais adapter ce contexte de dveloppement, je conseille quand mme d'effectuer une programmation de type objet afin de mieux organiser la rutilisation des lments, d'avoir un code mieux structurer, plus claire et aussi plus facile par la suite modifier. Cela ncessite de revoir plus amont les besoins des utilisateurs afin de dcrire cela dans divers diagrammes UML.
6.4 Interfaces
Il arrive trop souvent dans un application web de devoir jongler entre clavier et souris. Une bonne interface doit pouvoir tre traiter au clavier seul, le faite de devoir utiliser la souris pour ce positionner sur le champ remplir n'est pas une bonne pratique. D'autre part, une interface ne dois comporter d'information que pour ce qu'elle est cens faire. Il n'est donc pas normal de voir un formulaire "crer une runion rcurente" comporter un bouton supprimer une rservation rcurrente.
On pourrait aussi citer l'utilisation du langage ASP pour l'criture du code HTML afin de clarifier et simplifier le code source par appel de fonction. Pour exemple, une fonction "Debut_Formulaire()" pour gnrer en HTML le code ncessaire l'criture du dbut du code d'un formulaire. Plus lisible, on pourrait moins facilement oublier de ferm celui-ci. D'autre part, l'utilisation du JavaScript cot client pour effectuer les vrification d'usage plutt que de les faire cot serveur ferait gagner l'application en performance, la bonne sparation entre ce qui doit tre fais cot client du cot serveur est importante et merite d'tre respect.
7 Conclusion
Le dclencheur d'une demande de reconstruction d'une application WEB est souvent une demande d'ajout de fonctionnalit. Malgr la simplicit de l'application, par sa base de donne ou le nombre de ligne du code source, cette reconstruction aurait presque pu tre scinde en deux projets distincts. Le premier pour reconstruire l'application et le second pour y effectuer les ajouts ncessaire tant l'application ncessite de modification ou de changement. Nous avons pass en revue l'ensemble des lments (infrastructure, base de donnes, schma de la base, structure fichier, code source, design graphique de l'application,) a travers diffrent filtre, tantt pour contrler la qualit des lments, tantt technique pour valider les choix effectuer, tantt smantique pour valuer la manire dont cela avait t cris, tantt conceptuel pour valider la conformit du model l'exactitude du rel ou la compltude. L'intrt de ce travail t de prsenter ou proposer des manires de faire suivant l'lment mis en lumire pour effectuer cette reconstruction. Au del de la manire d'effectuer cette reconstruction c'est en faite le fait que la reconstruction est constitu de plusieurs sous module pourtant chacun leur propre nom et fonction comme le "Design Recovery", la "Redocumentation", le "Restructuting" ou encore le 'Refactoring". Dans l'tat actuel de notre application, difficile de passer coter de tous ces modules de la reconstruction. Mais la reconstruction un cot non ngligeable qui ne faut oublier. Cette lment financier est primordial car il doit permettre de choisir s'il faut effectuer cette reconstruction ou s'il vaut mieux repartir dans une approche plus classique du "Forward Engineering". Ce choix peut-tre guid par diffrents facteurs dont la qualit d'une application ou celle de la base, faut-il encore se pencher dessus pour s'en faire une ide. Facteur qualit qu'il faudra associer au temps pass dcortiquer l'application.
8 Annexe
Les annexes suivantes sont soit des fichiers complets ou des morceaux choisi afin d'illustrer la ralit du code source.
<tr> <td background=img/nav.gif align=left> <table width=97% border=0 cellpadding=0 cellspacing=0> <tr> <td class=v10 > <b>Today:</b> <%=FormatDateTime(now(),vblongdate)%></td> <td class=v12 align=right> <b><font color=ffffff>BCG Reservation System</font></b><br></td></tr> </table></td> <td background=img/nav.gif> <img src=img/nix.gif width=10 height=23></td></tr> </table> </div> <div id=tijdschaal Style="width=720;visibility:visible;left:14;top:130;position:absolute;"> <form action="loginCheck.asp" method="post"> <table width=300 cellpadding=3 border=0 cellspacing=0 background=img/nav.gif> <tr> <td class=v12 colspan=2 bgcolor="E1692E"> <font color="ffffff">Please login with your user name and password</font></td></tr> <tr> <td class=v12>User name</td> <td class=v11> <input type="text" name="AdministratorUser" class="v11" style="Width:100"></td></tr> <tr> <td class=v12>Password</td> <td class=v11><input type="password" name="AdministratorPassword" class="v11" style="Width:100"></td></tr> <tr> <td class=v12> </td> <td class=v12><input type="submit" name="Submit" value="Log In" class="v11" style="Width:100" size="4" ></td></tr> </table> </form> </div> </body> </html>
do while not rst.eof reservationName=rst.fields("Reservationname") reservationStartTime=rst.fields("reservationstarttime") reservationEndTime=rst.fields("reservationendtime") reservationtext=rst.fields("Reservationtext") reservationamount=rst.fields("Reservationamount") reservationCoffee=rst.fields("ReservationCoffee") reservationFris=rst.fields("ReservationFris") reservationBreakfast=rst.fields("ReservationBreakfast") reservationLunch=rst.fields("ReservationLunch") reservation_roomid=rst.fields("Reservation_roomid") roomnaam=rst.fields("roomNaam") tmp=int(reservationStartTime) Select case (reservationStartTime-tmp) Case 0 tmp=tmp & ":00" Case .25 tmp=tmp & ":15" Case .5 tmp=tmp & ":30" Case .75 tmp=tmp & ":45" Case Else tmp=tmp & ":00" End Select starttijd=tmp tmp=int(reservationEndTime) Select case (reservationEndTime-tmp) Case 0 tmp=tmp & ":00" Case .25 tmp=tmp & ":15" Case .5 tmp=tmp & ":30" Case .75 tmp=tmp & ":45" Case Else tmp=tmp & ":00" End Select eindtijd=tmp
%> <tr> <td class=v10 valign=top align="center"><%=starttijd%> - <%=eindtijd%> </td> <td class=v10 valign=top align="center"><%=RoomNaam%> </td> <td class=v10 valign=top align="center"><%=reservationamount %> </td> <td class=v10 valign=top align="center"> <% if ReservationCoffee="yes" then%><img src="img/check.gif" width="15" height="15"><%end if%> </td> <td class=v10 valign=top align="center"> <% if ReservationFris="yes" then%><img src="img/check.gif" width="15" height="15"><%end if%> </td> <td class=v10 valign=top align="center"> <% if ReservationBreakfast="yes" then%><img src="img/check.gif" width="15" height="15"><%end if%> </td> <td class=v10 valign=top align="center"> <% if ReservationLunch="yes" then%><img src="img/check.gif" width="15" height="15"><%end if%> </td> <td class=v10 valign=top ><%response.write replace(reservationtext,vbcrlf,"<BR>")%> </td> </tr> <% rst.movenext loop rst.close set rst=nothing %> </body> </html>
end if end if rst.close set rst=nothing else msg = msg & "Number of people has not been filled in.<br>" end if if not err.Number=0 then msg=msg & "A mistake has ocurred. Please check the form.<br>" end if on error goto 0 '' check if start time en/of end time tussen de afspraken vallen set Check2=CreateObject("Adodb.Recordset") sql2="Select * from Reservations where reservation_roomid=" & request("reservation_roomId") & _ " AND ReservationDate=dateserial(" & jaar & "," & maand & "," & dag & ")" & _ " AND ReservationId <>" & resid & _ " AND ( ((ReservationStartTime*100 between " & Request("ReservationStartTime")*100 & " AND " & Request("ReservationEndTime")*100 & _ " and ReservationStartTime*100 <> " & Request("ReservationEndTime")*100 & _ ") OR (ReservationEndTime*100 between " & Request("ReservationStartTime")*100 & " AND " & Request("ReservationENdTime")*100 & _ " And ReservationEndTime*100 <> " & Request("ReservationStartTime")*100 & _ " )) " & _ " OR (( " & Request("ReservationStartTime")*100 & " between ReservationStartTime*100 and ReservationEndTime*100 " & _ " and " & Request("ReservationStartTime")*100 & " <> ReservationEndTime*100" & _ " ) OR (" & Request("ReservationEndTime")*100 & " between ReservationStartTime*100 and ReservationEndTime*100 " & _ " and " & Request("ReservationEndTime")*100 & " <> ReservationStartTime*100 " & _ " )) )" Check2.open sql2,Session("LinkToDatabase"),0,1 if not Check2.eof then msg=msg & "A reservation on this time and date has already been made.<br> Please remove this before making this reservation." end if Check2.close set Check2=nothing
9 Biblio
Web http://www.w3c.org http://fr.selfhtml.org/index.htm
Livresque Design Web: utiliser les standard CSS et XHTML de Jeffrey Zeldman EYROLLES ISBN: 2-212-11548-2