Master 1 Informatique

Projet de développement (2 × 5 crédits)

Encadrement : Olivier Ridoux
Le projet de développement de 1ère année de Master d'Informatique a pour objectif de mettre les étudiants en situation de concevoir, développer et présenter un projet informatique, le plus souvent logiciel. La mise en situation comprend la gestion de la durée (2 semestres) et du nombre (équipes de 10 à 15 ètudiants).

Les sujets sont proposés par des enseignants et parfois des clients extérieurs à l'IFSIC. Les étudiants commencent par une phase d'analyse-expérimentation qui se conclut par un dossier de développement et parfois des maquettes. Le dossier de développement comprend un cahier des charges précis, une analyse fonctionnelle détaillée et un plan de développement. Le second semestre est consacré au développement selon une démarche adoptée par les étudiants avec l'encadreur. Le développement peut ne pas suivre le dossier de développement, mais les écarts devront être constatés et analysés. L'encadreur n'est pas le chef de projet, mais plutôt le client. Le chef de projet est un des étudiants. D'autres étudiants assument d'autres responsabilités selon les besoins : ex. documentation, administration système, administration des données, tests. L'étudiant-chef de projet est l'interlocuteur principal de l'encadreur-client. Les étudiants s'organiser eux-mêmes, éventuellement en demandant conseil à l'encadreur. Par exemple, certains adoptent un règlement intérieur. L'évaluation est individuelle autant que faire se peut. L'évaluation tient compte des résultats, des moyens mis en oeuvre pour les obtenir et de la qualité de la communication sur ces résultats. Elle se fait d'abord globalement, puis individuellement en tenant compte des écarts d'investissement de chacun.
Je propose régulièrement des sujets de projet. Souvent, je les propose plusieurs années de suites. Les étudiants sont alors invités à travailler sur la base des travaux de leurs prédécesseurs. Un critère de qualité est alors de conduire le projet plus loin que l'année d'avant. En 2005-2006, j'ai proposé un projet sur l'animation d'algorithme, qui est reconduit en 2006-2007. Auparavant, j'avais proposé des projets sur la synthèse d'emplois du temps, les systèmes de fichiers logiques, l'analyse de la langue naturelle, etc.

Le projet AnimAlgo

La compréhension des algorithmes est un problème qui se pose à l'étudiant en informatique (comprendre), mais aussi à l'enseignant d'algorithmes (faire comprendre), et encore au concepteur d'algorithme (explorer, valider et aussi comprendre). Ce problème est complexe car il demande de mettre en relation un objet fini et statique, le texte de l'algorithme, et un objet infini et tout autant statique, la fonction réalisée par l'algorithme. Une démarche courante est de mettre en relation l'objet statique algorithme et l'objet dynamique qui est la trace de son exécution, puis de déduire des traces les invariants du programme. C'est une démarche inductive proche du test, car elle demande de généraliser un nombre fini d'observations en une loi générale. L'objectif du projet AnimAlgo est de faciliter cette démarche. Il s'agit donc d'une aide à l'algorithmique expérimentale par l'usage d'un système qui automatise le plus possible ce qui peut l'être. Nous verrons que cette démarche ne s'oppose pas à une démarche déductive, dans le style des logiques de programmes.

Plus précisément, l'objectif général de ce projet est de concevoir et développer un système interactif d'animation d'algorithmes, qui permette à un utilisateur de
saisir un algorithme, ou en sélectionner un dans une base de donnée, et éventuellement le modifier,
décrire la façon de l'animer (quelles variables afficher ? comment ? ...),
décrire des entrées (constantes, sélections aléatoires, ...),
l'animer (marche avant, arrière, pas-à-pas, défilement plus ou moins rapide, ...),
stocker l'algorithme ou son animation dans une base de donnée,
utiliser une animation toute prête, ou en modifier une.

Le projet proposé en 2006-2007 fait suite à un projet de 2005-2006 qui avait le même objectif. Cependant, dans sa première version le projet AnimAlgo avait son objectif bridé de façon à pouvoir traiter toutes les facettes du projet, mais au prix de fortes limitations dans l'expressivité du langage de description d'algorithmes et dans la gestion des utilisateurs. Grâce à ces limitations le projet 2005-2006 a pu faire avec succès la démonstration des différents services rendus et de leur intégration.

L'objectif particulier du projet 2006-2007 est donc de dépasser ces limitations en s'appuyant le plus possible sur l'existant. Plus précisément, le projet 2006-2007 devra permettre tout ou partie de
les définitions d'algorithmes récursifs,
les définitions d'algorithmes multi-processus,
des animations qui rendent compte du temps passé dans les différentes parties de l'algorithme (chronogramme, ...),
un stockage qui rende compte des différentes exécutions d'un même algorithme (courbes de complexité, ...),
l'identification et l'authentification des utilisateurs dans des rôles distincts (administrateur, étudiant, enseignant, ...),
l'insertion d'assertions dans les algorithmes, et leur vérification lors de l'animation. C'est ici que la démarche inductive de l'animation rejoint la démarche déductive de logique de programme.

Le système devra pouvoir être déployé sur un serveur de l'IFSIC et être utilisable par le plus grand nombre.

Le projet AnimAlgo comporte des facettes d'application Web (serveur, applet, base de données, ...), des facettes d'interface graphique (interface utilisateur, animation, ...), des aspects langages (compilation et interpétation d'un langage d'algorithmes), et des aspects systèmes (synchronisation des différents composents, gestion des ressources partagées, ...).

Le projet fonctionnera selon un cycle de vie itératif, qui enchaînera répétitivement des phases d'analyse et de spécification, de développement et de validation.