Chapitre 14 : Projet 2, seconde session.¶
Ce chapitre présente les consignes détaillés pour la seconde session de ce cours. Il vous sera demandé de produire un projet similaire à celui fait pendant l'année, mais seul·e, raison pour laquelle nous avons simplifié quelques étapes pour vous.
Vous devrez produire un site web gérant une base de données fournie et la visualisant à travers des graphes, le tester et enfin écrire un rapport. Le tout sera présenté oralement à la fin de la seconde session.
Vous ne partez pas de zéro: un projet de base¶
Faites un issue sur https://forge.uclouvain.be/linfo1002/august-2025/-/issues pour être assigné à un projet sur forge. Ce projet sera un clône de forge.uclouvain.be:linfo1002/august-2025.git. Vous pouvez déjà travailler sur cette base si vous le désirez mais le pipeline et la mise en ligne ne fonctionneront pas.
- Ce projet contient :
La base de donnée, la connexion à la base de données et une requête pour lister les aéroports.
Un exemple de template pour la page principale
La base pour écrire vos propres tests unitaires
Un pipeline d'intégration continue (CI) pour vérifier que votre code est correct et que les tests passent. Il ne pourra fonctionner qu'après intervention d'un assistant.
Même si vous êtes seul.e, vous devez travailler avec Git et non uniquement sur votre machine. Faites une branche stable (toujours fonctionnelle) et des branches vous permettant de travailler sur les différentes fonctionnalités. Faites une merge request pour fusionner chaque fonctionnalité importante en la décrivant correctement. Forcément, comme vous travaillez seul, vous devrez la fusionner vous-même.
Vous devez utiliser le projet de base et repartir de zéro. Vous devez réimplémenter le code vous même. Nous utiliserons des comparateurs de plagiat. Vous ne pouvez pas reprendre le code de votre ancien groupe.
Une fois que le site de base fonctionne chez vous, créez une page vous représentant. Elle doit au minimum contenir votre nom et une image (celle-ci peut être une photo de vous, de votre animal de comagnie, un avatar ou autre image que vous appréciez). Vous pouvez y ajouter quelques détails si vous le souhaitez, mais ne passez pas trop de temps dessus.
Fonctionnalités à implémenter¶
Vous devrez implémenter les fonctionnalités suivantes:
La capacité de calculer le nombre de kilomètres parcours par un avion (voir ci-dessous). Cette particularité sera particulièrement testée avec des tests unitaires.
Un graphe unique du nombre de kilomètres parcourus au total par tous les avions de chacun des 5 aéroports belges. Le total se fait sur une période configurable par l'utilisateur. Par défaut la période est de l'ensemble des dates disponibles dans la base de données.
Nous vous rappelons que votre code Python devra être clair, documenté et accompagné de tests unitaires.
Distance entre deux aéroports¶
distance(lat_from: Decimal, long_from: Decimal, lat_to: Decimal, long_to: Decimal) -> Decimal
: qui étant donné les coordonnées de l'aéroport de départ to
et de celui d'arrivée from
en radian retourne une distance en kilomètre. Calculer une distance entre deux points sur Terre de façon précise n'est pas si aisé. Pour nous simplifier la tâche, nous allons utilisez l'approximation suivante.
La formule à utiliser est :
D = R*(arcos(sin(lat_from)*sin(lat_to)+cos(lat_from)*cos(lat_to)*(cos(long_from-long_to))))
R est le rayon de la Terre qui est de 6378 KM. Les fonctions trigonométriques se trouvent dans la librairie math, vous pouvez les utiliser directement, en revanche, vous ne pouvez pas utiliser de librairie qui calcule pour vous la distance entre deux points sur Terre.
Attention: Dans la base de données, les angles sont donnés en dégrés et non en radiant, pour convertir les degrés en radiants, vous devez utiliser la fonction radians
dans la librairie math. En Python : math.radians(degree)
Si par exemple, nous calculons la distance CRL(Brussels South Charleroi Airport)-TNG(Tangier Ibn Battouta Airport)
donc la distance entre (50.46,4.45)
et (35.7,-5.9)
dans la base de données. En utilisant la formule, nous obtenons 1842 KM. www.airmilescalculator.com nous donne la valeur de 1838 KM pour le même vol, pas mal !
Comme la précision de cet algorithme dépend de la précision de l'arithmétique de nombres décimaux, vous devrez utiliser decimal.Decimal pour représenter les valeurs numériques.
Tests unitaires¶
On vous demande aussi de fournir une classe de tests qui testera la logique de ces différentes méthodes.
Pour ce faire, on vous demande d'utiliser le module unittest comme vu en LSINF1101 et/ou comme rappelé dans le syllabus et au cours.
Vous devrez créer vos fichiers de tests dans un sous-répertoire tests
et ils devront respecter la nomenclature test_*.py
où *
correspond à la classe ou au module testé pour que unittest les découvre automatiquement.
Une classe de tests unitaires hérite de unittest.TestCase
et porte un nom logique *TestCase
correspondant à la classe ou au module testé.
Chaque classe teste une fonctionnalité précise et chaque méthode de test dans la classe sera nommée en commençant par test_
comme def test_foo(self) :
contenant une série d'assertions qui vérifient que pour un input connu, l'output produit est celui attendu (expected).
Un squelette d'une telle classe ressemblera donc à ceci.
tests/test_distance.py
import unittest import mobility.distance class DistanceTestCase (unittest.TestCase): def test_distance(self): # Un angle de 1 Radian intercept un arc de longueur égal au rayon # Nous prenons deux points distants d'un angle de 1 radian expected = 6378 a = (0, 1) b = (0, 2) actual = mobility.distance.distance(a[0], a[1], b[0], b[1]) self.assertAlmostEqual(actual, expected, 1, msg=f'My error message on pl.f({actual}) different than {expected}') if __name__ == '__main__': unittest.main(verbosity=2)
Des graphiques pour visualiser les données¶
Une fois la base de vos tests en place, vous allez pouvoir commencer à créer les graphiques. Nous vous rappelons que votre projet entier doit être testé, et vous devez le faire petit à petit en utilisant git.
Pour créer un graphique efficace qui permet de visualiser les données de manière claire et concise, il est important de prendre en compte plusieurs facteurs clés. Tout d'abord, il est essentiel de choisir le type de graphique le plus approprié en fonction des données que l'on souhaite visualiser.
Ensuite, il est important de bien choisir les axes du graphique et de s'assurer qu'ils sont nommés de manière claire et précise, en incluant les unités de mesure si nécessaire. Il est également important de s'assurer que le graphique est suffisamment grand pour que les données soient facilement lisibles.
Enfin, il est important d'utiliser des couleurs claires et cohérentes pour les différentes parties du graphique, en utilisant des nuances différentes pour les différents groupes de données si nécessaire. Il est également important d'inclure une légende claire qui permet de comprendre facilement ce que chaque élément du graphique représente. En suivant ces principes de base, il est possible de créer des graphiques qui permettent de visualiser efficacement les données et de communiquer clairement les informations importantes.
Ces concepts ont été présentés au cours, et nous mettons à votre disposition une vidéo de rappel du cours introduisant la visualisation de données ainsi que l'utilisation de Chart.js et son intégration dans votre projet.
Rapport et présentation¶
Pour terminer, vous remettrez sur Moodle pour le Jeudi 21 août à 18H (LLN), un zip contenant votre code entier, des screenshots de votre site au cas où il ne s'afficherait pas correctement, ainsi qu'un rapport écrit décrivant ce que vous avez fait, les difficultés que vous avez rencontrées et comment vous les avez surmontées. Il n'y aura pas de délais accordé. La non soumission en temps et en heure entrainera donc une note de zéro.
La présentation orale de votre projet se déroulera le Jeudi 28 août (LLN) dans la plage reprise à votre horaire comme examen oral. Vous devrez présenter en 5 minutes votre projet, et une démonstration de 3 minutes de votre site, suivie d'une session de questions-réponses de 5 minutes.
Les étudiants ULB et Charleroi sont invités à contecter le Professeur pour convenir d'une date de remise et de présentation qui sera similaire à celle de LLN.
Critères d'évaluation¶
Rapport:
Le rapport est clair, complet mais concis.
Le rapport présente les fonctionnalités implémentées, en particulier il détaillera l'implémentation des graphes et les choix pour la représentation des données.
Le rapport détaille aussi les nouveaux tests ajoutés pour la visualisation et la nouvelle fonctionnalité.
Le rapport décrit le code coverage des tests.
Site:
Le site fonctionne en local et est en ligne.
L'intégration des nouvelles fonctionnalités est complète
Le design est soigné
L'interface est cohérente, le layout du site est compréhensible
Documentation du code:
Le code est commenté en utilsant des docstrings tels que présenté au cours.
Code:
Le code est correct.
Le code est vérifié par des tests (point important).
Le code est structuré. La nomenclature et l'organisation des modules et répertoires présentés dans l'énoncé sont respectées. Le site suit le schéma MVC.
Git:
Le code est effectué par petites étapes
Chaque fonctionnalité a été implémentée dans des branches séparées, fusionnées avec des merge request.
Attention! L'utilisation de git n'est pas seulement un critère "pour des points". Fusionner des fichiers complet qui semblent "venir d'ailleurs" d'un seul coup sera un indice de plagiat.
Présentation¶
Vous devrez présenter votre site web ainsi que ces fonctionnalités lors d'une présentation orale pour laquelle vous vous inscrivez sur l'activité Moodle prévue à cet effet.
La présentation comportera une partie sur le projet, l'architecture du code, (avec des diapositives en support) de 5 minutes, une démonstration de 3 minutes et un Q&A d'environ 5 minutes. Prévoyez une vidéo de secours pour la démonstration.
Dans votre présentation vous devez présenter votre projet et l'architecture du code, montrer qu'il est bien organisé (MVC, etc). Vous devez présenter comme si vous vous adressiez à des informaticiens externes au projet.
N'oubliez pas de :
Vous présenter
Expliquer l’objectif global du projet
Présenter les grandes fonctionnalités du site, et particulièrement votre fonctionnalité personnalisée
Avoir une conclusion
Avoir une présentation sans fautes et attractive
Avoir une bonne prestance et une bonne élocution
Vérifier le timing de votre présentation (5 minutes) et de votre démo (3 minutes)