Projet Génie Logiciel – Développement d’un Logiciel de Sauvegarde
Dernière mise à jour : 25/02/2026
Version actuelle : Livrable finale, Version 3.0
Editeur : ProSoft
- Quentin HAZEMANN
- Nathan VALENNE
- Ulysse BRULEY
FISA A3 INFO 25-28
- Dossier de Conception Technique
L'architecture d'EasySave v3.0 repose sur une séparation stricte des responsabilités. Le projet est intégralement développé en C# en s'appuyant sur le framework .NET8.0.
Nous avons adopté une structure inspirée de l'architecture MVVM (Model-View-ViewModel) :
Model: La gestion et le stockage des donnéesView: Vue, interface de l'utilisateur (CLIouGUI)ViewModel: Traitement des données et entremetteur entreViewetModel
Cette approche garantit la réutilisation totale de la logique métier. Cela nous a permis de passer d'une application console v1.0 à une application graphique v3.0. De plus, une future évolution est possible et facile à implémenter.
C#/.NET 8.0: Nous avons choisi la dernière version LTS (Long Term Support) de.NETpour bénéficier des meilleures performances d'exécution, d'une sécurité accrue et des dernières évolutions du langage. De plus, ce framework permet de travailler depuis la version VisualStudio 2022 ou VisualStudio 2026.- Modularité : Cette version est une application Console et Graphique, nous avons adopté une structure inspirée de l'architecture MVVM comme expliqué ci-dessus.
| Composant | Rôle |
|---|---|
| EasySave.console | Interface Utilisateur (CLI). Gère les saisies, l'affichage et les arguments de ligne de commande. |
| EasySave.GUI | Interface Utilisateur Graphique (GUI). Gère les saisies et l'affichage en interface graphique. |
| EasySave.Core | Logique Métier. Contient les algorithmes de sauvegarde, la gestion des travaux et la lecture/écriture des fichiers de configuration. C'est la partie utilisé peu importe la vue. |
| EasyLog.dll | Service de Journalisation. Écrit les logs en temps réel. Conçue pour être intégrée à d'autres logiciels du groupe. |
| CryptoSoft | Service de chiffrement. Chiffre les fichiers lors du transfert en fonction du fichier de configuration. |
EasySave/
├── README.md # Accueil du dépôt et liens vers la documentation
├── .gitignore # Exclusion des fichiers temporaires (.vs, bin, obj, logs)
├── assets/ # Schémas UML et illustrations pour la documentation
│ ├── logo_easy_save.png # Logos de l'application
│ └── uml/ # Dossier des diagrammes UML (.mdj, .jpg)
├── console/ # ViewConsole
├── GUI/ # ViewGUI
├── core/ # Logique métier
│ ├── Views/ # Dossier des vues communes
│ ├── ViewModels # Dossier des viewModels
│ ├── Models # Dossier des Models
│ ├── Services # Dossier des Services
│ └── Resources # Dossier des fichiers langues (.resx)
├── docs/ # Documentation complète du projet
│ ├── cahier_des_charges.md
│ ├── conception_techinique.md
│ └── manuel_utilisateur.md
├── log/ # DLL de gestions des Logs
├── CryptoSoft # Gestion du chiffrement des données
└── EasySaveSoft.slnx # Fichier de solution (Visual Studio 2022+)Pour garantir la stabilité du logiciel, nous utilisons une stratégie de branching inspirée de GitHub Flow :
- Branche
main: Code stable et validé. Version fonctionnelle. - Branche
1.x: Branche de développement de chaque version. - Branches
feature/: Branches isolées pour le développement de nouvelles fonctionnalités.
Le logiciel utilise exclusivement le format json pour les fichiers de configuration. Les fichiers logs utilisent le format xml ou json. Cela assure la persistance des données et la lisibilité rapide via des outils comme notepad. Les fichiers de configurations et de logs locaux sont stockés dans : "C:\Users\User\AppData\Roaming\EasySave".
Ce fichier centralise les préférences globales.
Exemple de config.json : fichier de configuration global propre à chaque utilisateur
{
"Lang": "en-US", // Langue "fr-FR" ou "en-US"
"BusinessSoftware": [
"" // Noms des logiciels métier (ex: "notepad, calculator")
],
"LogFormat": "Json", // Format des fichiers log "Json" ou "Xml"
"ExtensionToEncrypt": [
"" // Extensions des fichiers à chiffrer (ex: ".pdf, .txt")
],
"PriorityExtension": [
"" // Extensions des fichiers prioritaire (ex: ".pdf, .txt")
],
"MaxParallelSize": 5000, // Taille maximum en Ko pour exécuter la sauvegarde en parallèle
"RemoteLog": false, // Sauvegarder les logs en distant
"LocalLog": true, // Sauvegarder les logs en local
"IPServer": "127.0.0.1" // IP du serveur pour les logs distant
}Ce fichier centralise la configuration des jobs.
Exemple de jobs.json : fichier de configuration des jobs
{
{
"Id": 1,
"Name": "Sauvegarde Documents",
"Source": "C:\\Users\\User\\Documents",
"Destination": "D:\\Backups\\Documents",
"Type": "Complete"
},
{
"Id": 2,
"Name": "Sauvegarde Images",
"Source": "C:\\Users\\User\\Pictures",
"Destination": "D:\\Backups\\Pictures",
"Type": "Differentiel"
}
}Géré par la DLL EasyLog, ce fichier enregistre chaque transaction de fichier. Un nouveau fichier est créé chaque jour.
- FileTransferTime : Exprimé en millisecondes. Une valeur négative indique une erreur critique durant le transfert.
- FileSize : Taille en octets.
Exemple de YYYY-MM-DD.json
[
{
"Name": "Save2",
"FileSource": "D:\\projet_3\\TEST\\source1\\rapport.pdf",
"FileTarget": "E:\\SAVE\\projet_3\\TEST\\source1\\rapport.pdf",
"FileSize": 1704592,
"FileTransferTime": 58.002,
"time": "17/12/2020 16:17:29"
},
{
"Name": "Save1",
"FileSource": "D:\\projet_2\\TEST\\source1234\\fichiertxt_1.txt",
"FileTarget": "E:\\SAVE\\projet_2\\TEST\\source1234\\fichiertxt_1.txt",
"FileSize": 174592,
"FileTransferTime": 38.029,
"time": "17/12/2020 17:06:49"
}
]Ce fichier est unique. Il sert de "tableau de bord" pour suivre l'avancement des travaux en cours. Il est mis à jour à chaque exécution des travaux.
- State : État du travail (ACTIVE, END, INACTIVE).
- Progression : Pourcentage calculé dynamiquement sur le ratio TotalFilesSize / NbFilesLeftToDo.
Exemple de state.json
[
{
"Name": "Save1",
"SourceFilePath": "",
"TargetFilePath": "",
"State": "END",
"TotalFilesToCopy": 0,
"TotalFilesSize": 0,
"NbFilesLeftToDo": 0,
"Progression": 0
},
{
"Name": "Save2",
"SourceFilePath": "C:\\Data\\file.dll",
"TargetFilePath": "D:\\Save\\file.dll",
"State": "ACTIVE",
"TotalFilesToCopy": 3300,
"TotalFilesSize": 1240312777,
"NbFilesLeftToDo": 3274,
"Progression": 0.78
}
]La gestion des erreurs d'EasySave repose sur différents principes :
- L'utilisation systématique de blocs
Try-Catchà des points stratégiques- Niveau Application : Capture des erreurs de lecture du fichier de configuration.
- Niveau Fichier : Si un fichier est verrouillé ou inaccessible.
- L'utilisation de fonction qui renvoie un booléen
- L'utilisation d'event :
event Action<string>? OnErrorOccurred;
Les diagrammes UML sont un moyen de représenter visuellement l'architecture, la conception et la mise en œuvre de systèmes logiciels complexes.
Ce diagramme modélise la manière dont les utilisateurs, représentés sous forme de figurines appelées « acteurs », interagissent avec le système. Ce type de diagramme est une vue d’ensemble des relations entre les acteurs et les systèmes.
Notre diagramme de cas d'utilisation dispose :
- Acteur principal : L'utilisateur
- Acteur externe : Système de fichiers source/destination
- Actions décrites :
- Changer les paramètres
- Ce qui inclue de modifier le fichier de configuration
- Gérer les travaux de sauvegarde
- Peux permettre de créer un travail
- Peux permettre de modifier un travail
- Peux permettre de supprimer un travail
- Ce qui inclue de modifier le fichier de configuration
- Exécuter les travaux de sauvegarde
- Ce qui inclue de chiffrer les données
- Ce qui inclue de vérifier les logicils métiers
- Ce qui inclue de lire le fichier de configuration
- Ce qui inclue d'écrire dans le fichier log journalier
- Ce qui inclue d'écrire dans le fichier log d'état
- Contrôler les flux
- Peux permettre de mettre en pause
- Peux permettre de mettre en lecture
- Peux permettre d'arrêter une exécution
- Changer les paramètres
Ce diagramme repose sur la programmation orientée objet, il expose la structure statique d'un système. Il permet de montrer les différentes classes, leurs attributs, leurs comportements ainsi que les liens entre elles.
Notre diagramme de classe est structué en 5 packages différents :
- Logs, qui contient les fichiers de la DLL
- View, qui contient les fichiers liés à la vue console
- ViewModels, qui contient les fichiers de la logique métier
- Model, qui contient les fichiers de traitement des données
- Service, qui contient les fichiers de traitement extenre tel que le chiffrement
Diagramme de classe du package Log et CryptoSoft
Diagramme de classe du package Core
Diagramme de classe du package Console et Gui
Diagramme de classe global
Ce diagramme permet de montrer l'ordre temporel dans lequel les objets interagissent entre eux. Il permet de représenter visuellement des scénarios d'exécution.
Notre diagramme de séquence est structuré :
- Il comporte différents objets :
- User → l'utilisateur du logiciel
- Program → la vue, ce sont les mêmes actions qu'il s'agisse de la console ou du gui.
- MainViewMode & BackupService → le viewMode, la logique du logiciel commune à chaque vue
- BackupJobs & SettingsManager → le model, le traitement des données commun à chaque vue
- Log & configuration → fichiers externe au logiciel
- Différentes sections :
Execute Jobsqui est une section alternative (alt) pour simuler l'exécution des jobsExecute actionqui est une section alternative (alt) pour simuler les actions telles que start stop et pauseManage Jobsqui est une section alternative (alt) pour manager les jobs (créer, modifier, supprimer)Settingsqui est une section alternative (alt) pour manager les paramètres
Ce diagramme représente les étapes réalisées dans un cas d'utilisation. Ce type de diagramme est utilisé pour montrer le comportement dynamique d’un système.
Diagramme d'activié de la fonction principale, le menu global
Diagramme d'activié du sous menu Manage Jobs
Diagramme d'activié du sous menu Execute Jobs
Diagramme d'activié du sous menu Settings
Diagramme d'activité global
Notre diagramme d'activité à un nœud initial qui est le lancement du logiciel. Il permet de montrer chaque action et chaque condition qui sont exécutées par le logiciel. Puis il y a un nœud final qui est l'arrêt du programme.
- Lancement du projet
- Cahier des charges
- Création de l'environnement
- Diagrammes UML (classe, séquence, activité, cas d'utilisation)
- Version 1.0 d'EasySave
- Documentation associée à la v1.0
- Diagrammes UML (classe, séquence, activité, cas d'utilisation)
- Version 1.1 d'EasySave
- Version 2.0 d'EasySave
- Documentation associée à la v1.1 & v2.0
- Diagrammes UML (classe, séquence, activité, cas d'utilisation)
- Version 3.0 d'EasySave
- Documentation associée à la v3.0
- Soutenance du projet
| Version | Etat | Description |
|---|---|---|
| v1.0 | Finit | Logiciel EasySave fonctionnel, avec interface en console |
| v1.1 | Finit | Logiciel EasySave fonctionnel, avec interface en console avancée (branche v1.1) |
| v2.0 | Finit | Logiciel EasySave fonctionnel, avec interface en console avancée et interface graphique (branche v2.0) |
| v2.0 | En cours | Logiciel EasySave fonctionnel, avec interface en console avancée et interface graphique avancée (branche v3.0) |
| Fonctionnalité | Version 1.0 | Version 1.1 | Version 2.0 | Version 3.0 |
|---|---|---|---|---|
| Interface Graphique | Console | Console | Console & Graphique | Console & Graphique |
| Multi-langues | Anglais et Français | Anglais et Français | Anglais et Français | Anglais et Français |
| Exécution | Séquentielle | Séquentielle | Parallèle | Parallèle |
| Travaux de sauvegarde | Limité à 5 | Limité à 5 | Illimité | Illimité |
| Logs | JSON | JSON / XML | JSON / XML + Chiffrement | JSON / XML + Chiffrement + Centralisation Docker |
| Logiciel métier | Non | Non | Oui | Oui |
| Fichiers Prioritaires | Non | Non | Non | Oui |
| CryptoSoft | Non | Non | Multi-instance | Mono-instance |











