Rapport - Département Informatique
Rapport - Département Informatique
Rapport - Département Informatique
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Université de Nice - Sophia-Antipolis<br />
Faculté des sciences Valrose<br />
28 avenue valrose, 06103 Nice<br />
Travail d’étude et de recherche<br />
Gestion-évaluation<br />
semi-automatique de projets<br />
RAPPORT<br />
1 er juin 2011<br />
Présenté par :<br />
M. Albertini Ken<br />
M. Bertrand Yoann<br />
M. Franot Raphaël<br />
M. Lludice Daniel<br />
Sous la direction de :<br />
M. Huet Fabrice
Remerciements<br />
Nous souhaiterions remercier M. Fabrice Huet pour nous avoir proposé ce sujet de<br />
TER. Nous le remercions également pour ses conseils, ses critiques positives et son encadrement.<br />
Qu’il nous soit aussi permis de remercier l’ensemble des enseignants du Master <strong>Informatique</strong><br />
de la faculté des sciences de Valrose.
Résumé<br />
Nous avons effectué notre Travail d’Étude et de Recherche (TER) sous la direction<br />
de M. Fabrice Huet. Le but de ce travail était de créer un portail Web pour la gestion<br />
et l’évaluation de projets étudiants. Comme pour tout projet informatique, nous avons<br />
effectué un ensemble de tâches afin de répondre à la problématique. Ces tâches peuvent<br />
être résumées en trois grandes phases :<br />
– une phase d’analyse et de conception,<br />
– une phase de développement,<br />
– une phase de tests et de packaging 1 .<br />
La première phase consistait à dresser une étude de l’existant afin de déterminer si des<br />
projets similaires avaient déjà été développés. A partir des informations relevées, nous<br />
avons déterminé les technologies que nous allions utiliser ainsi que la structure générale<br />
de notre portail.<br />
Une fois la première phase réalisée, nous avons commencé le développement de l’application<br />
en déléguant à chacun des membres de l’équipes des tâches d’implémentation en<br />
fonction de son niveau et de sa productivité.<br />
Enfin, la troisième phase a permis d’effectuer des tests et de créer une documentation<br />
pour les futurs utilisateurs de l’application.<br />
Au niveau du pilotage du projet, nous avons définis un diagramme de GANTT que nous<br />
avons dû modifier plusieurs fois lors du TER afin de pallier certains problèmes (manque<br />
de temps, de compétences ou de moyens). En plus de cela, il a été décidé de définir chaque<br />
semaine les tâches prioritaires et de faire un suivi journalier du travail attendu et du travail<br />
effectué. Ces opérations ont globalement permis de mieux appréhender les difficultés<br />
survenues au fur et à mesure du déroulement du projet.<br />
A la fin de ce TER, nous avons réalisé une bonne partie des fonctionnalités demandées.<br />
Néanmoins, il reste quelques fonctionnalités que nous n’avons pas eu le temps d’implémenter<br />
(gestion des groupes d’étudiants et gestion des dates de rendu). Néanmoins, nous avons<br />
développé notre application pour que celle-ci soit la plus évolutive possible, afin de donner<br />
la possibilité à d’autres personnes de continuer notre travail.<br />
1. Création de documentation et mise en forme du livrable.
Table des matières<br />
1 Introduction 1<br />
1.1 Problématique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1<br />
1.2 État de l’art . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3<br />
1.2.1 Solution de gestion de projet . . . . . . . . . . . . . . . . . . . . . 3<br />
1.2.2 Solution d’évaluation de code . . . . . . . . . . . . . . . . . . . . 3<br />
1.2.3 Résultats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4<br />
2 Choix d’implémentation 5<br />
2.1 Expression des besoins . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />
2.2 Étude comparative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />
2.2.1 Technologie Web . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />
2.2.2 Technologies d’évaluation de code . . . . . . . . . . . . . . . . . . 7<br />
2.2.3 Base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8<br />
2.3 Résultats d’étude . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10<br />
2.3.1 GWT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10<br />
2.3.2 Jenkins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10<br />
2.3.3 MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10<br />
3 Travail effectué 12<br />
3.1 Serveur de test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12<br />
3.2 Portail Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12<br />
3.2.1 Définition des fonctionnalités . . . . . . . . . . . . . . . . . . . . 12<br />
3.2.2 Conception de l’IHM . . . . . . . . . . . . . . . . . . . . . . . . . 13<br />
3.2.3 Implémentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />
3.3 Jenkins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />
3.3.1 Prise en main . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />
3.4 Base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15<br />
3.4.1 Conception des tables . . . . . . . . . . . . . . . . . . . . . . . . 15<br />
3.4.2 Remplissage et tests . . . . . . . . . . . . . . . . . . . . . . . . . 15<br />
3.5 Connexions entre les différentes parties . . . . . . . . . . . . . . . . . . . 17<br />
3.5.1 Connexion portail - Jenkins . . . . . . . . . . . . . . . . . . . . . 17<br />
3.5.2 Connexion portail - BD . . . . . . . . . . . . . . . . . . . . . . . 18<br />
3.6 Ajouts de fonctionnalités . . . . . . . . . . . . . . . . . . . . . . . . . . . 19<br />
3.6.1 Authentification et gestion des connexions au portail . . . . . . . 19<br />
3.6.2 Gestion des groupes d’étudiants . . . . . . . . . . . . . . . . . . . 20<br />
3.6.3 Gestion automatique des comptes FTP . . . . . . . . . . . . . . . 20<br />
4
3.6.4 Documentation et mise en forme du livrable . . . . . . . . . . . . 21<br />
3.6.5 Ergonomie de l’IHM . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />
4 Gestion de projet 23<br />
4.1 Stratégie de pilotage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23<br />
4.2 Évolution du planning . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24<br />
4.3 Problèmes rencontrés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24<br />
4.4 Solutions retenues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25<br />
4.5 Travail de chacun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25<br />
4.5.1 Ken Albertini . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25<br />
4.5.2 Yoann Bertrand . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26<br />
4.5.3 Raphaël Franot . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26<br />
4.5.4 Daniel Lludice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27<br />
5 Conclusion 28<br />
5.1 Travail effectué . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28<br />
5.2 Travail restant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29<br />
5.3 Optimisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30<br />
5.3.1 Simplification de l’installation . . . . . . . . . . . . . . . . . . . . 30<br />
5.3.2 Fonctionnalités . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30<br />
5.4 Gain de connaissances techniques . . . . . . . . . . . . . . . . . . . . . . 31<br />
5.5 Gain de connaissances pratiques . . . . . . . . . . . . . . . . . . . . . . . 31<br />
6 Glossaire 32<br />
Bibliographie 35
Chapitre 1<br />
Introduction<br />
Ce chapitre a pour objectif de présenter le sujet du Travail d’Étude et de Recherche<br />
effectué par Ken Albertini, Yoann Bertrand, Raphaël Franot et Daniel Lludice. Dans<br />
un premier temps, nous traitons de la problématique soulevée par le sujet ainsi que<br />
des différentes fonctionnalités définies par l’encadrant. Dans un second temps, nous<br />
présentons les principaux résultats d’une étude de l’existant que nous avons mené afin de<br />
déterminer les solutions déjà implémentées.<br />
1.1 Problématique<br />
Pour un enseignant, la gestion et l’évaluation de projets étudiants peuvent s’avérer<br />
complexes à cause d’un certain nombre de problèmes :<br />
– non-respect des conditions de rendu (mauvais nom d’archive ou de fichiers, etc.),<br />
– non-respect des dates de rendu,<br />
– problèmes divers (code trop volumineux pour un simple mail, etc.),<br />
– problèmes de fonctionnement une fois le code évalué sur la machine de l’enseignant<br />
(architecture et système d’exploitation différents, bibliothèques manquantes, etc.).<br />
Ces problèmes demandent à l’enseignant un temps de travail supplémentaire. Le but de<br />
notre TER est d’essayer de réduire ce travail fastidieux en implémentant un portail Web<br />
de gestion et d’évaluation de projets. Pour cela, le portail doit implémenter un certain<br />
nombre de fonctionnalités, et ainsi donner la possibilité :<br />
– de gérer des utilisateurs différents,<br />
– de créer et de gérer des projets,<br />
– de contrôler le rendu des étudiants (nom et format des archives, etc.),<br />
– de centraliser la récupération des projets.<br />
En plus de simplifier le travail des enseignants, le portail doit aussi permettre aux<br />
étudiants de soumettre leurs projets afin que ceux-ci soient pré-évalués. Pour éviter les<br />
abus, la soumission du code est gérée par un système de crédits, qui permet à l’étudiant<br />
de déposer son travail un nombre limité de fois. Le nombre de crédits est fixé par l’enseignant<br />
et peut être différent pour chaque projet. En déposant leur code tout au long<br />
du projet (1 crédit pour une soumission), les étudiants peuvent ainsi s’assurer du bon<br />
1
espect des conditions de rendu. Ces conditions peuvent prendre plusieurs formes, comme<br />
par exemple :<br />
– vérifier que le projet est implémenté dans le bon langage,<br />
– vérifier que le projet compile,<br />
– vérifier la présence d’une méthode ”main”,<br />
– s’assurer que le résultat obtenu est conforme au résultat attendu.<br />
– etc.<br />
En résumé, l’objectif du portail est double. Dans un premier temps, il permet aux enseignants<br />
une gestion et une récupération simplifiées des projets (récupération centralisée,<br />
contrôle sur le nom des archives rendues, etc.). Dans un second temps, le portail octroi aux<br />
étudiants un outil qui permet de s’assurer que leur code est conforme aux conditions de<br />
rendu. D’autre part, on peux imaginer que si l’enseignant note les projets sur la machine<br />
qui héberge le serveur, cela peut éviter les problèmes dues aux différences d’architectures<br />
et de système d’exploitation (car l’enseignant et les étudiants ont la même machine de<br />
test).<br />
La figure ci-dessous dresse l’ensemble des fonctionnalités que le portail doit fournir :<br />
Figure 1.1 – Tableau des fonctionnalités du portail.<br />
2
En plus des fonctionnalités ci-dessus, le portail doit mettre l’accent sur la facilité d’utilisation<br />
et l’ergonomie. De plus, l’application doit pouvoir évoluer, en donnant la possibilité<br />
d’implémenter facilement d’autres fonctionnalités (protéger l’exécution des projets dans<br />
des machines virtuelles, gestion de plusieurs promotions, etc.).<br />
1.2 État de l’art<br />
Cette section traite de l’étude que nous avons mené afin de déterminer si d’autres<br />
implémentations répondaient déjà à notre problématique. Nous discutons ici de deux<br />
points ; les applications de gestion de projets étudiant et les applications d’évaluation de<br />
code informatique.<br />
1.2.1 Solution de gestion de projet<br />
Il existe un grand nombre de solutions logicielles permettant la gestion d’étudiants et<br />
de projets à travers un portail Web 1 . Ces solutions offrent des fonctionnalités usuelles,<br />
comme la possibilité de créer et de supprimer des personnes, de gérer des groupes ou<br />
encore de déposer du contenu sur un serveur. Néanmoins, beaucoup de ces solutions<br />
dépassent notre utilisation, en offrant d’autres fonctionnalités, comme la gestion d’emploi<br />
du temps, de relevés de notes ou encore de listes de diffusion. De plus, un grand nombre<br />
de ces solutions ne sont ni open-sources, ni gratuites.<br />
1.2.2 Solution d’évaluation de code<br />
Après quelques recherches, nous avons découvert deux sortes de logiciels permettant<br />
d’évaluer 2 du code ; les logiciels d’intégration continue (IC) et les logiciels de type ”Automated<br />
Judge System” (AJS).<br />
Les logiciels d’intégration continue sont des logiciels utilisées dans certaines formes de programmation.<br />
L’intégration continue permet à des développeurs de s’assurer que l’intégration<br />
du logiciel est faites tout au long du processus de développement. Plus généralement, ces<br />
logiciels permettent d’obtenir des résultats qualitatifs et quantitatifs d’un code donné.<br />
Les logiciels dit ”Automated Judge System” sont utilisés lors de compétitions ou autre<br />
rendez-vous de développeurs. Ils permettent de confronter plusieurs programmes entre<br />
eux afin de déterminer le plus rapide, le moins gourmand en ressources ou encore celui<br />
avec la plus petite taille. Là encore, ce type de programme permet de donner des informations<br />
quantitatives et qualitatives.<br />
1. D’une manière plus générale, ces logiciels traitent du personnel et du contenu (images, vidéos, etc.).<br />
2. Par évaluer, nous entendons compiler et exécuter.<br />
3
1.2.3 Résultats<br />
Notre première analyse montre que notre problématique n’a jamais vraiment été soulevée.<br />
Il existe un ensemble de logiciel permettant la gestion d’étudiants, mais ces derniers<br />
sont souvent trop complets. De plus, ces solutions sont très souvent payantes et leurs<br />
sources ne sont pas disponibles.<br />
Intuitivement, les logiciels d’IC et d’AJS ne sont pas conçus pour l’utilisation que nous<br />
voulons en faire. Néanmoins, cette première étude a permis de voir que les logiciels d’IC<br />
répondent mieux à nos critères, car il n’est pas prévu que notre portail confronte les<br />
projets étudiants entre eux.<br />
4
Chapitre 2<br />
Choix d’implémentation<br />
Cette section traite des choix d’implémentation fait sur les différentes parties de l’application<br />
(technologies Web, plate-forme d’évaluation et base de données). Pour chacune<br />
des parties, nous établissons un bref récapitulatif de nos recherches, puis nous exploitons<br />
les résultats obtenus afin de choisir les technologies les plus adéquates.<br />
2.1 Expression des besoins<br />
Pour pouvoir mener à bien notre projet, nous effectuons dans un premier temps un<br />
travail de recherche sur les différentes technologies Web disponibles. Nous dressons une<br />
liste des critères déterminants que la technologie choisie doit avoir. La liste de ces critères<br />
est présentée ci-dessous :<br />
– Langage déjà connu ; afin d’éviter d’apprendre un nouveau langage.<br />
– Facilité d’implémentation ; (API, code déjà produit, bibliothèques, etc.).<br />
– Technologie plébiscitée ; afin d’augmenter potentiellement la documentation disponible.<br />
– Interopérabilité et évolutivité ; afin de pouvoir modifier et améliorer l’application<br />
au fil du temps.<br />
– Autres (ancienneté de la technologie, facilité de prise en main, etc.).<br />
De la même manière, nous listons ensuite les caractéristiques que la technologie d’évaluation<br />
de code doit avoir :<br />
– gratuité,<br />
– langage d’implémentation (en priorité Java),<br />
– possibilité de compiler des projets implémentés dans plusieurs langages,<br />
– utilisation de machines virtuelles 1 ,<br />
– corrélation de code,<br />
– mise à disposition d’une API (pour le développement de plugins par exemple),<br />
– interopérabilité avec d’autres logiciels et protocoles (Maven, Ant, SSH, etc.)<br />
1. Le fait d’exécuter du code sur une machine virtuelle permet d’éviter de perdre la totalité du serveur<br />
en cas d’exécution d’un code malicieux ou bugué.<br />
5
– documentation (installation, utilisation, javadoc, etc.),<br />
– facilité d’installation,<br />
– facilité d’utilisation et d’administration.<br />
2.2 Étude comparative<br />
2.2.1 Technologie Web<br />
Après avoir effectué la liste des critères, nous avons sélectionné plusieurs technologies<br />
Web.<br />
Technologies AJAX<br />
GWT[1] (Google Web Toolkit) est une ensemble d’outils logiciels développé par Google<br />
permettant de produire des applications Web dynamiques en utilisant JavaScript. Son<br />
avantage réside dans le fait que le code est produit en Java et qu’il existe de nombreuses<br />
documentations. De plus, étant une technologie AJAX, GWT offre une grande<br />
interopérabilité et une bonne évolutivité.<br />
Jaxcent[2] est une alternative à GWT. Il permet lui aussi de créer des pages Web dynamiques<br />
grâce à Java. Il est orienté serveur et permet une bonne évolutivité. Néanmoins,<br />
la qualité de la documentation disponible est inférieure à celle de GWT.<br />
Technologies Adobe<br />
Flash[3] est une application client qui permet d’ajouter des animations ou des objets<br />
interactifs sur une page Web. Facile à implémenter, Flash souffre toutefois de problèmes<br />
d’instabilité sur plusieurs systèmes d’exploitation (Linux par exemple).<br />
Flex[4] est une solution de développement qui permet de développer des applications<br />
internet riches. Relativement simple à prendre en main, Flex utilise les technologies Flash,<br />
MXML et ActionScript. Néanmoins, cette solution souffre des inconvénients de Flash.<br />
Autres technologies<br />
PHP[5] est un langage de scripts libre utilisé pour produire des pages Web dynamiques.<br />
Il est relativement facile à implémenter. De part son ancienneté, il dispose de beaucoup<br />
de documentation et de code déjà produit. Malheureusement, PHP est sujet à de nombreuses<br />
failles de sécurité.<br />
Silverlight[6] est une alternative à Flash développée par Microsoft. Il permet aux développeurs<br />
d’utiliser les outils de développement et les langages Microsoft .NET afin de créer des<br />
applications Web dynamiques fonctionnant dans un moteur de rendu vectoriel.<br />
6
Après avoir récupérer un maximum informations, nous avons comparé ces technologies<br />
entre elles afin de tirer les avantages et les inconvénients de chacune, comme le montre le<br />
tableau récapitulatif suivant :<br />
langage libre code doc. évolutif autres<br />
connu disponible dispo. (inconvénients)<br />
PHP oui oui oui oui non problèmes de sécurité<br />
GWT oui(java) oui oui oui oui relativement complexe<br />
Flex non non oui oui oui problème de stabilité<br />
Flash non non oui oui non lourdeur<br />
Silverlight non non oui oui oui problème de stabilité<br />
Jaxcent oui(Java) oui oui non oui moins plébiscité que GWT<br />
2.2.2 Technologies d’évaluation de code<br />
Une fois les critères établis, nous avons sélectionné plusieurs logiciels d’intégration<br />
continue et de type ”Automated Judge System”.<br />
Logiciels d’intégration continue<br />
Jenkins[7] (anciennement Hudson) est un serveur d’intégration continue libre et opensource<br />
(écrit en Java). Il peut fonctionner dans un conteneur de servlets tel que Tomcat<br />
et peut être interfacé avec d’autres technologies (SVN, CSV, Maven, Ant, etc.). Il dispose<br />
aussi d’une API de développement de plugins permettant d’ajouter des fonctionnalités.<br />
Étant relativement plébiscité dans le domaine de l’intégration continue, Jenkins dispose<br />
d’une bonne documentation et d’un grand nombre d’utilisateurs. De plus, Jenkins peut<br />
compiler et exécuter des programmes de langages différents (Java, C, C++, Python, Php,<br />
etc.).<br />
Bamboo[8] est un logiciel d’intégration continue payant qui dispose de plusieurs plugins<br />
pour ajouter des fonctionnalités qui peuvent être intéressantes dans notre cas d’utilisation<br />
(gestion approfondie des tests par exemple). Il est développé en Java, mais les sources ne<br />
sont disponibles qu’après achat de l’application. Néanmoins, il est capable d’exécuter du<br />
code développé dans des langages comme Java, PHP ou JavaScript.<br />
Continuum[9] est le serveur d’IC d’Apache. Il est libre et open-source (développé en Java).<br />
Il dispose d’une bonne documentation et permet d’être interfacé avec d’autres technologies<br />
(Ant, Maven, CSV). Il est également capable de compiler des programmes C, C++<br />
et Java. Néanmoins, quelques fonctionnalités sont manquantes, comme la corrélation de<br />
code ou la possibilité de supporter des machines virtuelles.<br />
7
Logiciel de type ”Automated Judge System”<br />
Mooshak[10] est une solution logicielle qui permet d’évaluer les performances de plusieurs<br />
codes entre eux. Il est spécialisé pour des compétitions de type ICPC (International Collegiate<br />
Programming Contest). Il utilise des machines virtuelles pour effectuer des tests<br />
et supporte des langages comme C, Pascal, C++ ou Java.<br />
DOMJudge[11] est un concurrent de Mooshak qui offre une interface Web permettant<br />
au jury, aux compétiteurs ou au public de visualiser les résultats des compétitions. Ces<br />
résultats sont modulables et l’application est conçue pour être ergonomique et légère.<br />
Comme les autres solutions citées précédemment, DOMJudge peut compiler et exécuter<br />
du code C, C++ et Java.<br />
Code-cracker[12] est un système libre qui donne la possibilité de faire de la corrélation de<br />
code. Malheureusement, il n’existe pas beaucoup de documentation pour cette solution<br />
logicielle.<br />
Comme pour les technologies Web, nous dressons ensuite un tableau récapitulant les fonctionnalités<br />
des principales solutions logicielles trouvées.<br />
libre langage compilation de machines corrélation<br />
d’implémentation de plusieurs langages virtuelles de code<br />
Jenkins oui java oui oui non<br />
Mooshak oui python oui oui non<br />
DOMJudge oui php oui non non<br />
DWite non visual basic oui oui non<br />
Code-cracker oui c++ oui - oui<br />
Bamboo oui java oui oui -<br />
API documentation interopérabilité autres avantages<br />
de dev. disponible<br />
Jenkins oui oui Ant, Maven, plébiscité, 300 plugins<br />
VMware, VirtualBox facilité d’installation<br />
Mooshak non oui LDAP, ssh bonne flexibilité<br />
DOMJudge non oui SSH, NFS, SCP plusieurs plugins<br />
DWite non non SSH léger<br />
Code-cracker non non CSV -<br />
Bamboo oui oui Maven, Ant plusieurs plugins<br />
Continuum oui oui Maven, Ant développé par Apache<br />
2.2.3 Base de données<br />
Une fois les deux analyses précédentes effectuées, nous avons réfléchi à la nécessité<br />
d’utiliser une base de données. Pour répondre à cette question, nous avons listé dans un<br />
8
premier temps les entités manipulées, afin de savoir s’il y avait un quelconque avantage<br />
à les rendre persistantes.<br />
Voici la liste des entités que notre portail doit pouvoir gérer :<br />
– des utilisateurs aux profils différents (administrateurs, enseignants, étudiants),<br />
– des données (projets soumis, batteries de tests),<br />
– des macro-entités (promotions d’étudiants, groupe de projet, etc.).<br />
Une fois cela fait, nous avons considéré qu’il était effectivement judicieux d’utiliser une<br />
BD dans notre application. Nous avons alors effectué une étude comparative des différents<br />
modèles de base de données, afin de décider quelle technologie nous allions utiliser.<br />
Base de données orientée texte<br />
Une base de données orientée texte (ou Flat File database en anglais), est une base de<br />
données contenue dans un seul fichier texte. On utilise ce type de base de données pour<br />
des systèmes embarqués ou pour des implémentations ne nécessitant pas d’enregistrer des<br />
volumes d’informations trop complexes.<br />
Base de données relationnelle<br />
Une base de données relationnelle stocke les informations dans des tables. Ces tables<br />
sont régis par des règles d’algèbre relationnelle, qui permettent d’interagir avec la base<br />
de données grâce à des requêtes. Les base de données relationnelles apportent un certain<br />
nombre d’avantages :<br />
– une bonne scalabilité.<br />
– une facilité pour spécifier des contraintes d’intégrité sans programmation.<br />
– une théorie solide et des normes reconnues.<br />
– un langage d’interrogation puissant.<br />
– etc.<br />
Base de données orientée objet<br />
Une base de données orientée objet permet de stocker les informations sous forme d’objets.<br />
Utilisant le langage objet Java (via notre implémentation en GWT), nous pouvons<br />
facilement justifier que dans la mesure ou nos entités sont des objets du coté du portail, il<br />
peut être judicieux d’utiliser une base de données objet, afin d’éviter le mapping (transformation)<br />
d’objets Java en autres types de données (texte pour les Flat File database ou<br />
des tuples pour une base de données relationnelle).<br />
Autres modèles de bases de données<br />
Il existe d’autres modèles de bases de données, comme par exemple les bases de données<br />
XML ou objet-relationnel. Ces dernières ne semblant pas adéquates pour notre utilisation,<br />
nous avons décidé de ne pas les étudier.<br />
9
2.3 Résultats d’étude<br />
2.3.1 GWT<br />
En vue de cette étude, notre choix s’est rapidement porté sur GWT pour plusieurs raisons.<br />
Tout d’abord, GWT dispose d’une bonne documentation (javadoc, tutoriels, forum, etc.).<br />
Ensuite, ce dernier permet de mettre en œuvre du JavaScript en codant du Java, nous<br />
n’avons donc pas à apprendre un langage supplémentaire. Enfin, cette technologie peut<br />
s’interfacer avec d’autre éléments grâce à des mécanismes de type RPC, et peut facilement<br />
être déployé 2 .<br />
En revanche, le principal inconvénient de GWT est sa complexité ; ce dernier nécessite en<br />
effet un temps d’adaptation conséquent. Nous avons considéré que cet inconvénient était<br />
un des prix à payer pour ne pas avoir à apprendre un langage supplémentaire (comme<br />
PHP ou Flex) et pour avoir accès à une documentation de bonne facture.<br />
2.3.2 Jenkins<br />
En vue des résultats, notre choix s’est porté sur Jenkins. En effet, de tout les logiciels<br />
étudiés, Jenkins est celui qui correspond le mieux à nos attentes (gratuit, développé en<br />
Java, bonne documentation, fonctionnalités modulables via des plugins, gestion de plusieurs<br />
langages différents, facilité d’utilisation, etc.). De plus, Jenkins peut lui aussi être<br />
intégré dans un serveur Tomcat. Malheureusement, Jenkins ne dispose pas nativement<br />
de toutes les fonctionnalités requises (pas de gestion de corrélation de code par exemple).<br />
Néanmoins, ce manque peut être comblé par l’implémentation d’un plugin, en utilisant<br />
l’API idoine.<br />
2.3.3 MySQL<br />
Pour des raisons d’évolutivité, nous avons décidé de ne pas utiliser une BD de type Flat<br />
File. En effet, si dans le futur le portail implémente d’autres fonctionnalités (gestion<br />
administrative des étudiants par exemple), une base de données de ce type pourrait ne<br />
pas répondre efficacement à nos attentes à cause d’une trop grande complexité. Le portail<br />
se voulant évolutif, nous avons décidé de ne pas retenir ce type de base de données.<br />
De la manière, nous avons décidé de ne pas choisir les bases de données orientées objet<br />
car nous n’avons pas besoin de rendre les objets du portail persistants.<br />
Nous avons donc décidé de gérer nos entités via une base de données relationnelle, car ce<br />
modèle nous est le plus familier et qu’il offre les avantages cités précédemment.<br />
En ce qui concerne le Système de Gestion de Base de Données (SGBD) utilisé, notre choix<br />
s’est porté sur MySQL, car ce logiciel est léger, open-source, fiable et très utilisé. De plus,<br />
MySQL est complètement compatible avec Java 3 , ce qui permet d’éviter un maximum<br />
les problèmes d’interfaçage entre la base de données et le portail.<br />
2. On peut par exemple générer un fichier .war et l’uploader directement dans un serveur Tomcat<br />
3. Le driver (JDBC), faisant la connexion entre Java et MySQL a d’ailleurs été étudié dans un module<br />
de M1.<br />
10
Nous avons vu dans cette première partie les différents choix technologiques que nous<br />
avons fait. Ces choix ont été effectués à partir d’études préliminaires visant à déterminer<br />
les solutions répondants le mieux à nos critères.<br />
Nous avons choisi de répondre à la problématique de ce TER en utilisant les technologies<br />
suivantes :<br />
– GWT pour le portail Web,<br />
– Jenkins pour la structure d’évaluation du code,<br />
– MySQL pour stocker les entités (utilisateurs, projets etc.)<br />
De plus, nous avons vu que GWT et Jenkins peuvent facilement être intégrés à Tomcat.<br />
De ce fait, nous avons décidé d’utiliser ce container de Servlets. Le schéma suivant donne<br />
un premier aperçu de l’architecture globale de l’application.<br />
Figure 2.1 – Vue globale de l’architecture de l’application.<br />
11
Chapitre 3<br />
Travail effectué<br />
Dans ce chapitre, nous expliquons le travail effectué d’un point de vue technique. Nous<br />
traitons ici des différentes méthodes d’implémentation et outils utilisés pour mener à bien<br />
notre projet. Ce chapitre se décompose en six axes. Le premier est un récapitulatif du<br />
serveur que nous avons utilisé pour nos tests. Les trois suivants traitent du travail effectué<br />
sur chacune des trois parties de l’application (portail Web, Jenkins et base de données).<br />
Le quatrième axe décrit les implémentations effectuées pour relier les différentes parties<br />
entre elles. Enfin, le dernier axe décrit les fonctionnalités ajoutées et la documentation<br />
produite.<br />
3.1 Serveur de test<br />
Nous avons utilisé une machine personnelle pour effectuer nos tests d’implémentation.<br />
Cette machine a été configurée pour pouvoir être accessible depuis Internet. Nous avons<br />
pour cela mis en place un DNS 1 et nous avons configuré le routeur et le firewall de la<br />
machine. Le serveur a ensuite accueilli l’ensemble des outils et applications utilisées par<br />
notre portail. Voici les caractéristiques de la machine de test :<br />
– processeur : Intel(R) Pentium(R) 4 CPU 1.80GHz<br />
– mémoires : 512 Mo<br />
– système : Fedora 14 ”Laughlin”<br />
3.2 Portail Web<br />
3.2.1 Définition des fonctionnalités<br />
Pour bien séparer les traitements, nous considérons trois types d’utilisateurs différents :<br />
– l’administrateur,<br />
– les enseignants,<br />
– les étudiants,<br />
1. Domain Name System<br />
12
La différence entre les trois types d’utilisateurs réside dans le nombre de fonctionnalités.<br />
En effet, un administrateur possède toutes les fonctionnalités des enseignants et des<br />
étudiants. Un enseignant, quant à lui, possède des fonctionnalités supplémentaires par<br />
rapport à un étudiant. En résumé, nous pouvons dire que l’ensemble des fonctionnalités<br />
d’un type est un sous-ensemble des fonctionnalités du type supérieur.<br />
3.2.2 Conception de l’IHM<br />
Une fois les fonctionnalités définies, nous avons rapidement fait un prototype de l’interface<br />
du portail Web afin d’avoir un premier aperçu. Pour ce faire, nous avons utilisé le<br />
logiciel FlexBuilder (un IDE pour développer en Flex) car ce dernier permet de réaliser<br />
rapidement des interfaces graphiques grâce à un éditeur 2 . Le fait que le langage soit du<br />
Flex n’est pas dérangeant dans la mesure ou nous voulons simplement avoir un rendu<br />
graphique, si possible plus pertinent et agréable que de simple dessin.<br />
Cette conception a montré que la plupart des menus pouvaient être conçus selon le même<br />
principe. Nous avons donc décidé d’utiliser des onglets pour séparer les menus en fonction<br />
des entités (un onglet pour gérer les projets, un onglet pour les enseignants, etc.). De ce<br />
fait, un utilisateur n’est pas submergé par les informations lors de sa connexion. De plus,<br />
nous avons décidé d’utiliser des listBox pour lister les entités (enseignants, étudiants,<br />
etc.), afin de toujours avoir une vision assez globale du système. La figure suivante donne<br />
une idée du rendu obtenu :<br />
Figure 3.1 – Prototype de l’IHM pour la vue ”enseignant”, vue par un administrateur.<br />
Du point de vue de l’ergonomie, nous avons essayé de garder la même logique 3 quel que<br />
soit le profil utilisateur. Nous avons décidé de faire cela pour qu’une personne ayant deux<br />
comptes aux profils différents (un administrateur qui est aussi enseignant par exemple)<br />
n’ait aucunes difficultés à passer d’un compte à l’autre.<br />
2. Cet éditeur permet de disposer graphiquement des boutons et des menus avec la souris.<br />
3. Nous entendons par logique la disposition des éléments (boutons, menus, etc.) dans l’interface.<br />
13
Ce prototype a aussi permis de faire la liste des widgets GWT (boutons, listBox, onglet,<br />
etc.) que nous allions utiliser, afin de commencer à les étudier.<br />
3.2.3 Implémentation<br />
Une fois le prototype défini, nous avons développé le portail en fonction de ce dernier.<br />
Pour ce faire, nous avons utilisé des tutoriels mis en lignes par Google pour nous aider<br />
dans notre démarche. D’un point de vue architectural, notre application Web se compose<br />
de deux parties :<br />
– une partie client, qui contient l’IHM et les interfaces.<br />
– une partie serveur, qui contient les classes effectuant le traitement.<br />
Dans un premier temps, nous avons implémenté le coté client pour avoir rapidement un<br />
squelette (menu, boutons, onglets) de l’application. Ce squelette a permis d’avoir une<br />
base sur laquelle greffer d’autres fonctionnalités d’une manière itérative.<br />
3.3 Jenkins<br />
3.3.1 Prise en main<br />
Jenkins permet la création de ”jobs”, qui sont représentés sous la forme d’un espace<br />
disque (ou workspace et d’un fichier de configuration (config.xml). L’espace disque sert<br />
à stocker sur le serveur le code à compiler (un .c par exemple). Le fichier config.xml,<br />
quant à lui, permet de spécifier le travail à effectuer lorsque l’on demande l’exécution<br />
du job. Le fichier de configuration peut contenir par exemple des commandes Bash, qui<br />
seront exécutées à chaque fois que le serveur reçoit l’ordre d’exécuter (ou ”builder”) le<br />
job en question. Une fois le job exécuté, les résultats de l’exécution sont stockés dans le<br />
workspace, permettant de ce fait de garder une trace des précédents builds.<br />
Le but de cette prise en main a permis de comprendre le fonctionnement de l’application,<br />
mais aussi d’en déterminer les limites et les faiblesses. Par exemple, nous avons déterminé<br />
que même si Jenkins possède une interface web (voir figure 3.2), il est possible d’interagir<br />
avec le serveur pour manipuler un job à distance 4 .<br />
4. Il est ainsi possible de créer, supprimer et compiler un job. Il est aussi possible de récupérer les<br />
résultats d’exécution après une compilation, de recevoir les résultats de la console, etc.<br />
14
Figure 3.2 – Interface Web de Jenkins.<br />
3.4 Base de données<br />
3.4.1 Conception des tables<br />
La première version de la BD contenait une table pour chaque entités (administrateurs,<br />
enseignants, étudiants, groupes, projets) et utilisait une table pour les unir via<br />
leurs clés primaires.<br />
Après réflexion et confrontation des idées, il s’est avéré qu’une unique table Personnes<br />
allait mieux convenir pour réunir les trois types d’utilisateurs, car ces derniers sont<br />
schématisés avec plus ou moins les mêmes informations (un nom, un prénom, une adresse<br />
email, etc.). De plus, nous nous sommes rendu compte que pour certaines fonctionnalités<br />
(l’authentification pour se connecter au portail par exemple), la multiplication de tables<br />
induit une multiplication des appels à la BD.<br />
Une fois le travail terminé, nous avons obtenu les tables suivantes :<br />
– ”Personne” ; qui définit un utilisateur (administrateur, enseignant ou étudiant).<br />
– ”Projet”, qui définit un projet (exemple : projetXML).<br />
– ”Groupe” 5 , qui constitue un ensemble d’étudiants.<br />
– ”Association”, qui lie les 3 tables précédentes.<br />
3.4.2 Remplissage et tests<br />
La conception précédente nous a donné un ensemble de tables (Personne, Groupe,<br />
Projet et Association). Malheureusement, le remplissage de ces dernières a soulevé un<br />
5. Afin de ne pas confondre les groupes d’options avec les groupes d’étudiants, nous appelons ”multinômes”<br />
les groupes d’étudiants (monôme, binôme, etc.).<br />
15
ensemble de problème concernant la table Association. Pour pallier ce problème, nous<br />
avons découpé Association en plusieurs tables :<br />
– AssociationProjetGroupe ; qui lie un projet à un ou des groupes.<br />
– AssociationProjetFichiers ; qui lie un projet aux éventuels fichiers de tests apportés<br />
par l’enseignant pour ce projet.<br />
– AssociationGroupePersonne ; qui lie un groupe à une ou n personnes.<br />
– AssociationGroupeFichiers ; qui ≪ conserve ≫ les fichiers qu’un groupe soumet a la<br />
compilation.<br />
– AssociationEnseignantProjet ; qui permet à plusieurs enseignants d’être associés à<br />
un projet 6 .<br />
La figure suivante représente la structure finale de la base de données :<br />
Figure 3.3 – Structure de la base de données.<br />
Une fois la structure principale mise en place, nous avons remplis les tables avec quelques<br />
tuples afin de pouvoir effectuer des tests. Ces tests ont permis de soulever certaines choses<br />
tel que :<br />
6. Fonctionnalité non-utilisée pour l’instant.<br />
16
– un problème avec les clés primaires mal ciblées par les clés étrangères,<br />
– un problème d’unicité et d’indexation.<br />
Ces problèmes mineurs n’ont pas nécessité de refaire la conception de la base, mais ont<br />
permis de s’assurer de la bonne intégrité des tables.<br />
3.5 Connexions entre les différentes parties<br />
3.5.1 Connexion portail - Jenkins<br />
Comme nous l’avons vu précédemment, Jenkins peut être appelé à distance. Pour ce<br />
faire, il existe deux technologies. La première est une API offerte par Jenkins, dont le<br />
but est d’offrir un ensemble de méthode pour implémenter les fonctionnalités du serveur<br />
d’intégration continue dans un programme Java.<br />
La deuxième technologie consiste à utiliser des méthodes HTTP (HTTPMethod de type<br />
POST ou GET). Ces méthodes contiennent des ordres qui sont passés directement au<br />
serveur Jenkins.<br />
Nous avons décidé d’utiliser les méthodes HTTP. Pour cela, nous avons implémenté une<br />
servlet 7 qui utilise des requêtes HTTP en spécifiant l’URL de Jenkins. De cette façon, il<br />
est possible de manipuler des jobs (création, suppression ou modification) et de récupérer<br />
des informations sur ces derniers (dernière compilation réussie, résultat de la console,<br />
etc.). La servlet étant exécuté via le portail, on s’affranchi ainsi de l’interface graphique<br />
de Jenkins. La figure suivante permet de mieux comprendre le fonctionnement de cette<br />
servlet :<br />
Figure 3.4 – Fonctionnement d’une servlet dialoguant avec Jenkins.<br />
Avec cette première implémentation, la servlet de communication à Jenkins n’était pas<br />
7. Une servlet est une classe Java qui permet d’ajouter des fonctionnalités à un serveur.<br />
17
encore en mesure d’envoyer du code (.c ou .java par exemple). En effet, pour faire cela,<br />
il faut utiliser un protocole de transfert de fichier (le protocole HTTP n’étant pas prévu<br />
pour cela).<br />
Utilisation d’un FTP<br />
Pour pouvoir envoyer du code à Jenkins, nous avons utilisé le protocole FTP. Pour ce faire,<br />
nous avons développé une servlet qui effectue des connexions à vsftp, un serveur FTP sur<br />
Linux. Le problème d’une connexion FTP est qu’elle nécessite le plus souvent le login et<br />
le mot de passe d’un utilisateur Unix (root par exemple). Nous avons donc paramétré<br />
vsftp pour que ce dernier accepte les utilisateurs de la base de données. De de fait, un<br />
utilisateur logué sur le portail peut envoyer son code au serveur en étant automatiquement<br />
authentifié. Cette procédure permet de ne pas transformer les utilisateurs contenus dans<br />
la BD en utilisateur Unix.<br />
Liaison FTP - Jenkins<br />
Une fois le code déposé sur le FTP, le serveur déclenche la servlet qui dialogue avec Jenkins<br />
(figure précédente). Cette dernière se charge de créer un job et d’indiquer à Jenkins le<br />
chemin du fichier récemment uploadé. Jenkins récupère le fichier, le compile et l’exécute,<br />
puis transmet le résultat à la servlet. Cette dernière propage alors le résultat au portail<br />
qui l’affiche à l’utilisateur.<br />
3.5.2 Connexion portail - BD<br />
Nous avons aussi utilisé une servlet pour communiquer avec la base de données. Cette<br />
servlet utilise un driver JDBC 8 ) pour se connecter à MySQL.<br />
Une fois la connexion établie, il est possible d’effectuer un traitement sur la BD. Nous<br />
avons décidé d’implémenter différents traitements à partir de l’IHM du portail. Ces traitements<br />
regroupent par exemple :<br />
– la possibilité de créer/modifier/supprimer des utilisateurs (enseignants, étudiants,<br />
etc.),<br />
– la possibilité de créer/modifier/supprimer des projets,<br />
– la possibilité de visualiser les informations des différentes entités (projets, utilisateurs,<br />
etc.),<br />
– etc.<br />
L’annexe 2 présente deux exemples d’interrogation de la base de données via des requêtes<br />
SQL.<br />
Lorsqu’un utilisateur déclenche un événement qui doit modifier la BD, le portail demande<br />
à la servlet d’effectuer le traitement. La servlet s’exécute en déclenchant la bonne requête<br />
SQL qui a été pré-remplie avec les valeurs spécifiées par l’utilisateur. Par exemple, dans<br />
le cas d’une création d’un enseignant, la servlet déclenche une requête SQL en passant en<br />
paramètre les informations spécifiées par l’utilisateur (nom de l’enseignant, prénom, etc.)<br />
8. Java DataBase Connectivity<br />
18
Une fois la requête exécutée, la servlet reçoit une réponse de la BD. Cette réponse transite<br />
jusqu’à la partie cliente du portail. En fonction de cette réponse, l’utilisateur reçoit un<br />
message qui atteste de la réussite ou de l’échec de la création d’un nouvel enseignant. La<br />
figure suivante montre le fonctionnement d’un appel à la BD via le portail Web :<br />
Figure 3.5 – Exécution d’une requête SQL de création d’utilisateur à partir du portail<br />
Web.<br />
3.6 Ajouts de fonctionnalités<br />
3.6.1 Authentification et gestion des connexions au portail<br />
Nous avons vu que chaque type d’utilisateur possède son propre jeu de fonctionnalités.<br />
Ces fonctionnalités sont regroupés dans des pages (pageAdministrateur, pageEtudiant,<br />
pageEnseignant), qui sont des classes Java regroupant les widgets (boutons, onglet, etc.)<br />
ainsi que les appels aux servlets. Pour pouvoir faire en sorte que chaque utilisateur se<br />
connecte sous sa propre page en fonction de son profil, nous avons décidé d’implémenter<br />
un mécanisme d’authentification à l’entrée de l’application.<br />
Nous avons développé une servlet qui vérifie la présence ou non de l’utilisateur dans la<br />
base de données. Le résultat de la requête permet de charger une des pages en fonction<br />
du profil de l’utilisateur.<br />
Malheureusement, cette première version n’était pas suffisante, car le mot de passe de<br />
l’utilisateur transitait en clair sur le réseau. Nous avons donc ajouté une méthode de<br />
cryptage md5. Cette méthode crypte localement le mot de passe en une chaîne alphanumérique<br />
de 32 caractères, puis l’envoie à la base de données 9 . Cette dernière compare<br />
alors le login et le mot de passe crypté. Si le résultat de la requête est vide, cela veut<br />
9. Cette technique est couramment utilisée par les personnes voulant utiliser des mots de passe cryptés<br />
avec GWT<br />
19
dire le couple login/mot de passe n’est pas correct, l’utilisateur est donc invité à réitérer<br />
sa tentative de connexion. En revanche, si le résultat de la requête n’est pas vide, la<br />
méthode d’authentification récupère dans la base le profil de l’utilisateur et charge la<br />
page correspondante (pageEnseignant si le couple login/mot de passe spécifié appartient<br />
à un enseignant, etc.). La figure suivante montre l’algorithme derrière le mécanisme d’authentification<br />
au portail :<br />
Figure 3.6 – Mécanisme d’authentification au portail Web.<br />
3.6.2 Gestion des groupes d’étudiants<br />
Un projet pouvant être effectué par plusieurs étudiants, nous avons décidé de donner<br />
la possibilité au portail de gérer les groupes (binômes, trinômes, etc.) d’étudiants. Par<br />
manque de temps, nous n’avons pas eu le temps d’implémenter complètement cette fonctionnalité.<br />
Néanmoins, nous avons construit l’application de façon à ce que cette dernière<br />
puisse accepter facilement la gestion des groupes. En effet, nous avons créé la vue permettant<br />
à un enseignant de créer et modifier les groupes pour un projet donné, ainsi que<br />
les tables de la base de données pour accepter une telle implémentation.<br />
3.6.3 Gestion automatique des comptes FTP<br />
Chaque utilisateur du portail possède son propre espace sur le serveur FTP. Pour<br />
créer ces espaces automatiquement, nous avons implémenté une classe dont le but est de<br />
créer un répertoire personnel pour chaque utilisateur de la table ”Personne”. Cette classe<br />
se charge aussi d’affecter des droits particuliers aux utilisateurs. Ainsi, chaque étudiant<br />
est automatiquement monté dans son répertoire personnel, sans avoir la possibilité de<br />
voir les dossiers des autres étudiants. En revanche, les enseignants et l’administrateur ont<br />
la possibilité de voir les répertoires des étudiants.<br />
20
3.6.4 Documentation et mise en forme du livrable<br />
Un des points importants de notre TER était de faire quelques choses de facilement<br />
utilisable et compréhensible par d’autres personnes. Pour ce faire, nous avons attaché un<br />
soin particulier à la rédaction de la documentation et à la mise en forme de l’application<br />
dans sa version finale.<br />
Documentation utilisateur<br />
Pour rendre l’application plus ergonomique, nous avons écrit une documentation utilisateur<br />
expliquant le fonctionnement du portail. Cette documentation est déclinée en<br />
plusieurs versions (une par type d’utilisateur). Elle permet de comprendre comment utiliser<br />
les fonctionnalités de l’application. L’annexe 1 permet de voir à quoi ressemble cette<br />
documentation utilisateur.<br />
Mise en forme du livrable<br />
Une fois le code nettoyé et commenté, nous avons créé un fichier .war contenant notre<br />
portail. Ce fichier peut simplement être déposé dans un serveur Tomcat pour pouvoir<br />
être utilisé. Néanmoins, pour que le portail fonctionne, la machine hébergeant le serveur<br />
Tomcat doit posséder l’ensemble des applications utilisées par le portail (MySQL, vsftp,<br />
Jenkins, etc.).<br />
Documentation d’installation<br />
Pour réduire la complexité d’installation des différentes applications utilisées par le portail<br />
Web, nous avons écrit un tutoriel qui décrit les différentes étapes et technologies à installer<br />
pour utiliser le portail. Cette documentation, plutôt technique, est réservé principalement<br />
à l’administrateur du portail.<br />
3.6.5 Ergonomie de l’IHM<br />
Pour voir si l’application était ergonomique, nous avons fait tester le portail par deux<br />
personnes. Ces utilisateurs (des étudiants volontaires), ont d’abords utilisé l’application<br />
pendant une dizaine de minutes avant de répondre à un questionnaire de satisfaction. Ce<br />
questionnaire est divisé en 3 parties :<br />
– une partie A : dont le but est de noter le portail sur quelques critères.<br />
– une partie B : dont le but est de noter les tests utilisateurs (utilité des tâches et<br />
facilité de compréhension)<br />
– une partie C : qui permet aux utilisateurs de donner leur avis (qualités, défauts,<br />
fonctionnalités à ajouter, etc.)<br />
Ensuite nous avons demandé aux utilisateurs d’exécuter quelques tâches afin de les chronométrer<br />
pour s’assurer que les fonctionnalités étaient bien réalisables rapidement 10<br />
10. Dans un contexte réelle d’étude d’interface, cette méthode permet de s’assurer que l’application<br />
fait ce qu’on lui demande (efficacité) et qu’elle le fait dans un minimum d’effort (efficience).<br />
21
La liste ci-dessous montre les quelques tâches que les utilisateurs ont effectué :<br />
En tant qu’administrateur :<br />
– Créer trois étudiants (nom et informations imposés).<br />
– Modifier le prénom d’un des enseignants (prénom imposé).<br />
En tant qu’enseignant :<br />
– Créer un projet (nom et informations imposés).<br />
– Uploader un jeu de tests pour ce projet (choix du fichier imposé).<br />
En tant qu’étudiant :<br />
– Visualiser les infos d’un des enseignants.(choix libre).<br />
– Soumettre un code (choix du fichier imposé).<br />
Les résultats de cette étude sont disponibles en annexe 4. Néanmoins, nous pouvons<br />
dire ici que ces tests utilisateurs ont permis de soulever quelques problèmes comme par<br />
exemple :<br />
– Le manque de pertinence pour certains messages de popup (pas assez d’informations).<br />
– La nécessité d’appuyer sur le bouton ”Afficher Infos” pour charger les informations.<br />
– Le manque d’informations (format des dates non spécifié) dans le menu de création<br />
d’un projet.<br />
– Le panneau ”descriptif” d’un projet trop petit.<br />
Il pourrait être judicieux de prendre en compte ses critiques et de modifier le code pour<br />
pallier aux problèmes.<br />
22
Chapitre 4<br />
Gestion de projet<br />
Ce chapitre traite du pilotage du TER. Nous présentons dans un premier temps les<br />
mécanismes mis en place pour gérer le projet ainsi que le planning prévisionnel. Dans<br />
un second temps, nous discutons de l’évolution du planning prévisionnel au fil du projet.<br />
Nous traitons ensuite des problèmes logistiques rencontrés ainsi que des solutions retenues<br />
pour y pallier. Enfin, la dernière partie de ce chapitre a pour but de présenter le<br />
travail de chacun des membres du groupe.<br />
4.1 Stratégie de pilotage<br />
Nous avons mis à notre disposition un ensemble d’outils pour que le pilotage de notre<br />
projet soit le plus aisé possible. Pour cela, nous avons défini un diagramme de GANTT 1<br />
qui a permis d’avoir une représentation graphique des différentes tâches hebdomadaires<br />
à exécuter. Nous avons aussi mis en place une politique de gestion des risques afin de<br />
pallier à certains problèmes (manque de productivité, perte d’un membre, etc.).<br />
En plus de cela, nous avons utilisé l’environnement de gestion de projet Assembla[13],<br />
qui met à la disposition des développeurs plusieurs outils 2 , comme par exemple :<br />
– un SVN,<br />
– un site de type Wiki (pour partager des informations),<br />
– un partage de documents éditables de type Google Docs,<br />
– des stand’up (voir figure 4.1) qui permettent à un membre de l’équipe de dire ce<br />
qu’il a fait ou va faire durant sa journée de travail,<br />
– un serveur pour stocker des sauvegardes du code et des documents produits.<br />
De plus, ne travaillant pas au même endroit, nous avons utilisé le logiciel Skype pour<br />
communiquer entre nous. Enfin, nous avons fait des réunions hebdomadaires avec notre<br />
tuteur afin de définir les tâches prioritaires.<br />
1. voir annexe 3.<br />
2. Ces outils sont accessibles directement depuis Internet.<br />
23
Figure 4.1 – Mécanisme de stand’up.<br />
4.2 Évolution du planning<br />
Au fur et à mesure de l’avancement du projet, nous avons du revoir notre planning<br />
prévisionnel. La première raison à cela est que le planning était très optimiste et ne<br />
prenait pas en compte les difficultés de certains (problèmes de compréhension, problèmes<br />
pour installer des applications, etc.). Néanmoins, nous avons rapidement fait face à la<br />
situation en restructurant et en redistribuant les tâches.<br />
4.3 Problèmes rencontrés<br />
Nous avons rencontré plusieurs problèmes tout au long de notre TER :<br />
– des problèmes techniques (installations et configurations des logiciels utilisés, compréhensions,<br />
etc.),<br />
– des problèmes logistiques (membres géographiquement distants, niveaux différents),<br />
– des problèmes humains (départ d’un membre de l’équipe, manque de compétences).<br />
Problèmes techniques<br />
Notre implémentation nécessitant plusieurs logiciels différents (Jenkins, Eclipse, plugin<br />
Eclipse GWT, Tomcat, MySQL, PhpMyAdmin, Ant, etc.), nous avons installé ces logiciels<br />
sur nos machines. Malheureusement, certains ont eu du mal à effectuer ces étapes et cela<br />
nous a un peu ralenti dans notre implémentation.<br />
Problèmes logistiques<br />
N’étant pas géographiquement au même endroit, nous avons utilisé le logiciel Skype pour<br />
dialoguer entre nous. Ce type de communication peut être à la base d’une mauvaise<br />
compréhension d’un ordre ou d’une explication.<br />
24
Problèmes humains<br />
Après quelques semaines de travail, nous avons perdu un membre du projet qui, pour des<br />
raisons personnelles, a décidé de ne plus travailler. Ce problème a été de loin le plus difficile<br />
à gérer car il est survenu à un moment critique (début d’implémentation) et a perduré<br />
durant la quasi-totalité du projet. De plus, même si la gestion des risques prévoyait la<br />
perte éventuelle d’un membre, nous n’espérions pas tomber dans ce cas de figure, de peur<br />
de voir notre motivation et notre productivité décroître drastiquement.<br />
4.4 Solutions retenues<br />
Pour essayer de pallier aux problèmes énoncés ci-dessus, nous avons mis en place<br />
un certain nombre de solutions. Pour les problèmes techniques, nous avons essayé de<br />
dépanner la personne qui avait du mal avec une installation, en lui faisant part de notre<br />
expérience de l’installation et de la configuration du logiciel utilisé.<br />
Pour les problèmes d’ordre logistique, nous avons décidé pendant quelques temps, de<br />
nous retrouver physiquement au même endroit afin d’augmenter notre efficacité et notre<br />
motivation. Ce choix nous a aussi permis de résoudre les problèmes lié à Skype (difficulté<br />
pour expliquer et comprendre les choses, dialoguer plus facilement, etc.).<br />
Enfin, pour la perte d’un des membres, nous avons redéfini les priorités et nous avons<br />
réaffecté les tâches que cette personne devait faire. Cette réaffectation a dépendu de la<br />
productivité des autres membres.<br />
4.5 Travail de chacun<br />
4.5.1 Ken Albertini<br />
Analyse et conception<br />
– étude comparative des logiciels d’évaluation de code.<br />
Développement<br />
– servlet de connexion au serveur FTP.<br />
Documentation<br />
– document sur l’étude comparative des logiciels d’évaluation de code.<br />
25
4.5.2 Yoann Bertrand<br />
Analyse et conception<br />
– étude des fonctionnalités,<br />
– étude de l’IHM,<br />
– étude de l’architecture,<br />
Développement et production<br />
– mise en forme du code du portail (nettoyage, commentaires, corrections mineures),<br />
– servlet de connexion à Jenkins,<br />
– servlet d’authentification au portail,<br />
– code de gestion des utilisateurs FTP (création automatique des répertoires personnels),<br />
– connexion entre Jenkins et le serveur FTP,<br />
– configuration de la machine de tests (installation, configurations système et réseau),<br />
– intégration et tests des différentes parties de code.<br />
Chef de projet<br />
– pilotage du projet (distribution des tâches, dialogue avec l’enseignant),<br />
– mise en forme et validation des documents.<br />
Documentation<br />
– mise en forme du rapport et de la présentation,<br />
– tests utilisateur pour la partie IHM,<br />
– diagramme de GANTT,<br />
– documentation d’installation.<br />
4.5.3 Raphaël Franot<br />
Analyse et conception<br />
– étude comparative des technologies de base de données,<br />
– étude des fonctionnalités,<br />
– étude de l’IHM,<br />
– étude de l’architecture,<br />
Développement et production<br />
– développement du portail,<br />
– servlet de connexion à la base de données,<br />
– servlet de connexion au serveur FTP,<br />
– mise en forme du feedback de Jenkins,<br />
– intégration des requêtes SQL au portail,<br />
– gestion des tests sur Jenkins,<br />
– intégration et tests des différentes parties de code,<br />
26
– création du livrable.<br />
Documentation<br />
– participation au rapport,<br />
– document sur l’étude des bases de données.<br />
4.5.4 Daniel Lludice<br />
Analyse et Conception<br />
– étude comparative des technologies web,<br />
– étude de l’architecture BD,<br />
– étude de l’architecture globale.<br />
Développement et production<br />
– création et modification de la base de données,<br />
– développement des requêtes SQL,<br />
– tests de la BD.<br />
Documentation<br />
– participation au rapport,<br />
– document sur l’étude des technologies web,<br />
– documentation utilisateur.<br />
27
Chapitre 5<br />
Conclusion<br />
Ce chapitre de conclusion est divisé en deux partie. La première permet de lister le<br />
travail effectué, le travail restant à faire et les optimisations possibles. La deuxième partie<br />
permet de donner notre avis sur les différents acquis que ce TER a apporté.<br />
5.1 Travail effectué<br />
Nous avons développé une application qui permet les actions suivantes : (Adm = Administrateur,<br />
En = Enseignant, Et = Étudiant).<br />
– Se connecter au portail en utilisant MySQL. (Adm,En,Et)<br />
– Créer des étudiants. (Adm)<br />
– Créer des enseignants. (Adm)<br />
– Créer des projets. (Adm, En)<br />
– Supprimer des étudiants. (Adm)<br />
– Supprimer des enseignants. (Adm)<br />
– Supprimer des projets. (Adm, En)<br />
– Modifier les informations d’un utilisateur. (Adm)<br />
– Modifier les informations d’un projet. (Adm, En)<br />
– Visualiser les informations d’un utilisateur. (Adm, En, Et)<br />
– Soumettre du code. (Adm, En, Et)<br />
– Soumettre un jeu de test. (Adm, En, Et)<br />
– Voir les résultats d’un projet. (Adm, En, Et)<br />
Pour pouvoir utiliser les fonctionnalités ci-dessus, nous avons effectué un certain nombre<br />
de connexion entre les différentes parties de notre application :<br />
– Connexion Portail - MySQL<br />
– Connexion Portail - Jenkins<br />
– Connexion Portail - Serveur FTP<br />
– Connexion Serveur FTP - Jenkins<br />
– Connexion MySQL - Serveur FTP<br />
28
Nous avons aussi écrit plusieurs documents pour que notre travail soit réutilisable :<br />
– des documents sur les études préliminaires,<br />
– des documentations utilisateurs,<br />
– une documentation d’installation,<br />
– un certain nombres de schémas descriptifs et annexes.<br />
Enfin, nous avons effectué des tests pour valider certaines parties de l’application :<br />
– tests utilisateurs pour l’IHM,<br />
– tests divers avant et pendant le développement.<br />
5.2 Travail restant<br />
Nous n’avons pas effectué la totalité des tâches que nous devions faire. En effet, il<br />
manque un certain nombre de fonctionnalités, comme par exemple :<br />
– La gestion des dates de rendus et des crédits, afin de bloquer le dépôt de code après<br />
échéance.<br />
– L’implémentation de la virtualisation, qui permettrait d’exécuter du code dans des<br />
machines virtuelles, afin d’éviter les problèmes d’exécution d’un code malicieux ou<br />
plein de bugs.<br />
– La corrélation de code, pour pouvoir comparer des projets entre eux afin de s’assurer<br />
que les étudiants n’ont pas utilisé le même code.<br />
– Gérer les groupes d’étudiant, comme des binômes par exemple.<br />
– Créer plusieurs utilisateurs à la fois, afin d’éviter un remplissage de la BD à la main.<br />
Néanmoins, nous avons tout fait pour que ces fonctionnalités soient facilement ajoutées<br />
au portail. En effet, la base de données ainsi que l’architecture globale de l’application<br />
ont été développées dans ce sens 1 . Ainsi, pour les crédits et les dates, il suffirait de coder<br />
une classe qui interroge la BD pour savoir si l’étudiant dispose encore de crédits, et qui<br />
pourrait simplement griser le bouton d’upload le cas échéant.<br />
Pour le remplissage automatique de la base, il faudrait d’implémenter une requête SQL<br />
qui prend un fichier texte en paramètre et remplie automatiquement la base en fonction<br />
du contenu du fichier.<br />
De la même façon, le mécanisme de corrélation de code pourrait être fait grâce à une<br />
Servlet qui comparerait les codes entre eux, grâce à des commandes Unix comme chksum<br />
ou comm.<br />
Enfin, il existe déjà un plugin Jenkins qui met en place la virtualisation, nous n’avons<br />
simplement pas eu le temps de l’utiliser.<br />
1. Notre BD contient les dates, les crédits et les groupes utilisateurs, il manque simplement le code<br />
Java qui permet d’exploiter ces notions.<br />
29
5.3 Optimisation<br />
5.3.1 Simplification de l’installation<br />
Une application ergonomique doit aussi être facile à installer. Pour cela, nous avons<br />
dans un premier temps rédigé une documentation pour aider l’utilisateur à mettre en<br />
place le portail. Malheureusement, l’installation nécessite du temps et des compétences.<br />
Pour éviter ces problèmes, nous avons envisagé de simplifier l’installation avec des scripts.<br />
Pour ce faire, les scripts pourraient :<br />
– Télécharger directement les applications utilisées (Tomcat, MySQL, vsftp, etc.)<br />
grâce à des commandes de type ”wget”.<br />
– Installer automatiquement les applications (en utilisant des commandes idoines<br />
comme ”sh”).<br />
– Configurer automatiquement les applications en copiant directement des fichiers de<br />
configuration aux bons emplacements.<br />
5.3.2 Fonctionnalités<br />
Gestion des groupes<br />
Il pourrait être avantageux de continuer le travail déjà commencé pour permettre à<br />
l’application de gérer des groupes d’étudiants.<br />
Changement de mot de passe obligatoire<br />
Pour cela, il pourrait être envisageable de rajouter dans la table ”Personne” un champ ”is-<br />
FirstConnection” de type booléen. Ce champs (à ”true” par défaut), serait envoyé au portail<br />
qui chargerait alors une fenêtre de modification du mot de passe (déjà implémentée).<br />
Ainsi, l’utilisateur serait obligé de changer son mot de passe à la première connexion.<br />
Gestion dynamique des chemins<br />
Il pourrait être intéressant de faire en sorte que les chemins utilisés par l’application<br />
soit dynamiquement modifiable avec des fichiers de configuration. Une partie de l’IHM<br />
pourrait même servir à modifier ces fichiers, rendant de facto la manipulation encore plus<br />
simple.<br />
Installation sur d’autres systèmes d’exploitation<br />
Pour l’instant, le portail ne fonctionne que sur Linux, à cause de deux choses :<br />
– l’utilisation de chemins de type Unix (exemple : /usr/...)<br />
– l’utilisation de commandes Unix (exemple : chown, locate, etc.)<br />
Comme nous l’avons dit précédemment, le problème des chemins peut être corrigé avec<br />
des fichiers de configuration. En revanche, pour régler le problème des commandes, nous<br />
pourrions utiliser des design patterns.<br />
En effet, les commandes Unix sont relatives à une servlet en particulier, il pourrait être<br />
judicieux d’utiliser les design pattern ”Abstract Factory” et ”Factory Method” pour créer<br />
30
automatiquement des servlets en fonction du système sur lequel l’application est exécutée.<br />
Ainsi, un morceau de code pourrait déterminer le système d’exploitation et créer une servlet<br />
particulière en fonction de ce dernier. Cette solution aurait l’avantage d’être propre<br />
et évolutive et permettrait une meilleure interopérabilité.<br />
5.4 Gain de connaissances techniques<br />
Ce TER a été riche en enseignement d’un point de vue technique, car il a permis<br />
de nous familiariser avec des technologies nouvelles, comme par exemple Jenkins<br />
et l’intégration continue. De plus, nous avons aussi eu la possibilité de mieux comprendre<br />
les technologies vues ou évoquées au cours de cette année universitaire. Par exemple, nous<br />
avons utilisé les cours de M. Richard Grin pour les questions liées à la persistance des<br />
objets. De même, nous avons utilisé GWT, qui était une technologie proposée pour le<br />
projet XML de M. Philippe Poulard. Enfin dans une moindre mesure, nous avons utilisé<br />
les cours de système de M. Fabrice Huet et les cours de réseau de M. Bruno Martin pour<br />
nous aider à installer et configurer la machine de test. Enfin, nous avons mis à profit<br />
les cours d’IHM de Mme Aurore Russo pour essayer de rendre notre application la plus<br />
ergonomique possible, en travaillant dès le début sur l’interface, mais aussi en faisant des<br />
tests sur des utilisateurs en fin de projet.<br />
5.5 Gain de connaissances pratiques<br />
Ce TER nous a aussi permis de mieux appréhender les difficultés inhérentes au travail<br />
en équipe. Nous avons vu qu’il était compliqué de travailler à plusieurs et de prévoir les<br />
problèmes (difficultés techniques, perte d’un membre de l’équipe, etc.). De plus, le fait de<br />
ne pas travailler physiquement au même endroit peut aussi être une source de problèmes.<br />
Néanmoins, nous avons compris qu’une bonne communication entre les personnes était<br />
cruciale pour le bon déroulement du projet.<br />
31
Chapitre 6<br />
Glossaire<br />
A - D<br />
Abstract Factory<br />
Schéma de conception pour la création d’objets regroupés en familles. p.31<br />
ActionScript<br />
Langage de programmation ajoutant de l’interactivité aux objets multimédias (images,<br />
sons, vidéos) en répondant aux actions de l’utilisateur. p.6<br />
AJAX<br />
Asynchronous Javascript and XML. Ensemble de technologies pour la construction d’application<br />
web dynamiques. p.6<br />
Ant<br />
Logiciel d’automatisation de tâches à partir d’un code-source (production de logiciel, de<br />
document/rapports, etc). p.7<br />
API<br />
Application Programming Interface. Interface de programmation fournie par un langage<br />
informatique pour concevoir des programmes dans ce langage. p.7<br />
Bibliothèques<br />
Les bibliothèques informatiques sont des fichiers qui contiennent des fonctionnalités ajoutées<br />
à un langage informatique. p.1<br />
CSV<br />
Comma-separated values. Format informatique de représentation de données. p.7<br />
Design Pattern<br />
Schéma de conception pour la résolution d’un problème donné. p.30<br />
Diagramme de GANTT<br />
Outils graphique pour ordonnancer les tâches d’un projet en fonction du temps et des<br />
32
personnes. p.23<br />
DNS<br />
Domain Name System. Système de Noms de Domaine. Service permettant d’établir une<br />
correspondance entre une adresse IP et un nom de domaine. p.12<br />
Driver JDBC<br />
Pilote logiciel permettant d’établir une connexion entre un programme Java et un système<br />
de gestion de base de données. p.18<br />
F - R<br />
Factory Method<br />
Schéma de conception définissant une interface pour la création d’objet. p.31<br />
FTP<br />
File Transfer Protocol. Protocole de transfert de fichiers permettant, depuis un ordinateur,<br />
de copier des fichiers vers un autre ordinateur du réseau. p.18<br />
GWT<br />
Google Web Toolkit. Ensemble d’outil permettant la création de pages Web dynamiques.<br />
p.6<br />
ICPC<br />
International Collegiate Programming Contest. Un certain type de concours de programmation.<br />
p.11<br />
IDE<br />
Integrated Development Environment. Environnement de développement intégré. Programme<br />
regroupant un ensemble d’outils pour le développement de logiciels. p.8<br />
IHM<br />
Interface Homme-Machine. Moyens mis en œuvre afin qu’un humain puisse communiquer<br />
avec une machine.p.13<br />
HTTP<br />
HyperText Transfer Protocol. Protocole de communication client-serveur. p.17<br />
Maven<br />
Logiciel d’automatisation de production de logiciel à partir de code sources. p.6<br />
MXML<br />
Langage de description, dérivé du XML, pour décrire la présentation des interfaces. p.6<br />
33
MySQL<br />
Un système de gestion de base de données. p.10<br />
RPC<br />
Remote Procedure Call. Protocole réseau permettant de faire des appels de procédures<br />
sur un ordinateur distant. p.10<br />
S - Z<br />
Servlets<br />
Classe Java destinée à créer dynamiquement des données sur un serveur. Elles permettent<br />
aussi de rajouter des fonctionnalités. p.11<br />
SVN<br />
Logiciel de gestion de version de programmes. p.7<br />
Tomcat<br />
Serveur web qui gère des servlets. p.7<br />
URL<br />
Uniform Resource Locator. Chaîne de caractères utilisée pour localiser des ressources. p.17<br />
XML Extensible Markup Language Langage de balisage extensible. Langage informatique<br />
basé sur le principe de balises. Son objectif est de faciliter l’échange automatisé de<br />
contenus complexes. p 9<br />
34
Bibliographie<br />
[1] Google web toolkit. http://code.google.com/intl/fr/webtoolkit/.<br />
[2] Jaxcent. http://www.jaxcent.com/.<br />
[3] Adobe flash. http://www.adobe.com/fr/products/flashplayer/.<br />
[4] Adobe flex. http://www.adobe.com/fr/products/flex/?promoid=BPBOG.<br />
[5] Php. http://www.php.net/.<br />
[6] Microsoft silverlight. http://www.silverlight.net/.<br />
[7] Jenkins ic. http://jenkins-ci.org/.<br />
[8] Continuous integration and build server. http://www.atlassian.com/software/<br />
bamboo/.<br />
[9] Apache continuum. http://continuum.apache.org/.<br />
[10] Mooshak. http://mooshak.dcc.fc.up.pt/.<br />
[11] Domjudge. http://domjudge.sourceforge.net/.<br />
[12] code-cracker, a semi-automated online judge system. http://code.google.com/p/<br />
code-cracker/feeds.<br />
[13] Workspace assembla. http://www.assembla.com/spaces/Portail_KRYD/wiki.<br />
[14] Laurent Debrauwer. Design Patterns pour Java. ENI Ed., 2009.<br />
[15] Smart gwt showcase. http://www.smartclient.com/smartgwt/showcase/<br />
#toolstrip.<br />
[16] Rpc request builder in gwt. http://jagadesh4java.blogspot.com/2009/04/<br />
gwt-rpc-using-request-builder-hi.html.<br />
[17] Le sql de a à z. http://sqlpro.developpez.com/cours/sqlaz/sousrequetes/.<br />
[18] Ci feature matrix. http://confluence.public.thoughtworks.org/display/CC/<br />
CI+Feature+Matrix.<br />
[19] Javadoc. http://download.oracle.com/javase/6/docs/api/.<br />
[20] Martin Fowler. Patterns of Enterprise Application Architecture. Addison-Wesley,<br />
2009.<br />
[21] Richard Grin. Modèle pour la persistance des objets. 2011.<br />
[22] Philippe Poulard. Web - XML. 2011.<br />
[23] Aurore Russo. ergonomie. 2011.<br />
35
Université de Nice - Sophia-Antipolis<br />
Faculté des sciences Valrose<br />
28 avenue valrose, 06103 Nice<br />
Travail d’étude et de recherche<br />
Gestion-évaluation<br />
semi-automatique de projets<br />
ANNEXES<br />
1 er juin 2011<br />
Présenté par :<br />
M. Albertini Ken<br />
M. Bertrand Yoann<br />
M. Franot Raphaël<br />
M. Lludice Daniel<br />
Sous la direction de :<br />
M. Huet Fabrice
Table des annexes<br />
1 Documentation utilisateur I<br />
2 Requêtes SQL III<br />
3 Tests utilisateurs IV<br />
3.1 Tâches à effectuer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . IV<br />
3.2 Résultats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . IV<br />
4 Diagramme de GANTT VII
Annexe 1<br />
Documentation utilisateur<br />
Cette annexe montre une petite partie de la documentation utilisateur réalisée. Le<br />
but de cette documentation est de mieux comprendre comment utiliser le portail.<br />
I
Annexe 2<br />
Requêtes SQL<br />
Le schéma suivant montre le mécanisme d’interrogation de la BD via deux requêtes<br />
SQL. Pour faciliter la compréhension, seul les tables et tuples pertinents sont représentés.<br />
La requête 1 permet de récupérer les nom, prénom et email des personnes du groupe<br />
”TER”.<br />
La requête 2 permet de récupérer les projets dont fait parti l’étudiant Dupond.<br />
Figure 2.1 – Mécanisme d’interrogation de la base avec des requêtes SQL<br />
III
Annexe 3<br />
Tests utilisateurs<br />
3.1 Tâches à effectuer<br />
Cette partie décrit les résultats des tâches que nos utilisateurs ont effectué. Ces tâches<br />
exploitent les fonctionnalités de l’application dans un cadre d’utilisation normal. Nos<br />
utilisateurs sont trois ex-étudiants 1 qui ont utilisé l’application pendant 10 minutes avant<br />
de réaliser les tests.<br />
3.2 Résultats<br />
Tâche T1 :<br />
– Créer trois étudiants (nom et informations imposés).<br />
– Modifier le prénom d’un des enseignants (prénom imposé).<br />
Tâche T2 :<br />
– Créer un projet (nom et informations imposés).<br />
– Uploader un jeu de tests pour ce projet (choix du fichier imposé).<br />
Tâche T3 :<br />
– Visualiser les infos d’un des enseignants.(choix libre).<br />
– Soumettre un code (choix du fichier imposé).<br />
Résultats des tâches chronométrées<br />
Ces temps ne prennent pas en compte la connexion au portail.<br />
Noms T1 T2 T3 Total<br />
Nicolas 1min07 49 sec 27 sec 2min23<br />
Maxime 1min12 52 sec 25 sec 2min29<br />
Vincent 1m02 50 sec 22 sec 2min14<br />
1. Ils ne sont plus étudiants depuis moins d’un an.<br />
IV
Résultat de la partie A<br />
Cette partie permet de noter l’application sur quelques critères ergonomiques.<br />
Critères Nicolas (/10) Maxime (/10) Vincent (/10)<br />
Pertinence des menus 8 7 7<br />
Temps de ≪ chargement ≫ 10 10 9<br />
Dispositions des menus 7 8 7<br />
Facilité de navigation 8 8 9<br />
Facilité de compréhension 8 7 6<br />
Moyenne 8.2 8 7.6<br />
Résultat de la partie B<br />
Cette partie permet de voir si les tâches ont été comprises et si elles étaient pertinentes<br />
pour nos utilisateurs.<br />
Critères Nicolas ( /10) Maxime ( /10) Vincent (/10)<br />
Compréhension T1 10 10 9<br />
Compréhension T2 10 10 9<br />
Compréhension T3 9 10 9<br />
Efficacité T1 6 7 7<br />
Efficacité T2 7 8 6<br />
Efficacité T3 8 7 7<br />
Moyenne 8.33 8.66 7.83<br />
Globalement, on peut dire que nos utilisateurs ont trouvé que les tâches étaient pertinentes.<br />
Néanmoins, ils ont trouvé que la tâche 1 (la création de plusieurs étudiants par un<br />
administrateur) était fastidieuse, surtout si l’administrateur devait créer une promotion<br />
entière.<br />
De plus, les testeurs ont trouvé que la tâche 3 (visualiser des informations et soumettre<br />
du code) manquait un peu de substance. Pour pallier ce problème, ils ont proposé de<br />
rajouter une ou deux étapes, comme par exemple modifier son mot de passe ou déposer<br />
un projet fini.<br />
Résultat de la partie C<br />
Les testeurs ont trouvé que les tâches étaient facilement réalisables car les menus étaient<br />
bien ordonnées. En effet, ils ont considérés que le fait d’avoir ajouté des onglets rendait<br />
la navigation plus facile. De plus, ils ont trouvé les temps de chargement excellent et le<br />
design très sobre mais efficace.<br />
Néanmoins, nos utilisateurs ont émis un certain nombre de critiques sur le portail, comme<br />
par exemple :<br />
– Le manque de pertinence pour certains messages de popup (pas assez d’informations).<br />
V
– La nécessité d’appuyer sur le bouton ”Afficher Infos” pour charger les informations.<br />
– Le manque d’informations (format des dates non spécifié) dans le menu de création<br />
d’un projet.<br />
– Le panneau ”descriptif” d’un projet trop petit.<br />
VI
Annexe 4<br />
Diagramme de GANTT<br />
Cette section montre le diagramme de GANTT initialement produit en début de TER.<br />
Figure 4.1 – Diagramme de GANTT initial - partie 1.<br />
VII
Figure 4.2 – Diagramme de GANTT initial - partie 2.<br />
VIII