Skip to content

Latest commit

 

History

History
398 lines (306 loc) · 15.9 KB

File metadata and controls

398 lines (306 loc) · 15.9 KB

Dossier de Conception Technique

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


Sommaire

Architecture Globale

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ées
  • View : Vue, interface de l'utilisateur (CLI ou GUI)
  • ViewModel : Traitement des données et entremetteur entre View et Model

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.

Justifications technologiques

  • C# / .NET 8.0 : Nous avons choisi la dernière version LTS (Long Term Support) de .NET pour 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.

Structure

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.

Organisation et arborescence

Structure des dossiers

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+)

Workflow GitHub

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.

Gestion des données

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".

Configuration (config.json)

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
}

Configuration (jobs.json)

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"
  } 
}

Journalisation Quotidienne (YYYY-MM-DD.json/xml)

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"
  }
]

État Temps Réel (state.json/xml)

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
  }
]

Gestion des erreurs

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;

Diagrammes UML

Les diagrammes UML sont un moyen de représenter visuellement l'architecture, la conception et la mise en œuvre de systèmes logiciels complexes.

Diagramme de cas d'utilisation :

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

Diagramme de classe :

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

Diagramme de séquence :

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 Jobs qui est une section alternative (alt) pour simuler l'exécution des jobs
    • Execute action qui est une section alternative (alt) pour simuler les actions telles que start stop et pause
    • Manage Jobs qui est une section alternative (alt) pour manager les jobs (créer, modifier, supprimer)
    • Settings qui est une section alternative (alt) pour manager les paramètres

Diagramme d'activié :

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.

Notre diagramme d'activité est divisé dn sous-menu pour être plus lisible.

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.

Livrables Attendus

Livable 0

  • Lancement du projet
  • Cahier des charges
  • Création de l'environnement

Livrable 1

  • Diagrammes UML (classe, séquence, activité, cas d'utilisation)
  • Version 1.0 d'EasySave
  • Documentation associée à la v1.0

Livrable 2

  • 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

Livrable 3

  • Diagrammes UML (classe, séquence, activité, cas d'utilisation)
  • Version 3.0 d'EasySave
  • Documentation associée à la v3.0
  • Soutenance du projet

Versions

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és

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