{"id":1460,"date":"2014-11-09T11:07:53","date_gmt":"2014-11-09T10:07:53","guid":{"rendered":"http:\/\/qualilogy.com\/es\/?p=1460"},"modified":"2014-11-17T05:12:32","modified_gmt":"2014-11-17T04:12:32","slug":"aplicacion-legacy-objetivos-reingenieria","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/es\/aplicacion-legacy-objetivos-reingenieria\/","title":{"rendered":"Aplicaci\u00f3n Legacy &#8211; Objetivos de una reingenier\u00eda"},"content":{"rendered":"<p><a href=\"http:\/\/500px.com\/Vicken\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-2197\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/11\/LegacyApp_ReengineeringObjectives.jpg\" alt=\"Application Legacy - Objectifs d'un reengineering\" width=\"239\" height=\"360\" \/><\/a>Una reingenier\u00eda no siempre significa la reescritura de nuestra aplicaci\u00f3n Legacy en un lenguaje generalmente m\u00e1s reciente, pero, sin embargo, es <a title=\"Aplicaci\u00f3n Legacy C \u2013 \u00bfRefactorizaci\u00f3n o reingenier\u00eda? (I)\" href=\"http:\/\/qualilogy.com\/es\/aplicacion-legacy-c-refactorizacion-reingenieria-1\/\" target=\"_blank\">la opci\u00f3n<\/a> que hemos elegidos.<\/p>\n<p>Cuando se trata &#8216;simplemente&#8217; de reorganizar el c\u00f3digo para que sea m\u00e1s f\u00e1cil de mantener, pero sin portarlo en una nueva\u00a0plataforma de software o de hardware \u2013 migraci\u00f3n de Mainframe-Cobol a una arquitectura Unix por ejemplo \u2013 yo prefiero hablar de refactorizaci\u00f3n.<\/p>\n<p>Os recuerdo que este blog no tiene pretensiones acad\u00e9micas, as\u00ed que no voy a preocuparme de definiciones meticulosamente exactas, que conducen con mayor frecuencia en discusiones quadripelotectomias (1) entre especialistas que no tienen nada m\u00e1s que hacer que glosar sobre cada palabra. <!--more--><\/p>\n<p>Pero esto no impide un poco de precisi\u00f3n con el fin de evitar\u00a0prejuicios y malentendidos. En primer lugar, hemos analizado qu\u00e9 <a title=\"Aplicaci\u00f3n Legacy \u2013 Refactoring con el plugin SQALE (I)\" href=\"http:\/\/qualilogy.com\/es\/aplicacion-legacy-refactoring-plugin-sqale-1\/\" target=\"_blank\">acciones de refactorizaci\u00f3n<\/a> podr\u00edamos considerar para nuestra <a title=\"Auditor\u00eda de una aplicaci\u00f3n Legacy en C \u2013 Microsoft Word 1.1a (I)\" href=\"http:\/\/qualilogy.com\/es\/auditoria-aplicacion-legacy-c-microsoft-word-1-1a-1\/\" target=\"_blank\">aplicaci\u00f3n Legacy C (Word 1.1a)<\/a> utilizando el plugin SQALE. Hemos intentado una <a title=\"Aplicaci\u00f3n Legacy \u2013 Refactoring con el plugin SQALE (II)\" href=\"http:\/\/qualilogy.com\/es\/aplicacion-legacy-refactoring-plugin-sqale-2\/\" target=\"_blank\">estimaci\u00f3n del coste de estas acciones<\/a> y un <a title=\"Aplicaci\u00f3n Legacy \u2013 Deuda t\u00e9cnica y ROI de una refactorizaci\u00f3n\" href=\"http:\/\/qualilogy.com\/es\/aplicacion-legacy-deuda-tecnica-roi-refactorizacion\/\" target=\"_blank\">c\u00e1lculo de ROI<\/a>.<\/p>\n<p>Hoy voy a hablar de algunos elementos a tomar en cuenta para una reingenier\u00eda.<\/p>\n<h2>Objetivos<\/h2>\n<p>La estrategia a nivel de la aplicaci\u00f3n o del producto software es, obviamente, en el coraz\u00f3n de un plan de reingenier\u00eda: una plataforma de software y\/o de hardware al final de su vida o demasiado costosa, la escasez de habilidades de TI para mantener la aplicaci\u00f3n en esta plataforma, costes de mantenimiento muy altos, etc. Pero en cualquier caso, se desea mantener la aplicaci\u00f3n, o el software en el caso de un proveedor de software, y no abandonarlo para sustituirlo con el desarrollo de una nueva aplicaci\u00f3n.<\/p>\n<p>Entonces, el paso preliminar en una reingenier\u00eda es una clara identificaci\u00f3n de cuales son los objetivos.<\/p>\n<p>Pero contrariamente a lo que se pudiera pensar, una reingenier\u00eda no siempre es un objetivo consciente. Por supuesto, si tu CIO es bastante harto de ver todos los a\u00f1os un comercial que le anuncia:<\/p>\n<ul>\n<li>que se va a poner fin a tal software o esta plataforma y<\/li>\n<li>la necesidad de comprar un nuevo software y<\/li>\n<li>iniciar un proyecto de implementaci\u00f3n con sus consultores, todos muy expertos pero tampoco muy baratos, y<\/li>\n<li>la necesidad de actualizar su infraestructura de TI con el fin de mantener un nivel aceptable de rendimiento para esta nueva plataforma de software y<\/li>\n<li>nuevos precios en aumento, pues<\/li>\n<\/ul>\n<p>tu CIO podr\u00eda considerar un salto a una nueva tecnol\u00f3gia para reponer la mano sobre su entorno de TI y que dejan de tratarle como la gallina de los huevos de oro.<\/p>\n<p>Sin embargo, he visto muchos casos en que la reingenier\u00eda no estaba previsto al principio, pero se ha convertido en una opci\u00f3n necesaria e inevitable despu\u00e9s de una serie de descubrimientos, reflexiones y decisiones m\u00e1s o menos formalizadas.<\/p>\n<h3>Reingenier\u00eda del portafolio de aplicaciones<\/h3>\n<p>Hice una auditor\u00eda para un banco, o m\u00e1s bien su divisi\u00f3n de Asset Managemet que se ocupa de la gesti\u00f3n de activos financieros, por una aplicaci\u00f3n que ten\u00eda que multiplicar por tres el n\u00famero de clientes. \u00bfQui\u00e9n dice tres veces m\u00e1s usuarios tambi\u00e9n dice tres veces m\u00e1s datos, y tres veces m\u00e1s (en promedio) conexiones a una base de datos tres veces m\u00e1s grande. De ah\u00ed surg\u00edo una preocupaci\u00f3n para el rendimiento. La primera reacci\u00f3n del banco fue buscar una herramienta de pruebas de rendimiento y carga, y luego comenzaron a preguntarse si era posible detectar en el c\u00f3digo alg\u00fan defecto que pudiera poner en peligro el tiempo de respuesta en el futuro.<\/p>\n<p>Si recuerdo correctamente, era una aplicaci\u00f3n Visual Basic, y por las razones habituales de confidencialidad, ellos no quer\u00edan entregarme todo el c\u00f3digo de su aplicaci\u00f3n. Esto es siempre un problema porque menos c\u00f3digo tienes, menos defectos en el c\u00f3digo encontramos y m\u00e1s dif\u00edcil de demostrar el valor que puedes aportar.<\/p>\n<p>As\u00ed que les propuse analizar un m\u00f3dulo de esa aplicaci\u00f3n, pero tambi\u00e9n un poco de c\u00f3digo J2EE y de c\u00f3digo Cobol, con el objetivo principal de centrarme en la identificaci\u00f3n de riesgos potenciales para el rendimiento, y un segundo objetivo de medici\u00f3n de mantenibilidad. Que no les interes\u00f3 tanto, realmente tuve que insistir. Pero cuando present\u00e9 los resultados, se quedaron bastante impresionados, y alguien dijo \u00ab tenemos que presentar eso al CIO. \u00bb<\/p>\n<p>De hecho, adem\u00e1s de su inter\u00e9s por el rendimiento en esta aplicaci\u00f3n, el CIO ten\u00eda sobre todo una preocupaci\u00f3n de renovaci\u00f3n de su portafolio de aplicaciones, que a su juicio estaba lleno de aplicaciones no siempre muy cr\u00edticas, pero a menudo no muy mantenibles, y sin saber por d\u00f3nde empezar. Tuvimos una segunda reuni\u00f3n en la que \u00e9l particip\u00f3, y en la que construimos casi en tiempo real un plan de refactorizaci\u00f3n de la aplicaci\u00f3n Cobol y una reingenier\u00eda de la aplicaci\u00f3n Visual Basic.<\/p>\n<p>Conclusi\u00f3n: algunos casos de uso pueden dar lugar a una refactorizaci\u00f3n o una reingenier\u00eda que no fuera inicialmente un objetivo. Se requiere un an\u00e1lisis y la medici\u00f3n de la calidad del c\u00f3digo para saber qu\u00e9 aplicaciones del portafolio de aplicaciones se beneficiar\u00e1n de una reingenier\u00eda, y por d\u00f3nde empezar.<\/p>\n<h3>Reingenier\u00eda de herramientas caseras<\/h3>\n<p>A veces la reingenier\u00eda se realiza simplemente en una parte de la aplicaci\u00f3n. A principios de los a\u00f1os 90, con la aparici\u00f3n del Client-Server y las primeras aplicaciones con interfaz gr\u00e1fica en Windows, muchas empresas desarrollaron su propio middleware para los intercambios as\u00edncronos (o no) entre el mainframe y esas nuevas aplicaciones. Un equipo dedicado era responsable del desarrollo y del mantenimiento del middleware, entregando regularmente las correspondientes APIs y la documentaci\u00f3n que permit\u00edan su uso por los equipos de proyecto.<\/p>\n<p>El problema es que, como cualquier aplicaci\u00f3n, ese c\u00f3digo acumulaba deuda t\u00e9cnica, y el mantenimiento de esa herramienta se hac\u00eda cada vez m\u00e1s pesado, con correcciones y cambios requeridos por los proyectos m\u00e1s costosos, la documentaci\u00f3n m\u00e1s dif\u00edcil de mantener, y el conocimiento de la aplicaci\u00f3n que se pierde a medida que el equipo se iba a otros puestos o simplemente de la empresa. As\u00ed que lleg\u00f3 un momento en que este middleware casero dio paso a una herramienta tipo MOM, ESB, EAI, o incluso una nueva arquitectura SOA o EDA (2). \u00a1No, no me pidas definiciones, ya dije al principio de este post que este blog no es un diccionario!<\/p>\n<p>Por supuesto, hab\u00eda que encapsular esta nueva herramienta en las APIs existentes para minimizar el impacto en las aplicaciones. Como el middleware casero era m\u00e1s a menudo programado con un tipo de lenguaje 3GL, pero tambi\u00e9n, hay que decir, dado el entusiasmo del equipo de middleware para las nuevas tecnolog\u00edas, muchas de estas APIs se han reescrito a menudo con programaci\u00f3n Orientada a Objetos.<\/p>\n<h3>Reingenier\u00eda y interfaces de usuario<\/h3>\n<p>Un caso muy com\u00fan de reingenier\u00eda: aplicaciones con una interfaz de usuario anticuada u obsoleta. Esto fue el caso de muchas aplicaciones de mainframe con una interfaz de caracteres, que hab\u00eda que llevar (no sin dificultad) a Windows. Incluso se encontraban herramientas para la generaci\u00f3n automatica de pantallas gr\u00e1ficas desde las de mainframe, con algunos resultados divertidos (excepto para los usuarios finales).<\/p>\n<p>La burbuja Internet y los sitios web han causado mucho da\u00f1o en el cumplimiento de las normativas de interfaz gr\u00e1fica. Ahora, con las aplicaciones para el smartphone, nos encontramos de nuevo con estas normas, pero con un t\u00e9rmino m\u00e1s moderno de UX (experiencia de usuario). As\u00ed que muchas aplicaciones est\u00e1n experimentando una reingenier\u00eda de la capa de presentaci\u00f3n para ser accesibles tanto en la web como en tu m\u00f3vil.<\/p>\n<p>Los editores de software tambi\u00e9n deben realizar este tipo de proyecto con bastante frecuencia. Una interfaz HTML obsoleta es un verdadero peso muerto cuando se trata de vender un software y requerir\u00e1 un &#8216;relooking&#8217; con nuevas tecnolog\u00edas: Flex o HTML5 por ejemplo.<\/p>\n<p>Esto a veces causa problemas. Intenta seleccionar una o m\u00e1s filas de una tabla Flex para hacer un Copiar\/Pegar: los usuarios tendr\u00e1n problemas para entender que se ha adoptado una nueva tecnolog\u00eda que no permite estas operaciones b\u00e1sicas.<\/p>\n<p>A menudo, un editor de software no va a interpretar la evoluci\u00f3n de la interfaz gr\u00e1fica como una reingenier\u00eda, sino simplemente como una nueva versi\u00f3n de su software con pantallas m\u00e1s bonitas. Si lo hac\u00eda, si \u00e9l lo reconocer\u00eda como un objetivo claro de migraci\u00f3n a una nueva tecnolog\u00eda y a una interfaz gr\u00e1fica diferente, podr\u00eda tal vez considerar los impactos a los usuarios y los procedimientos en lugar de esperar que ellos los descubren cuando ya es demasiado tarde.<\/p>\n<h3>Perimetro<\/h3>\n<p>Como podemos ver a trav\u00e9s de los ejemplos anteriores, es importante tener objetivos claros e incluso formalizados con el fin de evitar consecuencias no deseadas. Sobre todo porque estos objetivos condicionar\u00e1n la siguiente pregunta: \u00bfreingenier\u00eda al equivalente, es decir, con las mismas funcionalidades, o con nuevas caracter\u00edsticas?<\/p>\n<p>Una reingenier\u00eda es a menudo un proyecto complejo que requiere un buen conocimiento de la aplicaci\u00f3n y de las partes de c\u00f3digo m\u00e1s dif\u00edcil de leer y entender, una buena experiencia de la nueva plataforma de destino o del nuevo lenguaje, una estimaci\u00f3n precisa de la deuda t\u00e9cnica con el fin de proceder a una evaluaci\u00f3n adecuada del esfuerzo y de la planificaci\u00f3n, un m\u00ednimo de documentaci\u00f3n y si es posible, de cobertura de pruebas.<\/p>\n<p>Como no suele ser a menudo el caso, el equipo del proyecto prefiere limitar los riesgos de fracaso del proyecto y evitar la introducci\u00f3n de nuevas funciones en la aplicaci\u00f3n. Ahora los usuarios probablemente ser\u00e1n muy insistentes en este punto, ya que de lo contrario, no s\u00f3lo van a tener que esperar el fin de la reingenier\u00eda, sino tambi\u00e9n el desarrollo de una nueva versi\u00f3n que incorpora las nuevas caracter\u00edsticas que ellos desean.<\/p>\n<p>Por desgracia para el equipo del proyecto, es a menudo los usuarios que van a ganar, simplemente porque es imposible escribir de nuevo una aplicaci\u00f3n sin encontrar problemas t\u00e9cnicos que necesitar\u00e1n nuevos procesos y\/o redise\u00f1o de las funcionalidades de negocio.<\/p>\n<p>Por ejemplo, si cambias la interfaz de usuario, es probable que cambian los datos que se muestran en la pantalla. \u00bfCu\u00e1ntas veces he visto, durante una reingenier\u00eda, m\u00faltiples pantallas sustituidas por una sola pantalla compuesta por varias pesta\u00f1as (el sindrome del &#8216;lo quiero todo y lo quiero ahora&#8217;)? Obviamente, se debe entonces modificar los tratamiento a la capa de datos, lo que puede causar problemas de rendimiento. Si no es posible arreglar estos problemas desde un punto t\u00e9cnico (con una actualizaci\u00f3n de la infraestructura t\u00e9cnica, por ejemplo), entonces se necesita pedir a los usuarios si ser\u00eda posible llevar a cabo esta operaci\u00f3n de negocio de otra manera, con el fin de cargar menos datos dentro de la pantalla.<\/p>\n<p>Otro caso a considerar: una reingenier\u00eda no trata solamente del c\u00f3digo y de los tratamientos, sino tambi\u00e9n de los datos. Un nuevo\u00a0dise\u00f1o de clases y programas tendr\u00e1 como consecuencia los cambios correspondientes en las estructuras de datos.<br \/>\nSi un programa \u00fanico accede a una tabla monstruosa en la base de datos, se requiere dividir este programa y esta tabla en entidades de m\u00e1s peque\u00f1a granularidad para una mejor capacidad de mantenimiento y, probablemente, un mayor rendimiento.<\/p>\n<p>Tambi\u00e9n se aprovechar\u00e1 de la reescritura de la aplicaci\u00f3n para modificar determinados tipos de datos. Debido a que el usuario ya ha pedido algunas evoluciones, como cambiar el tama\u00f1o de un campo o la precisi\u00f3n de algunas cifras. O somos nosotros que iremos a preguntarle si realmente \u00e9l necesita un campo de comentarios tan largo cuando casi nunca se utiliza.<\/p>\n<p>Pues para un plan de proyecto de reingenier\u00eda:<\/p>\n<ul>\n<li>Planificar bien el redise\u00f1o de los tratamientos como tambi\u00e9n de los datos.<\/li>\n<li>Augurar de los cambios en los procesos de negocio.<\/li>\n<li>Incorporar uno o m\u00e1s usuarios al proyecto de modo que est\u00e9n disponibles para cualquier cuesti\u00f3n de proceso, de tratamientos de negocio o de reingenier\u00eda de datos.<\/li>\n<li>No descartar todas las peticiones de cambios funcionales, pero estudiar bien aquellos que puedan afectar el proyecto o ser llevado f\u00e1cilmente.<\/li>\n<\/ul>\n<p>Y, sobre todo, siempre estar al tanto de los objetivos de la reingenier\u00eda.<\/p>\n<p>1. <a href=\"http:\/\/fr.wiktionary.org\/wiki\/t%C3%A9trapilectomie\" target=\"_blank\">Tetrapilectomie<\/a> Incisi\u00f3n de pelos en 4. <span id=\"result_box\" class=\"\" lang=\"es\"><span class=\"hps\">Neologismo<\/span> <span class=\"hps\">inventado por<\/span> <span class=\"hps\">Umberto<\/span> <span class=\"hps\">Eco<\/span> <span class=\"hps\">y su grupo<\/span> <span class=\"hps\">de<\/span> <span class=\"hps\">pataphysicians<\/span>. <span class=\"hps\">Formado a partir<\/span> <span class=\"hps\">del prefijo<\/span> <span class=\"hps\">griego<\/span> <span class=\"hps\">tetra<\/span> <span class=\"hps atn\">(<\/span><span class=\"hps\">&#8216;cuatro&#8217;<\/span>), <span class=\"hps\">del latino<\/span> <span class=\"hps\">pilus<\/span>\u00a0<span class=\"hps atn\">(<\/span><span class=\"hps atn\">&#8216;<\/span>pelo<span class=\"hps atn\">&#8216;<\/span>) <span class=\"hps\">y<\/span> <span class=\"hps\">-ectomie<\/span> <span class=\"hps\">(corte,<\/span> <span class=\"hps\">incisi\u00f3n<\/span>)<span class=\"\">.<br \/>\nSignificaci\u00f3n: Tener un <span id=\"result_box\" class=\"short_text\" lang=\"es\"><span class=\"hps\">cuidado<\/span> <span class=\"hps\">excesivo en<\/span> <span class=\"hps\">una actividad<\/span> <span class=\"hps\">in\u00fatil.<\/span><\/span><\/span><\/span><\/p>\n<p>2. MOM : Message Oriented Middleware. ESB : Enterprise Service Bus. EAI : Enterprise Application Integration. SOA : Service Oriented Architecture. EDA : Event-Driven Architecture.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Una reingenier\u00eda no siempre significa la reescritura de nuestra aplicaci\u00f3n Legacy en un lenguaje generalmente m\u00e1s reciente, pero, sin embargo, es la opci\u00f3n que hemos elegidos. Cuando se trata &#8216;simplemente&#8217; de reorganizar el c\u00f3digo para que sea m\u00e1s f\u00e1cil de mantener, pero sin portarlo en una nueva\u00a0plataforma de software o de hardware \u2013 migraci\u00f3n de [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-1460","post","type-post","status-publish","format-standard","hentry","category-calidad-de-aplicaciones"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/1460"}],"collection":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/comments?post=1460"}],"version-history":[{"count":35,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/1460\/revisions"}],"predecessor-version":[{"id":1495,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/1460\/revisions\/1495"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/media?parent=1460"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/categories?post=1460"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/tags?post=1460"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}