{"id":19676,"date":"2023-07-17T07:41:27","date_gmt":"2023-07-17T07:41:27","guid":{"rendered":"https:\/\/devologyx.io\/la-complejidad-esta-matando-a-los-desarrolladores-de-software\/"},"modified":"2024-10-31T17:43:42","modified_gmt":"2024-10-31T17:43:42","slug":"la-complejidad-esta-matando-a-los-desarrolladores-de-software","status":"publish","type":"post","link":"https:\/\/devologyx.io\/es\/la-complejidad-esta-matando-a-los-desarrolladores-de-software\/","title":{"rendered":"LA COMPLEJIDAD EST\u00c1 MATANDO A LOS DESARROLLADORES DE SOFTWARE"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">La creciente complejidad de las estructuras de software modernas pone constantemente en el lecho de muerte a los desarrolladores de software. La complejidad del software hace que el trabajo de los desarrolladores sea agotador ya que; planificar, construir y probar productos se vuelve dif\u00edcil. La instigaci\u00f3n de nuevos retos de seguridad crea frustraci\u00f3n en administradores y usuarios. En la mayor\u00eda de los casos, complicado y complejo tienden a ser indistinguibles, pero no en este caso. La complejidad sugiere que algo es dif\u00edcil de comprender, pero a medida que pasa el tiempo, con esfuerzo, puede llegar a conocerse. En cambio, lo complejo representa la interconexi\u00f3n entre varias entidades. Cuando el n\u00famero de entidades aumenta, las interconexiones tambi\u00e9n aumentan enormemente y llegan a un punto en el que es impracticable conocerlas y comprenderlas.      <\/p>\n\n<p class=\"wp-block-paragraph\">En consecuencia, unos niveles excesivos de complejidad en el software aumentan el riesgo de obstruir accidentalmente las interconexiones. Algo que aumenta la posibilidad de introducir defectos al aplicar cambios puede hacer que mejorar el software sea pr\u00e1cticamente imposible. <\/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 class=\"wp-block-paragraph\"><strong>Complejidad del software<\/strong><\/p>\n\n<p class=\"wp-block-paragraph\">La complejidad del software es la dificultad de mantener, analizar, probar, modificar y dise\u00f1ar software. Cuanto mayor es la complejidad, m\u00e1s exigente es leer y mantener el software, y m\u00e1s posibilidades hay de que se produzcan fallos y defectos. La complejidad del software es una t\u00e9cnica que expresa un conjunto espec\u00edfico de caracter\u00edsticas del c\u00f3digo. Todas estas caracter\u00edsticas se centran en c\u00f3mo se conecta su c\u00f3digo con otras piezas de c\u00f3digo.   <\/p>\n\n<p class=\"wp-block-paragraph\">La complejidad del software se considera un factor determinante en los costes de mantenimiento del software. Una mayor complejidad del software implica que los proyectos de mantenimiento y mejora llevar\u00e1n m\u00e1s tiempo, costar\u00e1n mucho m\u00e1s y dar\u00e1n lugar a m\u00e1s fallos. La complejidad del software de un sistema concreto es uno de los beneficios dominantes a largo plazo de cualesquiera herramientas y enfoques que se hayan aplicado en su desarrollo inicial. Por ejemplo, la utilizaci\u00f3n de nuevos equipos CASE da lugar al desarrollo de un software mal estructurado. Las consecuencias de esa mala estructura se experimentar\u00e1n cuando llegue el momento de ajustar el sistema.    <\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Tipos de complejidad del software<\/strong><\/p>\n\n<p class=\"wp-block-paragraph\">La complejidad del software es cada vez m\u00e1s problem\u00e1tica a medida que evoluciona la industria de la ingenier\u00eda. Como desarrollador, con frecuencia dedica mucho tiempo a escribir, pero m\u00e1s tiempo dedica a mantener ese c\u00f3digo. \u00bfCon qu\u00e9 frecuencia se encuentra con que el c\u00f3digo se ha vuelto enmara\u00f1ado y casi no puede entenderlo? Para comprender cabalmente c\u00f3mo manejar la complejidad cada vez mayor, es esencial diferenciar los tres tipos fundamentales de complejidad del software.   <\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Complejidad esencial<\/strong><\/p>\n\n<p class=\"wp-block-paragraph\">La complejidad esencial suele encontrarse en el \u00e1mbito empresarial en el que trabaja. Est\u00e1 relacionada con el problema y no puede eliminarse. Est\u00e1 asociada a las reglas de pol\u00edtica empresarial que dirigen los procedimientos empresariales en t\u00e9rminos m\u00e1s espec\u00edficos. Cuando se esfuerza por aplicar y automatizar el procesamiento de esas reglas pol\u00edticas, se encuentra con varios niveles de complejidad. El hecho de que las empresas suelan ser entornos excesivamente impenetrables hace que el problema que intenta solucionar sea inherentemente complejo. La complejidad esencial viene generada por los atributos del problema a resolver y no puede reducirse.     <\/p>\n\n<p class=\"wp-block-paragraph\">Por mucho que lo intente, esta complejidad no se puede paralizar porque la pol\u00edtica empresarial que regula la tramitaci\u00f3n de un siniestro exige 15 pasos distintos. Por lo tanto, no puede aclarar las normas salt\u00e1ndose algunos pasos y aplastando la tramitaci\u00f3n a unos pocos pasos b\u00e1sicos. En resumidas cuentas, la complejidad esencial es inevitable y, ante todo, la verdadera raz\u00f3n por la que usted trabaja como ingeniero de software.  <\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Complejidad accidental<\/strong><\/p>\n\n<p class=\"wp-block-paragraph\">Esta complejidad se refiere a la resoluci\u00f3n de un problema directamente relacionado con la forma en que usted decide resolverlo y est\u00e1 menos asociada a la naturaleza de la complicaci\u00f3n. Cuando adopta una estrategia para solucionar un problema que requiere m\u00e1s complejidad y trabajo, complejidad accidental. Podr\u00eda ser la elecci\u00f3n de sus herramientas de desarrollo de software y lo que pone sobre la mesa al descifrar el problema. Esta complejidad no es inherente a la situaci\u00f3n que debe resolver, sino que se ha colado por accidente. La complejidad accidental se manifiesta en un mal dise\u00f1o o estructura, c\u00f3digo y procedimientos de desarrollo de software deficientes. La \u00fanica forma de eliminar la complejidad accidental es eliminando su fuente.     <\/p>\n\n<p class=\"wp-block-paragraph\">No se puede poner en marcha la complejidad accidental intencionadamente. Incluso el nombre lo dice todo \u00abaccidental\u00bb. A veces surge cuando usted:  <\/p>\n\n<ul class=\"wp-block-list\">\n<li>\u00bfDesea utilizar un nuevo lenguaje o herramienta para superar un proyecto que no es el adecuado?<\/li>\n\n\n\n<li>\u00bfEst\u00e1 obligado a utilizar una pila tecnol\u00f3gica espec\u00edfica?<\/li>\n\n\n\n<li>Desconocimiento de las pr\u00e1cticas m\u00e1s aceptables para descifrar este problema concreto.<\/li>\n<\/ul>\n\n<p class=\"wp-block-paragraph\"><strong>Causas de la complejidad en el software<\/strong><\/p>\n\n<p class=\"wp-block-paragraph\">El problema fundamental del software es la complejidad. El software es un sistema a gran escala que consta de cientos de microservicios que se llaman y dependen unos de otros. Muchos aspectos del software pueden no estar muy claramente definidos. A continuaci\u00f3n se exponen algunas de las causas cruciales que conducen a la complejidad en el desarrollo de software.   <\/p>\n\n<ul class=\"wp-block-list\">\n<li>Elegir las herramientas equivocadas. En ocasiones, tiene prisa por empezar o simplemente le encanta utilizar una herramienta concreta cuando trabaja con c\u00f3digo. Digamos que est\u00e1 trabajando en un sitio web de cuatro p\u00e1ginas que requiere Ruby on Rails o una API web RESTful, pero usted insiste en construir el sitio utilizando Objective C. No quiere decir que Objective C sea eficaz o lo suficientemente bueno, pero simplemente se implement\u00f3 para el problema equivocado. Esto puede dar lugar a complejidad en su c\u00f3digo.   <\/li>\n\n\n\n<li>Construir sistemas sobre sistemas: los sistemas se formulan jer\u00e1rquicamente. Por ejemplo, los sistemas bancarios se crean sobre software de Internet construido sobre software de telecomunicaciones. El software de telecomunicaciones descentraliza el poder adquisitivo y el poder de decisi\u00f3n interna y externamente debido a la crucial reconfiguraci\u00f3n \u00e1gil de la nube. Esto tambi\u00e9n provoca la complejidad del software.   <\/li>\n\n\n\n<li>Aplicar abstracciones err\u00f3neas. De vez en cuando, descubrir\u00e1 un software sobre un vocabulario concreto, tal vez registros de biblioteca, pero que se escribi\u00f3 utilizando otro lenguaje, digamos un tipo de datos CMSes posts. La abstracci\u00f3n es buena, pero no es la correcta. Todo se hizo mucho m\u00e1s dif\u00edcil por la necesidad de manipular la incoherencia entre los dos conceptos.   <\/li>\n<\/ul>\n\n<p class=\"wp-block-paragraph\"><strong>HERRAMIENTAS PARA REDUCIR LA COMPLEJIDAD DE LA CODIFICACI\u00d3N  <\/strong><\/p>\n\n<p class=\"wp-block-paragraph\">La funcionalidad incorporada a un sistema y la integraci\u00f3n entre sus subsistemas influyen abiertamente en la complejidad del sistema. Se necesita una estabilidad ideal entre la funcionalidad y la coordinaci\u00f3n dentro de un sistema para lograr una complejidad reducida. En el mundo real, no siempre se puede mantener la sencillez del software. Normalmente, los atributos de las aplicaciones que ofrecen valor empresarial tienden a tener complejidad. Sin embargo, muchas formas se centran en disminuir la complejidad para los ingenieros; se pueden utilizar otros enfoques para minimizar el nivel de complejidad de su aplicaci\u00f3n m\u00e1s all\u00e1 de aprovechar las arquitecturas de microservicios.    <\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Desarrollo asistido por software<\/strong><\/p>\n\n<p class=\"wp-block-paragraph\">Se trata de la capacidad de utilizar herramientas, normalmente asistidas por t\u00e9cnicas de inteligencia artificial y aprendizaje autom\u00e1tico, para ayudarle a escribir c\u00f3digo, diagnosticar problemas en el c\u00f3digo y controlar la complejidad general del c\u00f3digo. Este enfoque le permite ejecutar pruebas precisas y r\u00e1pidas que minimizan la tasa de complejidad, ya que los errores se detectan f\u00e1cilmente y reducen el proceso de desarrollo. Empresas como GitHub utilizan la IA para ayudar a los desarrolladores a escribir un c\u00f3digo m\u00e1s fiable y con menos defectos.  <\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Establecer una plataforma interna<\/strong><\/p>\n\n<p class=\"wp-block-paragraph\">La creciente complejidad ha llevado a muchas empresas a adoptar un modelo de plataforma interna. Al equipo de la plataforma interna se le conf\u00eda la evaluaci\u00f3n de las herramientas m\u00e1s vitales por parte de los ingenieros, la estructuraci\u00f3n de plantillas y la facilitaci\u00f3n de su proceso de producci\u00f3n. El equipo tambi\u00e9n se centra en funciones como la seguridad, las operaciones financieras y la gobernanza para reducir la carga cognitiva de los desarrolladores individuales.  <\/p>\n\n<p class=\"wp-block-paragraph\">La soluci\u00f3n para una plataforma interna de desarrolladores aceptable consiste en observar el equilibrio entre el autoservicio para los desarrolladores que quieren ponerse manos a la obra y la abstracci\u00f3n de las tareas pr\u00e1cticas menores sin restringir a los desarrolladores.<\/p>\n\n<p class=\"wp-block-paragraph\"><strong>M\u00c9TRICAS DE COMPLEJIDAD DEL SOFTWARE<\/strong><\/p>\n\n<p class=\"wp-block-paragraph\">Cuanto mayor sea la complejidad, m\u00e1s agotador ser\u00e1 mantener y leer el c\u00f3digo, y m\u00e1s fallos y defectos encontrar\u00e1. Medir la complejidad del software puede ayudarle a comprender y abordar el problema mientras sigue siendo menor. Las siguientes m\u00e9tricas pueden utilizarse para evaluar la complejidad.  <\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Complejidad ciclom\u00e1tica<\/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 class=\"wp-block-paragraph\">Esta m\u00e9trica se basa en la teor\u00eda de grafos y en otras definiciones matem\u00e1ticas. La complejidad ciclom\u00e1tica mide la complejidad estructural del c\u00f3digo. Esta m\u00e9trica estima el n\u00famero de caminos linealmente independientes a trav\u00e9s de un programa. Un camino linealmente independiente es una forma elegante de decir un camino \u00fanico en el que s\u00f3lo se cuentan los bucles una vez. Operaciones como IF, DO y SELECT constituyen l\u00f3gica condicional, lo que hace que el programa sea m\u00e1s dif\u00edcil de comprender. Cuantos m\u00e1s procedimientos de este tipo existan en el c\u00f3digo, m\u00e1s ramas l\u00f3gicas albergar\u00e1n y mayor ser\u00e1 la complejidad ciclom\u00e1tica.     <\/p>\n\n<p class=\"wp-block-paragraph\">Esta m\u00e9trica puede determinarse utilizando la f\u00f3rmula siguiente<\/p>\n\n<p class=\"wp-block-paragraph\">V(G) = e &#8211; n + 2p<\/p>\n\n<p class=\"wp-block-paragraph\">Donde: e = es el n\u00famero de aristas del grafo<\/p>\n\n<p class=\"wp-block-paragraph\">n = n\u00famero de notas en el gr\u00e1fico<\/p>\n\n<p class=\"wp-block-paragraph\">p = n\u00famero de componentes conectados<\/p>\n\n<p class=\"wp-block-paragraph\"><strong>\u00cdndice de mantenimiento<\/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 class=\"wp-block-paragraph\">Calcula el valor del \u00edndice entre 0 y 100, que constituye la facilidad relativa de mantenimiento del c\u00f3digo. En otras palabras, esta m\u00e9trica mide lo mantenible que es su c\u00f3digo. Cuanto mayor sea el valor, mejor ser\u00e1 la mantenibilidad de su c\u00f3digo. El \u00edndice de mantenibilidad se calcula como una f\u00f3rmula factorizada de SLOC (l\u00edneas de c\u00f3digo fuente), complejidad ciclom\u00e1tica y volumen Halstead.   <\/p>\n\n<p class=\"wp-block-paragraph\"><strong>M\u00e9tricas de Halstead<\/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 class=\"wp-block-paragraph\">La m\u00e9trica estima cu\u00e1nta informaci\u00f3n objetiva existe en el c\u00f3digo fuente, incluido el n\u00famero de variables y c\u00f3mo se utilizan en el c\u00f3digo fuente, las funciones y los m\u00e9todos. Se especula que cuantos m\u00e1s elementos independientes haya en el c\u00f3digo y m\u00e1s se empleen, m\u00e1s complejo ser\u00e1 el programa. Esta m\u00e9trica depende de la ejecuci\u00f3n del c\u00f3digo y de sus medidas, que se calculan est\u00e1ticamente a partir de los operadores y operandos del c\u00f3digo fuente.  <\/p>\n\n<p class=\"wp-block-paragraph\">La m\u00e9trica de Halstead puede calcularse con la siguiente f\u00f3rmula<\/p>\n\n<p class=\"wp-block-paragraph\">Dif\u00edcil = L \/ V<\/p>\n\n<p class=\"wp-block-paragraph\">Donde L = Nivel del programa<\/p>\n\n<p class=\"wp-block-paragraph\">V = Volumen del programa<\/p>\n\n<p class=\"wp-block-paragraph\">La f\u00f3rmula para determinar el nivel L del programa es<\/p>\n\n<p class=\"wp-block-paragraph\">L = (2 + n2*) *log2 (2 + n2*)<\/p>\n\n<p class=\"wp-block-paragraph\">Donde: n1 = n\u00famero de operadores<\/p>\n\n<p class=\"wp-block-paragraph\">N2 = n\u00famero de operandos<\/p>\n\n<p class=\"wp-block-paragraph\">El programa para determinar el volumen del programa V es:<\/p>\n\n<p class=\"wp-block-paragraph\">V = (N1 + N2)* log2 (n1 + n2)<\/p>\n\n<p class=\"wp-block-paragraph\">Donde N1 = n\u00famero total de ocurrencias del operador<\/p>\n\n<p class=\"wp-block-paragraph\">N2 = n\u00famero total de apariciones del operando<\/p>\n\n<p class=\"wp-block-paragraph\"><strong>M\u00e9tricas de dise\u00f1o orientado a objetos<\/strong><\/p>\n\n<p class=\"wp-block-paragraph\">Las m\u00e9tricas cuantitativas para el dise\u00f1o orientado a objetos suelen centrarse en las caracter\u00edsticas de las clases y el dise\u00f1o. Permiten a los desarrolladores evaluar el software en una fase temprana del desarrollo y comprender c\u00f3mo minimizar la complejidad y mejorar la mantenibilidad. <\/p>\n\n<p class=\"wp-block-paragraph\"><strong>EFECTOS DE LA COMPLEJIDAD DEL SOFTWARE<\/strong><\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Impacto de la complejidad en las tasas de error.<\/strong><\/p>\n\n<p class=\"wp-block-paragraph\">El objetivo de por qu\u00e9 a los desarrolladores nos preocupa la complejidad est\u00e1 relacionado con aspectos m\u00e1s importantes del proceso de desarrollo de software. Cuanto m\u00e1s dif\u00edcil de entender sea el c\u00f3digo, m\u00e1s probabilidades habr\u00e1 de que no se descubran los errores de programaci\u00f3n. Cuando un programa es dif\u00edcil de probar, los errores no se detectar\u00e1n antes de que el software funcione.  <\/p>\n\n<p class=\"wp-block-paragraph\">Se esperan tasas de error elevadas en programas que manifiestan altas densidades de decisi\u00f3n (con su n\u00famero igualmente distribuido de caminos de decisi\u00f3n para comprobar los errores). Es probable que se generen nuevos errores en este tipo de sistemas. <\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Impacto de la complejidad en los costes de mantenimiento<\/strong><\/p>\n\n<p class=\"wp-block-paragraph\">La complejidad del software tiene un impacto directo en los costes de mantenimiento. Cuanto m\u00e1s exigente sea el mantenimiento de un sistema de aplicaci\u00f3n complejo, m\u00e1s gastos se producir\u00e1n durante el mantenimiento, que consume la mayor parte del proceso de desarrollo. El mantenimiento del software se percibe como un procedimiento de producci\u00f3n cuyos insumos son los recursos inform\u00e1ticos y la mano de obra, y el resultado es un c\u00f3digo mejorado. Las horas de mano de obra son considerablemente m\u00e1s significativas que los recursos inform\u00e1ticos, y ambos tienen posibilidades de sustituci\u00f3n insustanciales. Se presta atenci\u00f3n a las horas de mano de obra como el gasto considerable en el que se incurre.    <\/p>\n\n<p class=\"wp-block-paragraph\"><strong>UN REMEDIO PARA LA COMPLEJIDAD EN EL DESARROLLO DE SOFTWARE<\/strong><\/p>\n\n<p class=\"wp-block-paragraph\">Aunque las arquitecturas de microservicios crean aplicaciones m\u00e1s extensas y complejas, desentra\u00f1an el trabajo de los desarrolladores de base. Las arquitecturas de microservicios generan una aplicaci\u00f3n m\u00e1s compleja que una aplicaci\u00f3n correspondiente construida como un monolito. Aun as\u00ed, esto no significa que el trabajo del desarrollador sea m\u00e1s complicado.  <\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Complejidad de la arquitectura de microservicios.<\/strong><\/p>\n\n<p class=\"wp-block-paragraph\">La arquitectura de microservicios es un DevOps que proporciona una t\u00e9cnica m\u00e1s din\u00e1mica y \u00e1gil para ejecutar, desarrollar y gestionar aplicaciones trabajando con componentes modulares frente a una construcci\u00f3n monol\u00edtica.<\/p>\n\n<p class=\"wp-block-paragraph\">Para muchos, se supone que los microservicios curar\u00e1n todos sus problemas de complejidad del software. Sin embargo, s\u00f3lo pueden rehabilitar el cincuenta por ciento de esos problemas por s\u00ed solos. Para resolver la otra mitad, debe fusionar los microservicios con las \u00faltimas pr\u00e1cticas de DevSecOps y convertir su empresa en la m\u00e1quina de matar definitiva.  <\/p>\n\n<p class=\"wp-block-paragraph\">Los microservicios sancionan a las empresas para ejecutar un mill\u00f3n de despliegues diarios, escalar el sistema hasta el infinito, minimizar la complejidad de la base de c\u00f3digo y ahorrar recursos. Los microservicios trasladan la complejidad de los servicios a la plataforma, ignorando los hechos se obtienen resultados sub\u00f3ptimos. Muchas empresas han dise\u00f1ado aplicaciones monol\u00edticas s\u00f3lo para descubrir que se vuelven demasiado complejas. Como desarrollador que opera en una \u00fanica base de c\u00f3digo, resulta pesado a\u00f1adir funciones y rectificar defectos de forma independiente. Normalmente, esto limita el n\u00famero de proyectos en los que puede trabajar en una sola aplicaci\u00f3n.    <\/p>\n\n<p class=\"wp-block-paragraph\">Los microservicios hacen que una aplicaci\u00f3n sea menos compleja al eliminar determinadas partes de ella. Cuando divide la aplicaci\u00f3n en diferentes m\u00f3dulos, est\u00e1 intentando dividir esa complejidad para minimizar el n\u00famero de desarrolladores que trabajan en una \u00fanica base de c\u00f3digo. La divisi\u00f3n puede hacerse de modo que desarrolle una complejidad organizada que sea f\u00e1cil de entender.  <\/p>\n\n<p class=\"wp-block-paragraph\"><strong>El modelo de complejidad del software<\/strong><\/p>\n\n<p class=\"wp-block-paragraph\">Las causas de la complejidad se han tratado en la g\u00e9nesis de este cap\u00edtulo. La complicaci\u00f3n confiere al proyecto una complejidad inherente, y luego surge m\u00e1s complejidad en el transcurso del dise\u00f1o y la fase del proceso de desarrollo del software. Seg\u00fan este modelo, la complejidad se une a otros factores para determinar la propensi\u00f3n a errores y el tama\u00f1o del programa. Tambi\u00e9n se ha discutido la naturaleza, las fuentes y los efectos de la complejidad del software y se ha proporcionado un marco te\u00f3rico para una divulgaci\u00f3n gr\u00e1fica del concepto de complejidad del software.   <\/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 class=\"wp-block-paragraph\"><strong>CONCLUSI\u00d3N<\/strong><\/p>\n\n<p class=\"wp-block-paragraph\">Muchas empresas tienen que lidiar con la complejidad del software, y los enfoques que utilice al abordarla afectar\u00e1n al futuro de su empresa. Hay varias formas de gestionar la complejidad del software. Enfoques como el establecimiento de una plataforma interna y la estandarizaci\u00f3n de los servicios externos en toda la empresa pueden ser buenas estrategias.  <\/p>\n\n<p class=\"wp-block-paragraph\">Adem\u00e1s, aunque las arquitecturas de microservicios aumentan la complejidad del software, ofrecen el valor de minimizar la carga cognitiva y la complejidad visual para los desarrolladores individuales.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La creciente complejidad de las estructuras de software modernas pone constantemente en el lecho de muerte a los desarrolladores de software. La complejidad del software hace que el trabajo de los desarrolladores sea agotador ya que; planificar, construir y probar productos se vuelve dif\u00edcil. La instigaci\u00f3n de nuevos retos de seguridad crea frustraci\u00f3n en administradores [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":16659,"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":[86],"tags":[],"writer":[],"class_list":["post-19676","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sin-categorizar"],"_links":{"self":[{"href":"https:\/\/devologyx.io\/es\/wp-json\/wp\/v2\/posts\/19676","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devologyx.io\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devologyx.io\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devologyx.io\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/devologyx.io\/es\/wp-json\/wp\/v2\/comments?post=19676"}],"version-history":[{"count":1,"href":"https:\/\/devologyx.io\/es\/wp-json\/wp\/v2\/posts\/19676\/revisions"}],"predecessor-version":[{"id":19678,"href":"https:\/\/devologyx.io\/es\/wp-json\/wp\/v2\/posts\/19676\/revisions\/19678"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devologyx.io\/es\/wp-json\/wp\/v2\/media\/16659"}],"wp:attachment":[{"href":"https:\/\/devologyx.io\/es\/wp-json\/wp\/v2\/media?parent=19676"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devologyx.io\/es\/wp-json\/wp\/v2\/categories?post=19676"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devologyx.io\/es\/wp-json\/wp\/v2\/tags?post=19676"},{"taxonomy":"writer","embeddable":true,"href":"https:\/\/devologyx.io\/es\/wp-json\/wp\/v2\/writer?post=19676"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}