Conception et Mise en Œuvre d`un Outil Interactif d`Aide à la
Transcription
Conception et Mise en Œuvre d`un Outil Interactif d`Aide à la
Université de la Manouba École Supérieure de Commerce de Tunis MEMOIRE DE FIN D’ÉTUDES Présenté en vue de l’obtention de : La Maîtrise en Informatique Appliquée à la Gestion des Entreprises Sujet : Conception et Mise en Œuvre d’un Outil Interactif d’Aide à la Maintenance des Applications Web : WebAnalyser Élaboré par : Mr Yazid Erman Encadré par : Mme Sélima Besbes Essanaa (ESC) Année Universitaire : 2006 - 2007 1 Remerciements Je tiens à remercier ALLAH qui m’a accordé ses bienfaits et ses générosités, je remercie sa majesté pour les personnes par les quelles j’étais soutenu tout au long de ma vie : J’adresse mes remerciements les plus distingués à mon encadreur Mme Sélima Besbes Essanaa qui m’a proposé ce sujet. En plus de ses précieux conseils, elle a supporté avec patience tout le labeur durant la correction de mon rapport. J’adresse, en signe de reconnaissance, mes plus vifs remerciements pour l’extrême sympathie à Mme Chiraz Latiri, qui ne m’a enseigné seulement comment programmer, mais aussi comment être au service des autres, je n’oublierai jamais ses efforts pour m’avoir aidé à m’adapter à la formation en français dés le début. Mes remerciements s’adressent aussi à tous les enseignants de l’ESC qui ont contribué à ma formation. Yazid Erman 2 Dédicace Je dédie ce travail à … Samih Haifa, Fatmeh, Laiali, Boudour, Sedra, Yazan, Mohammed, Yassine, Fadi, Ghassan, hamdan, Ahmed.Q, Med.J, adey,Wael,ayoub, Shadi, Anas, ahmed.H, Med.A, Ayed, Nabil.S, Med.M, Nabil.R, Abdallah, Malak, Tasneem, Ines . J’espère qu’ils trouveront dans ce travail l’expression de ma gratitude, de mon amour, de ma reconnaissance et de mon profond attachement. Yazid Erman 3 4 Table des matières Introduction...................................................................................................................... 7 i. Description du Contexte.................................................................................................... 10 ii. Description de la problématique ..................................................................................... 13 iii. Présentation de la contribution ...................................................................................... 13 Chapitre 1. Catégorisation des applications Web ......................................................... 15 1.1. Introduction.................................................................................................................... 15 1.2. Application Web … ou Site Web ?............................................................................... 16 1.3. L’architecture d’une applications Web ....................................................................... 19 1.4. Les Catégories d’applications basées sur le Web........................................................ 20 1.5. Les composants Web ..................................................................................................... 22 1.5.1. Pages Serveur / Pages Client .................................................................................................. 24 1.5.2. Pages Statiques / Pages Actives / Pages dynamiques ............................................................. 24 1.6. HTML ............................................................................................................................. 25 Chapitre 2. État de l’Art................................................................................................. 27 2.1. Le Modèle proposé par Ricca et Tonella : [Ric 00a ].................................................. 27 2.2. Le Modèle proposé par Conallen [Con 00].................................................................. 28 3.3. Le Modèle proposé par Tramontana : [Tra 05].......................................................... 30 Chapitre 3. Proposition.................................................................................................. 32 3.1. Étude des composants Web........................................................................................... 32 3.1.1. Les pages Statiques : .............................................................................................................. 32 3.1.1.1-les relations d’inclusion :................................................................................................. 35 3.1.1.2-les relations d’utilisation : ............................................................................................... 36 3.1.2. Les Pages Actives (Client-Side) :........................................................................................... 37 3.1.3 Les pages dynamiques (Server Side) :..................................................................................... 39 3.2. Le Modèle Proposé ........................................................................................................ 40 3.3. Le logiciel........................................................................................................................ 46 3.3.1. Description générale............................................................................................................... 46 3.3.2. Les alternatives … et choix .................................................................................................... 47 3.3.2.1. Le langage de programmation utilisé.............................................................................. 48 3.3.2.2. Le parseur ....................................................................................................................... 48 3.3.2.3. Stockage et sauvegarde de la base de données ............................................................... 52 3.3.2.4. Persistance des données.................................................................................................. 53 3.3.2.5. Cycle de vie .................................................................................................................... 57 3.3.3. Le Dossier de Conception de WebAnalyser ........................................................................... 58 3.3.3.1 Etude de faisabilité .......................................................................................................... 59 3.3.3.2. Identification des besoins et spécification des fonctionnalités : ..................................... 60 3.3.3.3. Phases d’analyse ............................................................................................................. 67 3.3.3.4. Phase de conception : ..................................................................................................... 70 3.3.3.5. Phase d’implémentation.................................................................................................. 76 Conclusion...................................................................................................................... 79 Bibliographie.................................................................................................................. 82 Table des figures 5 Figure 1. Classification des applications Web d’après [Mec 99] et [Con 00] ________ 18 Figure 2. La structure générale d’une application Web_________________________ 23 Figure 3. Le Modèle proposé par Ricca et Tonella : [Ric 00a] ___________________ 27 Figure 4. Le Modèle proposé par Conallen [Con 00] __________________________ 28 Figure 5. le Modèle proposé par Tramontana [Tra 05 ]_________________________ 30 Figure 6. La structure d'une page HTML ___________________________________ 35 Figure 7. La relation d'inclusion __________________________________________ 36 Figure 8. La relation d'utilisation__________________________________________ 37 Figure 9. Le Modele Global Retenu _______________________________________ 45 Figure 10. L'architecture du logiciel "Web Analyser" _________________________ 46 Figure 11. La classe Lexer_______________________________________________ 49 Figure 12. La classe Parser ______________________________________________ 50 Figure 13. La classe HTMLEditorKit ______________________________________ 50 Figure 14. L'architecture de Hibernate _____________________________________ 55 Figure 15. L'architecture interne de l’EJBs __________________________________ 56 Figure 16.Le code d'une page HTML ______________________________________ 59 Figure 17. Le Modèle des cas d'utilisation __________________________________ 62 Figure 18. Un Modèle Générique de Séquences ______________________________ 64 Figure 19. La fenêtre principale du WebAnalyser_____________________________ 65 Figure 20. La fenêtre de personnalisation des balises à extraire par WebAnalyser ___ 66 Figure 21. Le Modèle du Domaine ________________________________________ 67 Figure 22. Diagramme de Classes Entités ___________________________________ 68 Figure 23. Diagramme d’Activités de Navigation_____________________________ 70 Figure 24. Diagramme de Séquences : choisir entre les projets créés précédemment _ 72 Figure 25. Diagramme de Séquences : spécifier le site et lancer le « parsing » ______ 73 Figure 26. Diagramme de sequences: fixer les options spécifiques à chaque projet___ 74 Figure 27. Diagramme de classes de conception ______________________________ 75 Figure 28. Diagramme de classes de conception détaillé _______________________ 75 6 Table des Tableaux table 1 : Les composants Web..................................................................................................... 23 table 2: Les composants principaux du HTML ........................................................................... 32 table 3: Les composants actifs des pages Web............................................................................ 38 table 4: Les composants Web dynamiques.................................................................................. 39 table 5 : Comparaison MySq l 5.0 X Postgre 8.1...................................................................... 52 table 6 :Comparaison JDBC X Hibernate X EJBs...................................................................... 54 7 Introduction La survie de toute entreprise est étroitement liée à son existence sur le Web. Ceci est particulièrement vrai pour les multinationales. Ces entreprises ont dépassé les frontières de leurs pays d’origine non pas grâce à des « buildings géants », mais plutôt grâce à une présence virtuelle allant au devant du client, à chaque demeure et à chaque bureau, et ce à travers l’efficacité et la rentabilité de la technologie Web. La dernière décennie a assisté à une explosion du nombre d’applications basées sur le Web. Malheureusement, la technologie Web évolue à un tel rythme qu’une application Web est très vite obsolète. Or, l’état de l’art révèle une panoplie aussi riche que diverse de travaux ciblés sur la conception et le développement d’applications Web. En revanche, il existe un réel besoin en outils et techniques qui assistent le développeur lors de la maintenance et l’évolution de ces dernières. En effet, malgré les tentatives, les outils disponibles ne répondent que partiellement aux attentes des développeurs. Plusieurs facteurs sont à l’origine de ce constat. Le plus important étant, la complexité et l’effort nécessaires à la compréhension d'un système avant toute intervention en vue de le corriger ou de le faire évoluer par de nouveaux besoins. On propose dans le cadre de ce mémoire un outil, appelé WebAnalyser dont le principal objectif est d’exhiber l’architecture interne d’une application Web en 8 dévoilant d’une part ses différentes composantes et d’autre part, les liens qui existent entre elles, afin d’en faciliter la compréhension. Cet outil s’inscrit dans le cadre d’un projet de rétro-conception d’applications Web appelé RetroWeb. RetroWeb est une démarche qui a été proposée par Madame Sélima Besbes Essanaa, au sein de l’équipe ISID (Ingénierie des Systèmes d’Information Décisionnels) du laboratoire CEDRIC (Centre d’études et de Recherche en Informatique du Cnam) du CNAM (Conservatoire National des Arts et Métiers) à Paris, et ce dans le cadre de sa thèse de doctorat, qui sera publiée dans les mois à venir. RetroWeb est une solution pour la rétro-conception de sites Web peu (ou pas) documentés. Elle permet de déduire, à partir du code HTML d'un site Web, une description conceptuelle de son contenu informatif qui serait utile pour la restructuration du site, pour son évolution ou pour son intégration à un autre site Web. Or, avant tout processus de rétro-conception, le passage par une phase de compréhension de l’application existante est indispensable. WebAnalyser intervient en amont de RetroWeb pour assister le rétro-concepteur (ou plus généralement le développeur) dans la compréhension de l’architecture interne d’une application Web. Pour mener à bien ce travail, nous avons commencé par une étude approfondie des composantes qui peuvent intervenir dans la construction d’une application Web. A notre surprise, cette tâche s’est révélée tout de suite très fastidieuse, à cause notamment de la richesse et la grande variété de composantes qui peuvent être impliquées dans le développement d’une application Web ; dés lors que celle-ci dépasse les simples pages statiques. Notre étude de l’existant nous a par ailleurs, révélé l’existence de plusieurs travaux qui ont abordé cette problématique à un niveau conceptuel. Nous les avons étudiés, comparés pour enfin synthétiser le résultat de nos investigations dans un modèle qui donne la description d’une application Web générique. Chaque application Web à traiter devient par conséquent, une instance de ce modèle. Le système WebAnalyser est basé sur ce modèle. Dés le départ, nous étions conscients que les contraintes de délais ne nous permettraient pas de produire un système qui prendrait en charge absolument toutes les catégories de composantes. Nous étions donc obligés de choisir entre deux alternatives : soit survoler superficiellement toutes les composantes ; soit au contraire choisir les composantes les plus répandues et les plus usuelles dans le développement des applications Web et les approfondir 9 convenablement. Nous avons naturellement opté pour la seconde alternative et dés le départ, nous avons conçu un système facile à faire évoluer pour qu’il prenne en charge n’importe quel nouveau composant. Les paragraphes qui suivent décrivent et détaillent le cadre général de ce travail ainsi que la problématique abordée. i. Description du Contexte Depuis sa première apparition le World Wide Web (WWW) a fondamentalement transformé notre vie. Cette révolution a façonné notre société et continuera à l’influencer durant les prochaines décennies. Chaque jour qui passe est une confirmation de la place que le Web est en train d’occuper, aux côtés des autres grandes inventions de ce siècle et qui ont été de véritables challenges pour les générations précédentes. L’interface simple et diffusée en masse du browser a ouvert la porte au développement de plusieurs nouvelles applications distribuées. En 1994, les pages Web étaient alors simples, statiques et reliées entre elles. Elles permettaient un accès facile à l’information, à la portée de tous, partout dans le monde. Plus tard, de nouvelles technologies telles que Java, ont vu le jour et ont été utilisées pour décorer les pages Web. Elles se sont alors ornées d’effets spéciaux : images flashantes, fenêtres dansantes, etc. Heureusement, le monde a bien compris l’énorme potentiel que peut offrir le Web, et des applications plus importantes, qui exploitent ces potentiels ont vu le jour. Les organisations se sont intéressées à ces technologies et ont compris les enjeux économiques d’une présence rapide sur le Web. Elles ont alors commencé à développer des applications Web qui livrent leurs service jusqu’à chez leurs clients dans le monde entier, abolissant ainsi les frontières et enregistrant de fameuses plus-values. L’ère ou le Web était considéré comme une simple plateforme permettant le partage et la diffusion de l’information est révolue pour céder la place à une ère de concrétisation, où le Web est un outil sophistiqué de commerce et de transactions. L’ingénierie du logiciel est au cœur même de cette révolution. Une application Web est une application interactive dans laquelle l’interface utilisateur est constituée par un ensemble de pages Web [Con 00]. Ce type 10 d’applications est une composante du Système d’Information (SI) d’une organisation. On parle alors de systèmes d’information basés sur le Web ou Systèmes d’Information Web (SIW) [Tak 97] [Isa 98a]. Tout comme un SI traditionnel, un SIW est un ensemble constitué de ressources humaines et de moyens techniques, de règles de fonctionnement, de données et de procédés pour acquérir, mémoriser, transformer, rechercher, communiquer et restituer ces données [Rol 88]. Dans ce cadre, le Web constitue un support pour la mise en oeuvre de ces systèmes. Il convient donc de noter qu’un SIW est d’abord un SI traditionnel et ensuite un système basé sur le Web [Den 98]. Dans une application Web, l’information n’est pas seulement de type texte, mais également de type image, son, vidéo ou multimédia. En plus, elle est présentée selon une approche hypermédia, qui reprend les principes de l’organisation non linéaires, accessible de façon explorative par de multiples chemins de navigation, au moyen de connexions explicites entre des éléments d’information. Cette organisation non linéaire est un élément déterminant de l’approche SIW. La plupart du temps, les techniques utilisées par les développeurs des applications Web sont similaires à ceux ad hoc utilisées par leurs prédécesseurs dans les années 60 et 70, ignorant les principes de conception disciplinés, acquis durant des années d’expérience. Une étude récente, réalisée par Lang et Fitzgerald [Lan 05] sur le développement de projets basés sur le Web, a révélé que dans 98 % des cas, les équipes de développement rencontrent des problèmes majeurs pour faire face aux conditions instables et changeantes de l’environnement Web et que dans 86% des cas ils ont du mal à s’adapter au « Web Time » et à la pression qui le caractérise. Les développeurs d’applications Web se défendent et se justifient en invoquant diverses raisons : - Le temps consacré au développement d’une application Web est extrêmement concis : alors que le développement des applications traditionnelles nécessite des mois, celui des applications Web nécessite des semaines voir même des jours. Ce phénomène, souvent appelé « Web Speed » ou vitesse du Web, rétrécit considérablement les délais. Souvent pris au dépourvu, les développeurs d’applications Web optent pour une approche ad hoc, plus simple en apparence, mais dont les retombés sont néfastes, dés lors que la taille de l’application devient 11 importante, et que les conséquences d’une modification du code de l’application, deviennent imprévisibles. - La rapidité de l’évolution de l’environnement d’une application Web : les applications Web deviennent obsolètes aussitôt livrées. Ce n’est qu’après avoir été exploitées pendant les dix ou quinze dernières années, que les applications traditionnelles peuvent être considérées comme dépassées. Une application Web, quant à elle, elle l’est seulement après six ou sept mois d’exploitation. - Les attentes des utilisateurs des applications Web : Le processus de développement qui conduit à l’application Web comporte des phases de test et de vérification très rigoureuses, ciblées principalement sur l’interface utilisateur. Car dans le contexte du Web, tout gravite autour de leur satisfaction. Pour une application de commerce électronique, par exemple, la tolérance aux erreurs, frôle le seuil zéro. - La rotation du personnel : La communauté Web a un taux élevé de rotation du personnel, la durée moyenne de recrutement étant de d’un peu plus d’un an [Kon 00]. Très souvent, les développeurs initiaux de l’application Web ne font plus partie de l’équipe informatique qui la maintient. Il est clair, que dans ces conditions d’exploitation, la maintenance et l’évolution d’une application Web sont des tâches très complexes, qui peuvent dégénérer rapidement. Pour maîtriser les conséquences d’une intervention sur le code, la compréhension de la structure de l’application et des interactions qui existent entre ses différents composants est une tâche inévitable. Or le coût et le temps consacrés à la compréhension augmentent dramatiquement avec la taille et la complexité de l’application. Certes, pour concevoir et développer des applications Web, les développeurs auront besoin d’outils et de méthodes qui couvrent tout le cycle de vie d’une application et qui offrent un support méthodologique à chacune de ses phases. Par ailleurs, comme le domaine du Web arrive à maturité ils auront également besoin de méthodes et d’outils qui les aident à analyser et comprendre la structure et l’architecture des applications existantes. 12 ii. Description de la problématique Comme nous venons de le voir, dans le contexte du Web, les évolutions sont plus rapides, les mises à jour sont plus fréquentes, les délais sont rétrécis, les technologies impliquées sont plus diversifiées et plus complexes et le taux de rotation du personnel est très élevé. Dans ces conditions, les fréquentes interventions à caractère urgent sur le code de l’application, de façon ad hoc entraînent inévitablement une détérioration de la structure de navigation de l’application, de son contenu informatif, ainsi qu’une dégradation de sa documentation. Ces constats sont confirmés par un récent sondage, réalisé par le cutter consortium [Cut 00], sur les projets de développement d’applications Web. Ce sondage a révélé que 84% des applications ne correspondent pas aux besoins du métier, que 52% d’entre elles sont de qualité médiocre et que 53% ne couvrent pas les fonctionnalités pour lesquelles elles ont été conçues. Dans de tels cas apparaît la difficulté de faire évoluer ces applications Durant les dernières décennies, la communauté informatique a pris conscience que le succès ou l’échec de tout processus d’évolution ou de modernisation, de leurs systèmes informatiques, est conditionné par la qualité de la compréhension qui en est faite. Une bonne compréhension du code minimiserait le risque d’erreurs et faciliterait considérablement des tâches comme la maintenance corrective, la maintenance évolutive, ou simplement la mise à jour de la documentation. iii. Présentation de la contribution « On fait œuvre scientifique en citant les travaux antérieurs … » Pour assister le développeur dans la compréhension d’applications Web existantes, nous avons conçu et développé un outil appelé « WebAnalyser ». Nous étions préoccupés par deux aspects : - Le premier est en rapport avec la façon dont le résultat sera rendu à l’utilisateur. Notre contrainte était que ce dernier se doit d’améliorer réellement la 13 compréhension de l’application et éviter ainsi de se retrouver dans une situation où le code est plus intelligible que la représentation que nous allons en faire. Or le processus de compréhension de n’importe quelle application est supporté par la description mentale qui en est faite. Notre outil déduit à partir d’une application Web une description sous forme d’une arborescence dans laquelle les feuilles sont les différentes composantes de l’application. L’architecture de l’application est ensuite enrichie en exhibant deux catégories de liens : des liens d’inclusion et des liens d’utilisation. - La seconde préoccupation concerne la robustesse de l’outil. Ce dernier doit être paramétrable, et surtout facile à faire évoluer en vue de tenir compte de nouveaux types de composantes. Pour cela, nous avons proposé un modèle qui donne la description d’une application Web générique sur lequel s’appuie WebAnalyser. Chaque application Web à traiter devient par conséquent, une instance de ce modèle. Grâce à cette approche une même application peut générer différentes descriptions. Nous avons structuré notre rapport comme suit : Le premier chapitre est dédié à la description des catégories d’applications Web existantes. Le second chapitre présente l’état de l’art sur notre problématique. Le chapitre 3 présente notre contribution. Il est divisé en deux sections. La première présente notre solution conceptuelle. Nous y décrivons notamment, les composants pris en charge par notre outil ainsi que le modèle qui les supporte. La seconde section est consacrée à la description de la réalisation de WebAnalyser. Dans cette dernière section nous décrivons notamment l’architecture de cet outil, les choix techniques pris en compte et enfin, le cycle de développement suivi. Enfin, nous concluons ce rapport en proposant des améliorations et des perspectives pour WebAnalyser. Nous espérons, à travers ce rapport, réussir à susciter votre intérêt pour ce travail. 14 Chapitre 1. Catégorisation des applications Web (Knowing the territory is mandatory.) 1.1. Introduction La dernière décennie a vu apparaître, une vague de nouvelles technologies pour publier et répandre des données sur le Web. Cette situation a entraîné de nouvelles catégories d’applications. Beaucoup d’entre elles, ont été initialement crées à l’image d’une plate-forme de partage de documents, pour répondre au besoin relativement modeste de dissémination passive des informations. Son évolution en vue de répondre à des besoins plus agressifs, tel que le commerce électronique ou la collaboration en ligne, impliquent le recours à des techniques plus complexes et à des architectures plus sophistiquées. La nature hétérogène des composants d’une application Web et sa complexité entraînent l’intervention de diverses personnes pour sa construction. L’hétérogénéité des intervenants se constate à plusieurs niveaux relatifs par exemple à leur formation, à leurs connaissances, à leurs expériences et à leurs compétences. Cette hétérogénéité tant matérielle que humaine a entraîné l’apparition d’une panoplie de termes, tous liés les uns aux autres, provoquant une certaine confusion que nous avons voulu dissiper. Ce chapitre débute par une présentation des concepts directement liés à notre travail. Nous avons d’abord, donné une description de l’architecture d’une application Web et de ses différentes catégories. Ensuite, avons passé en vue les différents termes qui se rapportant aux applications Web, en essayant d’exhiber les concepts qui s’en dégagent : Site Web/Application Web, Page Serveur/Page Client et enfin Page Statique/Page Interactive/Page Dynamique. Mais au fait, …application Web ou Site Web ? 15 1.2. Application Web … ou Site Web ? Une application Web est un programme dont les fonctionnalités sont délivrées à travers le Web. Conallen [Con 00] explique que «les applications Web résultent de l’utilisation de sites et de systèmes Web». Un système Web fait référence à l’infrastructure permettant un échange d’informations entre ordinateurs. Ses éléments essentiels1 sont donc : - le réseau, qui relie physiquement les ordinateurs ; - un poste client doté d’un navigateur. Le navigateur appelé aussi browser, est un logiciel qui permet l’affichage, localement, de documents hébergés sur d’autres ordinateurs du réseau. Il est l’interface utilisateur de l’application. Le HTTP (Hyper Text Transfer Protocol) est utilisé pour communiquer entre l’interface utilisateur et le reste de l’application ; - un poste hôte sur lequel un service (ou démon), appelé serveur Web, permet de localiser et de retourner les informations demandées par le client au moyen de requêtes. Une application Web peut être construite à partir de composants de différentes natures qui interagissent entre eux pour satisfaire l’utilisateur : une Base de Données, des objets distribués ainsi que des pages Web. Les informations sont organisées dans les pages Web. Celles-ci sont ensuite reliées par des liens, constituant ainsi un hypertexte. Une application Web apporte une dimension supplémentaire à cette infrastructure à travers la mise en oeuvre d’un serveur d’application. Ce dernier rend possible le traitement des actions de l’utilisateur qui vont au-delà de simples requêtes de navigation. Ainsi, pour Baresi [Bar 00], les sites Web présentent deux dimensions essentielles, celle des informations et celle de la navigation, alors que les applications Web, en revanche, en intègrent une troisième : celle des opérations. Cette position est partagée par Conallen [Con 00], pour qui, une application Web se différencie d’un site Web, en cela que l’application offre à l’utilisateur des mécanismes, lui permettant de réaliser des tâches plus complexes. Par ailleurs, le résultat de ces actions se traduit par 1 Bien que non décrites ici, certaines technologies sous-jacentes aux éléments présentés sont indispensables au fonctionnement d’une telle infrastructure. On citera par exemple les protocoles TCP/IP (Transmission Control Protocol / Internet Protocol), HTTP (HyperText Transfert Protocol), les langages de publication de pages Web HTML (HyperText Markup Language), XML (eXtended Markup Language), etc. 16 une modification de l’état applicatif sur le serveur : des données sont ajoutées, modifiées, supprimées, des actions deviennent disponibles ou ne le sont plus, etc. Au regard de cette définition, il apparaît clairement que de nombreuses applications peuvent être qualifiées de basées sur le Web. Ainsi, dès lors qu’une interface permet de saisir des informations (par exemple pour s’enregistrer en tant qu’utilisateur), le serveur d’application voit son état changer puisque les données fournies sont stockées et puis prises en compte dans la logique applicative. Des applications Web proposent toutefois des actions bien plus avancées : c’est notamment le cas de celles qui mettent en oeuvre les fonctionnalités métier spécifiques d’une organisation. Dans [Mec 99], la distinction proposée peut être rapprochée de celle de Conallen, bien qu’elle soit subtilement différente par rapport à ce que les auteurs appellent sites Web. Leur proposition est basée sur une analyse de la complexité des sites en regard de deux critères : l’un est relatif aux données gérées, et l’autre relève de ce que les auteurs nomment l’application et qui correspond aux services offerts par l’application. Le croisement des ces deux critères – complexité des données et complexité des services – permet à [Mec 99] de distinguer quatre catégories : - Les sites "de présence" sur le Web : Ils sont caractérisés par un faible degré de complexité tant en terme de données qu’en terme de services. Leur objectif concerne principalement la mise en ligne d'informations, à des fins publicitaires par exemple, ou résultant d'une volonté de diffuser des informations diverses (activités d'une association, présentations de manifestations, informations personnelles, etc.). Généralement constitués d'un petit nombre de pages, ces sites sont principalement construits à l'aide d'éditeurs HTML. - Les sites "catalogues" ou à forte intensité de données (data-intensive Web sites) : Ils sont caractérisés par le fait qu'ils publient une masse importante de données, selon une structure hypertexte complexe. Ils n'offrent en revanche pas ou très peu de services. Nous assimilons ces deux catégories à la notion de sites Web telle qu’elle est envisagée par Conallen. Les deux suivantes peuvent être comparées à la notion d’applications Web : 17 - Les sites orientés services : Ils ont la vocation de fournir des services spécifiques tels que ceux offerts par les moteurs de recherche1 ou les applications de messagerie électronique. De tels sites peuvent reposer sur des bases de données de taille conséquente, mais la structure des données et de l'hypertexte reste simple. La complexité est donc davantage liée aux applications sous-jacentes qui garantissent les services, et c'est en général autour de ces aspects que s'oriente le développement de tels sites. - Les Systèmes d’Information basés sur le Web (SIW) : Ils constituent la quatrième catégorie de sites Web. Ils combinent la mise à disposition et la gestion de données complexes avec des services interactifs sophistiqués. Les applications de commerce électronique et les SI des organisations entrent dans cette catégorie. La Figure 2.1 illustre le positionnement de ces catégories selon deux axes relatifs à la complexité des données (axe vertical) et à celle des services (axe horizontal). Inspirée de [Mec 99], cette représentation fait également apparaître la distinction établie dans [Con 00] entre sites et applications Web, où seule la dimension applicative intervient. Figure 1. Classification des applications Web d’après [Mec 99] et [Con 00] La complexité des services offerts est donc un dénominateur commun aux deux propositions. 1 Notons que, pour Conallen [Con 00], les moteurs de recherche ne sont pas considérés comme des applications Web dans la mesure où ils ne sont généralement pas caractérisés par une modification de l’état applicatif suite aux actions (requêtes) de l’utilisateur. 18 Dans ce qui suit, nous allons enchaîner sur la description de l’architecture des applications Web. 1.3. L’architecture d’une applications Web Une application Web est une application délivrée par un serveur Web sur un réseau. Elle repose sur une architecture client/serveur à plusieurs niveaux (Tiers). L’architecture d’une application Web reflète la répartition spatiale de ses données et la distribution spatio-temporelle des ses composants exécutables. La configuration spatiale minimale d’une application Web est appelée « two-tier », ou à deux niveaux. Elle ressemble au modèle traditionnel « client-serveur », à la différence que le côté client qui représente le navigateur, n’est qu’une partie très mince de l’application, raison pour laquelle il est également appelé « client léger ». Il est utilisable sur de nombreux supports matériels. Son rôle est essentiellement l’interprétation et l’affichage des pages Web à l’intension de l’utilisateur. Les instructions exécutables qui constituent le corps de l’application ainsi que les données qu’elle manipule résident, quant à eux, côté serveur. Le nombre de serveurs à mettre en place peut être augmenté pour faire croître le nombre de niveaux de l’architecture. Nous obtenons alors des configurations plus complexes, appelées « threetier » ou « multi-tier », invoquant plus d’un niveau côté serveur. Chacun des niveaux joue un rôle bien précis dans l’application. Ainsi la dénotation des niveaux communément admise correspond aux différents rôles qu’ils assurent dans l’application. Pour mettre en oeuvre ces niveaux un ensemble de technologies et de modèles sousjacents sont disponibles : - Niveau « interface utilisateur » : il assure l’affichage de l’interface utilisateur, sur le poste client. Les technologies invoquées à ce niveau sont celles des pages Web : HTML, Java Script, Styles CSS. Les concepts manipulés sont alors : le document, le style, le formulaire, le script, la balise, etc. - Niveau « contrôle ou logique » : il concerne le contrôle de la cohérence des actions de l’utilisateur. Le niveau contrôle est régi par les technologies de la génération dynamique de pages Web, souvent associées à un langage de programmation tel que PHP, JSP (Java), ASP (C++), etc. Le modèle associé décrit les composants d’une application client/serveur : le serveur, l’application, la session, la requête, et le contexte (ensemble de variables) associé à chacun de ces composants. 19 - Niveau des «données » ou « objets » : il gère l’accès aux données de l’application ainsi que leur mise à jour. Le niveau des données peut être objet et/ou relationnel. Les technologies objets disponibles sont celles des langages objets utilisées pour développer le niveau contrôle à savoir : Java et J2EE, ASP et .NET, la version objet de PHP. Les concepts des modèles sont ceux du paradigme « objet » : la classe, l’opération, la propriété, l’objet, etc. Lorsque les données sont persistantes une base de donnée relationnelle est alors utilisée, soit de manière transparente via un serveur d’application gérant la persistance des objets, soit de manière explicite lorsque ce type de serveur n’est pas utilisé. Les SGBD relationnels du marché constituent l’essentiel des technologies utilisées : SQL-Server, Oracle, MySQL, Sybase. Le modèle des données est le modèle relationnel dans lequel les notions de relation, attribut, type, clé sont utilisées - Niveau « inter-niveaux » ou middleware : Il assure la communication entre les différents niveaux existants. Pour faire communiquer les différentes technologies invoquées dans les niveaux précédents, des bibliothèques de composants (API) existent dans le langage de développement choisi. Par exemple la bibliothèque nécessaire à l’utilisation d’une base de données en java se nomme JDBC (Java Data Base Connectivity). Les concepts du modèle utilisé sont : la base de données, la connexion, la requête, le résultat, les méta-données. Cette variété de technologies et de modèles rend l’architecture d’une application Web dangereusement complexe. Concevoir ce type d’application nécessite en plus d’un investissement technologique très important, un ensemble de compétences informatiques allant des réseaux aux bases de données en passant par la programmation objet, la syntaxe HTML et plus encore. 1.4. Les Catégories d’applications basées sur le Web Toutes les applications Web ne partagent pas forcement les mêmes caractéristiques ni les mêmes particularités. Elles ont été conçues pour répondre à différents besoins, impliquant ainsi différentes technologies. Nous énumérons ici sept différentes catégories d’applications Web telles qu’elles ont été recensées par Desphande dans [Des 02]. Cette catégorisation est basée sur les fonctions remplies par l’application. Notons que toutes les catégories sont désignées par le terme « site », même si elles reposent sur un aspect applicatif important. 20 Cette catégorisation est présentée dans l’ordre croissant du degré de complexité des technologies impliquées dans la construction de l’application. La catégorie la plus simple étant les sites Web informationnels dont le but est limité à la publication de données sur internet. La catégorie la plus complexe, du moins à ce jour, étant les sites Web hautement dynamiques, personnalisés et adaptés à des utilisateurs individuels. Entre les deux, il existe cinq autres catégories. Nous allons dans ce qui suit les énumérer en donnant des exemples pour chaque catégorie. - Les Sites Web Informationnels, appelés également « document-centric »: Cette catégorie de sites est un simple média de diffusion de l’information sur internet. Ils sont souvent appelés sites Web statiques. Les catalogues, les annonces, les bulletins d’information, les manuels techniques, les livres électroniques en sont des exemples. - Les Sites Web Interactifs : Cette catégorie de sites est basée sur l’utilisation de formulaires à renseigner par le client, ce qui donne de l’interactivité au site. Les formulaires d’enregistrement, les jeux, les horaires de voyages, personnalisés sont les principaux exemples de la catégorie. La prochaine catégorie, et toutes celles qui vont la suivre, impliquent un autre acteur dans leur architecture : le serveur d’application. Son rôle est l’exécution de la logique applicative de l’organisation. - Les Sites Web supportant des Transactions : Cette catégorie de sites suppose plus d’interactivité puisque l’utilisateur a un pouvoir de modification sur l’application qu’il n’a pas dans la catégorie précédente. La banque en ligne ou Ebanking, le Commerce électronique, les systèmes de réservation de biens et de services en sont des exemples. - Les Sites Web supportant des Workflows : Ce sont des sites Web qui supportent les workflows au sein d’une organisation ou entre différentes organisations. Les solutions du type B2B (Business to Business), les applications gouvernementales administratives (E-government), les systèmes de planification et les systèmes de gestion des inventaires sont les exemples les plus répandus de la catégorie. - Les Sites Web supportant un environnement de travail collaboratif : Cette catégorie de sites supporte le « groupware », dans lequel l’aspect communication et le partage d’information sont d’une importance capitale. Les systèmes 21 distribués d’authoring, les plateformes de E-learning, les outils de conception collaborative en sont les exemples les plus répandus. - Les Sites Web supportant les communautés en ligne : Cette catégorie inclut les groupes de chat, les systèmes de vente aux enchères, les systèmes de guidage, etc. - Les Portails Web: Se sont des sites Web construits à l’images des galeries commerciales, réunissant des sources d’information et des services potentiellement hétérogènes avec un seul point d’entrée. Les portails de commerce électronique, les portails de communautés et les moteurs de recherche sont les exemples les plus courants. Pour conclure, quelque soit la classification, le développement d’une application Web peut démarrer à n’importe laquelle des catégories. Par ailleurs, une catégorie d’applications Web est généralement plus complexe que celles qui la précèdent, mais ceci ne signifie pas qu’elle peut entièrement les remplacer. En effet, chaque catégorie d’application Web possède ses propres spécificités, qui la rendent plus appropriée dans un contexte donné. Enfin, les applications Web complexes peuvent être associées à plus d’une catégorie parmi celles citées. Nous venons de présenter une catégorisation des applications Web. Dans ce qui suit, nous allons enchaîner sur une catégorisation plus fine, qui concerne les différents composants d’une application. 1.5. Les composants Web Cette section est consacrée à la description de la structure générale d’une application Web. Les composants qui peuvent intervenir dans une application Web étant très nombreux et d’une grande hétérogénéité, nous allons en choisir les plus importants. Cette figure représente une structure récapitulative des composants Web distribués sur un réseau, elle servira de pivot pour cette section. 22 Figure 2. La structure générale d’une application Web table 1 : Les composants Web. Numéro Rôle Exemple courant 1 OS Serveur Linux, Windows 2 Serveur Web Apach(Linux,Windoes) IIS(NT),PWS(Win9x) 3 Scripts exécutés coté serveur PERL(Apach,IIS,PWS) VBSCRIPT(IIS,PWS) JAVASCRIPT(IIS,PWS) PHP(Apache,IIS,PWS) JAVA(Apache,IIS,PWS) C#,VB.NET(IIS) 4 Base de données celle-ci peut être sur la Oracle(linux,Windows) même machine que le programme qui MySQL(Linux,Windows) l’exploite ou sur une autre via Internet. SQLServer(Windows) 5 OS Client Linux,Windows 6 Navigateur Web Netscape,Internet Explorer 7 Scripts exécutées coté client au sein du VBscript(IE) navigateur. JavaScript(IE,Netscape) Perlscript(IE) Applets JAVA 23 Généralement, le navigateur (No 6) de la machine cliente (No 5) envoie un appel d’une page enregistrée (sous forme de script (No 3)) sur la machine serveur (No 1), le serveur Web (No 2) reçoit la demande de la page et la traduit en HTML si elle ne l’était pas, durant la traduction le serveur Web (No 2) peut consulter les bases de données (No 4) pour alimenter la page HTML avec les données adéquates. Le code HTML résultant de la traduction est envoyé vers la machine cliente (No 5), et spécifiquement vers le navigateur (No 6) qui le traduit à son tour pour construire une page Web complète, concernant les scripts navigateur (No 7), ce sont intégrés dans le code HTML envoyé, et sont interprétés par le même navigateur. A partir de l’explication précédente, on commence par détailler les pages Web qui sont distinguées selon deux classifications1, la première distingue les pages serveur des pages client, la deuxième qui est spécifique aux pages client donne une indication sur la façon dont ces pages sont obtenues, Elle répertorie les pages statiques, les pages actives et les pages dynamiques. 1.5.1. Pages Serveur / Pages Client Les pages serveur : sont celles déployées sur le serveur. Les pages appartenant à cette catégorie peuvent contenir des scripts serveur (par exemple PHP, ASP, etc.), et ces scripts contiennent à leurs tour des procédures et des fonctions serveur, nécessaires pour effectuer des opérations de control ou de calcul. Les pages client : sont déployées aussi sur le serveur, mais les pages de cette catégorie sont envoyées aux clients lors d’une demande. Pour étudier cette catégorie Tilley et Huang [Til 01] proposent classifier ces pages en trois sous catégories selon leur contenu dans le serveur : les pages statiques, les pages actives et les pages dynamiques. 1.5.2. Pages Statiques / Pages Actives / Pages dynamiques Tilley et Huang ont proposé une classification basée sur trois classes [Til 01] de complexité croissante. Les pages Web Statiques : Les pages de cette catégorie ne contiennent que du code HTML, et Les informations qu’elles affichent sont codées par origine entre les balises 1 Il existe d’autres classifications, mais les deux citées ici sont les plus attachantes à notre sujet. 24 HTML. Ils sont construites à l’avance et stockées sur le serveur Web en attendant d’être acheminées vers le client à sa demande. Ces pages ne présentent aucune interactivité et ne nécessitent aucun pré-traitement (interprétation) par le serveur d’application, ce sont donc les plus simples et les plus faciles à développer, la raison pour laquelle on peut les trouver fréquemment, surtout dans les sites personnels. Les pages Web Actives (Client-Side) : Appelées aussi pages Web interactives, ces pages sont également construites à l’avance et stockées sur le serveur Web, se sont très similaires aux pages statiques mais caractérisées par contenir un code exécutable et d’autres composants interactifs qui leur donnent de l’interactivité. Donc ces pages sont interactives mais elles ne sont pas dynamiques parce que leur interactivité reste locale de fait que les scriptes dans ce cas ne peuvent être exécutés que par le navigateur chez la machine cliente, ces scriptes sont généralement écrits en java script, et pour les composants interactifs, ce sont soit des objets flash soit des instructions HTML dynamiques, ou bien d’autres. Les pages Web dynamiques (Server-Side) : Cette catégorie est la plus complexe des trois catégories précédentes. En plus du code HTML et des composants actifs, ces pages renferment un contenu dynamique grâce à l’interaction avec la base de données, et sont construites à la demande (on the fly). L’interprétation du code dynamique nous donne des pages HTML nouvelles nées, et contenant des valeurs saisis par l’utilisateur ou consultées depuis une base de données, ce sont ces pages HTML qui sont acheminées vers le navigateur Web du client. 1.6. HTML l'organisme W3C (World Wide Web Consortium) chargé de la standardisation des technologies du Web, a élaboré le langage HTML (Hyper Text Market Language) fonctionnant sur l'ensemble des plateformes existantes : Windows, Linux, MacOS, etc., mais également des navigateurs (browsers) comme Netscape Communicator, Internet Explorer, Mozilla, etc.1 En plus de son utilisation très simple et qui a contribué à sa diffusion. Ce langage est capable de gérer la quasi-totalité des artifices du Web tels que, évidemment les liens hypertextes, les textes formatés, les images, les vidéos ou animations, les tableaux, les 1 Voir les références [Pas]. 25 formulaires, les cadres « frames », les scripts, les caractères spéciaux, les feuilles de styles et bien d'autres choses. Adapté à son moyen de transport (qui est généralement les lignes téléphoniques), et à fin d’assurer une rapidité suffisante de la communication sur le Web, le langage HTML a adopté un format de texte très compact mais aussi (par conséquence) peu sophistiqué. C'est le bon vieux format de texte pur et dur, sans fioritures du Bloc-ntes ou Notepad de Windows par exemple. Et de plus ce format ASCII a été amputé d'un bit (7 bits au lieu de 8)!1 Mais pourtant Html est un langage universel qui s'adapte à toutes les plates-formes comme on a cité précédemment.2 En générale, les pages HTML comportent, en plus du texte adressé au lecteur, des instructions pour le browser3 de celui-ci. Ces instructions seront différenciées du texte par les signes < et > ; par exemple <html>. Ces "instructions" s'appellent des tags ou des balises. Ces éléments jouent un rôle bien précis lors de l’affichage de la page par un navigateur. Certains assurent la mise en page, d’autres véhiculent le contenu informatif du site, d’autres enfin permettent la mise en place d’une structure de navigation inter et intra pages. Dans ce mémoire, on s’intéresse à l’aspect architectural des pages Web. Par conséquent, certains de ces éléments sont à ignorer. En effet, les balises HTML peuvent être divisées en deux groupes : les balises de structure et les balises de contenu. Les balises de structure définissent la structure de la page alors que les balises de contenu définissent le format et le style du contenu. D’autre part, un modèle de données définit un ensemble de balises ouvrantes et fermantes indiquant le début et la fin de chaque élément. Ces balises s’imbriquent les unes dans les autres pour obtenir des structures de données plus complexes. En plus, quelques balises comportent des attributs avec des valeurs correspondantes. Ce sont ces valeurs qui donnent aux différents composants leurs caractéristiques. 1 Vous serez donc privé de certains caractères spéciaux comme le (é) pour lesquels il faudra passer par des codes particuliers. 2 Voir les références [Luc]. 3 Ce logiciel, que l'on appelle un browser, vous permet de surfer sur le Net et d'afficher sur votre écran les "pages" qu'il a interceptées. Il y a, hélas, beaucoup de marques et de types de browsers différents. Des simples, des archaïques ou des sophistiqués... Les plus connus sont Netscape dans sa version 2 et 3 ainsi Internet Explorer de Microsoft mais il en existe beaucoup d'autres. 26 Chapitre 2. État de l’Art Dans le chapitre précédent nous avons présenté des concepts du domaine de l’ingénierie du Web, tout en détaillant les technologies associées au Web à travers la description de l’architecture d’une application Web et de ses différentes catégories. Comme le cas des applications traditionnelles, la modélisation des applications Web a fait partie de plusieurs recherches et études autour du monde, surtout récemment. Dans cette section nous allons étudier quelques modèles proposés dans la littérature pour supporter l’architecture d’une application Web générique. Chacun d’entre eux met l’accent sur les composants les plus intéressants de point de vu de son auteur. Ensuite profitant de leurs expériences et de leur logique nous allons en extraire un modèle répondant à nos besoins. 2.1. Le Modèle proposé par Ricca et Tonella : [Ric 00a ] Commençons par le modèle proposé par Ricca et Tonella, ce modèle représente les principaux composants d’une application Web : page HTML, code serveur (indiquant les pages serveur), les cadres, les formulaires (avec les champs d’entrée), et les relations les plus intéressantes reliant ces composants, comme les liens hypertextes, les flux venants des formulaires, la création des pages à partir d’autres, et l’affichage des pages Web dans des cadres spécifiques. Figure 3. Le Modèle proposé par Ricca et Tonella : [Ric 00a] 27 Comme le montre la figure, ce modèle a négligé la plupart des composants affichés dans les pages client, alors qu’il a bien décrit les aspects suivants : - L’interaction dynamique entre le code serveur et les pages HTML, qui est illustrée par les relations reliant leurs entités. - L’interaction dynamique entre l’utilisateur et l’application, grâce aux formulaires l’utilisateur pourrait interagir avec l’application. - La division des pages en des cadres « frames », et la division de ces derniers en d’autres cadres pour afficher plus d’une page dans un seul écran, la caractéristique qui est devenu obsolète à nos jours. 2.2. Le Modèle proposé par Conallen [Con 00] Jim Conallen a traité cette problématique d’une manière plus globale, il croit que la structure des applications Web est trop compliquée et distribuée, d’où apparaissent la nécessité d’utiliser les extensions du langage UML comme les stéréotypes, les valeurs étiquetées, et les contraints, qui sont indispensable pour modéliser les particularités des applications Web. Figure 4. Le Modèle proposé par Conallen [Con 00] 28 Cette partie du modèle de Conallen montre l’utilisation de ses extensions, il s’est intéressé aux détails, au point qu’il a modélisé les deux parties : le navigateur et le serveur. En fait, grâce aux extensions de Conallen à UML, il est devenu possible de modéliser les applications Web de manière spécifique. D’autre part, selon Conallen les phases globales de modélisation des applications Web ne sont pas différentes de ceux des applications traditionnelles, en plus les mêmes modèles peuvent être utilisés surtout dans les phases les plus génériques. Concernant la vue statique des applications, on peut utiliser les diagrammes de classes, où les pages serveur et client sont considérées comme des classes statiques (classes avec un seul objet). Mais dans ce cas, ces classes sont caractérisées respectivement par les stéréotypes << PageServeur>> et <<Page Client>> ou par des icônes adéquates. Les variables locales utilisées dans ces pages sont considérées comme des attributs privés caractérisant les classes associées, alors que les fonctions sont considérées comme des méthodes privées. Les attributs et les méthodes publiques ou protégées ne sont pas acceptées dans ces classes. Les pages serveurs peuvent créer les pages client pour être postées aux clients, mais ces pages ne sont pas des objets statiques parce qu’elles ne sont stockées dans aucun lieu, elles sont symbolisées par le stéréotype <<Pages Créées>>, ces pages constituent un cas spécifique des pages client et elles peuvent avoir des attributs et des méthodes de la même manière de ceux statiques. Les formulaires constituent aussi une classe de base pour Conallen, ils sont agrégés aux pages client, et ils comportent des champs pour collecter les données. En fait, ce ne sont pas seulement les classes qui peuvent être stéréotypées, mais les relations peuvent l’être aussi, Conallen propose les relations stéréotypées suivantes comme des relations génériques : - <<créer>> : (« builds » en anglais) une relation reliant une classe Page Serveur avec une classe représentant la page client créée par cette dernière. - <<lien>> : (« links » en anglais) une relation reliant une page client avec une autre page. - <<submits to>> : une relation entre une formulaire et la page serveur vers la quelle les données sont envoyées. 29 - <<inclut>> : (« include » en anglais) une relation entre deux pages ou bien une page et un module bibliothèque. Les extensions de Conallen peuvent être utilisées pour modéliser la structure statique (en utilisant le diagramme de classe de UML), alors que le comportement dynamique peut être représenté par les diagrammes de séquences, de collaboration, d’activités, et d’état transition. En plus, le modèle de Conallen peut faire l’objet de plusieurs autres extensions, par exemple le cas du modèle proposé par Tramontana [Tra], qui permet de modéliser une application Web à un niveau de granularité plus élevé et qui sera décrit dans le paragraphe qui suit.. 3.3. Le Modèle proposé par Tramontana : [Tra 05] Le but de Tramontana, lorsqu’il a exhibé son propre modèle à partir de celui de Conallen, était de trouver un modèle adéquat à son approche de rétro-conception des applications Web. Pour lui, en utilisant le diagramme de classes de UML, les entités principales d’une application Web peuvent être modélisées par les classes, alors que les relations reliant ces entités sont représentées par les associations, en plus il a utilisé les relations de composition et d’agrégation pour décrire l’imbrication des entités dans d’autres. La figure suivante montre le modèle inventé par Tramontana. Function Client Module Client n n n faire suivre inclut 1..n Script Client n créer Page Statique inclut Classe Serveur Page créée n n faire suivre Classe Client Page Web Page Client n lien n n n Script Serveur 1 1..n Paramètre Balise HTML 1 submit télécharger Formulaire incomplet n 1 Objet Web Frameset Applet Java n Fichier téléchargeable Multimedia Objet Flash afficher en cadre Page Serveur n 1 n Objets Interface Fonction Serveur n inclut incomplet Champs 1..n Interface courrier Cadre n Interface Fichier Serveur Interface BD Figure 5. le Modèle proposé par Tramontana [Tra 05 ] 30 Selon Tramontana, les éléments de base d’une application Web sont les pages Web qui sont : soit des pages serveur (enregistrées sur le serveur) ; soit des pages client (crées et envoyées par le serveur vers le client qui les avait demandées). D’autre part les pages client peuvent être classées selon leurs origines : si le contenu de ces pages était stocké sur le serveur d’une manière permanente et fixe, ils sont appelées pages statiques ; par contre, si ce contenu était variable et n’est généré qu’à la demande, alors ils sont appelées pages créées. On remarque dans ce modèle un niveau de granularité très élevé, la chose qui peut rendre la modélisation des aspects dynamiques plus claire et plus facile. De plus les pages statiques ont été distinguées de celle créée à la demande. Par ailleurs, les entités de traitements dynamiques (les scripts et les modules dynamiques) ont été aussi distinguées des classes passive (comme les images, et les séquences son et vidéo). 31 Chapitre 3. Proposition La section suivante est le résumé d’une étude exhaustive des composants qui interviennent dans une application Web. Pour chaque catégorie de pages Web nous avons défini une liste de composants, et pour chaque composant nous avons défini sa balise ainsi que la liste de ses attributs. En plus nous avons étudié les relations susceptibles d’exister entre ces composants. 3.1. Étude des composants Web 3.1.1. Les pages Statiques : Les pages statiques sont envoyées vers le navigateur qui les a demandées sans aucune interprétation, parce que ces pages ne comportent que de code HTML qui est compréhensible par ce navigateur, Le tableau suivant représente une description abrégée d’une panoplie d’éléments HTML : table 2: Les composants principaux du HTML Nom composant Balise Liste d’attributs <html> LANG="Langue" Commentaire DIR="Direction" VERSION="version" Cet élément contient d’autres Tête <head> PROFILE="Adresse profil" d'un décrivant éléments les caractéristiques de la page et insérant des scripts actifs 32 BACKGROUND="@ de l'image" BGCOLOR="Couleur" TEXT="Couleur" BGPROPERTIES="fixed"(7*) LINK="Couleur" ALINK="Couleur" VLINK="Couleur" BOTTOMMARGIN="Valeur <body> Corps en pixel"(9*) TOPMARGIN="Valeur" en pixel LEFTMARGIN="Valeur en pixel" RIGHTMARGIN="Valeur" en pixel MARGINWIDTH="Valeur en pixel" MARGINHEIGHT="Valeur" en pixel Lien <a> hypertext HREF="@ cible" TARGET="Cadre cible" SRC="Adresse de l'image" NAME="Nom" ALT="Légende" LONGDESC="Adresse du document" BORDER="Valeur" Image <img> HSPACE="Valeur" VSPACE="Valeur" WIDTH="Valeur" HEIGHT="Valeur" ALIGN="top,middle,bottom,left ou right"> <ul> Liste Liste <ol> numérotée Liste des TYPE="disc,circle,square" OL TYPE="I,i,A,a" START="num de depart" <dl> definitions --NAME="Mail" Formulaire <form> ACTION="@" ENCTYPE="text/plain"> METHOD="Type de transmission 33 WIDTH="Valeur" HEIGHT="Valeur" CELLSPACING="Valeur" <table> Table CELLSPADDING="Valeur" BORDER="Valeur" FRAME="Type de bordure" RULES="Type de bordure" NAME="Cadre1" SRC="ex.htm" SCROLLING="yes/no" MARGINWIDTH="130" Cadre MARGINHEIGHT="35" <frame> NORESIZE SRC="Adresse du document" LONGDESC="Adresse du document" (définissant le contenu) Commentair e Définir une feuille de < !-- -- > <style> text/css (ou bien) text/javascript " Media="Nom de médium" style Paragraphe Type= " <p> La valeur de l’attribut Champs d'entrée <input> NAME="Nom du champ" type TYPE=Type de champ> champs détermine d’entré quel on aurai Champs multi lignes <TEXTAR NAME="Nom du champ" EA> COLS="Valeur" ROWS="Valeur" En fait, cette table ne constitue qu’un résumé des résumés effectués sur les éléments HTML étudiés dans le cadre de ce mémoire, la plupart des autres balises sont destinées à la mise en forme du contenu de la page, surtout les textes. 34 Il s’agit maintenant de trouver une structure selon la quelle un algorithme peut extraire les éléments voulus et les stocker, de façon à pouvoir conserver les relations qui existent entre eux. Nous avons opté pour l’utilisation de deux catégories de relations : les relations d’inclusion et les relations d’utilisation. 3.1.1.1-les relations d’inclusion : Ce sont les relations résultantes de l’inclusion d’un élément par les balises (ouvrante et fermante) dans un autre élément. Ce phénomène est appelé l »encapsulation ». Ainsi chaque élément peut être soit père, soit fils de l’autre. Généralement une page HTML peut être représentée par un arbre dont la racine est la balise <html> de laquelle partent deux branches qui correspondent respectivement aux deux balises : <Head> et <Body>. Tous les autres composants sont imbriqués dans l’une ou l’autre de ces deux balises. La figure suivant illustre cette description. Figure 6. La structure d'une page HTML Par exemple, le corps peut contenir un tableau, qui peut contenir à son tour une image dans une cellule et un lien hypertexte dans une autre cellule, ce cas peut être représenté par la figure suivant : 35 Figure 7. La relation d'inclusion En fait, cette représentation peut être appliquée à tous les composants, ce qui facilite la manipulation de la page HTML de manière récursive. 3.1.1.2-les relations d’utilisation : Ce sont les relations représentées par le fait d’utiliser des éléments par d’autres en indiquant les premiers comme des valeurs des attributs des derniers, en fait, ces relations sont moins fréquentes que les relations d’inclusion, parce qu’on peut trouver des éléments sans attributs. L’exemple le plus simple pour illustrer ce type est d’appeler un script par un bouton pour effectuer une fonction quelconque, l’exemple suivant illustre comment un attribut du bouton peut lancer l’exécution du script. 36 Figure 8. La relation d'utilisation Une relation d’utilisation peut dépasser les limites de la page pour relier l’élément par un autre fichier, c’est le cas par exemple dans les feuilles de styles en cascade : l’attribut (class) peut utiliser les caractéristique décrites dans une feuille de style pour mettre en forme un élément situé dans une page différente de celle-ci. 3.1.2. Les Pages Actives (Client-Side) : Cette catégorie de pages peut comporter en plus du code HTML, des scripts actifs qui sont généralement écrits en java script. Dans ce tableau on a essayé de collecter quelques composants dont le fonctionnement est actif (interprété au niveau du navigateur ou coté client) : 37 table 3: Les composants actifs des pages Web. Nom composant Balise Liste attributs Commentaire CLASSEID="java:fichier après les nouvelles classe" spécifications CODETYPE="application/ja W3C, Cette balise va" Objet <object> peut être utilisée TYPE="Type pour insérer soit d'application" multimédia du CODEBASE="@ de un objet active X chargement" soit une séquence DATA="Nom" flash soit un applet. CODE="Nom de la classe" <applet> Applet CODEBASE="Adresse du code"> C’est une classe Java. SRC="Adresse du média" Vidéo ou <EMBED> PLUGINSPACE="@de l'application" audio TYPE="Type d'application"> Java script <script> Type="text/javascript" Cette balise peut Ou être incluse soit Language="JavaScript" par l’élément (tête), soit par le corps de la page SRC="Adresse d'un page contenant du code" CHARSET="Nom caractères"> du jeu Note : on peut inclure d’autre langages comme de vbscript par la même balise juste on modifie la valeur de l’attribut type 38 HTML … … Ce Dynamique sont des extensions apportées au HTML. La présence des scripts interactifs, même s’ils ne concernent que la page qui les contient et qu’ils sont de taille relativement réduite, complique l’analyse et la compréhension de cette catégorie de pages. 3.1.3 Les pages dynamiques (Server Side) : Les pages de cette catégorie peuvent comporter de code HTML, mais leurs composants principaux étant les scripts dynamiques sont la source de toute interactivité réelle dans les applications Web. Ce tableau comporte les langages Web dynamiques les plus utilisées et connues : table 4: Les composants Web dynamiques. L’élément Balises Php Attributs <? Php <? … … • ?> ?> Ces trois formats sont Language= "php" <script> Commentaire possibles pour insérer du code php dans une page, mais le dernier est rarement utilisé Jsp, <% … %> Servlets Asp, Asp.net <script> language= "c# ou VB.net" runat="server" 39 Perl # !d:\perl\bin\perl.exe • Perl : L’abréviation de (Practical Extracting and Reporting Language) • ce ligne écrite en tête de la page indique le chemin de l’exécutable : perl.exe Pour le moment, connaître les balises de début et de fin des codes dynamique est suffisant pour nous, puisque nous ne sommes pas intéressés par la sémantique de ces codes. Dans la section qui suit, nous présontons le modèle que nous avons retenu pour supporter les composants décrits dans cette section. 3.2. Le Modèle Proposé En fait, les modèles citées précédemment (dans le chapitre : état de l’art), ont été définis par leurs auteurs pour répondre à leurs besoins spécifiques. Conallen était motivé par la modélisation des applications Web en phase de « conception » ; à l’inverse, Tramontana était motivé par la rétro-conception des applications Web. Par ailleurs, ces auteurs ont proposé des modèles qui se distinguent également par leur niveaux de granularité : alors que le modèle de Ricca et Tonella n’a décrit que les composants principaux, Tramontana les a tous détaillés (même les objets d’interfaces : ceux reliant l’application Web avec un DBMS ou bien avec d’autres systèmes externes). L’étude de ces modèles et des objectifs sous-jacents, nous a permis de mieux appréhender notre problématique afin de définir clairement ses spécificités. Nous avons donc défini notre propre modèle, lequel devra répondre d’un niveau de granularité intermédiaire pour répondre de façon pertinente à nos besoins. C’est sur ce modèle que l’outil WebAnalyser s’appuie. 40 Les paragraphes qui suivent détaillent et illustrent la construction progressive du modèle que nous avons retenu. Nous allons argumenter de manière incrémentale chaque bloc qui sera rajouté au modèle. Les figures intermédiaires ne seront pas référencées dans la table des figures ; car d’une part, elles sont incomplètes et ne sont représentées que pour faciliter la compréhension du commentaire qui la précède. D’autre part, la construction d’un modèle se fait toujours de façon progressive, sur plusieurs itérations et implique plusieurs « allers-retours » ; or ces figures n’englobent pas la totalité des concepts retenus lors des itérations précédentes. Par conséquent, seule la figure illustrant le modèle final sera référencée. Ces paragraphes présentent le cœur même de notre contribution théorique à cette problématique. En premier lieu, les pages sont l’unité de base dans une application Web et elles peuvent être de deux catégories : les pages coté client et celles coté serveur. La page coté client n’est pas nécessairement écrite en html puisqu’à l’origine elle peut être écrite en un langage de programmation (Web dynamique) ; elle peut aussi être hybride (contenir un mélange des deux langages). Dans notre modèle, cette différenciation sera prise en compte en distinguant les pages serveur des pages clients. De ce fait la, les pages statiques décrites par Tramontana comme des pages clients sont considérées maintenant des pages serveur puisque la seule différence entre eux c’est l’interprétation effectuée au niveau du serveur avant d’être acheminées vers le poste client. La figure suivante montre la relation (créer) entre deux pages : serveur et client, toute en généralisant ces deux dernières par une entité (page Web). PageClient Page Client : la page telle qu’elle est affichée chez le create PageWeb client. Page Serveur : la page telle PageSrveur qu’elle est enregistrée sur le serveur 41 Une page cotée serveur peut inclure un script dynamique, comme elle peut être écrite totalement en HTML. Le script dynamique est constitué de classes et de fonctions dont l’objectif est de créer (ou bien de contribuer à la création) des éléments affichés sur la page Client. Nous pouvons donc énoncer qu’un élément appartient toujours à une page Web. La figure suivante montre ces relations : PageClient _ PageWeb _ Element _ create _ PageServeur _ ScriptDynamique _ Classe _ createElement _ Function _ On remarque que (ScriptDynamique) est reliée grâce à la relation (createElement) avec (Element), cette association est utile parce que le fait de déterminer le script responsable de créer un élément quelconque peut rendre la modification de cet élément une opération plus facile et plus rapide. D’autre part une page Web peut être composée de « framesets » qui peuvent être divisées à leur tour soit en d’autre « farmesets » soit en des cadres à fin d’afficher d’autres pages. 42 Frame divisé en divisé en FrameSet afficher PageWeb PageClient create Element PageServeur Commençons à spécialiser les éléments affichés dans une page Web. En premier lieu, chaque élément inclue d’autres éléments d’une manière imbriquée, à l’exception de quelques éléments simples comme les commentaires et les images, la figure suivante montre les éléments les plus importants qui sont : les liens hypertextes, les tables, les objets multimédia, les formulaires, les extraits texte, les commentaires, et les scripts actifs. LienHypertexte _ _ Table ScriptActif _ Commentaire _ Element _ Texte _ ObjetMultimedia _ Formulaire. _ 43 Comme le cas des scripts dynamiques, les scripts actifs peuvent être divisées en des modules, qui sont soit des fonctions soit des classes, et ces modules peuvent à leur tour être composés d’autres modules comme illustré par cette figure : ClasseClient Element. ScriptActif Module FonctionClient Les liens hypertextes acheminent le navigateur vers une autre page Web en affichant cette dernière dans un cadre bien déterminé Frame LienHypertexte divisé en divisé en FrameSet vers PageWeb Element. Concernant les formulaires, ces composants sont attachés sur une page coté serveur à travers une relation « submit », dans ce cas la page cible ne doit pas être une page coté client vu la nécessité de traiter les valeurs envoyées par le formulaire. 44 PageClient PageWeb Element. create submit PageServeur Formulaire La figure 9 illustre le modèle global retenu dans notre approche. Il regroupe tous les aspects énumérés précédemment. Ce modèle décrit une application Web générique. Par conséquent, n’importe quelle application réelle à traiter sera une instance de ce modèle. LienHypertexte Frame Table Commentaire divisé en divisé en FrameSet PageClient ClasseClient achemine vers PageWeb Element ScriptActif Module create PageServeur FonctionClient submit include Formulaire. ScriptDynamique ObjetMultimedia Texte createElement Fonction Classe Figure 9. Le Modele Global Retenu 45 Au besoin, ce modèle peut faire l’objet d’extensions afin de supporter d’autres catégories de composants Web. 3.3. Le logiciel « La différence entre la théorie et la pratique, c’est qu’en théorie, il n’y a pas de différence entre la théorie et la pratique mais qu’en pratique, il y en a une. » Jan van de Sneptscheut Notre contribution théorique est certes intéressante … mais pour prouver qu’elle est pertinente sa validation est indispensable. Nous avons donc implémenté notre outil WebAnalyser en se basant sur le modèle retenu pour pouvoir le valider. 3.3.1. Description générale L’architecture interne de notre outil est illustrée par la figure suivante : Figure 10. L'architecture du logiciel "Web Analyser" 46 WebAnalyser est basé sur quatre composants : l’aspirateur, le nettoyeur, le parseur et l’éditeur ou « visualiseur ». - l’aspirateur 1: c’est un Logiciel destiné a copier l'intégralité d'un site Web sur le disque dur d'un ordinateur. Il se connecte à une page, désignée par son utilisateur, et traque sur celle-ci tous les liens et appels à des fichiers extérieurs (images, vidéos, animations flashs ou autres). Chaque fichier ainsi localisé est copié sur le disque dur de l'ordinateur effectuant ainsi l'aspiration. Le site est alors consultable en local, sans être connecté à Internet. L’aspirateur n’intervient que dans le cas où le site n’est disponible que sur le Web. - Le Nettoyeur : le code HTML contient très souvent des erreurs. Même si elles ne sont pas problématiques pour un navigateur, ces erreurs le sont pour tout autre traitement automatique. D’où la nécessité d’un nettoyeur pour corriger les éventuelles erreurs syntaxiques qui peuvent apparaître dans le code HTML. Nous avons retenu Tidy [Rag], un outil en ligne qui retourne des pages HTML syntaxiquement bien formées. - Le parseur : c’est le cœur même de notre outil. Il traite (« parse ») les fichiers d’un site (enregistrés sur le disque dur) et utilise un « mapper »2 pour enregistrer les extraits dans la base de données. - Le visualiseur : c’est un éditeur graphique. Il affiche les composants de l’application sous une forme arborescente ; ainsi l’utilisateur peut naviguer entre les différents composants. Il s’agit d’une interface graphique conviviale. - Les sections suivantes présentent les étapes suivies lors du développement de l’outil WebAnalyser. 3.3.2. Les alternatives … et choix Nous étions confrontés à plusieurs alternatives quant au choix des composantes techniques nécessaires au développement de cet outil. Les paragraphes qui suivent présentent et justifient les choix retenus. 1 Selon l’url :http://www.dicodunet.com/annuaire/def-26-aspirateur-de-site.htm 2 Un “Mapper” est une classe java qui se charge d’extraire les valeurs des attributs d’un objet et les enregistrer sous la forme d’un enregistrement dans une base de données relationnelle. 47 3.3.2.1. Le langage de programmation utilisé Choisir java comme langage de développement ne nécessitait pas des études comparatives, parce que ce langage représente un résultat de toutes les modifications apportées aux langages précédents, en plus, la richesse des libraires du Java et sa portabilité sont des avantages convaincants pour le choisir. Les points suivants expliquent en résumé les avantages de l’utilisation de ce langage, au moins dans le développement de cet outil : - Le parseur : dans la section (3.3.2.2) on va aborder l’utilisation du parseur HTML qui est disponible en toute API de java. Des classes sont prêtes à l’usage avec des fonctions couvrantes la plupart des besoins des développeurs. - La connexion à la base de données : en utilisant un pilote adéquat la connexion à une base de données devient une tache facile. D’autre part, java supporte un ensemble de classes permettant de gérer cette connexion, et beaucoup de technologies de « mapping » ont été créées spécifiquement. - L’interface graphique : java supporte plusieurs moyens pour créer des interfaces graphiques répondant à tous les besoins et facilitant considérablement le travail. - La portabilité : un logiciel écrit en java est généralement indépendant de la plateforme et du système d’exploitation. Les utilisateurs du system Unix peuvent donc profiter de notre outil exactement comme les utilisateurs de windows. - La facilité de codage : java élimine toutes les difficultés qu’on éprouvait en écrivant des codes avec le pointeur puisqu’on est devenu capables de gérer automatiquement l’allocation de mémoire qui minimise son encombrement. Tous ces avantages nous ont confortés dans le choix de java comme langage de programmation pour développer notre outil. 3.3.2.2. Le parseur En fait, le cœur de ce logiciel est un parseur, spécialisé au langage HTML. Mais avant, que signifie parseur ? La définition citée dans l’encyclopédie « Wikipedia » : “In computer science and linguistics, parsing (more formally syntax analysis) is the process of analyzing a sequence of tokens to determine its grammatical structure with respect to a given formal grammar, A parser is a computer program that carries out this 48 task, it is a component of a compiler. Parsing transforms input text into a data structure, usually a tree which is suitable for later processing and which captures the implied hierarchy of the input. Lexical analysis creates tokens from a sequence of input characters and it is these tokens that are processed by a parser to build a data structure such parse tree or abstract syntax tree”. D’après cette définition générique, un parseur est un programme qui analyse une chaîne de caractères pour déterminer sa structure grammaticale en respectant une grammaire donnée. Dans notre cas, un parseur doit pouvoir extraire des blocs de code à partir d’un document HTML. Cette extraction peut être supportée par une DTD décrivant la structure d’une page HTML. Donc l’input de notre parseur sera des pages HTML, et l’output sera des blocs de code HTML accompagnés de quelques informations pertinentes. Nous avions le choix entre développer notre propre parseur ou utiliser un parseur disponible. La flexibilité des parseurs existants était un argument convainquant. Nous avons donc opté pour cette seconde alternative. En java, on a trouvé deux types de parseurs disponibles comme des API (parmi d’autres) : le « HTML parser », et la classe « Lexer » : 1) la classe Lexer : Figure 11. La classe Lexer 49 Cette classe « parse » le flôt HTML en des noeuds, chaque un de ces noeuds représente un élément HTML avec soit deux balises (ouvrante et fermante), soit une seule balise dans le cas des éléments simples comme les images. Les noeuds résultants de ce parseur sont de trois types : commentaire, texte ou balise. Les nœuds de type « commentaire » et « texte » représentent respectivement les commentaires et les textes intégrés dans une page HTML, alors que ceux de type « balise » représentent les autres éléments. 2) le parseur « HTML parser »: Ce parseur utilise deux classes Java prédéfinies, la classe (ParserDeligator), et la classe (ParserCallback), à partir de la documentation java on a extrait leurs définitions comme suit : Figure 12. La classe Parser Figure 13. La classe HTMLEditorKit 50 Le point de départ, c’est La classe ParserDelegator qui « parse » un flux HTML et avertit un objet ParserCallback passé en paramétre de l’état du « parsing ». La classe ParserCallback implémente les opérations suivantes : public void flush() throws BadLocationException public void handleText(char[] data, int pos) public void handleComment(char[] data, int pos) public void handleStartTag(HTML.Tag t,MutableAttributeSet a, int pos) public void handleEndTag(HTML.Tag t, int pos) public void handleSimpleTag(HTML.Tag t,MutableAttributeSet a, int pos) public void handleError(String errorMsg, int pos) public void handleEndOfLineString(String eol) Pas de besoin pour le moment d’expliquer les rôles de ces opérations mais un exemple simple qui fait extraire tous les textes d’un document HTML n’est pas mal : HTMLEditorKit.ParserCallback callback = new HTMLEditorKit.ParserCallback () { public void handleText(char[] data, int pos) { System.out.println(data); } }; Reader reader = new FileReader("myFile.html"); new ParserDelegator().parse(reader, callback, false); Ce parseur est « DTD driven », c'est-à-dire qu’il travaille selon un DTD données, pour le moment ce n’a pas de sens, mais c’est un avantage grâce au quel on peut utiliser ce parseur pour extraire des données à partir des documents des types différents. Notre choix s’est fixé sur ce dernier. 51 3.3.2.3. Stockage et sauvegarde de la base de données Notre application doit être capable de stocker des données extraites à partir des pages Web, donc il est nécessaire qu’elle implémente une base de données, les données à stocker seront des différents types, mais généralement, de type texte pour les appellations des balises, de type entier pour leurs positions, et de type (blob) pour les extraits de texte. L’outil le plus efficace pour stocker des données de manière structurée et centralisée reste une base de données, d’où c’est très intéressant de choisir le système de gestion de base de données (SGBD) le plus adapté à nos besoins spécifiques. Une base de données possède des tables contenant les données que l’on souhaite stocker, sur celles-ci on peut effectuer des requêtes, en utilisant un langage spécifique (SQL Standard Query Language) à fin de gérer l’ensemble des données, c'est-à-dire : les opérations de lecture, de suppression et de modification. Notre parseur aura besoin d’insérer et de consulter des enregistrements d’une manière un peu stable, c'est-à-dire les requêtes dont on aura besoin seraient fixées dés le début. Nous présentons ici une petite étude comparatif entre deux solutions gratuites : PostgreSQL et MySql. table 5 : Comparaison MySq l 5.0 X Postgre 8.1 Fonctionnalités MySQL 5.0 Postgre 8.1 Support de clés étrangères Oui Oui Vues Oui Oui Procédures stockées Oui Oui Triggers Oui Oui Unions Oui Oui Jointures complètes Non Oui Contraintes Non Oui Héritage de table Non Oui Curseurs Partiellement (seulement en Oui lecture) Supporte IPV6 Non Oui Driver JDBC Oui Oui 52 a)MySQL MySQL fonctionne sur beaucoup de plateformes, de plus la plupart des langages utilisés aujourd’hui sont capable d’interagir avec lui. Depuis la version 4.1 le MySQL intègre les requêtes imbriquées et les tables InnoDB permettant de gérer les transactions et les verrous au niveau des lignes, à propos du codage des caractères c’est maintenant disponible sur plusieurs octets. D’autre part MySQL offre de très bon résultat en terme de performances et rapidité d’accès, il est très rapide, multithread, robuste et multi-utilisateur. Les raisons pour les quelles il est très utilisé avec beaucoup de technologies. b) PostgreSQL PostgerSQL est un système de gestion de base de données développé par (PostgreSQL Global developpement group). Ce system est très utilisé aujourd’hui grâce aux nombreux avantages techniques qu’il possède : comme les requêtes imbriquées, les transactions, les vues, les triggers et l’héritage des tables. PostgreSQL propose donc de nombreuses fonctionnalités, mais dont on n’a pas besoin. Notre choix s’est donc porté sur MySQL en considérant le facteur rapidité. 3.3.2.4. Persistance des données Les données extraites par l’outil proposé sont stockées dans une base de données relationnelle, par exemple, au biais de l’API JDBC on peut connecter une application java avec une base de données relationnelle, mais comment stocker des objets Java dans une base de données relationnelle ? Cette question demeure jusqu'à nos jours problématique ! Pour palier à ce problème beaucoup des technologies manipulant des bases de données objets sont proposées, mais pratiquement, la plupart des développeurs préfèrent faire ce qu’on appelle « mapping ». Etant une solution intermédiaire le « Mapping » correspond à des technologies permettant de faire le passage entre les objets traités par les langages orientés objets et des enregistrements stockables dans des bases de données relationnelles. Les solutions les plus abordables pour faire du « mapping » sont : Hibernate et EJBs, qui font l’objet de cette étude comparative en ajoutant le JDBC. 53 table 6 :Comparaison JDBC X Hibernate X EJBs. Fonctionnalités JDBC Hibernate EJBs Mise en place Très simple Apprentissage Apprentissage nécessaire nécessaire du Oui Oui Oui Persistance d’objet Non Oui Oui Oui Oui Indépendance SGBD Java Mapping des Objets Non Java Création de la base Lui fournir le script Génération du code de données SQL SQL automatiquement Bufferisation des Non données fin a d’éviter connexions Oui Oui les a la base. Déploiement Intégration du pilot Intégration JDBC dans le JDK librairies des Nécessite dans un le conteneur d’EJBs projet Configuration - Fichier XML annotations Java ou Fichier XML ou annotations Java a)JDBC : JDBC est l’acronyme de « Java DataBase Connectivity » et désigne une API définie par SUN pour permettre un accès aux bases de données relationnelles (SGBD) avec Java. b) Hibernate : Hibernate est une surcouche à la base de données. Elle fournit un ensemble de méthodes et fonctions permettant de rendre persistants les objets Java d’une application. Il faut donc dans un premier temps permettre à Hibernate d’accéder au système de 54 gestion de base de données utilisé en lui fournissant les paramètres adéquats. On peut ensuite définir les règles qui permettront à nos objets Java de devenir persistants. Cette étape se nomme le « Mapping » de données. En effet les classes Java de notre application seront par ce processus représentées par des tables dans notre base de données. Le « mapping » permet de définir les différentes propriétés des tables dans notre base mais aussi les relations qu’il peut exister entre celles-ci. Il n’y a pas besoin d’expliquer ici les configurations de Hybernate mais cette figure représente une vue globale de Hibernate dans une application gérant une base de données. Figure 14. L'architecture de Hibernate Cette figure montre la séparation entre l’application et la base de données réalisée grâce à la couche Hibernate qui est chargée de faire l’interaction entre les deux autres couches. c) EJBs Les EJB sont des composants qui possèdent alors certaines caractéristiques comme la réutilisabilité, la possibilité de s’assembler pour construire une application, etc. Les EJB et les beans n’ont en commun que d’être des composants. Les javas beans sont des composants qui peuvent être utilisés dans toutes les circonstances. Les EJB doivent obligatoirement s’exécuter dans un environnement serveur dédié. Les EJB sont parfaitement adaptes pour être intégrés dans une architecture trois tiers ou plus. Dans une telle architecture, chaque tiers assure une fonction particulière : 55 - le client (léger) assure la saisie et l’affichage des données ; - Sur le serveur les objets métiers contiennent les traitements. Les EJB sont spécialement conçus pour constituer de telles entités ; - Une base de données assure la persistance des informations. Les EJB s’exécutent dans un environnement particulier : le serveur d’EJB. Celui ci fournit un ensemble de fonctionnalités utilisées par un ou plusieurs conteneurs d’EJB qui constituent le serveur d’EJB. En réalité, c’est dans un conteneur que s’exécute un EJB et il lui est impossible de s’exécuter en dehors. Figure 15. L'architecture interne de l’EJBs Il existe de nombreux serveurs d’EJB commerciaux : BEA Weblogic, IBM Webshere, Sun IPlanet, Macromedia JRun, Borland AppServer, etc. Il existe aussi des serveurs d’EJB open source dont les plus avancés sont JBoss et Jonas. Selon la table de comparaison au dessus, le JDBC ne fais du « mapping » comme les deux autre solutions, mais pourtant on ne va pas utiliser ces deux bonnes solutions à cause des contraintes de temps, on est d’accord que leur utilisation minimise bien le temps de développement mais c’est le contraire pour leur apprentissage ! On a décidé de n’employer que JDBC de manière simple en créant une « mapper » spécial, il s’agit d’une classe java dont le rôle est de faire un « mapping » pour des objet bien déterminés, ce n’aura pas les avantages des autres solutions mais c’est suffisant pour notre logiciel à cette étape. 56 3.3.2.5. Cycle de vie Les spécificités des applications Web (changement rapide, apparition de nouvelles technilogies, etc.) nous imposent d’adopter pour le développement de notre outil un cycle de vie itératif et incrémental. Mais pour définir une séquence d’étapes, partiellement ordonnées, on a besoin d’une méthode reposant sur UML1, comme le processus unifié2, qui est très utile dans le cas des grands projets. Dans notre cas, et pour simplifier les choses, on va suivre une méthode issue de celle présentée par Roques [Roq 02] dans son livre « UML- Modéliser un site e-commerce». La méthode présentée par Roques est simple et générique et se situe à mi-chemin entre le processus unifié, qui constitue un cadre général très complet de processus de développement, et XP3 (eXtreme Programming) qui est une approche minimaliste à la mode centrée sur le code. Cette méthode résulte de plusieurs années d’expérience sur de nombreux projets dans des domaines variés. Elle a donc montré son efficacité dans la pratique. En plus, cette méthode est caractérisée par les avantages suivants : conduite par les cas d’utilisation, comme le processus Unifié mais bien plus simple ; relativement légère et restreinte, comme XP, mais sans négliger les activités de modélisation en analyse et conception ; Fondée sur l’utilisation d’un sous-ensemble nécessaire et suffisant du langage UML (modéliser 80% des problèmes en utilisant 20% d’UML). Cette méthode divise le processus du développement d’un logiciel en quatre phases, comme suit : - Phase d’identification des besoins et spécification des fonctionnalités. - Phase d’analyse. - Phase de conception. 1 UML (« Unified Modeling Language » soit langage de modélisation objet unifié) est né de la fusion des trois méthodes qui se sont imposées dans le domaine de la modélisation objet au milieu des années1990: OMT, Booch et OOSE. D’important acteurs industriels (IBM, Microsoft, Oracle, DEC, HP, Rational, Unisysetc.) s’associent alors à l’effort et proposent UML 1.0 à l’OMG (Object Management Group) qu’il accepte en novembre 1997 dans sa version 1.1. La version d’UML en cours est UML 2.0 qui s’impose plus que jamais en tant que langage de modélisation standardisé pour la modélisation des logiciels. 2 Le processus unifié est un processus de développement logiciel, itératif, centré sur l’architecture, piloté par des cas d’utilisation et orienté vers la diminution des risques. 3 L'Extreme Programming (XP) est une méthode agile de gestion de projet informatique adaptée aux équipes réduites avec des besoins changeants. Elle pousse à l'extrême des principes simples, cette définition a été prise de l’url : http://www.techno-science.net/?onglet=glossaire&definition=723. 57 - Phase d’implémentation. La première phase utilise un diagramme de cas d’utilisation, puis un diagramme de séquence système, et en fin une maquette d’interface d’IHM 1(non couvert par UML). Évidemment, ces diagrammes doivent être génériques à cette étape là, il s’agit d’une étape préparatoire qui décrit bien les grandes lignes de l’application. La transition vers la modélisation objet est le premier apport de la phase d’analyse, qui décrit, pour se faire, un modèle du domaine2, en fait, ce modèle constitue une version primitive du diagramme de classe. Une fois le modèle du domaine est élaboré, on utilise un diagramme de classes participantes qui effectue la jonction entre tous les artefacts, puisque ce diagramme modélise trois types de classes d’analyse : les dialogues, les contrôles et les entités, ainsi que leurs relations. Le troisième diagramme utilisé dans la phase de l’analyse est appelé Diagramme d’activités de navigation, qui offre la possibilité de représenter graphiquement l’activité de navigation dans l’interface en produisant des diagrammes de navigation. Passons maintenant à la troisième phase, on s’y sert de deux types de diagrammes, les diagrammes d’interaction qui ont pour but d’attribuer précisément les responsabilités de comportement, et ceux de classes de conception qui serviront pour l’implémentation. Le diagramme de classes de conception final doit être complet et compatible avec le langage de programmation utilisé dans la phase suivante. Selon cette méthode la dernière phase décrite est l’implémentation, dans cette phase on écrit le code et on crée la base de données, toute en utilisant les diagrammes élaborés précédemment. 3.3.3. Le Dossier de Conception de WebAnalyser Comme nous avons décidé précédemment, la méthode présentée par Roques serait notre cycle de vie de développement utilisant le langage de modélisation UML (Unified Modeling Language), dans le cadre de cette partie on explique bien les différentes étapes constituant ce cycle de vie, toute en ajoutant quelques étapes nécessaires comme l’étude de faisabilité. 1 Une maquette d’IHM (Interface Homme-Machine) est un produit jetable permettant aux utilisateurs D’avoir une vue concrète mais non définitive de la future interface de l’application .La maquette peut très bien consister en un ensemble de dessins produits par un logiciel de présentation ou de dessin. 2 En fait, L’analyse du domaine est une étape totalement dissociée de l’analyse des besoins, Elle peut donc être menée avant, en parallèle ou après cette dernière. 58 3.3.3.1 Etude de faisabilité Un des apports intéressants de suivre un cycle de vie en créant une application c’est posséder des documentations dédiées, au biais de laquelle on peut comprendre la structure de cette application. Voici un petit exemple pour montrer l’utilité de notre outil : Voici une page HTML : Figure 16.Le code d'une page HTML Ce n’est qu’une page HTML (simple !) mais ouverte avec un Bloc-notes et pas un navigateur Web, imaginons que l’on ait besoin de modifier un élément quelconque (une image par exemple), en chercher la balises <img>, puis en modifier les attributs < src=XXX >, ensuite, rapidement l’enregistrer et l’ouvrir par le navigateur …Trois situations peuvent se présenter : notre modification était la bonne … quel bonheur ! nous avons modifié une autre image … on doit refaire une double manipulation : rectifier l’erreur et refaire le changement en espérant de tomber cette fois sur la bonne image. Enfin, une troisième possibilité dramatique : le navigateur n’affiche rien car on a commit une erreur lexicale ! Face à ce scénario, notre outil WebAnalyser est la planche de salut ! Il nous fournit la position de chaque composant de la page avec sa liste d’attributs et nous donne la 59 possibilité de le modifier avec en prime un nettoyeur qui veille sur la qualité du code HTML. Question : Ce scénario est-il suffisamment fréquent pour nous pousser à développer un outil dédié ? Réponse : A notre ère tout change rapidement surtout les applications Web dont la moyenne de vie (selon des études) ne dépasse pas les quatre ans. Un outil facilitant cette tache est indispensable ! 3.3.3.2. Identification des besoins et spécification des fonctionnalités : A -Identification et représentation des besoins : diagramme de cas d’utilisation. Extraire les coordonnées et les caractéristiques de chaque élément dans la page HTML est le rôle de notre outil. Ceci nous permettra de modifier un élément spécifique en toute sécurité. L’input de l’outil sera un site Web indiqué soit par son chemin s’il était enregistré sur un ordinateur client, soit par son URL s’il était hébergé sur le Web. En plus, vu la multiplicité et la diversité de composants Web, le logiciel doit donner à l’utilisateur la possibilité de choisir les éléments qui l’intéressent, pour ne pas le surcharger d’éléments inutiles. Pour l’output : une représentation de l’application Web montrant ces différents éléments a différents degrés de granularité. Les liens reliant ces éléments doivent également être gérés afin de suivre les répercutions de chaque changement. Cette figure représente une description superficielle (boite noir) de l’outil : Granularité L’outil doit permettre à l’utilisateur de gérer plusieurs applications Web simultanément. 60 Modèle de métier Le modèle du métier suivant montre généralement les fonctionnalités de base de ce logiciel avec l’acteur unique qui les utilise. Créer un nouveau projet ou ouvrir un projet établit précédemment Spécifier un site l'utilisateur Naviguer sur les composants du site modèle du mètier Modèle des cas d’utilisation Pour plus de détaille le modèle du cas d’utilisation suivant décrit toutes les fonctionnalités dont ce logiciel se chargerait. 61 une fois le (parsing) est terminé avoir de l'aide Naviguer sur les composants dans le cas où le site est sur le web choisir entre les projets créés precedamment <<extend>> spécifier le site aspirer le site désiré utilisateur e.x.:les composants qui pourraient etre extraites fixer les options specifiques a chaque projet ajouter des mises a jour personaliser le logiciel au moment de l'installation ou à tous moment modèle du C.U. detaillé Figure 17. Le Modèle des cas d'utilisation Ne décrivant pas des fonctionnalités futures, (comme la possibilité de modifier les composants), ce modèle indique une possibilité d’aspirer le site s’il n’était pas enregistré sur le disque dur, en suite, le logiciel fonctionne selon deux types d’options : les options personnelles qui sont configurées pour la première fois au moment de l’installation du logiciel et qui concernent l’ergonomie générale, ces configurations peuvent être modifiées à tous moment après l’installation. les options spécifiques à chaque site (projet), et qui sont définis au démarrage de ce projet (pour les modifier, l’utilisateur doit créer un nouveau projet pour le même site). Une fois l’outil exécuté sur une application Web, l’utilisateur aura les différents accès à une arborescence de ses différentes composantes (extraites selon les options spécifiées), et stockés dans la base de données. B -Spécification détaillée des besoins : diagrammes de séquence système. Le diagramme de cas d’utilisation ci-dessus montre les besoins fonctionnels que doit satisfaire le logiciel : • Spécifier le site ; • Choisir entre les projets créés précédemment ; 62 • Naviguer sur les composants. Les besoins non fonctionnels : • Personnaliser le logiciel ; • Fixer les options spécifiques à chaque projet ; • Ajouter des mises à jour ; • Avoir de l’aide. Selon la méthode qu’on suit on doit détailler chaque cas d’utilisation à travers un scénario générique, mais puisque nos cas d’utilisation sont simples et unitaires, on ne voit aucune nécessité de les spécifier chacun à part. Nous proposons donc un seul diagramme de séquence en considérant le logiciel comme une boite noire : 63 Modèle de séquence simple (boite noire), représentant tout le système comme une seule unité : :logiciel : utilisateur installer definir des configurations personnelles demarrer logiciel specifier chemin site si nouveau projet si le chemin est un URL alors aspirer le site definir options de ce projet demarrer (parsing) parser(site) si ouvrir choisir projet afficher (resultat,con.per.) naviguer quitter() enregistrer?(oui/non) repondre si (non) supprimer le projet X Figure 18. Un Modèle Générique de Séquences 64 C -Maquette de l’IHM de l’application (non couvert par UML). Selon notre méthode, cette phase consiste à suggérer des maquettes non définitives de l’interface graphique, pour en avoir une vue concrète, nous avons élaboré ces exemples : Pour la fenêtre d’accueil cette maquette pourrait donner à l’utilisateur une idée sur le logiciel et lui offrir la possibilité, soit de créer un nouveau projet, soit de choisir un projet préétablit, en plus l’utilisateur peut demander de l’aide s’il en a besoin. Figure 19. La fenêtre principale du WebAnalyser Dans le cas ou l’utilisateur choisit l’option « créer un nouveau projet » le bouton (personnaliser) va conduire l’utilisateur vers cette maquette (en dessous) qui lui permet de spécifier les éléments à extraire : 65 Figure 20. La fenêtre de personnalisation des balises à extraire par WebAnalyser Généralement il ne reste que deux fenêtres principales, la première a pour but d’afficher à l’utilisateur une barre d’avancement pour lui décrire l’état du parseur, et la dernière, qui est la plus importante, se chargera de présenter le contenu de la base de données à l’utilisateur sous la forme d’une arborescence. 66 3.3.3.3. Phases d’analyse Les phases précédentes s’apparentent à une analyse fonctionnelle classique. Celle-ci demeure limitée lorsque nous visons une modélisation objet. Les phases suivantes vont nous aider à opérer une transition véritable vers cette modélisation objet. A- Analyse du domaine : modèle du domaine. Les entités suivantes représentent les trois classes de base constituant notre logiciel, c’est un modèle de domaine ou la modélisation est générale et les classes sont décrites seulement par leurs attributs : Projet (from NewClass) nomProjet chemin listeBalises compose Page (from databaseComponent) chemin : String nompage : String 0..n / type contient Element (from databaseComponent) position : Integer balise : String listeAttributs 1 elementPere : Element longueur : Integer Figure 21. Le Modèle du Domaine On remarque que ce diagramme ne comporte ni des classes d’interface graphique ni des classe de contrôle (comportant des méthodes). On ne modélise ici que les classes métier, dont le rôle est de permettre à des données et à des relations d’être stockées dans une base des données. 67 Le diagramme précédent peut être détaillé comme suit : LienHypertexte listeElementsInclus pourvoir 0..1 1..n Table caption : String listeElementsInclus : Element 0..n includeLien includeTable 0..n 0..n Frame IdFrame : String 1 0..n 0..n 0..1 0..1 Page contient chemin : String nompage : String 0..n 1 / type Element position : Integer 0..1 balise : String listeAttributs elementPere : Element longueur : Integer Texte extraitTexte : String 0..n Multimedia / src : String / typeMultimedia : String / typeImage : String 0..n 0..1 afficher includeForm submitVers Formulaire 0..n listeElementsInclus 0..1 ScriptDynamique / langue : String code : String commentaire extraitCommentaire : String Figure 22. Diagramme de Classes Entités B- Diagramme de classes participantes. A partir des phases précédentes on a obtenu des artefacts des types divers, mais comment interagissent ces artefacts entre eux ? En fait, modéliser les relations rattachant chaque artefacts aux autre est une procédure nécessaire, et pour ce faire on va utiliser ce qu’on appelle (Diagramme de classes participantes). Un diagramme de classes participantes est constitué de trois types des classes comme suite : Les classes de dialogues : Les classes qui permettent les interactions entre l’IHM et les utilisateurs sont qualifiées de dialogues. Ces classes sont directement issues de l’analyse de la maquette. 68 Les classes de contrôles : Les classes qui modélisent la cinématique de l’application sont appelées : Contrôles. Elles font la jonction entre les dialogues et les classes métier en permettant aux différentes vues de l’application de manipuler des informations détenues par un ou plusieurs objets métier. Les classes entités : Les classes entités, qui proviennent directement du modèle du domaine, sont qualifiées d’entités. Ces classes sont généralement persistantes, c’est-àdire qu’elles survivent à l’exécution d’un cas d’utilisation particulier. create Configuration Projet manipule Parcourir create utilisateur Accueil (from Use Case View) Control Page FileWalk lance Ouvrir create EnCours Parseur Element 69 C- Diagrammes d’activités de navigation. Parcourir Configurations btnValider btnParcourir btnValider btnPersonnaliser btnSuivant Accueil EnCours btnSuivant Presentation btnAnnuler btnOuvrir btnValider btnNouveau ou btnOuvrir Ouvrir Figure 23. Diagramme d’Activités de Navigation 3.3.3.4. Phase de conception : A- Diagrammes d’interaction. Dans le cadre de cette phase on va mieux détailler l’interaction entre les différents objets du système, dans la phase de spécification des besoins on a élaboré un diagramme des séquences système, il était générique (boite noire), et il n’expliquait pas suffisamment les interactions entre les objets du système. En plus une problématique apparaît à ce niveau, c’est la répartition des opérations sur les différentes classes. Dans tous les cas, les diagramme d’interactions détaillés peuvent nous aider à bien choisir les classes sur les quelles on doit affecter chaque méthode, c’est possible si on considère que l’objet cible d’un message envoyé entre deux objets appartient nécessairement à la classe la plus adéquate pour comporter la méthode responsable de ce message. 70 Il est préférable d’accompagner cette phase d’un diagramme de classes de conception complet mais indépendant des choix technologiques qui seront faits ultérieurement. De ce fait, on suggère le diagramme de classes suivant : Ouvrir _ creer _ Projet _ manupule _ Parcourir _ creer _ l'utilisateur _ Accueil _ FileWalk _ _ lanser Control _ Page _ (from Use Case View) _ utilise _ Configuration _ creer Parseur _ _ (from Parser) _ _ EnCours _ utilise Presentation _ Element _ _ utilise _ Mapper _ _ Les diagrammes des séquences détaillant les cas d’utilisations les plus intéressants : 71 A.1. Le cas d’utilisation : choisir entre les projets créés précédemment. : utilisateur : Acceuil : Mapper : Ouvrir ouvrir : Presentation creer creer faireMapper afficher specifier projet creer creer faireMapper naviguer faireMapper Figure 24. Diagramme de Séquences : choisir entre les projets créés précédemment 72 A.2. Le cas d’utilisation : spécifier le site et lancer le « parsing » : utilisateur : Acceuil : EnCours : Mapper : Projet : FileWalk : Page : Element specifier un nom specifier un chemin choisirBtnSuivant creer faireMapper verifier Inexistance [si existe]signaler l'existance [si non]creer faireMapper(:projet) creer afficher creer run indiquer creer creer faireMapper creer faireMapper Figure 25. Diagramme de Séquences : spécifier le site et lancer le « parsing » 73 A.3. Le cas d’utilisation : fixer les options spécifiques à chaque projet : utilisateur : Acceuil : Configuration appuyer sur BtnPersonnaliser [nom et chemin valide] creer afficher specefier les configurations valider Figure 26. Diagramme de sequences: fixer les options spécifiques à chaque projet B. Diagramme de classes de conception. Une première ébauche du diagramme de classes de conception a déjà été élaborée en parallèle au diagrammes d’interaction. Il faut maintenant le compléter en précisant les opérations privées des différentes classes. Il faut prendre en comptes les choix techniques, comme le choix du langage de programmation et le choix des différentes librairies utilisées. Les spécificités du langage Java sont plus claires dans ce modèle, par exemple on a inventé la classe (EditorKit) qui est une classe prédéfinie faisant partie du parseur HTML de ce langage. d’autre part c’est nécessaire d’indiquer l’utilisation d’une classe « Mapper » se chargeant de toute relation avec la base de données, les classes entités qui constituent la base de données peuvent être détaillées en utilisant la spécialisation, mais on va ajourner cet étape pour des raisons de lisibilité. 74 Ouvrir creer Projet manupule Parcourir creer l'utilisateur Accueil FileWalk Control Page lanser (from Use Case View) utilise Configuration creer Parseur (from Parser) avertir EnCours Presentation Element utilise utilise EditorKit Mapper Figure 27. Diagramme de classes de conception Projet nomProjet chemin listeAttributs creer Ouvrir manupule Parcourir l'utilisateur Accueil Page chemin nomPage / type creer Control FileWalk preparerParsing() lancerParsing() run() lancer (from Use Case View) Parseur utilise parse() Configuration creer (from Parser) avertir EnCours utilise utilise Mapper Presentation faireMapper() EditorKit Element position balise listeAttributs elementPere longueur handleXXX() Figure 28. Diagramme de classes de conception détaillé 75 3.3.3.5. Phase d’implémentation - Implémentation en SQL Retournant à la construction de la base de données relationnelle, en fait, les tables de cette base ne sont que les classes entités représentées dans le modèle de conception de notre logiciel, mais avec les détails qu’on va aborder dans le cadre de cette section. On commence par les trois classes principales : Projet, Page et Élément. La figure suivant montre ces trois classes : Projet nomProjet chemin listeBalises Page 0..n chemin : String nompage : String / type contient 1 Element position : Integer balise : String listeAttributs elementPere : Element longueur : Integer include Cette conception est suffisante pour modéliser tous les composants qui nous intéressent. La table Élément pose un problème : chaque élément ayant ses propres spécificités, beaucoup de champs resteront vides ce qui rend cette table éparse. En plus, chercher un composant nécessiterait le parcours de toute la table. Pour se réduire ce gaspillage, nous avons crée des tables dédiées : tables, objets Multimédia, formulaires, etc. La solution finale serait comme suit : 76 LienHypertexte listeElementsInclus pourvoir 0..1 Projet nomProjet chemin listeBalises 1..n Table caption : String listeElementsInclus : Element 0..n includeLien includeTable 0..n 0..1 0..n Page contient chemin : String nompage : String 0..n 1 / type Frame IdFrame : String 1 0..n 0..n 0..1 0..n Element position : Integer 0..1 balise : String listeAttributs elementPere : Element longueur : Integer 0..n 0..1 afficher includeForm submitVers Formulaire 0..n listeElementsInclus 0..1 ScriptDynamique / langue : String code : String Texte extraitTexte : String Multimedia / src : String / typeMultimedia : String / typeImage : String commentaire extraitCommentaire : String Passons maintenant à la création de la base de données, selon les règles de passages connues, on obtient le schéma relationnel suivant : Elément (#chemin, #nomPage, position, balise, listeAttributs, longueur, #cheminPere, #nomPagePere, #positionPere, #cheminLien, #nomPageLien, #positionLien, #cheminTable, #nomPageTable, #positionTable, #cheminForm, #nomPageForm, #positionForm). Page (chemin, nomPage, type). Frame (#chemin, #nompage, idFrame, #cheminAff, #nomPageAff). Text (#chemin, #nompage, #position, extraitTexte). Commentaire (#chemin, #nompage, #position, extraitCommentaire). LienHypertexte (#chemin, #nompage, #position, listeElementsInclus, #versChemin, 77 #versNomPage, #versIdFrame). Multimedia (#chemin, #nompage, #position, src, typeMultimedia, typeImage). Table (#chemin, #nompage, #position, listeElementsInclus). ScriptDynamique (#chemin, #nompage, #position, langue, code). Formulaire (#chemin, #nompage, #position, listeElementsInclus, #subChemin, #subNomPage, #subIdFrame). 78 Conclusion Le présent rapport est la synthèse d’un travail effectué dans le cadre de notre projet de fin d’études. Ce travail trouve son utilité dans un contexte de maintenance d’applications Web existantes Nous sommes parti d’un constat : La dernière décennie a assisté à une explosion du nombre d’applications basées sur le Web. Malheureusement, la technologie Web évolue à un tel rythme qu’une application Web est très vite obsolète. Des études récentes sur le développement de projets basés sur le Web viennent confirmer cet état chaotique (la durée de vie moyenne d’une application Web est estimée se situer entre 3 et 4 ans). Les équipes de développement rencontrent des problèmes majeurs pour faire face aux conditions instables et changeantes de l’environnement Web et ils ont du mal à s’adapter au « Web Time » et à la pression qui le caractérise. Ce phénomène, souvent appelé « Web Speed » ou vitesse du Web, rétrécit considérablement les délais. Pris au dépourvu, les développeurs d’applications Web optent pour une approche ad hoc, plus simple en apparence, mais dont les retombés sont néfastes, dés lors que la taille de l’application devient importante, et que les conséquences d’une modification du code de l’application, deviennent imprévisibles. Par ailleurs, l’état de l’art révèle une panoplie aussi riche que diverse de travaux ciblés sur la conception et le développement d’applications Web. En revanche, il existe un réel besoin en outils et techniques qui assistent le développeur lors de la maintenance et l’évolution de ces dernières. Malgré les tentatives, les outils disponibles ne répondent que partiellement aux attentes des développeurs. Plusieurs facteurs sont à l’origine de ce constat. Le plus important étant, la complexité et l’effort nécessaires à la compréhension d'un système avant toute intervention en vue de le corriger ou de le faire évoluer par de nouveaux besoins. En réponse à ce constat, nous proposons dans le cadre de ce mémoire un outil, appelé WebAnalyser dont le principal objectif est d’exhiber l’architecture interne (souvent complexe) d’une application Web en dévoilant d’une part ses différentes 79 composantes et d’autre part, les liens qui existent entre elles, afin d’en faciliter la compréhension. Cet outil s’inscrit dans le cadre d’un projet de rétro-conception d’applications Web appelé RetroWeb [Ess 07]. RetroWeb est une démarche qui a été proposée par Madame Sélima Besbes Essanaa, au sein de l’équipe ISID (Ingénierie des Systèmes d’Information Décisionnels) du laboratoire CEDRIC (Centre d’études et de Recherche en Informatique du Cnam) du CNAM (Conservatoire National des Arts et Métiers) à Paris, et ce dans le cadre de sa thèse de doctorat, qui sera publiée dans les mois à venir. RetroWeb est une solution pour la rétro-conception de sites Web peu (ou pas) documentés. Or, avant tout processus de rétro-conception, le passage par une phase de compréhension de l’application existante est indispensable. WebAnalyser intervient en amont de RetroWeb pour assister le rétro-concepteur (ou plus généralement le développeur) dans la compréhension de l’architecture interne d’une application Web. Nous avons structuré notre rapport comme suit : Le premier chapitre est dédié à la description des catégories d’applications Web existantes. Le second chapitre présente l’état de l’art sur notre problématique. Le chapitre 3 présente notre contribution. Il est divisé en deux sections. La première présente notre solution conceptuelle. Nous y décrivons notamment, les composants pris en charge par notre outil ainsi que le modèle qui les supporte. La seconde section est consacrée à la description de la réalisation de WebAnalyser. Dans cette dernière section nous décrivons notamment l’architecture de cet outil, les choix techniques pris en compte et enfin, le cycle de développement suivi. L’outil que nous proposons est certes, intéressant, mais peut se prêter à des améliorations. Celles-ci peuvent être : - Par le biais d’améliorations des performances des modules déjà implémentés et la documentation du code java. En effet, ce que nous avons concrétisé est une version zéro de l’outil WebAnalyser, qui fera certainement l’objet de plusieurs autres stages, et l’une de nos responsabilités, est d’assurer la communication entre les différents intervenants dans cette œuvre. 80 - Par la prise en charge de nouveaux composants susceptibles d’intervenir dans la construction d’une application Web. Actuellement, WebAnalyser ne supporte que les composants les plus usuels (HTML, Scripts Java, etc.). - Par le biais de l’enrichissement par de nouvelles fonctionnalités. En effet, WebAnalyser ne supporte actuellement, que des analyses syntaxiques et peut évoluer pour supporter une analyse sémantique des composants qui s’y prêtent (notamment les scripts). - Par l’amélioration de l’interface graphique, en permettant des zooms avant et arrière sur les composants avec différents niveaux de granularité de l’affichage. Enfin, cette expérience a été des plus enrichissantes, dans la mesure où elle nous a permis : - de concrétiser et de tester les notions acquises durant nos quatre années d’études à l’École Supérieure de Commerce de Tunis ; - de flirter avec le monde de la recherche, de vivre des moments intenses de tâtonnement et d’incertitude avant de découvrir enfin la joie de réussir à prouver qu’une solution théorique à un problème est, concrètement et techniquement, faisable. Nous espérons, à travers ce rapport, avoir réussi à vous faire partager ces moments et à susciter votre intérêt pour ce travail. Et même si nous donnons le sentiment de nous redire, cette expérience nous a propulsé sur la voie de la maîtrise d’ouvrage. Nous la referions avec plaisir et nous espérons qu’elle ne sera pas la dernière. 81 Bibliographie [Aud 03] Laurent AUDIBERT, UML 2.0, http:// www-lipn.univ- paris13.fr/audibert/pages/enseignement/cours.htm [Bar 00] Baresi L., Garzotto F., Paolini P., "From Web Sites to Web Applications: New Issues for Conceptual Modeling", in Proceedings of the International Workshop on The World Wide Web and Conceptual Modeling, co-located with the 19th International Conference on Conceptual Modeling, Salt Lake City (USA), Octobre 2000 [Con 00] Conallen J., "Concevoir des applications Web avec UML", Éditions Eyrolles, 2000 [Den 98] Dennis A.R., "Lessons from Three Years of Web Development", Communications of the ACM, 41(7), Juillet 1998, pp. 112-113 [Des 02] Desphande Y., Chandrarathna A., Ginige A., "Web Site Auditing – First Step Towards Re-engineering", Proc. 14th International Conference on Software Engineering and Knowledge Engineering (SEKE’02), Ischia, Italie, Juillet 2002, p. 731-737 [Isa 98a] Isakovitz T., Bieber M., Vitali F., "Web Information Systems", Communications of the ACM, 41(7), Juillet 1998, pp. 78-80 [Kel ] Keld H. Hansen, “Unweaving a Tangled Web With HTMLParser and Lucene”, http://javaboutique.internet.com/ [Lan 05] Lang M., Fitzgerald B., "Hypermedia Systems Development Practices: A survey", IEEE Software, Mars- Avril 2005 [Luc 00] Van Lancker Luc, le site (Apprendre le langage HTML), http://www.... [Mec 99] Mecca G., Merialdo P., Atzeni P., Crescenzi V., "The ARANEUS Guide to Web-Site Development", ARANEUS Project Working Report, AWR-1-99, Mars 1999 [Pas 00] Pascal EMMA, la rubrique des cours HTML, www.laltruiste.com [Rag ] Raggett D., "Clean up your Web pages with HTML Tidy", http://www.W3.Org/Poeple/Raggett/Tidy/ [Ric 00a] Ricca F., Tonella P., "Web site analysis: Structure and evolution", International Conference on Software Maintenance (ICSM ’00), Octobre 2000, p. 76-86 82 [Rol 88] Rolland C., Foucault O., Benci G., "Conception des Systèmes d’Information – La méthode REMORA", Eyrolles, 1988 [Roq 02] Roques, P, UML - modéliser un site – commerce, (2002), Eyrolles [Roq 06a] Roques, P, UML 2 - modéliser une application Web, (2006a), Eyrolles [Roq 06b] Roques, P, UML 2 par la pratique (étude de cas et exercices corrigés) (5ed.), (2006b), Eyrolles. [Roq 03] Roques, P. &Vallée, FUML en action (2ed.), (2003), Eyrolles [Sco ] Scott Violet, “The Swing HTML Parser, Parsing a Netscape Navigator Bookmarks File”, http://java.sun.com/ [Ser02] Serge tahé, “Introduction à la programmation Web en Java”,Septembre 2002 [Tak 97] Takahashi K., Liang E., "Analysis and Design of Web Based Information Systems", Proceedings of the 6th International World Wide Web Conference (WWW6), Santa Clara, California, USA, Avril 1997 [Til 01] Tilley S., Huang S., "Evaluating the Reverse Engineering Capabilities of Web Tools for Understanding Site Content and Structure: A Case Study", Proceedings of the 23rd International Conference on Software Engineering (ICSE 2001), Mai 2001, p. 514-523, [Tra 05] Porfirio Tramontana, « Reverse Engineering of Web Applications », Ph. D. Thesis 83