INF2 – PROJET DE GÉNIE LOGICIEL 2010-2011 EMMANUEL BRUNO 1. Objectifs et organisation 1.1. Objectifs. Ce projet a pour objectif pratique de réaliser un outil simple d’autoformation à l’algorithmique et à la programmation de base. Cet outil est destiné à deux catégories d’utilisateurs : les enseignants qui pourront ajouter des algorithmes (une description et le code source) à la base existante et suivre les progrès des étudiants, les étudiants qui pourront consulter les algorithmes mais aussi tester leur propre solution. L’objectif pédagogique principal est la mise en pratique des concepts étudiés en cours et appliqués en TP dans le cadre d’un projet complet : • Analyse du problème et conception d’une solution simple modélisée avec un diagramme de classe UML. • Implantation de la solution en Java en utilisant : – Les concepts de base fournis par java (Interfaces, classes abstraites, héritage, réutilisation, la documentation avec javadoc, . . . ) – Les fonctionnalités des paquetages classiques (interface graphique avec Swing, connexion via JDBC au SGBDR Postgresql, chargement et exécution dynamique de classe, . . . ). – Les extension classiques (les tests unitaires avec Junit, la gestion des logs avec log4j ou le jdk . . . ) Ce projet est composé de deux parties. La première comprend la gestion classique de données en Java (Création et consultation des algorithmes dans un SGBDR via une IHM). La seconde est dédiée à la vérification de l’implantation d’un algorithme proposée par un étudiant par rapport à une solution de référence. 1.2. Organisation du projet. Cette section décrit les deux parties du projet. La première est une application directe du cours et la seconde demande un peu plus de recherche personnelle. 2. Gestion des données La première partie du travail consiste à fournir un outil permettant la gestion des algorithmes (une liste d’algorithmes est disponible ici :http://zanotti.univ-tln. fr/ALGORITHMIQUE/). Un algorithme est décrit par un code à trois champs : le domaine (NUM pour numérique, GRA pour graphe, DON pour traitement de données,. . . ), le type (ITR pour itératif, REC pour recursif), et le niveau de difficulté (de 0 à 3). Pour chaque algorithme on disposera au moins de son nom, d’une description en HTML et d’un pseudo-code. On pourra aussi avoir le programme en langage C correspondant. Les utilisateurs de cette application sont de deux types : Les enseignants et les étudiants. Les enseignants ajoutent des algorithmes ou les modifient. Les étudiants consultent les algorithmes. La formation des étudiants est découpée en étapes (L1,L2,L3,M1,M2), et chaque étudiant appartient à une promotion (une étape et Date: décembre 2010. 1 2 E. BRUNO une année par exemple M1-2010). Pour chaque étape, il existe trois ensembles d’algorithmes : obligatoires, conseillés, facultatifs. Chaque étudiant devra pouvoir indiquer les algorithmes qu’il a étudié, les enseignants pourront consulter l’état d’avancement des étudiants. • Proposer un diagramme de classe UML qui représente cette application. • Décider quelle partie sera gérée dans la base de données et quelle partie par du code Java. • Proposer un schéma relationnel pour la base de données. • Définir les interfaces, et les classes pour l’application Java. • Définir des tests unitaire à mettre en place. • Proposer une organisation pour l’IHM de l’application. 3. Evaluation des réponses Cette partie se propose de permettre à l’étudiant de tester une implantation de l’algorithme directement dans l’application. Pour cela, on associe à chaque algorithme, en plus du code en langage C, le prototype des fonctions qui composent l’implantation et plusieurs solutions écritent dans un langage simple : java−−. 3.1. Prototypes Java−−. La définition d’un algorithme A proposée par un enseignant est complétée par : (1) une liste de prototypes de fonctions de la forme suivante : < type > nom(< type > nom, ...) où nom est un identificateur et < type > est un type primitif Java ou un tableau. Cela définit donc l’interface IA de l’algorithme A. L’une des fonctions doit être désignée comme le point d’entrée. (2) une liste de tests composés chacun d’un couple (liste de valeurs correspondants aux paramètres de la fonction d’entrée, résultat attendu de la fonction). 3.2. Implantations Java−−. Chaque utilisateur pourra proposer une implantation Java−− d’un algorithme A. Une implantation Java−− d’un algorithme est composée du code java pour les déclarations globales (du texte contenant des déclarations et affectations de variables) et le corps de chacune des fonctions de l’interface IA. Il est donc immédiat de créer le code source d’une classe Java A qui implante l’interface IA. Grâce aux mécanismes d’édition de lien dynamique de Java, il possible de compiler et d’instancier A pendant l’exécution. Finalement, il est possible d’invoquer la méthode déclarée comme le point d’entrée avec les paramètres de test pour vérifier que le résultat est correct. Département d’Informatique - UFR de Sciences et Techniques - USTV E-mail address: [email protected]