En quoi consiste ce Projet ?
Ce projet vise à concevoir et développer une plateforme (comprenant un site web et une application bureautique ou mobile) pour assister à la création de groupes d'étudiants pour les travaux dirigés (TD) et travaux pratiques (TP). Il répond au problème récurrent et chronophage de la répartition manuelle des étudiants, qui est particulièrement complexe pour les grandes promotions soumises à de multiples contraintes.
Il s'agit d'un projet long réalisé en groupe de trois personnes. Il se divise en plusieurs parties bien distinctes couvrant l'ensemble du cycle de développement : Algorithmique, Analyse, Base de données, Conception Orientée Objet (COO) et Web.
Fonctionnalités et gestion des contraintes
Le système doit permettre de répartir les étudiants en respectant divers critères pédagogiques et pratiques :
- Homogénéisation des groupes en fonction du niveau académique (en utilisant les moyennes et écart-types).
- Équilibrage selon le genre, le type de baccalauréat, le statut (redoublants, apprentis).
- Prise en compte des affinités et de la logistique, comme le covoiturage, le choix de la langue d'enseignement ou les options.
- Création de sondages pour recueillir les choix et préférences des étudiants.
- Importation des notes des étudiants via des fichiers CSV pour alimenter les critères de sélection.
- Génération des groupes de manière automatisée (via un algorithme respectant les règles fixées) ou manuelle (en sélectionnant les étudiants un par un).
Partie ANALYSE
En tant que maîtres d'œuvre sur ce projet, notre rôle lors de cette phase a été de nous assurer que les besoins du client (la maîtrise d'ouvrage) soient parfaitement traduits techniquement. En conjuguant nos efforts, nous avons eu la charge de réaliser les tâches suivantes :
- L'analyse fonctionnelle : Nous avons défini et structuré l'ensemble des fonctionnalités requises pour garantir que l'application et le site web répondent aux attentes demandées.
- La conception de la base de données : Nous avons élaboré le modèle de données. C'était un enjeu majeur, car la qualité de cette modélisation conditionne directement la fiabilité et la robustesse de la base de données finale.
- La gestion des événements : Nous avons également pris en charge la conception des événements destinés à être traités et gérés directement du côté de la base de données.
Partie ALGO (Algorithmique)
Pour cette partie du projet, notre rôle s'est concentré sur le cœur logique de l'application : le développement en Java du moteur de répartition automatisée des étudiants. Nous avons eu la charge de réaliser les tâches suivantes :
- Définition d'un scénario de répartition personnalisé : Nous avons conçu notre propre mode de création de groupes basé sur un cas d'usage réaliste. Cela impliquait d'établir des contraintes strictes à respecter obligatoirement (comme la taille des groupes, les quotas de genre ou les demandes de covoiturage) et d'élaborer une fonction de "score" globale à optimiser (visant par exemple à lisser les moyennes académiques ou à équilibrer les profils spécifiques entre les groupes).
- Conception et développement des algorithmes : Pour résoudre ce problème d'optimisation propre à notre scénario, nous avons programmé trois algorithmes distincts.
- Intégration avec l'application : Nous nous sommes assurés que notre code s'intègre parfaitement avec l'application réalisée dans le volet « Qualité de développement ». Nos algorithmes devaient pouvoir être appelés directement depuis l'interface utilisateur en prenant en compte les paramètres saisis, puis renvoyer les groupes constitués pour qu'ils soient affichés à l'écran.
Partie BD (Base de Données)
Pour cette étape cruciale du projet, notre rôle a été de concrétiser le travail d'analyse en implémentant techniquement la base de données, tout en nous assurant de sa robustesse et de sa cohérence avec les fonctionnalités attendues. Nous avons eu la charge de réaliser les tâches suivantes :
- Conception relationnelle et création (Aspect statique) : Nous avons traduit le Modèle Entité-Association en un Modèle Relationnel détaillé, en justifiant nos choix d'implémentation et d'optimisation. Nous avons ensuite conçu les scripts SQL de création des tables (en nous aidant d'outils de modélisation pour garantir une génération propre) afin de nous assurer qu'aucune table ne soit créée manuellement.
- Génération du jeu d'essai et requêtage : Nous avons élaboré un script de population pour insérer automatiquement des dizaines de données de test réalistes dans chaque table. À partir de là, nous avons rédigé les requêtes et les vues SQL correspondant aux maquettes de l'application, ce qui nous a permis de tester et de valider l'absence d'erreurs dans notre modèle de données.
- Programmation dynamique (PL/SQL) : Pour gérer les règles métier complexes directement côté serveur, nous avons implémenté des triggers (déclencheurs) et leurs fonctions PL/SQL associées. Cela permet d'automatiser certains traitements lors de la modification des données.
- Livraison et documentation : Nous avons préparé le livrable final en regroupant l'ensemble des scripts et des requêtes dans une archive fonctionnelle incluant un fichier README.
Partie COO (Conception Orientée Objet)
Pour ce volet du projet, notre rôle a été de concevoir et de développer l'application cliente en Java (la partie non-web). Cette application constitue l'interface permettant aux utilisateurs finaux d'interagir avec le système, et tout particulièrement d'exécuter, tester et évaluer les résultats de nos algorithmes de répartition.
- Modélisation objet (UML) : Nous avons conçu l'architecture logicielle de l'application en réalisant un diagramme de classes UML, en nous concentrant strictement sur les objets et les données nécessaires au bon fonctionnement de cette interface.
- Maquettage et conception des échanges de données : Nous avons élaboré les maquettes des différents écrans de l'application. Pour chaque vue, nous avons défini les requêtes HTTP (API REST) nécessaires pour communiquer avec le serveur web, et nous avons structuré les réponses attendues au format JSON.
- Implémentation logicielle et connexion au serveur : Nous avons développé l'application Java complète. Le défi majeur était de la connecter efficacement à la base de données via l'API REST (développée en parallèle sur la partie web) pour que l'utilisateur puisse consulter et mettre à jour les informations en temps réel.
- Conception de l'infrastructure globale : Nous avons réalisé un diagramme de déploiement cartographiant l'ensemble de l'architecture matérielle et logicielle du projet. Ce schéma illustre les machines utilisées, leurs protocoles de communication, ainsi que les librairies et livrables déployés sur chaque nœud.
Partie WEB
Pour ce volet du projet, notre rôle a consisté à donner vie aux maquettes et à l'architecture de données en développant l'interface web complète et les services de communication côté serveur.
- Design et intégration (Charte graphique & Responsive) : Nous avons défini l'identité visuelle de la plateforme en créant une charte graphique sur mesure. Nous avons ensuite développé les feuilles de style (CSS) pour implémenter ce design et garantir une navigation fluide et responsive sur tous les écrans.
- Développement Front-End (PHP) : Nous avons entièrement programmé le site web en PHP. Cette interface, directement connectée à la base de données, permet aux différents acteurs (étudiants, enseignants, responsables) d'accéder à toutes les fonctionnalités décrites dans le cahier des charges via un environnement ergonomique.
- Création de l'API REST (Backend) : En parallèle du site frontal, nous avons développé en PHP les services web (API REST). C'est cette brique technique cruciale qui permet à l'application cliente Java d'interagir avec le serveur et de manipuler les données de la base en temps réel.
- Livraison et documentation : Pour clôturer le projet et préparer la soutenance, nous avons compilé l'ensemble des livrables : le code source, la documentation technique et les scripts de déploiement.