From 9e6cad75ff85dc635024bc2508854d09b580c2f9 Mon Sep 17 00:00:00 2001 From: seb Date: Wed, 29 Mar 2023 00:06:07 +0200 Subject: [PATCH 01/34] Ajout article blog sur les types de maintenances --- ...03-28-maintenance-preventive-corrective.md | 75 ++++++++++++++++++ .../maintenance/github_notifications.png | Bin 0 -> 51676 bytes 2 files changed, 75 insertions(+) create mode 100644 _posts/2023-03-28-maintenance-preventive-corrective.md create mode 100644 assets/images/maintenance/github_notifications.png diff --git a/_posts/2023-03-28-maintenance-preventive-corrective.md b/_posts/2023-03-28-maintenance-preventive-corrective.md new file mode 100644 index 0000000..43d42e2 --- /dev/null +++ b/_posts/2023-03-28-maintenance-preventive-corrective.md @@ -0,0 +1,75 @@ +--- +author: Sébastien +title: Maintenance corrective versus maintenance prédictive +categories: blog +published: false +tags: mco maintenance préventive prédictive corrective budget +--- + + +La maintenance des applications informatiques consiste à assurer la disponibilité du logiciel. +Nous pouvons intervenir avant qu'un dysfonctionnement intervienne : il s'agit de maintenance préventive. + +Nous pouvons également intervenir après qu'un dysfonctionnement intervienne: il s'agit de maintenance corrective. + + +## En quoi consiste la maintenance ? + +La maintenance consiste à modifier une partie du code du logiciel pour en corriger les dysfonctionnements ou en améliorer son efficacité. +Cette partie du code peut être dans une dépendance (ou bibliothèque) externe. +Cela peut également venir du langage d'exécution en lui-même. + +Chaque type de maintenance à son lot d'avantages et d'inconvénients. + +Quel que soit le type de maintenance, les actions effectuées sont les mêmes. +Cela peut concerner le remplacement d'une version d'une ou plusieurs dépendances par : +- une mise à jour de la dépendance qui corrige des problèmes que d'autres ont rencontrés +- un remplacement de la dépendance par une autre dépendance plus efficace et/ou toujours maintenue. +- une suppression d'une dépendance inutile + +Cela peut concerner du code spécifique à l'application qui est lié à une mauvaise pratique ou un mauvais usage. +Par exemple, l'absence de contrôle des données d'entrée d'un webservice peut entrainer une alteration non désirée des données dans la base de données. + +_Le cas le plus courant d'un manque de contrôle est l'élévation de privilège._ + +## Prévenir avec la maintenance préventive + +Comme son nom l'indique, la maintenance préventive intervient **_avant_** qu'un problème ne surgisse. + +Il s'agit d'anticiper d'éventuels dysfonctionnements en remplaçant certains composants du logiciel. + +### Se tenir informé ... + +Pour anticiper d'éventuels problèmes il est important de se tenir informé. +Pour cela, il est important de faire de la veille. +Cette veille peut être manuelle par de lecture de sites spécialisés . +On peut également s'abonner à différentes sources d'informations afin d'être notifié (par mail, flux RSS, ...) lorsqu'un problème est rencontré. + + + +### ... et prendre la bonne décision + +Lorsque nous sommes informés d'un dysfonctionnement d'un composant du logiciel, il ne faut pas forcement se précipiter. +En effet, le risque de mettre à jour rapidement un composant pour corriger un futur problème est d'entrainer d'autres problèmes non prévu. + +Il est donc important d'évaluer les risques avant de faire le changement. + +De plus, selon le type de mise à jour, les impacts sur le code existant peut être plus ou moins important. +Il faut donc estimer les impacts de la mise à jour et le temps à passer pour faire cette mise à jour. + +### Quel est l'intérêt d'une maintenance préventive ? + +Il est important de consacrer du temps pour la maintenance préventive. +Du temps pour faire la veille et évaluer les risques et du temps pour faire les modifications nécessaires. + +Le temps passé à prévenir les problèmes permet d'économiser le temps lorsque les problèmes arriveront. +Car lorsque les problèmes arrivent, les conséquences peuvent être importantes. + +Pour faire une analogie : la maintenance préventive, c'est un peu comme le monde automobile. +En effet, si l'entretien de votre voiture est fait régulièrement vous éviterez le plus possible les gros problèmes et les conséquences qui en découlent. + +## Guérir avec la maintenance corrective + +La maintenance corrective intervient **_après_** qu'un problème soit détecté. + +## Le juste milieu : la maintenance prédictive diff --git a/assets/images/maintenance/github_notifications.png b/assets/images/maintenance/github_notifications.png new file mode 100644 index 0000000000000000000000000000000000000000..8ba425ecc670c307e2f0b0aa918997654076e002 GIT binary patch literal 51676 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 Date: Sun, 2 Apr 2023 13:05:45 +0200 Subject: [PATCH 02/34] Ajout article blog sur les types de maintenances --- _posts/2023-03-19-importance-mco.md | 74 +++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 _posts/2023-03-19-importance-mco.md diff --git a/_posts/2023-03-19-importance-mco.md b/_posts/2023-03-19-importance-mco.md new file mode 100644 index 0000000..575906b --- /dev/null +++ b/_posts/2023-03-19-importance-mco.md @@ -0,0 +1,74 @@ +--- +author: Sébastien +title: Pourquoi il ne faut pas négliger la maintenance (MCO) +categories: blog +published: false +tags: mco maintenance negligence +--- + +Après des années d'expériences dans le service numérique et le développement logiciel, je souhaite partager un constat que beaucoup d'entre nous: la plupart des entreprises qui utilise un logiciel développé sur mesure ont tendance à négliger le maintien en conditions operationnelles (ou MCO) de leurs applications. + +Cette négligence entraîne de nombreux désagrements qui ne sont pas forcement visibles immédiatement mais dont les conséquences à moyen et long terme peuvent être très importants. + +Je vais détailler dans cet article les avantages/inconvénients d'une bonne MCO uniquement d'un point de vue développement logiciel[^1]. + +Dans certains cas, ces avantages/inconvénients peuvent également s'appliquer à d'autres domaines que le développement logiciel (matériel/OS/hébergement/....). + + +## En quoi consiste le maintien en conditions opérationnelles ? + +Le maintien en conditions opérationnelles à pour objectif de s'assurer que le logiciel soit toujours disponible. + +La disponibilité du logiciel en lui-même peut : +- fonctionnel +- maintenable +- et sécurisé + + +Il est important de ne négliger aucun de ces 3 points qui sont complémentaires. + +La maintenance peut intervenir à plusieurs stades. + + +### Un logiciel fonctionnel + +Le logiciel est destiné à des utilisateurs + +### Un logiciel maintenable + +Surveillance des frameworks/langages qui sont toujours maintenus. +Mise à jour vers les dernières versions du ou des langages utilisés. + +La maintenance d'un logiciel consiste à surveiller l'obsolescence des composants de ce logiciel. +La notion de composant peut concerner une dépendance + +### Un logiciel sécurisé + +- Audit de sécurité? +- Surveillance des failles de sécurité (owasp - https://owasp.org/www-project-dependency-check/) + +## Quelles sont les obligations d'un maintien en condition opérationnelles ? + +- La mise en place des outils (cf plus loin) +- La __volonté__ des décisionnaires d'assurer le MCO. +- Prévoir un budget non fonctionnel. + +## Quels sont les avantages d'une maintenance en condition opérationnelles ? + +- applications toujours compatibles avec les évolutions des navigateurs +- un temps de maintenance évolutive/corrective optimisé +- faciliter de trouver des compétences sur le marché + +## Comment nous mettons en œuvre le MCO chez DevMachine? + +Pour garantir le fonctionnement on met en oeuvre les tests automatisés: +- des tests unitaires. +- des tests d'intégrations + +Pour garantir la fraicheur des frameworks utilisés, on utilise des outils de type (TODO). + + +[^1]: La disponibilité d'un logiciel est bien sur très dépendant de l'infrastructure sur laquelle fonctionne le logiciel. + Nous traitons dans cet article que de la partie logicielle. + + From 244b7f81ed7a1d5a6a729c731b6bb4893119395c Mon Sep 17 00:00:00 2001 From: seb Date: Sun, 2 Apr 2023 15:09:36 +0200 Subject: [PATCH 03/34] Ajout article blog sur les types de maintenances --- ...03-28-maintenance-preventive-corrective.md | 98 ++++++++++++++++--- 1 file changed, 83 insertions(+), 15 deletions(-) diff --git a/_posts/2023-03-28-maintenance-preventive-corrective.md b/_posts/2023-03-28-maintenance-preventive-corrective.md index 43d42e2..c1b1d0a 100644 --- a/_posts/2023-03-28-maintenance-preventive-corrective.md +++ b/_posts/2023-03-28-maintenance-preventive-corrective.md @@ -12,52 +12,57 @@ Nous pouvons intervenir avant qu'un dysfonctionnement intervienne : il s'agit de Nous pouvons également intervenir après qu'un dysfonctionnement intervienne: il s'agit de maintenance corrective. +Les dysfonctionnements évoqués dans cet article sont ceux qui n'ont pas été détectés dans la phase de tests/recette de l'application avant sa mise en production. +Je prends comme hypothèse que l'application a été testée avant sa mise en production. +Même si la recette est bien faite, il est toujours possible qu'un dysfonctionnement intervienne en production. -## En quoi consiste la maintenance ? +# En quoi consiste la maintenance ? La maintenance consiste à modifier une partie du code du logiciel pour en corriger les dysfonctionnements ou en améliorer son efficacité. Cette partie du code peut être dans une dépendance (ou bibliothèque) externe. Cela peut également venir du langage d'exécution en lui-même. +Pour regrouper ces 3 notions je parlerais ici de _composant_. +Il existe plusieurs types de maintenance que nous allons voir dans la suite de cet article. Chaque type de maintenance à son lot d'avantages et d'inconvénients. -Quel que soit le type de maintenance, les actions effectuées sont les mêmes. +Quel que soit le type de maintenance, la plupart du temps, les actions effectuées sont les mêmes. Cela peut concerner le remplacement d'une version d'une ou plusieurs dépendances par : - une mise à jour de la dépendance qui corrige des problèmes que d'autres ont rencontrés - un remplacement de la dépendance par une autre dépendance plus efficace et/ou toujours maintenue. -- une suppression d'une dépendance inutile +- une modification ou une réécriture du code Cela peut concerner du code spécifique à l'application qui est lié à une mauvaise pratique ou un mauvais usage. Par exemple, l'absence de contrôle des données d'entrée d'un webservice peut entrainer une alteration non désirée des données dans la base de données. -_Le cas le plus courant d'un manque de contrôle est l'élévation de privilège._ +_Le cas le plus courant d'un manque de contrôle est l'élévation de privilège._ (https://fr.wikipedia.org/wiki/%C3%89l%C3%A9vation_des_privil%C3%A8ges) -## Prévenir avec la maintenance préventive +# Prévenir avec la maintenance préventive Comme son nom l'indique, la maintenance préventive intervient **_avant_** qu'un problème ne surgisse. Il s'agit d'anticiper d'éventuels dysfonctionnements en remplaçant certains composants du logiciel. -### Se tenir informé ... +## Se tenir informé ... -Pour anticiper d'éventuels problèmes il est important de se tenir informé. +Pour anticiper d'éventuels problèmes, il est important de se tenir informé. Pour cela, il est important de faire de la veille. -Cette veille peut être manuelle par de lecture de sites spécialisés . +Cette veille peut être manuelle par de lecture de sites spécialisés. On peut également s'abonner à différentes sources d'informations afin d'être notifié (par mail, flux RSS, ...) lorsqu'un problème est rencontré. - +Configuration des notifications sur un projet github -### ... et prendre la bonne décision +## ... et prendre la bonne décision -Lorsque nous sommes informés d'un dysfonctionnement d'un composant du logiciel, il ne faut pas forcement se précipiter. -En effet, le risque de mettre à jour rapidement un composant pour corriger un futur problème est d'entrainer d'autres problèmes non prévu. +Lorsque nous sommes informés d'un dysfonctionnement d'un composant du logiciel, il ne faut pas forcément se précipiter. +En effet, une mise à jour de composant peux corriger un problème mais peut également entrainer un autre dysfonctionnement. Il est donc important d'évaluer les risques avant de faire le changement. De plus, selon le type de mise à jour, les impacts sur le code existant peut être plus ou moins important. Il faut donc estimer les impacts de la mise à jour et le temps à passer pour faire cette mise à jour. -### Quel est l'intérêt d'une maintenance préventive ? +## Quel est l'intérêt d'une maintenance préventive ? Il est important de consacrer du temps pour la maintenance préventive. Du temps pour faire la veille et évaluer les risques et du temps pour faire les modifications nécessaires. @@ -68,8 +73,71 @@ Car lorsque les problèmes arrivent, les conséquences peuvent être importantes Pour faire une analogie : la maintenance préventive, c'est un peu comme le monde automobile. En effet, si l'entretien de votre voiture est fait régulièrement vous éviterez le plus possible les gros problèmes et les conséquences qui en découlent. -## Guérir avec la maintenance corrective +# Guérir avec la maintenance corrective La maintenance corrective intervient **_après_** qu'un problème soit détecté. -## Le juste milieu : la maintenance prédictive +Encore faut-il que le problème soit détecté. + +## Quand sait-on qu'il y a un problème ? + +Il peut y avoir plusieurs types de problème. Les problèmes visibles et les problèmes invisibles. +La majorité des problèmes sont détectés par une action directe. +Cela peut être une action utilisateur ou un appel de webservice. +Dans ce cas la detection est assez rapide, voir immédiate. + +Mais il peut aussi y avoir des actions plus discrete qui ne permettent pas de détecter rapidement le dysfonctionnement. +Il peut s'agir d'un batch ou d'une action automatique qui met à jour la base de données mais avec un mauvais comportement. +Il peut s'agir d'une suppression de données (totale ou partielle) ou d'une modification de données non désirée. + +Selon la nature du dysfonctionnement, il peut y avoir un certain délai entre le dysfonctionnement et sa détection. +Il peut y avoir un délai encore plus grand entre le moment où le problème est détecté et sa correction. + +Une fois le dysfonctionnement détecté, il faut que l'information circule afin qu'elle soit transmise à l'équipe de développement +Cela peut passer par plusieurs mécanismes : +- un outil de gestion de ticket (JIRA, Redmine, ...) +- le gestionnaire de ticket du projet (github, gitlab) +- un email +- ... + + +# Ce qu'il faut en retenir + +La majorité du temps, pour des décideurs, la maintenance informatique n'est pas un sujet prioritaire. +C'est un sujet difficilement quantifiable. + +Il est donc plus facile de prévoir une enveloppe budgetaire pour gérer les problèmes quand ils arriveront (maintenance corrective) que de prévoir un budget pour prévenir les éventuels futurs problèmes (maintenance préventive). +C'est malheureusement une vision à court terme. + +L'absence de maintenance préventive entraine des conséquences techniques et financières à moyen et long terme. + +## L'absence de prévention, c'est accumuler de la dette... + +A moyen terme, si on ne met pas à jour le code ou les dépendances régulièrement, le projet va accumuler une dette technique. +Avec l'accumulation de la dette technique, il faut prendre en compte le cout du maintien des compétences sur le projet. +Ce cout n'est souvent pas pris en compte dans le budget de maintenance des applications. + +Ex: Aujourd'hui, maintenir un projet en JSF (pour ceux qui connaissent :) ) coutera plus cher à maintenir qu'un projet en SpringBoot angular. +Car il faut trouver des compétences capables d'intervenir sur un projet en JSF. Ces compétences sont rares sur le marché. + +L'évolution des frameworks modernes permet, de plus en plus, de s'abstraire des couches techniques pour se concentrer sur le métier. +Ils permettent donc de gagner du temps lors du développement des fonctionnalités. +Ce gain de temps n'est pas réalisable pour des projets qui ne sont pas maintenus régulièrement. + +Ex: Implémenter des requêtes en base de données réalisées avec l'API Criteria prendra plus de temps qu'avec un framework de type spring data. +En effet, spring data permet (dans la grande majorité des cas) de ne pas implementer les requêtes mais seulement en définir la signature. +C'est donc un gain en productivité pour les futures évolutions. + +## ...Qu'il faudra bien payer un jour + +La maintenance corrective est une obligation puisqu'il s'agit de traiter les problèmes qui sont présent. +Mais ne faire que de la maintenance corrective n'est pas suffisant pour garantir une longévité efficace à une application. + +Il est important de faire aussi de la maintenance préventive afin de réduire les risques d'avoir des problèmes en production. + +L'absence de maintenance régulière, va entrainer des couts indirects (de maintien des compétences, de temps de correction, ...). +Dans le calcul de la maintenance, ces couts indirects sont rarement pris en compte, par les décideurs, dans le cout global d'une application. + +La limite extreme est, qu'au bout d'un moment, la décision soit prise de refaire complétement l'application car elle n'est plus maintenable ou que le cout de maintenance soit trop élevé. +Cette décision entraine souvent beaucoup de frilosité car il faut engager beaucoup d'argent pour cette refonte. + From e9d467d5ff322e69cabcb3e9eb92e3b86ff3b5bd Mon Sep 17 00:00:00 2001 From: seb Date: Sun, 2 Apr 2023 18:00:57 +0200 Subject: [PATCH 04/34] Ajout article blog sur les types de maintenances --- _posts/2023-03-28-maintenance-preventive-corrective.md | 1 - 1 file changed, 1 deletion(-) diff --git a/_posts/2023-03-28-maintenance-preventive-corrective.md b/_posts/2023-03-28-maintenance-preventive-corrective.md index c1b1d0a..4dd77bd 100644 --- a/_posts/2023-03-28-maintenance-preventive-corrective.md +++ b/_posts/2023-03-28-maintenance-preventive-corrective.md @@ -2,7 +2,6 @@ author: Sébastien title: Maintenance corrective versus maintenance prédictive categories: blog -published: false tags: mco maintenance préventive prédictive corrective budget --- From 3a64b058366729f39e792a3c21074d9f39ca83a7 Mon Sep 17 00:00:00 2001 From: seb Date: Sun, 2 Apr 2023 18:02:22 +0200 Subject: [PATCH 05/34] Ajout article blog sur les types de maintenances --- _posts/2023-03-28-maintenance-preventive-corrective.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2023-03-28-maintenance-preventive-corrective.md b/_posts/2023-03-28-maintenance-preventive-corrective.md index 4dd77bd..a6b4e18 100644 --- a/_posts/2023-03-28-maintenance-preventive-corrective.md +++ b/_posts/2023-03-28-maintenance-preventive-corrective.md @@ -1,6 +1,6 @@ --- author: Sébastien -title: Maintenance corrective versus maintenance prédictive +title: Quels sont les enjeux d'une bonne maintenance applicative ? categories: blog tags: mco maintenance préventive prédictive corrective budget --- From 11413e934cce12eb49fac7389861bd36f0e097d1 Mon Sep 17 00:00:00 2001 From: seb Date: Mon, 3 Apr 2023 09:02:04 +0200 Subject: [PATCH 06/34] Ajout article blog sur les types de maintenances --- _posts/2023-03-28-maintenance-preventive-corrective.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2023-03-28-maintenance-preventive-corrective.md b/_posts/2023-03-28-maintenance-preventive-corrective.md index a6b4e18..fb52c6f 100644 --- a/_posts/2023-03-28-maintenance-preventive-corrective.md +++ b/_posts/2023-03-28-maintenance-preventive-corrective.md @@ -1,6 +1,6 @@ --- author: Sébastien -title: Quels sont les enjeux d'une bonne maintenance applicative ? +title: Quels sont les enjeux d'une maintenance applicative ? categories: blog tags: mco maintenance préventive prédictive corrective budget --- From 9393e05c6c05954e40865a649c7b9d6932fac844 Mon Sep 17 00:00:00 2001 From: seb Date: Mon, 3 Apr 2023 09:04:18 +0200 Subject: [PATCH 07/34] Ajout article blog sur les types de maintenances --- _posts/2023-03-28-maintenance-preventive-corrective.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/_posts/2023-03-28-maintenance-preventive-corrective.md b/_posts/2023-03-28-maintenance-preventive-corrective.md index fb52c6f..8659f5c 100644 --- a/_posts/2023-03-28-maintenance-preventive-corrective.md +++ b/_posts/2023-03-28-maintenance-preventive-corrective.md @@ -7,8 +7,9 @@ tags: mco maintenance préventive prédictive corrective budget La maintenance des applications informatiques consiste à assurer la disponibilité du logiciel. -Nous pouvons intervenir avant qu'un dysfonctionnement intervienne : il s'agit de maintenance préventive. +La maintenance peut être effectuée à différents stades de l'application : avant ou après l'apparition d'un problème. +Nous pouvons intervenir avant qu'un dysfonctionnement intervienne : il s'agit de maintenance préventive. Nous pouvons également intervenir après qu'un dysfonctionnement intervienne: il s'agit de maintenance corrective. Les dysfonctionnements évoqués dans cet article sont ceux qui n'ont pas été détectés dans la phase de tests/recette de l'application avant sa mise en production. From 5bfc254bc9c9a3d0c5e4d45576422310cd1514f6 Mon Sep 17 00:00:00 2001 From: seb Date: Mon, 3 Apr 2023 09:08:18 +0200 Subject: [PATCH 08/34] Ajout article blog sur les types de maintenances --- _posts/2023-03-28-maintenance-preventive-corrective.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2023-03-28-maintenance-preventive-corrective.md b/_posts/2023-03-28-maintenance-preventive-corrective.md index 8659f5c..a4ef191 100644 --- a/_posts/2023-03-28-maintenance-preventive-corrective.md +++ b/_posts/2023-03-28-maintenance-preventive-corrective.md @@ -50,7 +50,7 @@ Pour cela, il est important de faire de la veille. Cette veille peut être manuelle par de lecture de sites spécialisés. On peut également s'abonner à différentes sources d'informations afin d'être notifié (par mail, flux RSS, ...) lorsqu'un problème est rencontré. -Configuration des notifications sur un projet github +Configuration des notifications sur un projet github ## ... et prendre la bonne décision From 6cdf419157c854ff294c2386197645ba1f59543c Mon Sep 17 00:00:00 2001 From: seb Date: Mon, 3 Apr 2023 10:03:14 +0200 Subject: [PATCH 09/34] Ajout article blog sur les types de maintenances --- ...03-28-maintenance-preventive-corrective.md | 33 +++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/_posts/2023-03-28-maintenance-preventive-corrective.md b/_posts/2023-03-28-maintenance-preventive-corrective.md index a4ef191..ef0ab0a 100644 --- a/_posts/2023-03-28-maintenance-preventive-corrective.md +++ b/_posts/2023-03-28-maintenance-preventive-corrective.md @@ -16,7 +16,20 @@ Les dysfonctionnements évoqués dans cet article sont ceux qui n'ont pas été Je prends comme hypothèse que l'application a été testée avant sa mise en production. Même si la recette est bien faite, il est toujours possible qu'un dysfonctionnement intervienne en production. -# En quoi consiste la maintenance ? + + * [En quoi consiste la maintenance ?](#en-quoi-consiste-la-maintenance-) + * [Prévenir avec la maintenance préventive](#prévenir-avec-la-maintenance-préventive) + * [Se tenir informé ...](#se-tenir-informé-) + * [... et prendre la bonne décision](#-et-prendre-la-bonne-décision) + * [Quel est l'intérêt d'une maintenance préventive ?](#quel-est-lintérêt-d--une-maintenance-préventive-) + * [Guérir avec la maintenance corrective](#guérir-avec-la-maintenance-corrective) + * [Quand sait-on qu'il y a un problème ?](#quand-sait-on-quil-y-a-un-problème-) + * [Ce qu'il faut en retenir](#ce-quil-faut-en-retenir) + * [L'absence de prévention, c'est accumuler de la dette...](#labsence-de-prévention-cest-accumuler-de-la-dette) + * [...Qu'il faudra bien payer un jour](#quil-faudra-bien-payer-un-jour) + + +## En quoi consiste la maintenance ? La maintenance consiste à modifier une partie du code du logiciel pour en corriger les dysfonctionnements ou en améliorer son efficacité. Cette partie du code peut être dans une dépendance (ou bibliothèque) externe. @@ -37,13 +50,13 @@ Par exemple, l'absence de contrôle des données d'entrée d'un webservice peut _Le cas le plus courant d'un manque de contrôle est l'élévation de privilège._ (https://fr.wikipedia.org/wiki/%C3%89l%C3%A9vation_des_privil%C3%A8ges) -# Prévenir avec la maintenance préventive +## Prévenir avec la maintenance préventive Comme son nom l'indique, la maintenance préventive intervient **_avant_** qu'un problème ne surgisse. Il s'agit d'anticiper d'éventuels dysfonctionnements en remplaçant certains composants du logiciel. -## Se tenir informé ... +### Se tenir informé ... Pour anticiper d'éventuels problèmes, il est important de se tenir informé. Pour cela, il est important de faire de la veille. @@ -52,7 +65,7 @@ On peut également s'abonner à différentes sources d'informations afin d'être Configuration des notifications sur un projet github -## ... et prendre la bonne décision +### ... et prendre la bonne décision Lorsque nous sommes informés d'un dysfonctionnement d'un composant du logiciel, il ne faut pas forcément se précipiter. En effet, une mise à jour de composant peux corriger un problème mais peut également entrainer un autre dysfonctionnement. @@ -62,7 +75,7 @@ Il est donc important d'évaluer les risques avant de faire le changement. De plus, selon le type de mise à jour, les impacts sur le code existant peut être plus ou moins important. Il faut donc estimer les impacts de la mise à jour et le temps à passer pour faire cette mise à jour. -## Quel est l'intérêt d'une maintenance préventive ? +### Quel est l'intérêt d'une maintenance préventive ? Il est important de consacrer du temps pour la maintenance préventive. Du temps pour faire la veille et évaluer les risques et du temps pour faire les modifications nécessaires. @@ -73,13 +86,13 @@ Car lorsque les problèmes arrivent, les conséquences peuvent être importantes Pour faire une analogie : la maintenance préventive, c'est un peu comme le monde automobile. En effet, si l'entretien de votre voiture est fait régulièrement vous éviterez le plus possible les gros problèmes et les conséquences qui en découlent. -# Guérir avec la maintenance corrective +## Guérir avec la maintenance corrective La maintenance corrective intervient **_après_** qu'un problème soit détecté. Encore faut-il que le problème soit détecté. -## Quand sait-on qu'il y a un problème ? +### Quand sait-on qu'il y a un problème ? Il peut y avoir plusieurs types de problème. Les problèmes visibles et les problèmes invisibles. La majorité des problèmes sont détectés par une action directe. @@ -101,7 +114,7 @@ Cela peut passer par plusieurs mécanismes : - ... -# Ce qu'il faut en retenir +## Ce qu'il faut en retenir La majorité du temps, pour des décideurs, la maintenance informatique n'est pas un sujet prioritaire. C'est un sujet difficilement quantifiable. @@ -111,7 +124,7 @@ C'est malheureusement une vision à court terme. L'absence de maintenance préventive entraine des conséquences techniques et financières à moyen et long terme. -## L'absence de prévention, c'est accumuler de la dette... +### L'absence de prévention, c'est accumuler de la dette... A moyen terme, si on ne met pas à jour le code ou les dépendances régulièrement, le projet va accumuler une dette technique. Avec l'accumulation de la dette technique, il faut prendre en compte le cout du maintien des compétences sur le projet. @@ -128,7 +141,7 @@ Ex: Implémenter des requêtes en base de données réalisées avec l'API Criter En effet, spring data permet (dans la grande majorité des cas) de ne pas implementer les requêtes mais seulement en définir la signature. C'est donc un gain en productivité pour les futures évolutions. -## ...Qu'il faudra bien payer un jour +### ...Qu'il faudra bien payer un jour La maintenance corrective est une obligation puisqu'il s'agit de traiter les problèmes qui sont présent. Mais ne faire que de la maintenance corrective n'est pas suffisant pour garantir une longévité efficace à une application. From e802f1939846c4b2d05b7c8a217e53ae9d8a8988 Mon Sep 17 00:00:00 2001 From: seb Date: Mon, 3 Apr 2023 10:05:22 +0200 Subject: [PATCH 10/34] Ajout article blog sur les types de maintenances --- _posts/2023-03-28-maintenance-preventive-corrective.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/_posts/2023-03-28-maintenance-preventive-corrective.md b/_posts/2023-03-28-maintenance-preventive-corrective.md index ef0ab0a..507235e 100644 --- a/_posts/2023-03-28-maintenance-preventive-corrective.md +++ b/_posts/2023-03-28-maintenance-preventive-corrective.md @@ -9,9 +9,6 @@ tags: mco maintenance préventive prédictive corrective budget La maintenance des applications informatiques consiste à assurer la disponibilité du logiciel. La maintenance peut être effectuée à différents stades de l'application : avant ou après l'apparition d'un problème. -Nous pouvons intervenir avant qu'un dysfonctionnement intervienne : il s'agit de maintenance préventive. -Nous pouvons également intervenir après qu'un dysfonctionnement intervienne: il s'agit de maintenance corrective. - Les dysfonctionnements évoqués dans cet article sont ceux qui n'ont pas été détectés dans la phase de tests/recette de l'application avant sa mise en production. Je prends comme hypothèse que l'application a été testée avant sa mise en production. Même si la recette est bien faite, il est toujours possible qu'un dysfonctionnement intervienne en production. From e14a075767e647dd6c729f11b4f254b4334946df Mon Sep 17 00:00:00 2001 From: seb Date: Mon, 3 Apr 2023 10:09:12 +0200 Subject: [PATCH 11/34] Ajout article blog sur les types de maintenances --- _posts/2023-03-28-maintenance-preventive-corrective.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2023-03-28-maintenance-preventive-corrective.md b/_posts/2023-03-28-maintenance-preventive-corrective.md index 507235e..4eb76b5 100644 --- a/_posts/2023-03-28-maintenance-preventive-corrective.md +++ b/_posts/2023-03-28-maintenance-preventive-corrective.md @@ -45,7 +45,7 @@ Cela peut concerner le remplacement d'une version d'une ou plusieurs dépendance Cela peut concerner du code spécifique à l'application qui est lié à une mauvaise pratique ou un mauvais usage. Par exemple, l'absence de contrôle des données d'entrée d'un webservice peut entrainer une alteration non désirée des données dans la base de données. -_Le cas le plus courant d'un manque de contrôle est l'élévation de privilège._ (https://fr.wikipedia.org/wiki/%C3%89l%C3%A9vation_des_privil%C3%A8ges) +_Le cas le plus courant d'un manque de contrôle est l'élévation de privilège._ [Elévation de privilèges](https://fr.wikipedia.org/wiki/%C3%89l%C3%A9vation_des_privil%C3%A8ges) ## Prévenir avec la maintenance préventive From 872dd924612762a3ff7fcb5e4a415a5e48743405 Mon Sep 17 00:00:00 2001 From: seb Date: Mon, 3 Apr 2023 10:10:51 +0200 Subject: [PATCH 12/34] Ajout article blog sur les types de maintenances --- _posts/2023-03-28-maintenance-preventive-corrective.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2023-03-28-maintenance-preventive-corrective.md b/_posts/2023-03-28-maintenance-preventive-corrective.md index 4eb76b5..67ebbaf 100644 --- a/_posts/2023-03-28-maintenance-preventive-corrective.md +++ b/_posts/2023-03-28-maintenance-preventive-corrective.md @@ -45,7 +45,7 @@ Cela peut concerner le remplacement d'une version d'une ou plusieurs dépendance Cela peut concerner du code spécifique à l'application qui est lié à une mauvaise pratique ou un mauvais usage. Par exemple, l'absence de contrôle des données d'entrée d'un webservice peut entrainer une alteration non désirée des données dans la base de données. -_Le cas le plus courant d'un manque de contrôle est l'élévation de privilège._ [Elévation de privilèges](https://fr.wikipedia.org/wiki/%C3%89l%C3%A9vation_des_privil%C3%A8ges) +_Le cas le plus courant d'un manque de contrôle est l'[élévation de privilège]._ (https://fr.wikipedia.org/wiki/%C3%89l%C3%A9vation_des_privil%C3%A8ges) ## Prévenir avec la maintenance préventive From b7550e41df48f9b3c3266f5ab535e8bd20b67022 Mon Sep 17 00:00:00 2001 From: seb Date: Mon, 3 Apr 2023 10:20:39 +0200 Subject: [PATCH 13/34] Ajout article blog sur les types de maintenances --- _posts/2023-03-28-maintenance-preventive-corrective.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/_posts/2023-03-28-maintenance-preventive-corrective.md b/_posts/2023-03-28-maintenance-preventive-corrective.md index 67ebbaf..e4a6d2e 100644 --- a/_posts/2023-03-28-maintenance-preventive-corrective.md +++ b/_posts/2023-03-28-maintenance-preventive-corrective.md @@ -45,8 +45,7 @@ Cela peut concerner le remplacement d'une version d'une ou plusieurs dépendance Cela peut concerner du code spécifique à l'application qui est lié à une mauvaise pratique ou un mauvais usage. Par exemple, l'absence de contrôle des données d'entrée d'un webservice peut entrainer une alteration non désirée des données dans la base de données. -_Le cas le plus courant d'un manque de contrôle est l'[élévation de privilège]._ (https://fr.wikipedia.org/wiki/%C3%89l%C3%A9vation_des_privil%C3%A8ges) - +_Le cas le plus courant d'un manque de contrôle est l'élévation de privilège._ [1] ## Prévenir avec la maintenance préventive Comme son nom l'indique, la maintenance préventive intervient **_avant_** qu'un problème ne surgisse. @@ -151,3 +150,6 @@ Dans le calcul de la maintenance, ces couts indirects sont rarement pris en comp La limite extreme est, qu'au bout d'un moment, la décision soit prise de refaire complétement l'application car elle n'est plus maintenable ou que le cout de maintenance soit trop élevé. Cette décision entraine souvent beaucoup de frilosité car il faut engager beaucoup d'argent pour cette refonte. +## Notes + +[1] - [https://fr.wikipedia.org/wiki/%C3%89l%C3%A9vation_des_privil%C3%A8ges] From a5d78d688ffd16fef59e31e694137c5a79e1bb03 Mon Sep 17 00:00:00 2001 From: seb Date: Mon, 3 Apr 2023 10:25:09 +0200 Subject: [PATCH 14/34] Ajout article blog sur les types de maintenances --- _posts/2023-03-28-maintenance-preventive-corrective.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2023-03-28-maintenance-preventive-corrective.md b/_posts/2023-03-28-maintenance-preventive-corrective.md index e4a6d2e..2b67b8c 100644 --- a/_posts/2023-03-28-maintenance-preventive-corrective.md +++ b/_posts/2023-03-28-maintenance-preventive-corrective.md @@ -152,4 +152,4 @@ Cette décision entraine souvent beaucoup de frilosité car il faut engager beau ## Notes -[1] - [https://fr.wikipedia.org/wiki/%C3%89l%C3%A9vation_des_privil%C3%A8ges] +1. [1] - [https://fr.wikipedia.org/wiki/%C3%89l%C3%A9vation_des_privil%C3%A8ges](https://fr.wikipedia.org/wiki/%C3%89l%C3%A9vation_des_privil%C3%A8ges) From 8e75105cd33993f1a4166add7ef07ae4d55e6796 Mon Sep 17 00:00:00 2001 From: seb Date: Mon, 3 Apr 2023 10:35:22 +0200 Subject: [PATCH 15/34] Ajout article blog sur les types de maintenances --- _posts/2023-03-28-maintenance-preventive-corrective.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2023-03-28-maintenance-preventive-corrective.md b/_posts/2023-03-28-maintenance-preventive-corrective.md index 2b67b8c..72ecece 100644 --- a/_posts/2023-03-28-maintenance-preventive-corrective.md +++ b/_posts/2023-03-28-maintenance-preventive-corrective.md @@ -2,7 +2,7 @@ author: Sébastien title: Quels sont les enjeux d'une maintenance applicative ? categories: blog -tags: mco maintenance préventive prédictive corrective budget +tags: mco maintenance préventive corrective budget --- From 354782c3a956080a24bdda946b30894ac8558454 Mon Sep 17 00:00:00 2001 From: seb Date: Fri, 7 Apr 2023 15:38:55 +0200 Subject: [PATCH 16/34] Prise en compte des remarques --- ...03-28-maintenance-preventive-corrective.md | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/_posts/2023-03-28-maintenance-preventive-corrective.md b/_posts/2023-03-28-maintenance-preventive-corrective.md index 72ecece..a82dce2 100644 --- a/_posts/2023-03-28-maintenance-preventive-corrective.md +++ b/_posts/2023-03-28-maintenance-preventive-corrective.md @@ -31,7 +31,7 @@ Même si la recette est bien faite, il est toujours possible qu'un dysfonctionne La maintenance consiste à modifier une partie du code du logiciel pour en corriger les dysfonctionnements ou en améliorer son efficacité. Cette partie du code peut être dans une dépendance (ou bibliothèque) externe. Cela peut également venir du langage d'exécution en lui-même. -Pour regrouper ces 3 notions je parlerais ici de _composant_. +Pour regrouper ces 3 notions je parlerai ici de _composant_. Il existe plusieurs types de maintenance que nous allons voir dans la suite de cet article. Chaque type de maintenance à son lot d'avantages et d'inconvénients. @@ -64,11 +64,11 @@ On peut également s'abonner à différentes sources d'informations afin d'être ### ... et prendre la bonne décision Lorsque nous sommes informés d'un dysfonctionnement d'un composant du logiciel, il ne faut pas forcément se précipiter. -En effet, une mise à jour de composant peux corriger un problème mais peut également entrainer un autre dysfonctionnement. +En effet, une mise à jour de composant peut corriger un problème mais peut également entraîner un autre dysfonctionnement. Il est donc important d'évaluer les risques avant de faire le changement. -De plus, selon le type de mise à jour, les impacts sur le code existant peut être plus ou moins important. +De plus, selon le type de mise à jour, les impacts sur le code existant peuvent être plus ou moins importants. Il faut donc estimer les impacts de la mise à jour et le temps à passer pour faire cette mise à jour. ### Quel est l'intérêt d'une maintenance préventive ? @@ -93,9 +93,9 @@ Encore faut-il que le problème soit détecté. Il peut y avoir plusieurs types de problème. Les problèmes visibles et les problèmes invisibles. La majorité des problèmes sont détectés par une action directe. Cela peut être une action utilisateur ou un appel de webservice. -Dans ce cas la detection est assez rapide, voir immédiate. +Dans ce cas la détection est assez rapide, voire immédiate. -Mais il peut aussi y avoir des actions plus discrete qui ne permettent pas de détecter rapidement le dysfonctionnement. +Mais il peut aussi y avoir des actions plus discrètes qui ne permettent pas de détecter rapidement le dysfonctionnement. Il peut s'agir d'un batch ou d'une action automatique qui met à jour la base de données mais avec un mauvais comportement. Il peut s'agir d'une suppression de données (totale ou partielle) ou d'une modification de données non désirée. @@ -115,7 +115,7 @@ Cela peut passer par plusieurs mécanismes : La majorité du temps, pour des décideurs, la maintenance informatique n'est pas un sujet prioritaire. C'est un sujet difficilement quantifiable. -Il est donc plus facile de prévoir une enveloppe budgetaire pour gérer les problèmes quand ils arriveront (maintenance corrective) que de prévoir un budget pour prévenir les éventuels futurs problèmes (maintenance préventive). +Il est donc plus facile de prévoir une enveloppe budgétaire pour gérer les problèmes quand ils arriveront (maintenance corrective) que de prévoir un budget pour prévenir les éventuels futurs problèmes (maintenance préventive). C'est malheureusement une vision à court terme. L'absence de maintenance préventive entraine des conséquences techniques et financières à moyen et long terme. @@ -126,15 +126,15 @@ A moyen terme, si on ne met pas à jour le code ou les dépendances régulièrem Avec l'accumulation de la dette technique, il faut prendre en compte le cout du maintien des compétences sur le projet. Ce cout n'est souvent pas pris en compte dans le budget de maintenance des applications. -Ex: Aujourd'hui, maintenir un projet en JSF (pour ceux qui connaissent :) ) coutera plus cher à maintenir qu'un projet en SpringBoot angular. -Car il faut trouver des compétences capables d'intervenir sur un projet en JSF. Ces compétences sont rares sur le marché. +Ex: Aujourd'hui, maintenir un projet en JSF (pour ceux qui connaissent :) ) coûtera plus cher à maintenir qu'un projet en SpringBoot/Angular. +Car il faut déjà trouver des compétences capables d'intervenir sur un projet en JSF, ces compétences sont rares sur le marché. L'évolution des frameworks modernes permet, de plus en plus, de s'abstraire des couches techniques pour se concentrer sur le métier. Ils permettent donc de gagner du temps lors du développement des fonctionnalités. Ce gain de temps n'est pas réalisable pour des projets qui ne sont pas maintenus régulièrement. -Ex: Implémenter des requêtes en base de données réalisées avec l'API Criteria prendra plus de temps qu'avec un framework de type spring data. -En effet, spring data permet (dans la grande majorité des cas) de ne pas implementer les requêtes mais seulement en définir la signature. +Ex: implémenter des requêtes en base de données réalisées avec l'API Criteria prendra plus de temps qu'avec un framework de type Spring Data. +En effet, Spring Data permet (dans la grande majorité des cas) de ne pas implementer les requêtes mais seulement en définir la signature. C'est donc un gain en productivité pour les futures évolutions. ### ...Qu'il faudra bien payer un jour @@ -144,11 +144,11 @@ Mais ne faire que de la maintenance corrective n'est pas suffisant pour garantir Il est important de faire aussi de la maintenance préventive afin de réduire les risques d'avoir des problèmes en production. -L'absence de maintenance régulière, va entrainer des couts indirects (de maintien des compétences, de temps de correction, ...). +L'absence de maintenance régulière, va entrainer des coûts indirects (de maintien des compétences, de temps de correction, ...). Dans le calcul de la maintenance, ces couts indirects sont rarement pris en compte, par les décideurs, dans le cout global d'une application. -La limite extreme est, qu'au bout d'un moment, la décision soit prise de refaire complétement l'application car elle n'est plus maintenable ou que le cout de maintenance soit trop élevé. -Cette décision entraine souvent beaucoup de frilosité car il faut engager beaucoup d'argent pour cette refonte. +La limite extrême est, qu'au bout d'un moment, la décision soit prise de refaire complétement l'application car elle n'est plus maintenable ou que le coût de maintenance est trop élevé. +Cette décision entraîne souvent beaucoup de frilosité car il faut engager un budget significatif pour cette refonte: **maintenir c'est aussi investir**! ## Notes From 22a3f9bbf85aad7bb384e710e2a143a94f5fa026 Mon Sep 17 00:00:00 2001 From: sebastien-bisson-dm <86306941+sebastien-bisson-dm@users.noreply.github.com> Date: Wed, 12 Apr 2023 21:39:51 +0200 Subject: [PATCH 17/34] Update _posts/2023-03-28-maintenance-preventive-corrective.md Co-authored-by: Olivier Boudet --- _posts/2023-03-28-maintenance-preventive-corrective.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2023-03-28-maintenance-preventive-corrective.md b/_posts/2023-03-28-maintenance-preventive-corrective.md index a82dce2..512e0c4 100644 --- a/_posts/2023-03-28-maintenance-preventive-corrective.md +++ b/_posts/2023-03-28-maintenance-preventive-corrective.md @@ -56,7 +56,7 @@ Il s'agit d'anticiper d'éventuels dysfonctionnements en remplaçant certains co Pour anticiper d'éventuels problèmes, il est important de se tenir informé. Pour cela, il est important de faire de la veille. -Cette veille peut être manuelle par de lecture de sites spécialisés. +Cette veille peut être manuelle par des lectures de sites spécialisés. On peut également s'abonner à différentes sources d'informations afin d'être notifié (par mail, flux RSS, ...) lorsqu'un problème est rencontré. Configuration des notifications sur un projet github From 56c4a9eefa6fb3eb26a898bb858ddb546a90fae1 Mon Sep 17 00:00:00 2001 From: sebastien-bisson-dm <86306941+sebastien-bisson-dm@users.noreply.github.com> Date: Wed, 12 Apr 2023 21:40:06 +0200 Subject: [PATCH 18/34] Update _posts/2023-03-28-maintenance-preventive-corrective.md Co-authored-by: Olivier Boudet --- _posts/2023-03-28-maintenance-preventive-corrective.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2023-03-28-maintenance-preventive-corrective.md b/_posts/2023-03-28-maintenance-preventive-corrective.md index 512e0c4..b4b1747 100644 --- a/_posts/2023-03-28-maintenance-preventive-corrective.md +++ b/_posts/2023-03-28-maintenance-preventive-corrective.md @@ -69,7 +69,7 @@ En effet, une mise à jour de composant peut corriger un problème mais peut ég Il est donc important d'évaluer les risques avant de faire le changement. De plus, selon le type de mise à jour, les impacts sur le code existant peuvent être plus ou moins importants. -Il faut donc estimer les impacts de la mise à jour et le temps à passer pour faire cette mise à jour. +Il faut donc les estimer ainsi que le temps à passer pour faire cette mise à jour. ### Quel est l'intérêt d'une maintenance préventive ? From bed72a30409215acf6dec1ba20780da6444bec87 Mon Sep 17 00:00:00 2001 From: sebastien-bisson-dm <86306941+sebastien-bisson-dm@users.noreply.github.com> Date: Wed, 12 Apr 2023 21:40:44 +0200 Subject: [PATCH 19/34] Update _posts/2023-03-28-maintenance-preventive-corrective.md Co-authored-by: Olivier Boudet --- _posts/2023-03-28-maintenance-preventive-corrective.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/_posts/2023-03-28-maintenance-preventive-corrective.md b/_posts/2023-03-28-maintenance-preventive-corrective.md index b4b1747..046baae 100644 --- a/_posts/2023-03-28-maintenance-preventive-corrective.md +++ b/_posts/2023-03-28-maintenance-preventive-corrective.md @@ -76,9 +76,8 @@ Il faut donc les estimer ainsi que le temps à passer pour faire cette mise à j Il est important de consacrer du temps pour la maintenance préventive. Du temps pour faire la veille et évaluer les risques et du temps pour faire les modifications nécessaires. -Le temps passé à prévenir les problèmes permet d'économiser le temps lorsque les problèmes arriveront. -Car lorsque les problèmes arrivent, les conséquences peuvent être importantes. - +Le temps passé à prévenir les problèmes permet d'en économiser beaucoup par la suite. +En effet, l’apparition d'un problème non anticipé entraine des conséquences importantes qui peuvent avoir un coût non négligeable. Ce coût pouvant être technique (temps de correction) ou en terme d'image (faille de sécurité, fuite de données, bug). Pour faire une analogie : la maintenance préventive, c'est un peu comme le monde automobile. En effet, si l'entretien de votre voiture est fait régulièrement vous éviterez le plus possible les gros problèmes et les conséquences qui en découlent. From 950ba1003ed3319e1d679652b97b7c031b7729fc Mon Sep 17 00:00:00 2001 From: sebastien-bisson-dm <86306941+sebastien-bisson-dm@users.noreply.github.com> Date: Wed, 12 Apr 2023 21:41:45 +0200 Subject: [PATCH 20/34] Update _posts/2023-03-28-maintenance-preventive-corrective.md Co-authored-by: Olivier Boudet --- _posts/2023-03-28-maintenance-preventive-corrective.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2023-03-28-maintenance-preventive-corrective.md b/_posts/2023-03-28-maintenance-preventive-corrective.md index 046baae..fbe2be7 100644 --- a/_posts/2023-03-28-maintenance-preventive-corrective.md +++ b/_posts/2023-03-28-maintenance-preventive-corrective.md @@ -101,7 +101,7 @@ Il peut s'agir d'une suppression de données (totale ou partielle) ou d'une modi Selon la nature du dysfonctionnement, il peut y avoir un certain délai entre le dysfonctionnement et sa détection. Il peut y avoir un délai encore plus grand entre le moment où le problème est détecté et sa correction. -Une fois le dysfonctionnement détecté, il faut que l'information circule afin qu'elle soit transmise à l'équipe de développement +Une fois le dysfonctionnement détecté, il faut que l'information circule afin qu'elle soit transmise à l'équipe de développement. Cela peut passer par plusieurs mécanismes : - un outil de gestion de ticket (JIRA, Redmine, ...) - le gestionnaire de ticket du projet (github, gitlab) From c1123ae751b9e7e0b9907bcd520c2256ebbc148c Mon Sep 17 00:00:00 2001 From: sebastien-bisson-dm <86306941+sebastien-bisson-dm@users.noreply.github.com> Date: Wed, 12 Apr 2023 21:42:15 +0200 Subject: [PATCH 21/34] Update _posts/2023-03-28-maintenance-preventive-corrective.md Co-authored-by: Olivier Boudet --- _posts/2023-03-28-maintenance-preventive-corrective.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2023-03-28-maintenance-preventive-corrective.md b/_posts/2023-03-28-maintenance-preventive-corrective.md index fbe2be7..f1d707a 100644 --- a/_posts/2023-03-28-maintenance-preventive-corrective.md +++ b/_posts/2023-03-28-maintenance-preventive-corrective.md @@ -132,7 +132,7 @@ L'évolution des frameworks modernes permet, de plus en plus, de s'abstraire des Ils permettent donc de gagner du temps lors du développement des fonctionnalités. Ce gain de temps n'est pas réalisable pour des projets qui ne sont pas maintenus régulièrement. -Ex: implémenter des requêtes en base de données réalisées avec l'API Criteria prendra plus de temps qu'avec un framework de type Spring Data. +Par exemple, implémenter des requêtes en base de données réalisées avec l'API Criteria prendra plus de temps qu'avec un framework de type Spring Data. En effet, Spring Data permet (dans la grande majorité des cas) de ne pas implementer les requêtes mais seulement en définir la signature. C'est donc un gain en productivité pour les futures évolutions. From cdd49c89014ac864ae6f8668039068ae78a2cce0 Mon Sep 17 00:00:00 2001 From: seb Date: Wed, 12 Apr 2023 22:16:40 +0200 Subject: [PATCH 22/34] Prise en compte des remarques --- _posts/2023-03-28-maintenance-preventive-corrective.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/_posts/2023-03-28-maintenance-preventive-corrective.md b/_posts/2023-03-28-maintenance-preventive-corrective.md index f1d707a..6998c79 100644 --- a/_posts/2023-03-28-maintenance-preventive-corrective.md +++ b/_posts/2023-03-28-maintenance-preventive-corrective.md @@ -13,6 +13,8 @@ Les dysfonctionnements évoqués dans cet article sont ceux qui n'ont pas été Je prends comme hypothèse que l'application a été testée avant sa mise en production. Même si la recette est bien faite, il est toujours possible qu'un dysfonctionnement intervienne en production. +Cet article est destiné en premier lieu aux managers ou décisionnaires qui ont une connaissance sommaire des enjeux du développement logiciel. + * [En quoi consiste la maintenance ?](#en-quoi-consiste-la-maintenance-) * [Prévenir avec la maintenance préventive](#prévenir-avec-la-maintenance-préventive) @@ -45,7 +47,11 @@ Cela peut concerner le remplacement d'une version d'une ou plusieurs dépendance Cela peut concerner du code spécifique à l'application qui est lié à une mauvaise pratique ou un mauvais usage. Par exemple, l'absence de contrôle des données d'entrée d'un webservice peut entrainer une alteration non désirée des données dans la base de données. +Cette absence de contrôle peut entrainer une alteration involontaire ou volontaire. +Cela peut venir d'erreurs fonctionnelles telles qu'une inversion sur la date de début et de fin d'un intervalle. +Cela peut également venir d'un manque (ou d'une faille) de sécurité. _Le cas le plus courant d'un manque de contrôle est l'élévation de privilège._ [1] + ## Prévenir avec la maintenance préventive Comme son nom l'indique, la maintenance préventive intervient **_avant_** qu'un problème ne surgisse. From 918085f2da77f3dbee7a639b4581bc75faeca25f Mon Sep 17 00:00:00 2001 From: sebastien-bisson-dm <86306941+sebastien-bisson-dm@users.noreply.github.com> Date: Thu, 13 Apr 2023 13:26:27 +0200 Subject: [PATCH 23/34] Update _posts/2023-03-28-maintenance-preventive-corrective.md Co-authored-by: manon-dm <71328428+manon-dm@users.noreply.github.com> --- _posts/2023-03-28-maintenance-preventive-corrective.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2023-03-28-maintenance-preventive-corrective.md b/_posts/2023-03-28-maintenance-preventive-corrective.md index 6998c79..e4b8c93 100644 --- a/_posts/2023-03-28-maintenance-preventive-corrective.md +++ b/_posts/2023-03-28-maintenance-preventive-corrective.md @@ -128,7 +128,7 @@ L'absence de maintenance préventive entraine des conséquences techniques et fi ### L'absence de prévention, c'est accumuler de la dette... A moyen terme, si on ne met pas à jour le code ou les dépendances régulièrement, le projet va accumuler une dette technique. -Avec l'accumulation de la dette technique, il faut prendre en compte le cout du maintien des compétences sur le projet. +Avec l'accumulation de la dette technique, il faut prendre en compte le coût du maintien des compétences sur le projet. Ce cout n'est souvent pas pris en compte dans le budget de maintenance des applications. Ex: Aujourd'hui, maintenir un projet en JSF (pour ceux qui connaissent :) ) coûtera plus cher à maintenir qu'un projet en SpringBoot/Angular. From eb706ff1e675bd250e7ca38139e8349ff04a2f3d Mon Sep 17 00:00:00 2001 From: sebastien-bisson-dm <86306941+sebastien-bisson-dm@users.noreply.github.com> Date: Thu, 13 Apr 2023 13:26:38 +0200 Subject: [PATCH 24/34] Update _posts/2023-03-28-maintenance-preventive-corrective.md Co-authored-by: manon-dm <71328428+manon-dm@users.noreply.github.com> --- _posts/2023-03-28-maintenance-preventive-corrective.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2023-03-28-maintenance-preventive-corrective.md b/_posts/2023-03-28-maintenance-preventive-corrective.md index e4b8c93..c14f690 100644 --- a/_posts/2023-03-28-maintenance-preventive-corrective.md +++ b/_posts/2023-03-28-maintenance-preventive-corrective.md @@ -150,7 +150,7 @@ Mais ne faire que de la maintenance corrective n'est pas suffisant pour garantir Il est important de faire aussi de la maintenance préventive afin de réduire les risques d'avoir des problèmes en production. L'absence de maintenance régulière, va entrainer des coûts indirects (de maintien des compétences, de temps de correction, ...). -Dans le calcul de la maintenance, ces couts indirects sont rarement pris en compte, par les décideurs, dans le cout global d'une application. +Dans le calcul de la maintenance, ces couts indirects sont rarement pris en compte, par les décideurs, dans le coût global d'une application. La limite extrême est, qu'au bout d'un moment, la décision soit prise de refaire complétement l'application car elle n'est plus maintenable ou que le coût de maintenance est trop élevé. Cette décision entraîne souvent beaucoup de frilosité car il faut engager un budget significatif pour cette refonte: **maintenir c'est aussi investir**! From b523a3ced9cdc1ca590b1d140bcf02d2106d9667 Mon Sep 17 00:00:00 2001 From: sebastien-bisson-dm <86306941+sebastien-bisson-dm@users.noreply.github.com> Date: Thu, 13 Apr 2023 13:26:48 +0200 Subject: [PATCH 25/34] Update _posts/2023-03-28-maintenance-preventive-corrective.md Co-authored-by: manon-dm <71328428+manon-dm@users.noreply.github.com> --- _posts/2023-03-28-maintenance-preventive-corrective.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2023-03-28-maintenance-preventive-corrective.md b/_posts/2023-03-28-maintenance-preventive-corrective.md index c14f690..4100b3a 100644 --- a/_posts/2023-03-28-maintenance-preventive-corrective.md +++ b/_posts/2023-03-28-maintenance-preventive-corrective.md @@ -149,7 +149,7 @@ Mais ne faire que de la maintenance corrective n'est pas suffisant pour garantir Il est important de faire aussi de la maintenance préventive afin de réduire les risques d'avoir des problèmes en production. -L'absence de maintenance régulière, va entrainer des coûts indirects (de maintien des compétences, de temps de correction, ...). +L'absence de maintenance régulière, va entraîner des coûts indirects (de maintien des compétences, de temps de correction, ...). Dans le calcul de la maintenance, ces couts indirects sont rarement pris en compte, par les décideurs, dans le coût global d'une application. La limite extrême est, qu'au bout d'un moment, la décision soit prise de refaire complétement l'application car elle n'est plus maintenable ou que le coût de maintenance est trop élevé. From d0a8f11dd22ea64a8c6f97946b6b69ea81f5dd9a Mon Sep 17 00:00:00 2001 From: sebastien-bisson-dm <86306941+sebastien-bisson-dm@users.noreply.github.com> Date: Thu, 13 Apr 2023 13:26:58 +0200 Subject: [PATCH 26/34] Update _posts/2023-03-28-maintenance-preventive-corrective.md Co-authored-by: manon-dm <71328428+manon-dm@users.noreply.github.com> --- _posts/2023-03-28-maintenance-preventive-corrective.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2023-03-28-maintenance-preventive-corrective.md b/_posts/2023-03-28-maintenance-preventive-corrective.md index 4100b3a..b30ac32 100644 --- a/_posts/2023-03-28-maintenance-preventive-corrective.md +++ b/_posts/2023-03-28-maintenance-preventive-corrective.md @@ -129,7 +129,7 @@ L'absence de maintenance préventive entraine des conséquences techniques et fi A moyen terme, si on ne met pas à jour le code ou les dépendances régulièrement, le projet va accumuler une dette technique. Avec l'accumulation de la dette technique, il faut prendre en compte le coût du maintien des compétences sur le projet. -Ce cout n'est souvent pas pris en compte dans le budget de maintenance des applications. +Ce coût n'est souvent pas pris en compte dans le budget de maintenance des applications. Ex: Aujourd'hui, maintenir un projet en JSF (pour ceux qui connaissent :) ) coûtera plus cher à maintenir qu'un projet en SpringBoot/Angular. Car il faut déjà trouver des compétences capables d'intervenir sur un projet en JSF, ces compétences sont rares sur le marché. From 963068e273288cfe625d641d4d50d4aa20319af5 Mon Sep 17 00:00:00 2001 From: seb Date: Sat, 15 Apr 2023 17:48:23 +0200 Subject: [PATCH 27/34] Prise en compte des remarques --- .../2023-03-28-maintenance-preventive-corrective.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/_posts/2023-03-28-maintenance-preventive-corrective.md b/_posts/2023-03-28-maintenance-preventive-corrective.md index b30ac32..02675b2 100644 --- a/_posts/2023-03-28-maintenance-preventive-corrective.md +++ b/_posts/2023-03-28-maintenance-preventive-corrective.md @@ -5,27 +5,27 @@ categories: blog tags: mco maintenance préventive corrective budget --- - La maintenance des applications informatiques consiste à assurer la disponibilité du logiciel. La maintenance peut être effectuée à différents stades de l'application : avant ou après l'apparition d'un problème. -Les dysfonctionnements évoqués dans cet article sont ceux qui n'ont pas été détectés dans la phase de tests/recette de l'application avant sa mise en production. +Les problèmes évoqués dans cet article sont ceux qui n'ont pas été détectés dans la phase de tests/recette de l'application avant sa mise en production. Je prends comme hypothèse que l'application a été testée avant sa mise en production. -Même si la recette est bien faite, il est toujours possible qu'un dysfonctionnement intervienne en production. +Même si la recette est bien faite, il est toujours possible qu'un problème intervienne en production. -Cet article est destiné en premier lieu aux managers ou décisionnaires qui ont une connaissance sommaire des enjeux du développement logiciel. +Cet article est destiné en premier lieu aux managers ou décisionnaires qui ont une connaissance restreinte des enjeux du développement logiciel. * [En quoi consiste la maintenance ?](#en-quoi-consiste-la-maintenance-) * [Prévenir avec la maintenance préventive](#prévenir-avec-la-maintenance-préventive) * [Se tenir informé ...](#se-tenir-informé-) * [... et prendre la bonne décision](#-et-prendre-la-bonne-décision) - * [Quel est l'intérêt d'une maintenance préventive ?](#quel-est-lintérêt-d--une-maintenance-préventive-) + * [Quel est l'intérêt d'une maintenance préventive ?](#quel-est-lintérêt-dune-maintenance-préventive-) * [Guérir avec la maintenance corrective](#guérir-avec-la-maintenance-corrective) * [Quand sait-on qu'il y a un problème ?](#quand-sait-on-quil-y-a-un-problème-) * [Ce qu'il faut en retenir](#ce-quil-faut-en-retenir) * [L'absence de prévention, c'est accumuler de la dette...](#labsence-de-prévention-cest-accumuler-de-la-dette) * [...Qu'il faudra bien payer un jour](#quil-faudra-bien-payer-un-jour) + * [Notes](#notes) ## En quoi consiste la maintenance ? @@ -85,7 +85,8 @@ Du temps pour faire la veille et évaluer les risques et du temps pour faire les Le temps passé à prévenir les problèmes permet d'en économiser beaucoup par la suite. En effet, l’apparition d'un problème non anticipé entraine des conséquences importantes qui peuvent avoir un coût non négligeable. Ce coût pouvant être technique (temps de correction) ou en terme d'image (faille de sécurité, fuite de données, bug). Pour faire une analogie : la maintenance préventive, c'est un peu comme le monde automobile. -En effet, si l'entretien de votre voiture est fait régulièrement vous éviterez le plus possible les gros problèmes et les conséquences qui en découlent. +En effet, si l'entretien de votre voiture est fait régulièrement, vous éviterez le plus possible les gros problèmes et les conséquences qui en découlent. +Vous pourrez ainsi faire durer plus longtemps votre voiture. ## Guérir avec la maintenance corrective From 2817b1ca658355f91669faa89660934a77ec1135 Mon Sep 17 00:00:00 2001 From: seb Date: Sat, 15 Apr 2023 17:58:48 +0200 Subject: [PATCH 28/34] Prise en compte des remarques --- _posts/2023-03-28-maintenance-preventive-corrective.md | 1 + 1 file changed, 1 insertion(+) diff --git a/_posts/2023-03-28-maintenance-preventive-corrective.md b/_posts/2023-03-28-maintenance-preventive-corrective.md index 02675b2..9c3627a 100644 --- a/_posts/2023-03-28-maintenance-preventive-corrective.md +++ b/_posts/2023-03-28-maintenance-preventive-corrective.md @@ -84,6 +84,7 @@ Du temps pour faire la veille et évaluer les risques et du temps pour faire les Le temps passé à prévenir les problèmes permet d'en économiser beaucoup par la suite. En effet, l’apparition d'un problème non anticipé entraine des conséquences importantes qui peuvent avoir un coût non négligeable. Ce coût pouvant être technique (temps de correction) ou en terme d'image (faille de sécurité, fuite de données, bug). + Pour faire une analogie : la maintenance préventive, c'est un peu comme le monde automobile. En effet, si l'entretien de votre voiture est fait régulièrement, vous éviterez le plus possible les gros problèmes et les conséquences qui en découlent. Vous pourrez ainsi faire durer plus longtemps votre voiture. From 8226c9a281e314606a944c0a611a5f952a5ae3c1 Mon Sep 17 00:00:00 2001 From: seb Date: Sat, 15 Apr 2023 18:07:13 +0200 Subject: [PATCH 29/34] Prise en compte des remarques --- _posts/2023-03-19-importance-mco.md | 74 ----------------------------- 1 file changed, 74 deletions(-) delete mode 100644 _posts/2023-03-19-importance-mco.md diff --git a/_posts/2023-03-19-importance-mco.md b/_posts/2023-03-19-importance-mco.md deleted file mode 100644 index 575906b..0000000 --- a/_posts/2023-03-19-importance-mco.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -author: Sébastien -title: Pourquoi il ne faut pas négliger la maintenance (MCO) -categories: blog -published: false -tags: mco maintenance negligence ---- - -Après des années d'expériences dans le service numérique et le développement logiciel, je souhaite partager un constat que beaucoup d'entre nous: la plupart des entreprises qui utilise un logiciel développé sur mesure ont tendance à négliger le maintien en conditions operationnelles (ou MCO) de leurs applications. - -Cette négligence entraîne de nombreux désagrements qui ne sont pas forcement visibles immédiatement mais dont les conséquences à moyen et long terme peuvent être très importants. - -Je vais détailler dans cet article les avantages/inconvénients d'une bonne MCO uniquement d'un point de vue développement logiciel[^1]. - -Dans certains cas, ces avantages/inconvénients peuvent également s'appliquer à d'autres domaines que le développement logiciel (matériel/OS/hébergement/....). - - -## En quoi consiste le maintien en conditions opérationnelles ? - -Le maintien en conditions opérationnelles à pour objectif de s'assurer que le logiciel soit toujours disponible. - -La disponibilité du logiciel en lui-même peut : -- fonctionnel -- maintenable -- et sécurisé - - -Il est important de ne négliger aucun de ces 3 points qui sont complémentaires. - -La maintenance peut intervenir à plusieurs stades. - - -### Un logiciel fonctionnel - -Le logiciel est destiné à des utilisateurs - -### Un logiciel maintenable - -Surveillance des frameworks/langages qui sont toujours maintenus. -Mise à jour vers les dernières versions du ou des langages utilisés. - -La maintenance d'un logiciel consiste à surveiller l'obsolescence des composants de ce logiciel. -La notion de composant peut concerner une dépendance - -### Un logiciel sécurisé - -- Audit de sécurité? -- Surveillance des failles de sécurité (owasp - https://owasp.org/www-project-dependency-check/) - -## Quelles sont les obligations d'un maintien en condition opérationnelles ? - -- La mise en place des outils (cf plus loin) -- La __volonté__ des décisionnaires d'assurer le MCO. -- Prévoir un budget non fonctionnel. - -## Quels sont les avantages d'une maintenance en condition opérationnelles ? - -- applications toujours compatibles avec les évolutions des navigateurs -- un temps de maintenance évolutive/corrective optimisé -- faciliter de trouver des compétences sur le marché - -## Comment nous mettons en œuvre le MCO chez DevMachine? - -Pour garantir le fonctionnement on met en oeuvre les tests automatisés: -- des tests unitaires. -- des tests d'intégrations - -Pour garantir la fraicheur des frameworks utilisés, on utilise des outils de type (TODO). - - -[^1]: La disponibilité d'un logiciel est bien sur très dépendant de l'infrastructure sur laquelle fonctionne le logiciel. - Nous traitons dans cet article que de la partie logicielle. - - From 79022fe6177f7eb9dcb4c03c5bac92fe1b38b26b Mon Sep 17 00:00:00 2001 From: seb Date: Sat, 15 Apr 2023 18:09:47 +0200 Subject: [PATCH 30/34] Prise en compte des remarques --- _posts/2023-03-28-maintenance-preventive-corrective.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2023-03-28-maintenance-preventive-corrective.md b/_posts/2023-03-28-maintenance-preventive-corrective.md index 9c3627a..3a78b46 100644 --- a/_posts/2023-03-28-maintenance-preventive-corrective.md +++ b/_posts/2023-03-28-maintenance-preventive-corrective.md @@ -155,7 +155,7 @@ L'absence de maintenance régulière, va entraîner des coûts indirects (de mai Dans le calcul de la maintenance, ces couts indirects sont rarement pris en compte, par les décideurs, dans le coût global d'une application. La limite extrême est, qu'au bout d'un moment, la décision soit prise de refaire complétement l'application car elle n'est plus maintenable ou que le coût de maintenance est trop élevé. -Cette décision entraîne souvent beaucoup de frilosité car il faut engager un budget significatif pour cette refonte: **maintenir c'est aussi investir**! +Cette décision entraîne souvent beaucoup de frilosité car il faut engager un budget significatif pour cette refonte: _**maintenir c'est aussi investir**_! ## Notes From 796319091ecd29192e11b404188c3a3ca99382d6 Mon Sep 17 00:00:00 2001 From: seb Date: Sat, 15 Apr 2023 18:11:05 +0200 Subject: [PATCH 31/34] Prise en compte des remarques --- _posts/2023-03-28-maintenance-preventive-corrective.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2023-03-28-maintenance-preventive-corrective.md b/_posts/2023-03-28-maintenance-preventive-corrective.md index 3a78b46..a418162 100644 --- a/_posts/2023-03-28-maintenance-preventive-corrective.md +++ b/_posts/2023-03-28-maintenance-preventive-corrective.md @@ -155,7 +155,7 @@ L'absence de maintenance régulière, va entraîner des coûts indirects (de mai Dans le calcul de la maintenance, ces couts indirects sont rarement pris en compte, par les décideurs, dans le coût global d'une application. La limite extrême est, qu'au bout d'un moment, la décision soit prise de refaire complétement l'application car elle n'est plus maintenable ou que le coût de maintenance est trop élevé. -Cette décision entraîne souvent beaucoup de frilosité car il faut engager un budget significatif pour cette refonte: _**maintenir c'est aussi investir**_! +Cette décision entraîne souvent beaucoup de frilosité car il faut engager un budget significatif pour cette refonte: maintenir c'est aussi investir! ## Notes From 35da9970b7569ecfc0b41f8865945d96849bdab0 Mon Sep 17 00:00:00 2001 From: seb Date: Tue, 18 Apr 2023 08:18:40 +0200 Subject: [PATCH 32/34] Prise en compte des remarques --- _posts/2023-03-28-maintenance-preventive-corrective.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/_posts/2023-03-28-maintenance-preventive-corrective.md b/_posts/2023-03-28-maintenance-preventive-corrective.md index a418162..41a13f7 100644 --- a/_posts/2023-03-28-maintenance-preventive-corrective.md +++ b/_posts/2023-03-28-maintenance-preventive-corrective.md @@ -8,10 +8,6 @@ tags: mco maintenance préventive corrective budget La maintenance des applications informatiques consiste à assurer la disponibilité du logiciel. La maintenance peut être effectuée à différents stades de l'application : avant ou après l'apparition d'un problème. -Les problèmes évoqués dans cet article sont ceux qui n'ont pas été détectés dans la phase de tests/recette de l'application avant sa mise en production. -Je prends comme hypothèse que l'application a été testée avant sa mise en production. -Même si la recette est bien faite, il est toujours possible qu'un problème intervienne en production. - Cet article est destiné en premier lieu aux managers ou décisionnaires qui ont une connaissance restreinte des enjeux du développement logiciel. @@ -85,8 +81,8 @@ Du temps pour faire la veille et évaluer les risques et du temps pour faire les Le temps passé à prévenir les problèmes permet d'en économiser beaucoup par la suite. En effet, l’apparition d'un problème non anticipé entraine des conséquences importantes qui peuvent avoir un coût non négligeable. Ce coût pouvant être technique (temps de correction) ou en terme d'image (faille de sécurité, fuite de données, bug). -Pour faire une analogie : la maintenance préventive, c'est un peu comme le monde automobile. -En effet, si l'entretien de votre voiture est fait régulièrement, vous éviterez le plus possible les gros problèmes et les conséquences qui en découlent. +La maintenance préventive, c'est un peu comme le monde automobile: si l'entretien de votre voiture est fait régulièrement, vous éviterez le plus possible les gros problèmes et les conséquences qui en découlent. +Il vaut mieux changer régulièrement ses plaquettes de freins **avant** qu'elles ne soient usées. Vous pourrez ainsi faire durer plus longtemps votre voiture. ## Guérir avec la maintenance corrective From 32b15f084c922dd437f5f69e8df79047a2e02c15 Mon Sep 17 00:00:00 2001 From: seb Date: Tue, 18 Apr 2023 08:22:03 +0200 Subject: [PATCH 33/34] Prise en compte des remarques --- _posts/2023-03-28-maintenance-preventive-corrective.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2023-03-28-maintenance-preventive-corrective.md b/_posts/2023-03-28-maintenance-preventive-corrective.md index 41a13f7..5bdb824 100644 --- a/_posts/2023-03-28-maintenance-preventive-corrective.md +++ b/_posts/2023-03-28-maintenance-preventive-corrective.md @@ -82,7 +82,7 @@ Le temps passé à prévenir les problèmes permet d'en économiser beaucoup par En effet, l’apparition d'un problème non anticipé entraine des conséquences importantes qui peuvent avoir un coût non négligeable. Ce coût pouvant être technique (temps de correction) ou en terme d'image (faille de sécurité, fuite de données, bug). La maintenance préventive, c'est un peu comme le monde automobile: si l'entretien de votre voiture est fait régulièrement, vous éviterez le plus possible les gros problèmes et les conséquences qui en découlent. -Il vaut mieux changer régulièrement ses plaquettes de freins **avant** qu'elles ne soient usées. +Il vaut mieux changer, par exemple, régulièrement ses plaquettes de freins **avant** qu'elles ne soient usées. Vous pourrez ainsi faire durer plus longtemps votre voiture. ## Guérir avec la maintenance corrective From b0d077362c7f0e063d0aba3d3189d08c9bda097a Mon Sep 17 00:00:00 2001 From: seb Date: Tue, 18 Apr 2023 08:23:40 +0200 Subject: [PATCH 34/34] Prise en compte des remarques --- .../2023-03-28-maintenance-preventive-corrective.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/_posts/2023-03-28-maintenance-preventive-corrective.md b/_posts/2023-03-28-maintenance-preventive-corrective.md index 5bdb824..2b3c3f5 100644 --- a/_posts/2023-03-28-maintenance-preventive-corrective.md +++ b/_posts/2023-03-28-maintenance-preventive-corrective.md @@ -29,7 +29,7 @@ Cet article est destiné en premier lieu aux managers ou décisionnaires qui ont La maintenance consiste à modifier une partie du code du logiciel pour en corriger les dysfonctionnements ou en améliorer son efficacité. Cette partie du code peut être dans une dépendance (ou bibliothèque) externe. Cela peut également venir du langage d'exécution en lui-même. -Pour regrouper ces 3 notions je parlerai ici de _composant_. +Pour regrouper ces 3 notions, je parlerai ici de _composant_. Il existe plusieurs types de maintenance que nous allons voir dans la suite de cet article. Chaque type de maintenance à son lot d'avantages et d'inconvénients. @@ -45,7 +45,7 @@ Par exemple, l'absence de contrôle des données d'entrée d'un webservice peut Cette absence de contrôle peut entrainer une alteration involontaire ou volontaire. Cela peut venir d'erreurs fonctionnelles telles qu'une inversion sur la date de début et de fin d'un intervalle. -Cela peut également venir d'un manque (ou d'une faille) de sécurité. +Cela peut également venir d'un manque (ou d'une faille) de sécurité. _Le cas le plus courant d'un manque de contrôle est l'élévation de privilège._ [1] ## Prévenir avec la maintenance préventive @@ -81,8 +81,8 @@ Du temps pour faire la veille et évaluer les risques et du temps pour faire les Le temps passé à prévenir les problèmes permet d'en économiser beaucoup par la suite. En effet, l’apparition d'un problème non anticipé entraine des conséquences importantes qui peuvent avoir un coût non négligeable. Ce coût pouvant être technique (temps de correction) ou en terme d'image (faille de sécurité, fuite de données, bug). -La maintenance préventive, c'est un peu comme le monde automobile: si l'entretien de votre voiture est fait régulièrement, vous éviterez le plus possible les gros problèmes et les conséquences qui en découlent. -Il vaut mieux changer, par exemple, régulièrement ses plaquettes de freins **avant** qu'elles ne soient usées. +La maintenance préventive, c'est un peu comme le monde automobile : si l'entretien de votre voiture est fait régulièrement, vous éviterez le plus possible les gros problèmes et les conséquences qui en découlent. +Il vaut mieux changer, par exemple, ses plaquettes de freins **avant** qu'elles ne soient usées. Vous pourrez ainsi faire durer plus longtemps votre voiture. ## Guérir avec la maintenance corrective @@ -99,7 +99,7 @@ Cela peut être une action utilisateur ou un appel de webservice. Dans ce cas la détection est assez rapide, voire immédiate. Mais il peut aussi y avoir des actions plus discrètes qui ne permettent pas de détecter rapidement le dysfonctionnement. -Il peut s'agir d'un batch ou d'une action automatique qui met à jour la base de données mais avec un mauvais comportement. +Il peut s'agir d'un batch ou d'une action automatique qui met à jour la base de données, mais avec un mauvais comportement. Il peut s'agir d'une suppression de données (totale ou partielle) ou d'une modification de données non désirée. Selon la nature du dysfonctionnement, il peut y avoir un certain délai entre le dysfonctionnement et sa détection. @@ -129,7 +129,7 @@ A moyen terme, si on ne met pas à jour le code ou les dépendances régulièrem Avec l'accumulation de la dette technique, il faut prendre en compte le coût du maintien des compétences sur le projet. Ce coût n'est souvent pas pris en compte dans le budget de maintenance des applications. -Ex: Aujourd'hui, maintenir un projet en JSF (pour ceux qui connaissent :) ) coûtera plus cher à maintenir qu'un projet en SpringBoot/Angular. +Ex : Aujourd'hui, maintenir un projet en JSF (pour ceux qui connaissent :) ) coûtera plus cher à maintenir qu'un projet en SpringBoot/Angular. Car il faut déjà trouver des compétences capables d'intervenir sur un projet en JSF, ces compétences sont rares sur le marché. L'évolution des frameworks modernes permet, de plus en plus, de s'abstraire des couches techniques pour se concentrer sur le métier.