{"id":19688,"date":"2023-07-17T07:41:27","date_gmt":"2023-07-17T07:41:27","guid":{"rendered":"https:\/\/devologyx.io\/la-complexite-tue-les-developpeurs-de-logiciels\/"},"modified":"2024-10-31T17:46:28","modified_gmt":"2024-10-31T17:46:28","slug":"la-complexite-tue-les-developpeurs-de-logiciels","status":"publish","type":"post","link":"https:\/\/devologyx.io\/fr\/la-complexite-tue-les-developpeurs-de-logiciels\/","title":{"rendered":"LA COMPLEXIT\u00c9 TUE LES D\u00c9VELOPPEURS DE LOGICIELS"},"content":{"rendered":"\n<p>La complexit\u00e9 croissante des structures logicielles modernes met r\u00e9guli\u00e8rement les d\u00e9veloppeurs de logiciels au pied du mur. La complexit\u00e9 des logiciels rend le travail des d\u00e9veloppeurs \u00e9puisant car la planification, la construction et le test des produits deviennent difficiles. L&rsquo;introduction de nouveaux d\u00e9fis en mati\u00e8re de s\u00e9curit\u00e9 cr\u00e9e une frustration chez les administrateurs et les utilisateurs. Dans la plupart des cas, il est impossible de distinguer ce qui est compliqu\u00e9 de ce qui est complexe, mais ce n&rsquo;est pas le cas ici. La complexit\u00e9 sugg\u00e8re que quelque chose est difficile \u00e0 comprendre, mais qu&rsquo;avec le temps et des efforts, on peut finir par le conna\u00eetre. D&rsquo;autre part, le complexe repr\u00e9sente l&rsquo;interconnexion entre plusieurs entit\u00e9s. Lorsque le nombre d&rsquo;entit\u00e9s augmente, les interconnexions augmentent aussi consid\u00e9rablement et atteignent un point o\u00f9 il est impossible de les conna\u00eetre et de les comprendre.      <\/p>\n\n<p>De m\u00eame, une complexit\u00e9 excessive des logiciels augmente le risque d&rsquo;obstruction accidentelle des interconnexions. Un \u00e9l\u00e9ment qui augmente le risque d&rsquo;introduire des d\u00e9fauts lors de la mise en \u0153uvre de changements peut rendre l&rsquo;am\u00e9lioration du logiciel pratiquement impossible. <\/p>\n\n<figure class=\"wp-block-image is-resized\"><img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/IHCqG2RXQ5p5x7rYvd-tIvV7HIdZ9low6o8qgQhslOSnODJJcxibGqctFAk9yJ3k3lp573MEKFrLHEbvEb0bc2MddRdMjMAIj2blvZ06olkBV3T0bY5cGOccUm3EFYKYRkHlW6j0nXsx6Vtv4FlGlg\" alt=\"\" width=\"342\" height=\"227\"\/><\/figure>\n\n<p><strong>Complexit\u00e9 des logiciels<\/strong><\/p>\n\n<p>La complexit\u00e9 d&rsquo;un logiciel est la difficult\u00e9 de maintenir, d&rsquo;analyser, de tester, de modifier et de concevoir un logiciel. Plus la complexit\u00e9 est \u00e9lev\u00e9e, plus il est difficile de lire et de maintenir le logiciel, et plus les risques d&rsquo;erreurs et de d\u00e9fauts sont \u00e9lev\u00e9s. La complexit\u00e9 d&rsquo;un logiciel est une technique qui exprime un ensemble sp\u00e9cifique de caract\u00e9ristiques du code. Ces caract\u00e9ristiques se concentrent toutes sur la mani\u00e8re dont votre code se connecte \u00e0 d&rsquo;autres morceaux de code.   <\/p>\n\n<p>La complexit\u00e9 des logiciels est consid\u00e9r\u00e9e comme un facteur d\u00e9terminant des co\u00fbts de maintenance des logiciels. Une complexit\u00e9 logicielle accrue implique que les projets de maintenance et d&rsquo;am\u00e9lioration prendront plus de temps, co\u00fbteront beaucoup plus cher et entra\u00eeneront plus de d\u00e9fauts. La complexit\u00e9 logicielle d&rsquo;un syst\u00e8me particulier est l&rsquo;un des principaux avantages \u00e0 long terme des outils et approches utilis\u00e9s lors de son d\u00e9veloppement initial. Par exemple, l&rsquo;utilisation de nouveaux \u00e9quipements CASE entra\u00eene le d\u00e9veloppement de logiciels mal structur\u00e9s. Les cons\u00e9quences de cette mauvaise structure se feront sentir lorsqu&rsquo;il sera temps d&rsquo;ajuster le syst\u00e8me.    <\/p>\n\n<p><strong>Types de complexit\u00e9 des logiciels<\/strong><\/p>\n\n<p>La complexit\u00e9 des logiciels devient de plus en plus probl\u00e9matique \u00e0 mesure que l&rsquo;industrie de l&rsquo;ing\u00e9nierie \u00e9volue. En tant que d\u00e9veloppeur, vous passez souvent beaucoup de temps \u00e0 \u00e9crire, mais vous passez encore plus de temps \u00e0 maintenir ce code. Combien de fois vous arrive-t-il de constater que le code s&rsquo;est enchev\u00eatr\u00e9 et que vous n&rsquo;arrivez presque plus \u00e0 le comprendre ? Pour bien comprendre comment g\u00e9rer la complexit\u00e9 sans cesse croissante, il est essentiel de diff\u00e9rencier les trois types fondamentaux de complexit\u00e9 logicielle.   <\/p>\n\n<p><strong>Complexit\u00e9 essentielle<\/strong><\/p>\n\n<p>La complexit\u00e9 essentielle se trouve g\u00e9n\u00e9ralement dans le domaine d&rsquo;activit\u00e9 dans lequel vous travaillez. Elle est li\u00e9e au probl\u00e8me et ne peut \u00eatre supprim\u00e9e. Vous vous associez \u00e0 des r\u00e8gles d&rsquo;entreprise qui r\u00e9gissent les proc\u00e9dures d&rsquo;entreprise de mani\u00e8re plus sp\u00e9cifique. Lorsque vous vous efforcez d&rsquo;appliquer et d&rsquo;automatiser le traitement de ces r\u00e8gles, vous rencontrez diff\u00e9rents niveaux de complexit\u00e9. Le fait que les entreprises soient g\u00e9n\u00e9ralement des environnements extr\u00eamement imp\u00e9n\u00e9trables rend le probl\u00e8me que vous tentez de r\u00e9soudre intrins\u00e8quement complexe. La complexit\u00e9 essentielle est g\u00e9n\u00e9r\u00e9e par les attributs du probl\u00e8me \u00e0 r\u00e9soudre et ne peut \u00eatre r\u00e9duite.     <\/p>\n\n<p>Quels que soient vos efforts, cette complexit\u00e9 ne peut \u00eatre r\u00e9duite car la politique commerciale r\u00e9gissant le traitement d&rsquo;une demande d&rsquo;indemnisation pr\u00e9voit 15 \u00e9tapes distinctes. Par cons\u00e9quent, vous ne pouvez pas clarifier les r\u00e8gles en sautant certaines \u00e9tapes et en r\u00e9duisant le traitement \u00e0 quelques \u00e9tapes de base. En r\u00e9sum\u00e9, la complexit\u00e9 essentielle est in\u00e9vitable et c&rsquo;est principalement la v\u00e9ritable raison pour laquelle vous \u00eates employ\u00e9 en tant qu&rsquo;ing\u00e9nieur logiciel.  <\/p>\n\n<p><strong>Complexit\u00e9 accidentelle<\/strong><\/p>\n\n<p>Cette complexit\u00e9 est li\u00e9e \u00e0 la r\u00e9solution d&rsquo;un probl\u00e8me directement li\u00e9e \u00e0 la mani\u00e8re dont vous choisissez de le r\u00e9soudre et est moins associ\u00e9e \u00e0 la nature de la complication. Lorsque vous adoptez une strat\u00e9gie pour r\u00e9soudre un probl\u00e8me qui n\u00e9cessite plus de complexit\u00e9 et de travail, il s&rsquo;agit d&rsquo;une complexit\u00e9 accidentelle. Il peut s&rsquo;agir du choix de vos outils de d\u00e9veloppement logiciel et de ce que vous mettez sur la table lorsque vous d\u00e9chiffrez le probl\u00e8me. Cette complexit\u00e9 n&rsquo;est pas inh\u00e9rente \u00e0 la situation que vous devez r\u00e9soudre, mais s&rsquo;y est gliss\u00e9e par accident. La complexit\u00e9 accidentelle se manifeste par une mauvaise conception ou structure, un code m\u00e9diocre et des proc\u00e9dures de d\u00e9veloppement logiciel inf\u00e9rieures aux normes. La seule fa\u00e7on de supprimer la complexit\u00e9 accidentelle est d&rsquo;en \u00e9liminer la source.     <\/p>\n\n<p>Vous ne pouvez pas mettre en place une complexit\u00e9 accidentelle intentionnellement. Le nom m\u00eame de la complexit\u00e9 accidentelle en dit long. Elle appara\u00eet parfois lorsque vous :  <\/p>\n\n<ul class=\"wp-block-list\">\n<li>Vous souhaitez utiliser un nouveau langage ou un nouvel outil pour venir \u00e0 bout d&rsquo;un projet qui n&rsquo;est pas appropri\u00e9 ?<\/li>\n\n\n\n<li>\u00cates-vous oblig\u00e9 d&rsquo;utiliser une technologie sp\u00e9cifique ?<\/li>\n\n\n\n<li>Manque de connaissance des pratiques les plus acceptables pour d\u00e9chiffrer ce probl\u00e8me particulier.<\/li>\n<\/ul>\n\n<p><strong>Causes de la complexit\u00e9 des logiciels<\/strong><\/p>\n\n<p>Le probl\u00e8me fondamental des logiciels est leur complexit\u00e9. Un logiciel est un syst\u00e8me \u00e0 grande \u00e9chelle compos\u00e9 de centaines de microservices qui s&rsquo;appellent et d\u00e9pendent les uns des autres. De nombreux aspects du logiciel peuvent ne pas \u00eatre tr\u00e8s clairement d\u00e9finis. Nous abordons ici certaines des causes cruciales qui conduisent \u00e0 la complexit\u00e9 dans le d\u00e9veloppement de logiciels, comme indiqu\u00e9 ci-dessous.   <\/p>\n\n<ul class=\"wp-block-list\">\n<li>Choisir les mauvais outils. Il arrive que vous soyez press\u00e9 de commencer ou que vous aimiez utiliser un outil particulier lorsque vous travaillez sur du code. Disons que vous travaillez sur un site web de quatre pages qui n\u00e9cessite Ruby on Rails ou une API web RESTful, mais que vous insistez pour construire le site en utilisant Objective C. Je ne veux pas dire que Objective C est efficace ou suffisamment bon, mais il a juste \u00e9t\u00e9 mis en \u0153uvre pour le mauvais probl\u00e8me. Cela peut entra\u00eener une certaine complexit\u00e9 dans votre code.   <\/li>\n\n\n\n<li>Construire des syst\u00e8mes sur des syst\u00e8mes &#8211; les syst\u00e8mes sont formul\u00e9s de mani\u00e8re hi\u00e9rarchique. Par exemple, les syst\u00e8mes bancaires sont cr\u00e9\u00e9s \u00e0 partir d&rsquo;un logiciel Internet construit sur un logiciel de t\u00e9l\u00e9communications. Les logiciels de t\u00e9l\u00e9communication d\u00e9centralisent le pouvoir d&rsquo;achat et le pouvoir de d\u00e9cision en interne et en externe en raison de la reconfiguration agile cruciale du nuage. Cela entra\u00eene \u00e9galement une complexit\u00e9 des logiciels.   <\/li>\n\n\n\n<li>Application des mauvaises abstractions. De temps en temps, vous d\u00e9couvrirez un logiciel qui traite d&rsquo;un vocabulaire particulier, par exemple les notices de biblioth\u00e8que, mais qui a \u00e9t\u00e9 \u00e9crit dans un autre langage, par exemple un type de donn\u00e9es de type CMSes posts. L&rsquo;abstraction est bonne, mais ce n&rsquo;est pas la bonne. Tout a \u00e9t\u00e9 rendu beaucoup plus difficile par la n\u00e9cessit\u00e9 de manipuler l&rsquo;incoh\u00e9rence entre les deux concepts.   <\/li>\n<\/ul>\n\n<p><strong>DES OUTILS POUR R\u00c9DUIRE LA COMPLEXIT\u00c9 DU CODAGE  <\/strong><\/p>\n\n<p>La fonctionnalit\u00e9 incorpor\u00e9e dans un syst\u00e8me et l&rsquo;int\u00e9gration entre ses sous-syst\u00e8mes influencent ouvertement la complexit\u00e9 du syst\u00e8me. Une stabilit\u00e9 id\u00e9ale entre les fonctionnalit\u00e9s et la coordination au sein d&rsquo;un syst\u00e8me est n\u00e9cessaire pour r\u00e9duire la complexit\u00e9. Dans le monde r\u00e9el, il n&rsquo;est pas toujours possible de garder le logiciel simple. En r\u00e8gle g\u00e9n\u00e9rale, les attributs d&rsquo;application qui offrent une valeur commerciale ont tendance \u00e0 \u00eatre complexes. Cependant, de nombreuses m\u00e9thodes se concentrent sur la r\u00e9duction de la complexit\u00e9 pour les ing\u00e9nieurs ; d&rsquo;autres approches peuvent \u00eatre utilis\u00e9es pour minimiser le niveau de complexit\u00e9 de votre application au-del\u00e0 de l&rsquo;utilisation d&rsquo;architectures de microservices.    <\/p>\n\n<p><strong>D\u00e9veloppement assist\u00e9 par logiciel<\/strong><\/p>\n\n<p>Il s&rsquo;agit de la capacit\u00e9 \u00e0 utiliser des outils, g\u00e9n\u00e9ralement assist\u00e9s par des techniques d&rsquo;intelligence artificielle et d&rsquo;apprentissage automatique, pour vous aider \u00e0 \u00e9crire du code, \u00e0 diagnostiquer les probl\u00e8mes dans le code et \u00e0 contr\u00f4ler la complexit\u00e9 globale du code. Cette approche vous permet d&rsquo;ex\u00e9cuter des tests pr\u00e9cis et rapides qui minimisent le taux de complexit\u00e9, car les bogues sont facilement rep\u00e9r\u00e9s et r\u00e9duisent le processus de d\u00e9veloppement. Des entreprises comme GitHub utilisent l&rsquo;IA pour aider les d\u00e9veloppeurs \u00e0 \u00e9crire un code plus fiable avec moins de d\u00e9fauts.  <\/p>\n\n<p><strong>Mise en place d&rsquo;une plateforme interne<\/strong><\/p>\n\n<p>La complexit\u00e9 croissante a incit\u00e9 de nombreuses entreprises \u00e0 adopter un mod\u00e8le de plateforme interne. L&rsquo;\u00e9quipe de la plateforme interne est charg\u00e9e d&rsquo;\u00e9valuer les outils les plus importants pour les ing\u00e9nieurs, de structurer les mod\u00e8les et de faciliter leur processus de production. L&rsquo;\u00e9quipe se concentre \u00e9galement sur des fonctions telles que la s\u00e9curit\u00e9, les op\u00e9rations financi\u00e8res et la gouvernance afin de r\u00e9duire la charge cognitive des d\u00e9veloppeurs individuels.  <\/p>\n\n<p>La solution pour disposer d&rsquo;une plateforme interne acceptable pour les d\u00e9veloppeurs consiste \u00e0 respecter l&rsquo;\u00e9quilibre entre le libre-service pour les d\u00e9veloppeurs qui veulent s&rsquo;atteler \u00e0 la t\u00e2che et l&rsquo;abstraction des t\u00e2ches pratiques mineures sans restreindre les d\u00e9veloppeurs.<\/p>\n\n<p><strong>MESURES DE LA COMPLEXIT\u00c9 DES LOGICIELS<\/strong><\/p>\n\n<p>Plus la complexit\u00e9 est \u00e9lev\u00e9e, plus il est difficile de maintenir et de lire le code, et plus vous rencontrerez d&rsquo;erreurs et de d\u00e9fauts. Mesurer la complexit\u00e9 d&rsquo;un logiciel peut vous aider \u00e0 comprendre le probl\u00e8me et \u00e0 vous y attaquer lorsqu&rsquo;il est encore mineur. Les mesures suivantes peuvent \u00eatre utilis\u00e9es pour \u00e9valuer la complexit\u00e9.  <\/p>\n\n<p><strong>Complexit\u00e9 cyclomatique<\/strong><\/p>\n\n<figure class=\"wp-block-image is-resized\"><img decoding=\"async\" src=\"https:\/\/lh3.googleusercontent.com\/I8kgcVcU-sEVB3OQUm6og7V10wHdzum9jhy8nCbzgyLgR4aQVrlsbYBTpZe9XW8PMfxcfUwJIM_3EYfFjxdGliyGAsKtvifFDs4fFTYSywNoZ2I2KsPHSbDZ_1Job3Jd_ZJniXdxpv1j-y7MBkgCDw\" alt=\"\" width=\"340\" height=\"190\"\/><\/figure>\n\n<p>Cette mesure est bas\u00e9e sur la th\u00e9orie des graphes et d&rsquo;autres d\u00e9finitions math\u00e9matiques. La complexit\u00e9 cyclomatique mesure la complexit\u00e9 structurelle du code. Elle \u00e9value le nombre de chemins lin\u00e9airement ind\u00e9pendants dans un programme. Une approche lin\u00e9airement ind\u00e9pendante est une fa\u00e7on \u00e9l\u00e9gante de dire qu&rsquo;il s&rsquo;agit d&rsquo;un chemin unique o\u00f9 vous ne comptez les boucles qu&rsquo;une seule fois. Les op\u00e9rations telles que IF, DO et SELECT constituent une logique conditionnelle, ce qui rend le programme plus difficile \u00e0 comprendre. Plus il y a de proc\u00e9dures de ce type dans le code, plus il y a de branches logiques et plus la complexit\u00e9 cyclomatique est \u00e9lev\u00e9e.     <\/p>\n\n<p>Cette mesure peut \u00eatre d\u00e9termin\u00e9e \u00e0 l&rsquo;aide de la formule suivante<\/p>\n\n<p>V(G) = e &#8211; n + 2p<\/p>\n\n<p>O\u00f9 : e = est le nombre d&rsquo;ar\u00eates dans le graphe<\/p>\n\n<p>n = nombre de notes dans le graphique<\/p>\n\n<p>p = nombre de composants connect\u00e9s<\/p>\n\n<p><strong>Indice de maintenabilit\u00e9<\/strong><\/p>\n\n<figure class=\"wp-block-image is-resized\"><img decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/yIOEhMXqs0P8Z5I4iyOZszH1grqo4JHLYDokMJtVx8HolSrpwUTYbS-ZSYWl6of4uTarACzzVBT1adDH2ZhxIQLZ8rJ72_YP9pvPUpil76k80CSu3lRsgsIYFiX9hwAoHcspfs6Olug5DhrOlZeiJw\" alt=\"\" width=\"414\" height=\"193\"\/><\/figure>\n\n<p>Il calcule la valeur de l&rsquo;indice entre 0 et 100, ce qui constitue la facilit\u00e9 relative de maintenance du code. En d&rsquo;autres termes, cette m\u00e9trique mesure le degr\u00e9 de maintenabilit\u00e9 de votre code. Plus la valeur est \u00e9lev\u00e9e, meilleure est la maintenabilit\u00e9 de votre code. L&rsquo;indice de maintenabilit\u00e9 est calcul\u00e9 \u00e0 partir d&rsquo;une formule factoris\u00e9e de SLOC (Source Lines Of Code), de la complexit\u00e9 cyclomatique et du volume de Halstead.   <\/p>\n\n<p><strong>Halstead Metrics<\/strong><\/p>\n\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/mleZos0KzEK25mwNvIKfjKH97E7xGjiyLmP4qZDUrk-SEjhhjZvJEwJyStwN9R5nfVBR_nGKYqCOTlU0Nk8lMRF1YF6Mr_HEkghil7dXihIssBp7G_7tGTcFqTev2hG7Kcoc7FyT7_GlHh4dwgH4vw\" alt=\"\" width=\"386\" height=\"263\"\/><\/figure>\n\n<p>Cette mesure \u00e9value la quantit\u00e9 d&rsquo;informations factuelles contenues dans le code source, y compris le nombre de variables et la mani\u00e8re dont elles sont utilis\u00e9es dans le code source, les fonctions et les m\u00e9thodes. L&rsquo;hypoth\u00e8se est que plus il y a d&rsquo;\u00e9l\u00e9ments ind\u00e9pendants dans le code et plus ils sont utilis\u00e9s, plus le programme est complexe. Cette mesure d\u00e9pend de l&rsquo;ex\u00e9cution du code et de ses mesures, qui sont calcul\u00e9es de mani\u00e8re statique \u00e0 partir des op\u00e9rateurs et des op\u00e9randes du code source.  <\/p>\n\n<p>La m\u00e9trique de Halstead peut \u00eatre calcul\u00e9e \u00e0 l&rsquo;aide de la formule suivante<\/p>\n\n<p>Difficile = L \/ V<\/p>\n\n<p>O\u00f9 : L = Niveau du programme<\/p>\n\n<p>V = Volume du programme<\/p>\n\n<p>La formule pour d\u00e9terminer le niveau L du programme est la suivante :<\/p>\n\n<p>L = (2 + n2*) *log2 (2 + n2*)<\/p>\n\n<p>O\u00f9 : n1 = nombre d&rsquo;op\u00e9rateurs<\/p>\n\n<p>N2 = nombre d&rsquo;op\u00e9randes<\/p>\n\n<p>Le programme permettant de d\u00e9terminer le volume du programme V est le suivant :<\/p>\n\n<p>V = (N1 + N2)* log2 (n1 + n2)<\/p>\n\n<p>O\u00f9 : N1 = nombre total d&rsquo;occurrences de l&rsquo;op\u00e9rateur : N1 = nombre total d&rsquo;occurrences de l&rsquo;op\u00e9rateur<\/p>\n\n<p>N2 = nombre total d&rsquo;occurrences de l&rsquo;op\u00e9rande<\/p>\n\n<p><strong>M\u00e9triques de conception orient\u00e9e objet<\/strong><\/p>\n\n<p>Les mesures quantitatives pour la conception orient\u00e9e objet se concentrent g\u00e9n\u00e9ralement sur les classes et les caract\u00e9ristiques de conception. Elles permettent aux d\u00e9veloppeurs d&rsquo;\u00e9valuer le logiciel d\u00e8s le d\u00e9but du d\u00e9veloppement et de comprendre comment minimiser la complexit\u00e9 et am\u00e9liorer la maintenabilit\u00e9. <\/p>\n\n<p><strong>LES EFFETS DE LA COMPLEXIT\u00c9 DES LOGICIELS<\/strong><\/p>\n\n<p><strong>Impact de la complexit\u00e9 sur les taux d&rsquo;erreur.<\/strong><\/p>\n\n<p>La raison pour laquelle nous, d\u00e9veloppeurs, sommes pr\u00e9occup\u00e9s par la complexit\u00e9 est li\u00e9e \u00e0 des caract\u00e9ristiques plus importantes du processus de d\u00e9veloppement de logiciels. Plus le code est difficile \u00e0 comprendre, plus les erreurs de programmation risquent de ne pas \u00eatre d\u00e9couvertes. Lorsqu&rsquo;un programme est difficile \u00e0 tester, les erreurs ne seront pas d\u00e9tect\u00e9es avant que le logiciel ne fonctionne.  <\/p>\n\n<p>Vous vous attendez \u00e0 des taux d&rsquo;erreur \u00e9lev\u00e9s dans les programmes qui pr\u00e9sentent une forte densit\u00e9 de d\u00e9cisions (avec un nombre \u00e9gal de chemins de d\u00e9cision pour tester les erreurs). Ces syst\u00e8mes sont susceptibles de g\u00e9n\u00e9rer de nouvelles erreurs. <\/p>\n\n<p><strong>Impact de la complexit\u00e9 sur les co\u00fbts de maintenance<\/strong><\/p>\n\n<p>La complexit\u00e9 des logiciels a un impact direct sur les co\u00fbts de maintenance. Plus la maintenance d&rsquo;un syst\u00e8me d&rsquo;application complexe est exigeante, plus les d\u00e9penses li\u00e9es \u00e0 la maintenance, qui absorbe la majeure partie du processus de d\u00e9veloppement, seront \u00e9lev\u00e9es. La maintenance des logiciels est per\u00e7ue comme une proc\u00e9dure de production dont les intrants sont les ressources informatiques et la main-d&rsquo;\u0153uvre, et dont le r\u00e9sultat est un code am\u00e9lior\u00e9. Les heures de travail sont beaucoup plus importantes que les ressources informatiques, et les deux ont des possibilit\u00e9s de remplacement insignifiantes. L&rsquo;attention est port\u00e9e sur les heures de travail en tant que d\u00e9pense consid\u00e9rable.    <\/p>\n\n<p><strong>UN REM\u00c8DE \u00c0 LA COMPLEXIT\u00c9 DANS LE D\u00c9VELOPPEMENT DE LOGICIELS<\/strong><\/p>\n\n<p>M\u00eame si les architectures de microservices cr\u00e9ent des applications plus \u00e9tendues et plus complexes, elles d\u00e9m\u00ealent le travail des d\u00e9veloppeurs de base. Les architectures de microservices g\u00e9n\u00e8rent une application plus complexe qu&rsquo;une application correspondante construite comme un monolithe. Cela ne signifie pas pour autant que le travail du d\u00e9veloppeur est plus compliqu\u00e9.  <\/p>\n\n<p><strong>Complexit\u00e9 de l&rsquo;architecture des microservices.<\/strong><\/p>\n\n<p>L&rsquo;architecture microservices est une technique DevOps plus dynamique et plus agile pour l&rsquo;ex\u00e9cution, le d\u00e9veloppement et la gestion d&rsquo;applications en travaillant avec des composants modulaires plut\u00f4t qu&rsquo;avec une construction monolithique.<\/p>\n\n<p>Pour beaucoup, les microservices sont cens\u00e9s r\u00e9soudre tous vos probl\u00e8mes de complexit\u00e9 logicielle. Cependant, ils ne peuvent \u00e0 eux seuls r\u00e9habiliter que 50 % de ces probl\u00e8mes. Pour r\u00e9soudre l&rsquo;autre moiti\u00e9, vous devez fusionner les microservices avec les derni\u00e8res pratiques DevSecOps et transformer votre entreprise en une v\u00e9ritable machine \u00e0 tuer.  <\/p>\n\n<p>Les microservices permettent aux entreprises d&rsquo;ex\u00e9cuter un million de d\u00e9ploiements par jour, de faire \u00e9voluer le syst\u00e8me \u00e0 l&rsquo;infini, de minimiser la complexit\u00e9 de la base de code et d&rsquo;\u00e9conomiser des ressources. Les microservices d\u00e9placent la complexit\u00e9 des services vers la plateforme, en ignorant les faits, on obtient des r\u00e9sultats sous-optimaux. De nombreuses entreprises ont con\u00e7u des applications monolithiques et se sont aper\u00e7ues qu&rsquo;elles devenaient trop complexes. En tant que d\u00e9veloppeur travaillant dans une base de code unique, il est fastidieux d&rsquo;ajouter des fonctionnalit\u00e9s et de corriger des d\u00e9fauts de mani\u00e8re ind\u00e9pendante. En g\u00e9n\u00e9ral, cela limite le nombre de projets sur lesquels vous pouvez travailler dans une seule application.    <\/p>\n\n<p>Les microservices rendent une application moins complexe en en supprimant certains \u00e9l\u00e9ments. Lorsque vous divisez l&rsquo;application en diff\u00e9rents modules, vous essayez de diviser cette complexit\u00e9 afin de minimiser le nombre de d\u00e9veloppeurs travaillant dans une base de code unique. La division peut se faire de mani\u00e8re \u00e0 d\u00e9velopper une complexit\u00e9 organis\u00e9e et facile \u00e0 comprendre.  <\/p>\n\n<p><strong>Le mod\u00e8le de complexit\u00e9 des logiciels<\/strong><\/p>\n\n<p>Les causes de la complexit\u00e9 ont \u00e9t\u00e9 examin\u00e9es dans la gen\u00e8se de ce chapitre. La complication donne au projet une complexit\u00e9 inh\u00e9rente, puis une plus grande complexit\u00e9 appara\u00eet au cours de la conception et de la phase du processus de d\u00e9veloppement du logiciel. Sur la base de ce mod\u00e8le, la complexit\u00e9 s&rsquo;associe \u00e0 d&rsquo;autres facteurs pour d\u00e9terminer la propension aux erreurs et la taille du programme. La discussion sur la nature, les sources et les effets de la complexit\u00e9 des logiciels ainsi qu&rsquo;un cadre th\u00e9orique pour une pr\u00e9sentation graphique du concept de complexit\u00e9 des logiciels ont \u00e9galement \u00e9t\u00e9 fournis.   <\/p>\n\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/LsIP2ArglCSM8UdpDBpX2S4CNlz6RYmKmzKSWpzyB21kRzUH4OEh7cO2GqaE3A_pgeObCNG5f-jXYFsIQOiEfOjQyLx7F5pTtWlUnShO66GLjxr75uZ17XmiAvZvdxXJouSPP0qJtier4DgapeARJQ\" alt=\"\" width=\"372\" height=\"405\"\/><\/figure>\n\n<p><strong>CONCLUSION<\/strong><\/p>\n\n<p>De nombreuses entreprises doivent faire face \u00e0 la complexit\u00e9 des logiciels, et les approches que vous utilisez pour y faire face auront une incidence sur l&rsquo;avenir de votre entreprise. Il existe plusieurs fa\u00e7ons de g\u00e9rer la complexit\u00e9 des logiciels. Des approches telles que l&rsquo;\u00e9tablissement d&rsquo;une plateforme interne et la standardisation des services externes dans l&rsquo;ensemble de l&rsquo;entreprise peuvent constituer de bonnes strat\u00e9gies.  <\/p>\n\n<p>En outre, bien que les architectures de microservices augmentent la complexit\u00e9 du logiciel, elles permettent de minimiser la charge cognitive et la complexit\u00e9 visuelle pour les d\u00e9veloppeurs individuels.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La complexit\u00e9 croissante des structures logicielles modernes met r\u00e9guli\u00e8rement les d\u00e9veloppeurs de logiciels au pied du mur. La complexit\u00e9 des logiciels rend le travail des d\u00e9veloppeurs \u00e9puisant car la planification, la construction et le test des produits deviennent difficiles. L&rsquo;introduction de nouveaux d\u00e9fis en mati\u00e8re de s\u00e9curit\u00e9 cr\u00e9e une frustration chez les administrateurs et les [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":16657,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_themeisle_gutenberg_block_has_review":false,"_jet_sm_ready_style":"","_jet_sm_style":"","_jet_sm_controls_values":"","_jet_sm_fonts_collection":"","_jet_sm_fonts_links":"","footnotes":""},"categories":[85],"tags":[],"writer":[],"class_list":["post-19688","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-non-classifiee"],"_links":{"self":[{"href":"https:\/\/devologyx.io\/fr\/wp-json\/wp\/v2\/posts\/19688","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devologyx.io\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devologyx.io\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devologyx.io\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/devologyx.io\/fr\/wp-json\/wp\/v2\/comments?post=19688"}],"version-history":[{"count":1,"href":"https:\/\/devologyx.io\/fr\/wp-json\/wp\/v2\/posts\/19688\/revisions"}],"predecessor-version":[{"id":19690,"href":"https:\/\/devologyx.io\/fr\/wp-json\/wp\/v2\/posts\/19688\/revisions\/19690"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devologyx.io\/fr\/wp-json\/wp\/v2\/media\/16657"}],"wp:attachment":[{"href":"https:\/\/devologyx.io\/fr\/wp-json\/wp\/v2\/media?parent=19688"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devologyx.io\/fr\/wp-json\/wp\/v2\/categories?post=19688"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devologyx.io\/fr\/wp-json\/wp\/v2\/tags?post=19688"},{"taxonomy":"writer","embeddable":true,"href":"https:\/\/devologyx.io\/fr\/wp-json\/wp\/v2\/writer?post=19688"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}