RÉPUBLIQUE DU CAMEROUN FACULTE DES SCIENCES
REPUBLIC OF CAMEROON FACULTY OF SCIENCE
Peace – Work – Fatherland DÉPARTEMENT DE MATHÉMATIQUES
UNIVERSITÉ DE DSCHANG ET INFORMATIQUE
NCESUNIVERSITY OF DSCHANG DEPARTMENT OF MATHEMATICS AND
P 96, Dschang (Cameroun) -Tél. /Fax COMPUTER SCIENCE
(237) 233 45 13 811
INF41
BP 67, Dschang (Cameroun)
7
Website : [Link] E-mail : udsrectorat@[Link]
GÉNIE LOGICIEL INF 427
GROUPE 5
MAINTENANCE ET ÉVOLUTION DES SYSTÈMES
LOGICIELS
FILIERE : INFORMATIQUE
ANNÉE ACADÉMIQUE :2024 /2025
OPTION : IA
NIVEAU : MASTER 1
MEMBRES DU GROUPE :
Sous la supervision de : Dr. Zekeng N. M. Maxime
MAINTENANCE ET ÉVOLUTION DES SYSTÈMES LOGICIELS
TABLE DES MATIERES
TABLE DES MATIERES .......................................................................................................... i
INTRODUCTION ...................................................................................................................... 1
I. VERSIONING ET GESTION DES VERSIONS ............................................................... 2
1) INTRODUCTION AU VERSIONING .......................................................................... 2
2) OUTILS DE GESTION DES VERSIONS ..................................................................... 2
3) STRATÉGIES DE GESTION DES VERSIONS ........................................................... 4
4) GESTION DES DÉPENDANCES ................................................................................. 5
II. DÉPLOIEMENT ET MISES À JOUR ........................................................................... 5
1) TYPES DE DÉPLOIEMENT ......................................................................................... 5
2) PIPELINE DE DÉPLOIEMENT .................................................................................... 6
3) STRATÉGIES DE MISE À JOUR ................................................................................. 6
4) OUTILS DE DÉPLOIEMENT ....................................................................................... 6
III. SURVEILLANCE ET MONITORING .......................................................................... 7
1) IMPORTANCE DU MONITORING ............................................................................. 7
2) TYPES DE MONITORING............................................................................................ 7
3) OUTILS DE SURVEILLANCE ..................................................................................... 8
4) GESTION DES INCIDENTS ....................................................................................... 10
IV. GESTION DE L’ÉVOLUTION DANS LES SYSTÈMES DISTRIBUÉS .................. 11
1) CHALLENGES SPÉCIFIQUES ................................................................................... 11
2) APPROCHES POUR GÉRER L’ÉVOLUTION .......................................................... 12
CONCLUSION ........................................................................................................................ 14
BIBLIOGRAPHIE ..................................................................................................................... ii
WEBOGRAPHIE ...................................................................................................................... iii
i
MAINTENANCE ET ÉVOLUTION DES SYSTÈMES LOGICIELS
INTRODUCTION
Dans un monde où les logiciels jouent un rôle central dans presque tous les aspects de
la société, la maintenance et l’évolution des logiciels se présentent comme des étapes
fondamentales pour assurer la pérennité, la fiabilité et l’adaptabilité des systèmes
informatiques. Ces deux concepts, bien que souvent négligés par rapport à la phase de
développement, sont au cœur du cycle de vie d’un logiciel et déterminent sa capacité à répondre
efficacement aux besoins en constante évolution des utilisateurs et des entreprises. La
maintenance logicielle peut être définie comme l'ensemble des activités nécessaires pour
modifier et améliorer un logiciel existant après sa mise en production. Elle comprend la
correction des erreurs, l'adaptation aux nouvelles technologies, l'amélioration des
performances, et la prévention de futurs problèmes. Parallèlement, l’évolution logicielle vise à
faire progresser le logiciel au-delà de sa version initiale, en intégrant de nouvelles
fonctionnalités ou en ajustant son périmètre pour répondre à de nouvelles exigences.
L’importance de ces pratiques réside dans leur rôle critique tout au long du cycle de vie des
logiciels. Un logiciel, aussi bien conçu soit-il, est rarement statique : il doit évoluer pour rester
pertinent dans un environnement technologique et organisationnel en mutation constante. En
effet, la maintenance et l’évolution assurent non seulement la continuité opérationnelle, mais
elles réduisent également les coûts associés à des défaillances imprévues ou à des reconceptions
majeures. Enfin, ces activités sont encadrées par des principes fondamentaux, tels que la gestion
de la dette technique – qui permet de maintenir un équilibre entre les améliorations rapides et
la durabilité à long terme – et la maîtrise des coûts associés. Ainsi, comprendre et maîtriser la
maintenance et l'évolution des logiciels n’est pas seulement un impératif technique, mais un
levier stratégique pour garantir la valeur et la compétitivité des systèmes numériques dans le
temps. Pour une gestion efficace et durable des logiciels, la distinction entre les catégories de
maintenance (corrective, adaptative, perfective, préventive) est cruciale, chacune jouant un
rôle spécifique et complémentaire. Ces pratiques collectives illustrent que la vie d’un logiciel
ne s’arrête pas à son déploiement : elle ne fait que commencer.
1
MAINTENANCE ET ÉVOLUTION DES SYSTÈMES LOGICIELS
I. VERSIONING ET GESTION DES VERSIONS
1) INTRODUCTION AU VERSIONING
Le versioning consiste à attribuer des numéros ou des identifiants uniques à différentes versions
d'un logiciel ou d'un fichier. Cela permet de suivre l’historique des modifications, de revenir à
des états antérieurs si nécessaire, et de collaborer efficacement en équipe. Le versioning facilite
la résolution des conflits, la gestion des correctifs et la publication de nouvelles fonctionnalités.
Pourquoi le versioning est-il important ?
Traçabilité : Conserve l’historique complet des changements apportés.
Collaboration : Permet à plusieurs développeurs de travailler simultanément sans
écraser leurs contributions.
Gestion des erreurs : Autorise un retour en arrière rapide vers des versions stables en
cas de problème.
Publication : Simplifie le déploiement et la communication des nouvelles versions aux
utilisateurs.
2) OUTILS DE GESTION DES VERSIONS
a. Git
Git est un logiciel de gestion de versions basé sur un système de contrôle décentralisé. Cela
signifie que les utilisateurs peuvent accéder à un serveur de référence pour sauvegarder
l’historique des modifications des fichiers. De manière parallèle, ce système permet à chaque
utilisateur de disposer d’une copie intégrale et actualisée de cet historique sur son ordinateur
local. Cela permet de continuer le projet sans grande difficulté, si le serveur central tombe en
panne.
2
MAINTENANCE ET ÉVOLUTION DES SYSTÈMES LOGICIELS
Exemples d'utilisation : Utilisé avec des plateformes comme GitHub, GitLab ou Bitbucket
pour le suivi des projets.
b. Subversion (SVN)
Le logiciel Subversion, également appelé SVN, est un système de contrôle de version open
source. Subversion (SVN) permet aux équipes de consulter les versions précédentes des
fichiers et de suivre leurs modifications au fil du temps. Subversion a été initialement publié
en 2000 par CollabNet. Il est désormais sous licence Apache.
3
MAINTENANCE ET ÉVOLUTION DES SYSTÈMES LOGICIELS
c. Mercurial
Mercurial est un logiciel de versioning décentralisé, écrit en C, Python et Rust, similaire à Git.
Compatible avec la plupart des systèmes d'exploitation et environnements de développement,
il s'adapte aux grands projets tout en restant rapide, intuitif et ergonomique. Grâce à son
protocole réseau basé sur HTTP et son interface Web intégrée, Mercurial peut fonctionner sans
nécessiter un référentiel serveur.
3) STRATÉGIES DE GESTION DES VERSIONS
a. Modèles de Branching (branches)
Les modèles de branching structurent le développement en séparant les tâches sur différentes
branches.
Feature Branching : Chaque fonctionnalité est développée dans une branche isolée,
puis fusionnée avec la branche principale.
Git Flow : Utilise des branches structurées, avec Master/Main pour les versions
stables, Develop pour les développements actifs, et des branches spécifiques pour les
fonctionnalités, correctifs, ou versions prêtes à déployer.
Trunk-Based Development : Tout le développement est fait sur une branche
principale, avec des modifications fréquentes et rapides, pour privilégier simplicité et
efficacité.
4
MAINTENANCE ET ÉVOLUTION DES SYSTÈMES LOGICIELS
b. Conventions de Versionnement
Les conventions de versionnement structurent les versions des logiciels. Le versionnement
sémantique (SemVer), le plus courant, utilise le format [Link] : MAJOR
pour les changements non compatibles, MINOR pour les nouvelles fonctionnalités compatibles,
et PATCH pour les corrections de bugs. Le versionnement calendrier s’appuie sur des dates
(e.g., 2024.12.14), tandis que la numérotation simple suit un ordre numérique (e.g., 1, 2, 3),
sans logique spécifique.
4) GESTION DES DÉPENDANCES
La gestion des dépendances consiste à suivre, mettre à jour et configurer les bibliothèques ou
modules externes nécessaires à un projet, assurant ainsi sa stabilité et sa sécurité. Les défis
incluent les conflits de versions, la mise à jour des dépendances obsolètes, et la réplication des
environnements. Les outils comme NPM/Yarn (JavaScript), Maven/Gradle (Java), Pip
(Python) ou Composer (PHP) facilitent ce processus. Les meilleures pratiques incluent
l’utilisation de fichiers de verrouillage (e.g., [Link]), l’isolation des environnements
(e.g., Docker), et des scans réguliers pour détecter les vulnérabilités.
II. DÉPLOIEMENT ET MISES À JOUR
1) TYPES DE DÉPLOIEMENT
Manuel : Processus où les développeurs déploient les applications à la main, souvent
sujet à des erreurs humaines.
Automatique : Utilisation de scripts ou d'outils pour déployer des applications sans
intervention humaine, réduisant ainsi les erreurs.
Continu : Intégration du déploiement dans un processus de livraison continue,
permettant des mises à jour fréquentes et rapides.
5
MAINTENANCE ET ÉVOLUTION DES SYSTÈMES LOGICIELS
2) PIPELINE DE DÉPLOIEMENT
Un pipeline de déploiement est une série d'étapes automatisées qui incluent :
Build : Compilation du code source.
Test : Exécution de tests automatisés pour vérifier la qualité du code.
Deploy : Déploiement de l'application sur un environnement de production.
Monitor : Surveillance des performances et des erreurs post-déploiement.
3) STRATÉGIES DE MISE À JOUR
Les stratégies de mise à jour incluent le Blue-Green Deployment, qui consiste en deux
environnements (bleu et vert), où l'un est actif pendant que l'autre est préparé pour la mise à
jour, assurant ainsi une transition fluide. Ensuite, il y a le Canary Release, qui permet un
déploiement progressif d'une nouvelle version à un petit groupe d'utilisateurs avant un
lancement complet, ce qui aide à identifier les problèmes potentiels. Enfin, le Rolling Update
consiste en une mise à jour progressive des instances d'application, minimisant les temps d'arrêt
et garantissant une disponibilité continue pour les utilisateurs. Ces approches permettent de
gérer efficacement les mises à jour tout en réduisant les risques associés.
4) OUTILS DE DÉPLOIEMENT
Jenkins : Outil d'automatisation pour le déploiement continu.
Docker : Conteneurisation des applications pour faciliter le déploiement.
Kubernetes : Orchestration de conteneurs pour gérer le déploiement à grande échelle.
Ansible : Outil d'automatisation pour la configuration et le déploiement.
6
MAINTENANCE ET ÉVOLUTION DES SYSTÈMES LOGICIELS
III. SURVEILLANCE ET MONITORING
La surveillance et le monitoring sont des aspects critiques de la gestion des systèmes
informatiques, visant à garantir la disponibilité, la performance et la sécurité des applications
et des infrastructures.
1) IMPORTANCE DU MONITORING
Le monitoring désigne le processus de surveillance continue des systèmes, applications et
infrastructures informatiques pour assurer leur bon fonctionnement et détecter les anomalies.
Le monitoring est essentiel car il permet la détection rapide des problèmes, évitant ainsi que
les anomalies ou pannes n'affectent les utilisateurs finaux. Il contribue également à
l'optimisation des performances en fournissant des données pour identifier les goulots
d'étranglement. De plus, il favorise une gestion proactive des incidents, permettant d'anticiper
et de résoudre les problèmes avant qu'ils ne surviennent. En matière de conformité et de
sécurité, le monitoring surveille les accès non autorisés et les comportements suspects,
garantissant ainsi la sécurité des systèmes. Enfin, il soutient l'amélioration continue en
fournissant des informations pour analyser les tendances et optimiser les processus.
2) TYPES DE MONITORING
Le monitoring est crucial pour garantir la performance, la disponibilité et la sécurité des
systèmes informatiques. Il se divise en trois types principaux :
Monitoring de l'Infrastructure : Ce type se concentre sur la surveillance des
composants matériels et des ressources système, comme les serveurs et réseaux. Il
détecte les anomalies au niveau de l'infrastructure pour assurer la disponibilité et la
performance.
Exemple d'application : Nagios est utilisé pour surveiller l'utilisation du CPU, la
mémoire et la disponibilité des services.
Monitoring des Applications : Il porte sur les performances et le comportement des
applications logicielles, garantissant qu'elles répondent aux attentes des utilisateurs. Les
métriques surveillées incluent les temps de réponse et les taux d'erreur.
Exemple d'application : New Relic permet de suivre les temps de réponse des
applications et d'identifier les problèmes de performance.
7
MAINTENANCE ET ÉVOLUTION DES SYSTÈMES LOGICIELS
Monitoring des Utilisateurs : Ce type vise à comprendre l'interaction des utilisateurs
avec les applications, identifiant les points de friction qui affectent leur satisfaction.
Les métriques surveillées incluent les temps de chargement des pages et les taux de
conversion.
Exemple d'application : Google Analytics fournit des données sur le comportement
des utilisateurs et les taux de conversion, aidant à optimiser l'expérience utilisateur.
3) OUTILS DE SURVEILLANCE
Plusieurs outils sont disponibles pour la surveillance et le monitoring des systèmes.
a. Prometheus
Prometheus est un système de surveillance et d'alerte open-source,
conçu pour le monitoring d'environnements dynamiques et à grande
échelle, comme les infrastructures cloud et les architectures micro
services. Il se distingue par sa capacité à collecter des métriques en temps
réel à partir de différentes sources, telles que les applications et les
serveurs. Ces métriques sont stockées dans une base de données de séries temporelles,
optimisée pour des requêtes rapides, ce qui permet une analyse efficace des performances et
des comportements des systèmes surveillés.
FONCTIONALITE ROLE
Collecte de Métriques Surveillance des Applications
Stockage des Données Surveillance de l'Infrastructure
Définir des règles d'alerte Surveillance des Conteneurs
8
MAINTENANCE ET ÉVOLUTION DES SYSTÈMES LOGICIELS
b. Grafana
Grafana est une plateforme de
visualisation et d'analyse open-
source qui permet de créer des
tableaux de bord interactifs pour
surveiller les métriques de
performance et les données en temps
réel. Elle est largement utilisée pour
son interface utilisateur intuitive et
ses capacités avancées de visualisation des données. Grafana s'intègre avec une multitude de
sources de données, y compris Prometheus, ELK Stack, InfluxDB, MySQL, et bien d'autres, ce
qui en fait un outil polyvalent pour la surveillance des systèmes informatiques.
FONCTIONALITE ROLE
Visualisation des Données Surveillance des Performances
Intégration avec des Sources de Données Analyse des Données
Tableaux de Bord Personnalisés Création de Rapports
c. ELK Stack (Elasticsearch, Logstash, Kibana)
ELK Stack, qui signifie
Elasticsearch (Un moteur de
recherche et d'analyse
distribué capable de stocker,
rechercher et analyser de
grandes quantités de données
en temps réel.), Logstash (Un
pipeline de traitement des
données qui collecte, transforme et envoie les données vers Elasticsearch.) et Kibana (Une
interface utilisateur pour visualiser les données stockées dans Elasticsearch et créer des tableaux
de bord interactifs) est une suite de logiciels open-source utilisée pour la recherche, l'analyse et
9
MAINTENANCE ET ÉVOLUTION DES SYSTÈMES LOGICIELS
la visualisation des données en temps réel. Cette combinaison de trois outils puissants offre une
solution complète pour la gestion et l'analyse des données, particulièrement adaptée aux
environnements dynamiques et à grande échelle.
FONCTIONALITE ROLE
Indexation Surveillance des Journaux
Collecte des Données Analyse des Données en Temps Réel
Transformation des Données Visualisation des Métriques
4) GESTION DES INCIDENTS
La gestion des incidents est un processus structuré visant à identifier, analyser et résoudre
efficacement les incidents.
Étapes clés de la gestion des incidents :
Détection de l'Incident : Identification rapide des incidents via des outils de monitoring
et alertes automatisées, ainsi que des retours utilisateurs, permettant de limiter l'impact
sur les opérations.
Classification et Priorisation : Classement des incidents selon leur impact et leur
urgence, pour concentrer les efforts sur les incidents critiques.
Diagnostic et Analyse : Analyse des journaux et des métriques pour comprendre la
cause racine de l'incident, facilitant la mise en place de mesures correctives.
Résolution de l'Incident : Application des correctifs (mises à jour, redémarrages,
corrections de bugs) pour rétablir rapidement le service.
Communication : Information des parties prenantes sur l'état de l'incident et les actions
en cours, via notifications et mises à jour, pour gérer les attentes et maintenir la
confiance.
Documentation et Analyse Post-Incident : Rédaction de rapports et mise à jour des
procédures pour tirer des leçons et prévenir les incidents futurs.
10
MAINTENANCE ET ÉVOLUTION DES SYSTÈMES LOGICIELS
Amélioration Continue : Utilisation des leçons apprises pour améliorer les processus,
outils et compétences des équipes.
IV. GESTION DE L’ÉVOLUTION DANS LES SYSTÈMES
DISTRIBUÉS
1) CHALLENGES SPÉCIFIQUES
a. Cohérence
La cohérence des données est un défi majeur dans les systèmes distribués, où les données
peuvent être répliquées sur plusieurs nœuds. Les modèles de cohérence doivent être
soigneusement choisis pour équilibrer la performance et la fiabilité. Les systèmes peuvent
adopter des stratégies comme la cohérence éventuelle pour améliorer la réactivité, mais cela
peut compliquer la gestion des données.
b. Dépendances Interservices
Les services interconnectés peuvent créer des dépendances complexes, rendant les mises à jour
risquées. Une modification dans un service peut avoir des impacts en cascade sur d'autres
services, rendant la gestion des versions essentielle pour éviter les interruptions et garantir la
compatibilité.
11
MAINTENANCE ET ÉVOLUTION DES SYSTÈMES LOGICIELS
2) APPROCHES POUR GÉRER L’ÉVOLUTION
a. Architectures Orientées Événements
Cette approche repose sur la communication asynchrone via des événements, permettant aux
services de réagir aux changements sans dépendances directes. Cela améliore la flexibilité et
la résilience, car les services peuvent évoluer indépendamment en réagissant aux événements
pertinents.
b. CQRS (Command Query Responsibility Segregation)
12
MAINTENANCE ET ÉVOLUTION DES SYSTÈMES LOGICIELS
CQRS sépare les opérations de lecture et d’écriture, permettant ainsi d’optimiser chaque type
d’opération indépendamment. Cela facilite l’évolution des systèmes, car les modèles de
données peuvent être adaptés spécifiquement pour les requêtes ou les commandes, réduisant les
conflits de dépendance et améliorant la scalabilité.
La gestion de l’évolution dans les systèmes distribués présente des défis uniques, notamment
la cohérence des données et les dépendances entre services. Les approches telles que les
architectures orientées événements et CQRS offrent des solutions efficaces pour atténuer ces
défis, favorisant une évolution plus fluide et adaptable des systèmes.
13
MAINTENANCE ET ÉVOLUTION DES SYSTÈMES LOGICIELS
CONCLUSION
Nous avons exploré ensemble les différentes facettes de la maintenance logicielle, depuis sa
définition fondamentale jusqu'aux enjeux liés à l'évolution des systèmes. Nous avons vu que la
maintenance n'est pas une simple activité de correction d'erreurs, mais un processus stratégique
qui impacte directement la qualité, la performance et la longévité des logiciels.
En synthèse, la maintenance logicielle est un enjeu majeur dans le développement de logiciels.
Elle se décline en plusieurs catégories, chacune répondant à des besoins spécifiques. Les
principes fondamentaux du cycle de vie, du coût et de la dette technique nous ont permis de
mieux appréhender la complexité de cette discipline.
Mais la maintenance logicielle ne s'arrête pas là. Les avancées technologiques, notamment dans
le domaine de l'intelligence artificielle (IA) et de l'AIOps (Artificial Intelligence for IT
Operations), ouvrent de nouvelles perspectives passionnantes. L'IA peut notamment être
utilisée pour automatiser les tâches de maintenance, prédire les pannes et optimiser les
performances des systèmes. Les architectures modernes, plus modulaires et évolutives,
facilitent également la maintenance et l'adaptation des logiciels.
Pour conclure, la maintenance logicielle est un domaine en constante évolution. En adoptant
les bonnes pratiques, en s'appuyant sur les dernières technologies et en cultivant une culture de
la qualité, nous pouvons garantir la pérennité de nos systèmes d'information et répondre aux
défis d'un monde numérique toujours plus complexe. La maintenance logicielle n'est plus
seulement une nécessité, c'est un levier d'innovation et de compétitivité.
14
MAINTENANCE ET ÉVOLUTION DES SYSTÈMES LOGICIELS
BIBLIOGRAPHIE
Pressman, R. S. (2014). Software Engineering: A Practitioner's Approach. McGraw-
Hill.
Ce livre aborde les principes de l'ingénierie logicielle, y compris la maintenance et
l'évolution des systèmes logiciels.
Sommerville, I. (2016). Software Engineering. Pearson.
Un manuel complet qui traite des différentes phases du cycle de vie du logiciel, y
compris la maintenance.
Bennett, K. H., & Rajlich, V. (2000). Software Maintenance and Evolution: A
Roadmap. In The Future of Software Engineering (pp. 73-87). ACM.
Cet article explore les défis et les stratégies liés à la maintenance et à l'évolution des
systèmes logiciels.
Lehman, M. M. (1980). Programs, Life Cycles, and the Laws of Software Evolution.
In Proceedings of the International Conference on Software Engineering (pp. 197-
212).
Un article fondamental qui introduit les lois de l'évolution des logiciels.
Fowler, M. (2009). Refactoring: Improving the Design of Existing Code. Addison-
Wesley.
Ce livre se concentre sur les techniques de refactorisation, essentielles pour la
maintenance et l'évolution des systèmes logiciels.
ii
MAINTENANCE ET ÉVOLUTION DES SYSTÈMES LOGICIELS
WEBOGRAPHIE
IEEE Xplore Digital Library
IEEE Xplore
Une base de données riche en articles et en conférences sur l'ingénierie logicielle, y
compris la maintenance et l'évolution des systèmes.
ACM Digital Library
ACM Digital Library
Une autre ressource précieuse pour accéder à des articles de recherche et des
publications sur les meilleures pratiques en matière de maintenance logicielle.
Martin Fowler - Refactoring
Martin Fowler's Website
Une ressource sur le refactoring et son importance dans la maintenance des systèmes
logiciels.
Software Maintenance and Evolution
University of Alberta - Software Maintenance
Une page de cours qui fournit des ressources et des références sur la maintenance et
l'évolution des logiciels.
The Agile Alliance
Agile Alliance
Une organisation qui propose des ressources sur les pratiques agiles, y compris la
maintenance des systèmes logiciels dans un environnement agile.
iii