You are on page 1of 5

INGENIERA EN SISTEMAS COMPUTACIONALES INGENIERA DE SOFTWARE MTRO. JULIO E.

ARELLANO VELAZQUEZ

TAREA 3: REENGINEERING, REVERSE ENGINEERING Y FORWARD ENGINEERING

LUIS GUILLERMO MARTINEZ FLORES NMERO DE CONTROL: 081600196

Resumen: La falta de atencin en el desarrollo de software con calidad, lleva a una gran inversin de tiempo y programacin, la que se realiza en la etapa de mantenimiento y reingeniera, lo cual hace que sea una actividad constante y en ocasiones difcil, poco prctica e indeseable. Parte de la solucin a esto es el Proceso de Reingeniera de software, con el cual se pretende tener un software ms estable, persistente a cambios, fcil de mantener y bajos costos. Este proceso abarca una combinacin de subprocesos como lo son la ingeniera inversa (reverse engineering) y la ingeniera hacia delante (forward engineering). La Ingeniera inversa se enfoca en la tarea de entender el cdigo de un programa legado sin tener la documentacin apropiada; mientras que el objetivo de la ingeniera hacia delante es de modificar las partes existentes de sistemas de software hasta que ellos sean muy innovadores.

Ingeniera de Software

Introduccin: El software tiene cada vez ms importancia en nuestra sociedad. Desarrollar un software complejo puede tomar varios aos. Tal inversin no se puede abandonar, por lo tanto hay que mantener los programas durante muchos aos. Evidentemente durante este periodo se necesita agregar nuevas funciones, corregir los errores, adaptar el software a las nuevas tecnologas (orientado a objeto, red distribuida, interfaz grfica, web, etc.). Las modificaciones sucesivas de los programas deterioran sus estructuras y disminuyen sus cualidades a lo largo del mantenimiento; por lo tanto el software es cada vez ms difcil de entender y modificar. Sin embargo, es cada vez ms indispensable. A pesar de esto, la casi totalidad de los esfuerzos de investigacin en el rea de ingeniera de software todava estn orientados al desarrollo de nuevos programas. El aumento en las aplicaciones computacionales, as como la demanda de software, es hoy en da, uno de los retos ms importantes para los ingenieros de software, para lo cual, se hacen necesarias tcnicas y tecnologas eficientes para resolver la cantidad de problemas que se derivan de las aplicaciones en donde se desarrollan sistemas de software de gran tamao. El cincuenta por ciento de la programacin y del tiempo esta puesto en la etapa de mantenimiento y reingeniera de cdigo existente, y la razn de que esto suceda, es debido a que no se realizo un desarrollo con calidad, esto lleva a un mantenimiento constante que a su vez hace que la estructura original a veces difcil de interpretar, se vuelva poco practica e indeseable. Es por eso que se debe de pensar en una Reingeniera del Proceso de Produccin de Software con la cual se puede tener un software mas estable, persistente a los cambios, fcil de mantener y que no implique costos altos en esta etapa. El cual incluye un examen y alteracin de un sistema existente para reconstituirlo en una nueva forma. Este proceso abarca una combinacin de subprocesos como ingeniera inversa y reestructuracin, redocumentacin, ingeniera hacia adelante, y redesignacion. La nueva forma del sistema podra ser cdigo estructurado - de cdigo "spaghetti"; diseo de informacin en forma grfica - de cdigo de entrada; o la traduccin del cdigo fuente de un lenguaje a otro mientras se conserva la funcionalidad del sistema.

Reingeniera de Software ( Reengineering) La Reingeniera del Proceso de Produccin de Software no tiene que ver con un producto en particular, y se tiene que este tipo de reingeniera es lo que se conoce como la evolucin que ha tenido el ciclo de vida del software que de una manera u otra, se ha afectado a travs del tiempo desde un modelo clsico de cascada, a un modelo de prototipos, de espiral o de cuarta generacin y se acenta en un rediseo radical en el modelo Orientado a Objetos, donde cambia de manera drstica la forma de ver las partes esenciales de un software: la informacin y sus procesos. La reingeniera de Software puede no justificarse slo en la base de incrementar su mantenibilidad. Es necesario contar con prerequisitos de Desarrollo de Software down-top.. La Reingeniera de Software no solo reduce los tiempos de esfuerzo de desarrollo significativamente, sino que recorta el costo de mantenimiento. El objetivo de la Reingenieria de Software no slo es revitalizar sistemas de Software sino traer elementos de Reuso de otros sistemas. [SNEE,89] Reingeniera de Software es conocida como la renovacin y reclamacin; es la examinacin y alteracin de un sistema de software para reconstruirlo en una nueva forma, con la implementacin subsecuente de esta. [BYRN,92]

Ingeniera de Software

La Reingeniera de Software encierra la descomposicin y la comprensin del Software original (ingeniera inversa) seguida por la reinterpretacion de la especificacin para formar un nuevo cdigo fuente (ingeniera de sistemas). [CHIK,90] Estas definiciones nos muestran algunos de los aspectos que cubre la Reingeniera de Software en las cuales nos damos cuenta de que la principal meta que se busca alcanzar es la revisin y alteracin radical de un sistema para obtener un nuevo sistema mejorado de manera crtica en costo, esfuerzo y calidad. Algunas de las caractersticas de la Reingeniera de Software (RS) son: Se centra en el producto. Es importante aclarar que la RS se aplica en un solo producto, al cual se aplica un proceso de Reingeniera, que no necesariamente puede aplicarse a otro producto. Este proceso de Reingeniera se basa en las caractersticas peculiares de un producto determinado, por lo que al aplicar RS a otro producto en particular se debe tomar otras medidas que sean apropiadas para las caractersticas esenciales. Se basa en el cdigo fuente de un producto. Al hablar de RS se trata de tener un producto de software y darle un giro radical en su constitucin. Un ejemplo de esto sera tener un sistema en un modelo relacional y cambiarlo a un modelo orientado a objetos en la que la esencia del software es la misma pero la manera en que se realiza cambia el cual sufri reingeniera. La RS comienza con la representacin de un producto expresada en algn nivel de abstraccin. Dichos niveles son la implementacin, el diseo, los requerimientos y el nivel conceptual [BYRN,92]. Normalmente en la RS se parte de un nivel de implementacin para buscar los siguientes niveles hasta llagar al nivel de abstraccin ms alto que es el conceptual, donde se encuentra la esencia del producto y de este punto partir para construir un nuevo producto mejorando las caractersticas del anterior.

Ingeniera Inversa (Reverse Engineering) "Es el proceso de la ingeniera de comprensin, anlisis, y resumen del sistema a una nueva forma a un nivel ms alto de abstraccin." Este gran nivel de abstraccin se entiende dentro del contexto del ciclo de vida del sistema del software. El clsico ciclo de vida de desarrollo en cascada requiere de requerimientos y especificaciones seguidos por diseo, cdigo, prueba, implementacin y mantenimiento. As, si nosotros empezamos con el cdigo, la ingeniera inversa extraer informacin del diseo que est en un nivel de abstraccin ms alto en el ciclo de vida. Esta propuesta es hecha para incrementar el entendimiento del sistema existente o de algn subsistema y documentar la estructura. Esto implica pasos que no estn detallados ni planeados. Para entender el sistema se deben de identificar sus componentes, definir sus relaciones y crear la representacin del sistema. El objetivo es crear una representacin abstracta de lo que ya existe para despus proceder a la implementacin. Este paso puede ser solamente redocumentacin cuando el sistema implementado tiene una documentacin muy pobre o simple, o tomar la forma de diseo cuando el sistema exige ser recodificado, documentado y restablecido en el conocimiento del mismo. La ingeniera inversa abarca una amplia serie de tareas relacionadas al entendimiento y modificacin de sistemas de software. El punto central de esas tareas es identificar los componentes de un sistema de software existente y la relacin entre ellos, as como es la creacin de altos niveles de descripcin de varios aspectos de los sistemas existentes. De igual forma, el corazn de investigacin de la ingeniera inversa es el desarrollo de herramientas y tcnicas para el anlisis y representacin de informacin acerca de sistemas de software.
Ingeniera de Software

El trmino de ingeniera inversa es tomado del desarrollo del hardware, donde es tpicamente aplicado en el proceso de descubrir como los sistemas de otras personas trabajan. Sin embargo, en ingeniera de software, el trmino es utilizado para describir el proceso de descubrir como su sistema trabaja. Este es aplicado por una variedad de razones para la obtencin de la informacin necesaria para la modificacin de sistemas, para la recuperacin de componentes para un importante reutilizacin posterior. [RICH,94]

Ingeniera hacia delante (Forward Engineering) Es el segundo nivel del proceso de reingeniera de software llamado "forward engineering" o "ingeniera hacia adelante". Este procedimiento de la ingeniera corresponde a los procedimientos usuales de la generacin del sistema. La ingeniera hacia adelante es el proceso por medio del cual los sistemas son implementados en una secuencia lgica, tpicamente incluyen el anlisis, diseo, fases de construccin y mantenimiento. Mientras este acercamiento es ideal para los sistemas completamente nuevos, este es compuesto a menudo por la existencia de sistemas actuales. Es el objetivo de la ingeniera hacia delante es de modificar las partes existentes de sistemas de software hasta que ellos sean muy innovadores, qu (contrariamente a la ingeniera inversa) tambin puede incluir modificaciones del software funcionales. Los ejemplos tpicos para tales modificaciones son el uso de un lenguaje de programacin diferente, la introduccin de un nuevo sistema de manejador de bases de datos, o el traslado de software a una nueva plataforma del hardware. As pues, la ingeniera hacia adelante es el conjunto de actividades de ingeniera que toman los productos y artefactos derivados del software legado y los nuevos requisitos para producir un nuevo sistema ya designado. Cuando la ingeniera hacia adelante es realizada en relacin con la ingeniera inversa, los productos generados con ingeniera inversa siguen siendo la base para la modificacin del software con la ingeniera delantera. Se hace notar la diferencia entre ingeniera de software e ingeniera hacia adelante. Un tema importante dentro de los crculos de reingeniera de software es si nosotros aun necesitamos el trmino "forward engineering" ya que esto implica el desarrollo normal de eventos de la secuencia del ciclo de vida. Si ste fue el grado de la ingeniera hacia adelante entonces forward engineering e ingeniera de software pueden ser considerados trminos idnticos. Pero definimos forward engineering como usar la salida de la reingeniera. Esto implica que algunos grados de reingeniera deben de haber ocurrido antes de a la actividad de forward engineering. Por ejemplo, la actividad mas comn de forward engineering involucra la generacin de cdigo fuente para el diseo de la informacin el cual fue capturado por medio de una actividad previa de ingeniera inversa.

Como involucrar estas Propuestas con aplicaciones Web Si bien es cierto que actualmente no existe suficiente informacin, metodologas, o modelos para el desarrollo de aplicaciones Web, tambin es cierto que la ingeniera de software juega un papel importante en el desarrollo de aplicaciones, independientemente de lo que se trate. As pues debido a la necesidad de implementar sistemas cada vez ms fiables y con altas normas de calidad, el proceso de reingeniera juega un papel muy importante en el desarrollo de aplicaciones Web. Una vez analizadas las propuestas anteriores, queda muy claro la ventaja de aplicar el proceso de reingeniera, de tal forma que una aplicacin para Web bien diseada, modulariza el software de manera que lo hace fcil de cambiar y adaptarse a nuevos requerimientos o servicios que los clientes puedan pedir. La mejor manera de modularizar el software, es crear componentes segn estos vayan a ser utilizados para
Ingeniera de Software

la presentacin de informacin (pantallas), para la reglas de los procesos de negocios, o para el manejo de la informacin. Si una reglas de negocio cambia (por ejemplo, la forma de calcular la tasa de inters), el resto del cdigo no tiene porque cambiar (pantallas, bases de datos). Un cambio de este tipo slo significara cambiar una parte del cdigo (las reglas de negocio) , no toda la aplicacin. As tambin, si entendemos la ingeniera inversa invoca una imagen de ranura mgica. Se inserta un listado de cdigo no estructurado y no documentado por la ranura, y por el otro lado sale la documentacin completa del programa de computadora. Lamentablemente, la ranura mgica no existe. La ingeniera inversa puede extraer la informacin de diseo aparte del cdigo fuente, pero el nivel de abstraccin, la completitud de la documentacin, el grado con el cual trabajan al mismo tiempo las herramientas y el analista humano, y la direccionalidad del proceso son sumamente variables. En base a esto podemos aplicarla en el desarrollo de aplicaciones Web, pero viendo esta aplicacin como una aplicacin cualquiera ya que como sabemos, el las aplicaciones Web son demasiado cambiantes y por lo tanto, creo que la aplicacin de le ingeniera inversa e ingeniera hacia adelante pudiera no dar los resultados deseados, debido a que implicara mas recursos el buscar un nivel mas alto de abstraccin de una aplicacin en particular que partir de un nuevo diseo de acuerdo a las necesidades actuales.

Conclusiones Como hemos visto, el desarrollo de aplicaciones de software no es nada fcil, aun ms cuando se desea un producto libre de errores y con la calidad y confiabilidad necesaria. Es pues que se requieren modelos que permitan cumplir con estas expectativas, las cuales incluyan la prevencin y no la correccin de los defectos encontrados durante el desarrollo del software. Por lo cual la reingeniera no abre las expectativas en el proceso de desarrollo de software. Los subprocesos que componen la reingeniera como son reverse engineering y forward engineering buscan la evolucin del el ciclo de vida del software que de una manera u otra. Las reestructuraciones, si se realizan a conciencia, se tornan en una reingeniera de software, donde tomando la esencia de un producto, apoyado en nuevas herramientas y trabajo de diseo se realiza un nuevo software que cumple con las caractersticas esenciales para el usuario, dndole nuevas caractersticas de eficiencia en el tiempo de ejecucin, la calidad y el costo.

Bibliografa [BYRN,92] Byrne Erick J., A Conceptual Foundation of Software Reengineering, Proceedings of Conference on Software and Applications Conference, October 1990, p. 314-322. [CHIK,90] Chikofsky Elliot J., Reverse Engineering and Design Recovery: A taxonomy, IEEE Journal of Software, January 1990, p.13-17 [SNEE,89] Sneed Harry M., The Myth of Top Down Software Development and its Consequences for Software Maintenance, Proceedings of Conference on Software Maintenance, October 1989, p. 22-29. [ARNO,94] Arnold Robert S., Software Reengineering: A Quick Histoy, Communications of the ACM, Vol 37 No. 5, May 1994, p.13-14 [RICH,94] Richard C. Waters and Elliot Chikofsky., Reverse Engineering, Progress Along Many dimmensions, Communications of the ACM, Vol 37 No. 5, May 1994, p.23-70
Ingeniera de Software

You might also like