Le projet AVM 2025 (Agile Virtual Machine) s'inscrit dans le cadre du module Développement Agile de Machines Virtuelles du Master Informatique de l'Université de Franche-Comté. L'objectif principal est de concevoir, compiler et interpréter un langage de programmation minimaliste, nommé MiniJaja, ainsi que sa version compilée JajaCode.
Le projet s'appuie sur une démarche Agile (type Scrum) : développement itératif, sprints de 2 semaines, intégration continue et validation régulière via des tests et revues de code.
-
Maîtriser les concepts avancés de programmation et de compilation :
- Analyse lexicale et syntaxique ;
- Construction d'arbres de syntaxe abstraite (ASA) ;
- Contrôle de type et sémantique interprétative ;
- Compilation MiniJaja → JajaCode ;
- Interprétation des deux langages.
-
Appliquer les principes du Génie Logiciel :
- Architecture logicielle modulaire (analyseur, mémoire, interpréteur, IHM...) ;
- Validation par tests unitaires, d'intégration et tests de recette ;
- Gestion de version avec Git et intégration continue avec GitLab CI/CD ;
- Suivi qualité avec SonarQube et gestion des dépendances avec Maven/Nexus.
-
Travail en équipe agile :
- Découpage du backlog produit ;
- Planification de sprints avec objectifs clairs ;
- Pair programming, revues de code, et rétrospectives ;
- Utilisation de Jira pour le suivi des tâches et des releases.
| Outil | Rôle |
|---|---|
| Java 21 | Langage principal du projet |
| Maven | Construction du projet et gestion des dépendances |
| Git / GitLab | Gestion de version et intégration continue |
| SonarQube | Analyse de la qualité du code et couverture des tests |
| Nexus | Dépôt de dépendances et artefacts Maven |
| JavaFX | Interface graphique |
| JUnit | Tests unitaires et d'intégration |
| ANTLR | Génération automatique des analyseurs lexicaux et syntaxiques |
Le projet MiniJAJA est structuré autour de 7 modules Maven :
| Module | Rôle | Technologies clés |
|---|---|---|
| LexerParser | Analyse lexicale/syntaxique, AST et interprétation | ANTLR 4, JUnit 5, Cucumber |
| Memoire | Gestion de la mémoire runtime et tables de symboles | Java natif |
| CLI | Interface en ligne de commande pour compilation/exécution | Apache Commons CLI |
| GUI | Interface graphique interactive avec JavaFX | JavaFX 23, TestFX |
| ASTExporter | Visualisation et export des arbres de syntaxe | ANTLR 4 |
| CoverageReport | Agrégation des rapports de couverture | JaCoCo |
| Rapport | Génération de documentation LaTeX | pdflatex |
LexerParser (cœur du projet)
└─ Memoire
CLI → LexerParser → Memoire
GUI → LexerParser + CLI → Memoire
ASTExporter → LexerParser
CoverageReport (agrégateur de tous les modules)
Rapport (documentation indépendante)
- LexerParser : Cœur du projet. Implémente la compilation MiniJaja → JajaCode et l'interprétation des deux langages.
- Memoire : Abstractions pour la gestion d'état runtime (variables, portées, symboles).
- CLI : Point d'entrée pour l'utilisation en ligne de commande (compilation, exécution, debug).
- GUI : IDE JavaFX avec éditeur, console et visualisation d'exécution pas-à-pas.
- ASTExporter : Utilitaire pour générer des diagrammes des arbres de syntaxe abstraite.
- CoverageReport : Module d'agrégation pour les rapports de couverture JaCoCo.
- Rapport : Génération du document de synthèse du projet en PDF via LaTeX.
- Java 21 ou supérieur
- Maven 3.9.9 ou supérieur
- Git (pour clonage du dépôt)
- pdflatex (optionnel, pour générer le Rapport)
git clone https://github.com/R-Gld/Agile_Virtual_Machine.git
cd Agile_Virtual_MachineBuild complet :
mvn clean installBuild rapide (modules principaux uniquement) :
mvn clean compile -pl '!Rapport'Installation des modules de base (sans tests) :
mvn install -pl 'LexerParser,CLI' -am -DskipTestsInterface CLI (compilateur) :
# Après build avec maven package
java -jar CLI/target/CLI-2.1-SNAPSHOT-jar-with-dependencies.jar [options] <fichier.mj>Interface GUI (IDE interactif) :
# Lancer directement via Maven
mvn javafx:run -pl GUI
# Ou après build avec maven package
java -jar GUI/target/GUI-2.1-SNAPSHOT-jar-with-dependencies.jarExportateur AST (visualisation des arbres) :
# Après build avec maven package
java -jar ASTExporter/target/ASTExporter-2.1-SNAPSHOT-shaded.jar <fichier.mj> <sortie.png>IntelliJ IDEA / Eclipse :
- Ouvrir le projet comme projet Maven
- L'IDE détecte automatiquement les 7 modules
- Maven génère les fichiers ANTLR à la première compilation
- Configurer le JDK 21 dans les paramètres du projet
Tests complets (modules principaux) :
mvn test -pl '!GUI,!CoverageReport,!Rapport'Tests d'un module spécifique :
mvn test -pl LexerParser
mvn test -pl CLI
mvn test -pl MemoireTests GUI (nécessite installation préalable des dépendances) :
mvn install -pl 'LexerParser,CLI' -am -DskipTests
mvn test -pl GUIGénérer les rapports de couverture :
mvn jacoco:prepare-agent test jacoco:reportRapport agrégé (tous les modules) :
mvn clean test
mvn jacoco:report-aggregate -pl CoverageReportLes rapports de couverture sont générés dans :
- Par module :
<module>/target/site/jacoco/index.html - Agrégé :
CoverageReport/target/site/jacoco-aggregate/index.html
| Framework | Utilisation |
|---|---|
| JUnit 5 | Tests unitaires et tests d'intégration |
| Cucumber | Tests de comportement (BDD) avec fichiers .feature |
| Mockito | Mock d'objets pour tests isolés |
| TestFX | Tests de l'interface graphique JavaFX |
| JaCoCo | Métriques de couverture de code |
Le module GUI nécessite un affichage pour les tests. Sur un système sans interface X11 :
# Installation de Xvfb (Linux/Ubuntu)
sudo apt-get install xvfb
# Lancement des tests GUI en mode headless
xvfb-run -a mvn test -pl GUILes métriques de qualité (couverture, duplication, bugs) sont disponibles sur le tableau de bord SonarQube : Dashboard SonarQube - AVM 2025 Groupe 7
- Initialisation du projet : définition du backlog produit et des rôles dans l'équipe.
- Sprints bi-hebdomadaires :
- Planification (user stories, estimations, priorités) ;
- Développement en pair programming ;
- Intégration continue et revue de code ;
- Revue de sprint et rétrospective.
- Suivi via Jira : gestion du backlog, des sprints, et traçabilité des tâches.
- CI/CD GitLab :
- Lancement automatique du build Maven ;
- Exécution des tests ;
- Analyse SonarQube ;
- Déploiement des artefacts.
-
Release 1 : première version fonctionnelle livrée début novembre.
- Compilation partielle MiniJaja → JajaCode ;
- Interprétation des programmes simples ;
- Tests unitaires initiaux et CI configurée.
-
Release 2 : version finale livrée mi-décembre.
- Compilation complète et exécution pas-à-pas ;
- Interface graphique JavaFX intégrée ;
- Jeux de tests complets et métriques de qualité conformes.
-
Rapport final (15 décembre – rendu Moodle) :
- Architecture logicielle ;
- Description des choix techniques et des tests ;
- Résultats sur la batterie de tests fournie ;
- Compte rendu d'organisation agile ;
- Rétrospective du projet.
-
Soutenance (18–19 décembre) :
- 20 min de présentation technique ;
- 15 min de démonstration logicielle ;
- 15 min de questions/réponses.
- Romain GALLAND (@R-Gld sur Github)
- Lucas LAURET (@llauret sur Github)
- Léo MAUGERI (@PlsJustDoIt sur Github)
- Félix RIAT
- Théo VALFREY
- Ahmed DJEMAOUI (@djemaouiahmed sur Github)
- Javad AFSHAR