Reingenieria de Software (Gr.4 a II 0801)

12
Grupo #4 Reingeniería de Software 1 Introducción La evolución del software ha constado de diferentes etapas de desarrollo, y una de ellas se llamo la “crisis del Software”. Esta crisis fue el resultado de la introducción de la tercera generación del Hardware. El hardware dejo de ser un impedimento para el desarrollo de la informática; redujo los costos y mejoro la calidad y eficiencia en el software producido. A raíz de esta crisis se vio la necesidad de crear estándares de desarrollo del software, esto dio lugar a lo que hoy llamamos "Ingeniería de software" la cual es el establecimiento y uso de principios de la ingeniería a fin de obtener un software que sea fiable y que funcione eficientemente, con los menores costos posibles. A pesar de la creación de estos estándares, muchos sistemas siguieron siendo desarrollados y mantenidos sin aplicar ninguna practica de ingeniería de software por lo que hoy en día, muchas organizaciones se ven obligadas a seguir viviendo en esta crisis dado que sus sistemas son vitales para el funcionamiento de las mismas. La reingeniería de software es la actividad con la cual se pretende dar solución a estos problemas. La reingeniería de software pretende dejar morir esos sistemas imposibles de mantener, no sin antes extraer de ellos los conocimientos que permitan crear un nuevo sistema fiable, eficiente y de fácil mantenimiento. En muchos de los casos la reingeniería de software se convierte en la única solución a estos sistemas de baja calidad, sin embargo el esfuerzo de aplicar reingeniería es un proceso difícil, pero trae grandes beneficios si se emplea de manera adecuada.

Transcript of Reingenieria de Software (Gr.4 a II 0801)

Page 1: Reingenieria de Software (Gr.4 a II 0801)

Grupo #4 Reingeniería de Software

1

Introducción

La evolución del software ha constado de diferentes etapas de desarrollo,

y una de ellas se llamo la “crisis del Software”. Esta crisis fue el resultado de

la introducción de la tercera generación del Hardware. El hardware dejo

de ser un impedimento para el desarrollo de la informática; redujo los

costos y mejoro la calidad y eficiencia en el software producido.

A raíz de esta crisis se vio la necesidad de crear estándares de desarrollo

del software, esto dio lugar a lo que hoy llamamos "Ingeniería de software"

la cual es el establecimiento y uso de principios de la ingeniería a fin de

obtener un software que sea fiable y que funcione eficientemente, con los

menores costos posibles.

A pesar de la creación de estos estándares, muchos sistemas siguieron

siendo desarrollados y mantenidos sin aplicar ninguna practica de

ingeniería de software por lo que hoy en día, muchas organizaciones se

ven obligadas a seguir viviendo en esta crisis dado que sus sistemas son

vitales para el funcionamiento de las mismas.

La reingeniería de software es la actividad con la cual se pretende dar

solución a estos problemas. La reingeniería de software pretende dejar

morir esos sistemas imposibles de mantener, no sin antes extraer de ellos los

conocimientos que permitan crear un nuevo sistema fiable, eficiente y de

fácil mantenimiento.

En muchos de los casos la reingeniería de software se convierte en la única

solución a estos sistemas de baja calidad, sin embargo el esfuerzo de

aplicar reingeniería es un proceso difícil, pero trae grandes beneficios si se

emplea de manera adecuada.

Page 2: Reingenieria de Software (Gr.4 a II 0801)

Grupo #4 Reingeniería de Software

2

¿Qué es Reingeniería de Software?

Reingeniería del software se puede definir como: “modificación de un

producto software, o de ciertos componentes, usando técnicas de

Ingeniería Inversa, para el análisis del sistema existente y, herramientas de

Ingeniería Directa para la etapa de reconstrucción, de tal manera que se

oriente este cambio hacia mayores niveles de facilidad en cuanto a

mantenimiento, reutilización, comprensión o evaluación.”

Cuando una aplicación lleva siendo usada años, es fácil que esta

aplicación se vuelva inestable como fruto de las múltiples correcciones,

adaptaciones o mejoras que han podido surgir a lo largo del tiempo. Esto

deriva en que cada vez que se pretende realizar un cambio se producen

efectos colaterales inesperados y hasta de gravedad, por lo que se hace

necesario, aplicar reingeniería a la misma, si se prevé que la aplicación

seguirá siendo de utilidad.

Reingeniería de Software en los LIS

Uno de los ejemplos más claros en donde es utilizada la Reingeniería de

Software es en los “Sistemas de Información Heredados” (LIS por sus siglas

en ingles Legacy Information System), los cuales, por lo general constituyen

la columna vertebral del flujo de información de las empresas y la principal

forma de agruparla. Un LIS puede ser definido como “cualquier sistema de

información que significativamente se resiste a la modificación y

evolución”. Tales LIS pueden causar serios problemas a la organización

como ser:

o Casi siempre son ejecutados sobre hardware obsoleto que son lentos

y caros de mantener.

o El mantenimiento del software puede ser caro, porque carecen de la

documentación necesaria para el entendimiento de los detalles del

sistema y su seguimiento es costoso y consume mucho tiempo.

o Una falta de interfaces limpias hace que la integración de los LIS con

otros sistemas sea difícil.

o Los LIS son también difíciles mas no imposibles ampliarlos.

La Reingeniería de Software es una forma de modernización para mejorar

las capacidades y/o mantenibilidad de los sistemas de información

Page 3: Reingenieria de Software (Gr.4 a II 0801)

Grupo #4 Reingeniería de Software

3

heredados mediante la aplicación de tecnologías y practicas modernas.

La Reingeniería de Software ofrece una disciplina de preparación para

migrar un sistema de información heredado hacia un sistema

evolucionable. El proceso aplica principios de ingeniería para un sistema

existente para encontrar nuevos requerimientos.

"El Instituto de Ingeniería de software (SEI) desarrollo una definición de

Reingeniería como: Reingeniería es la transformación sistemática de un

sistema existente dentro de una nueva forma de realizar mejoramientos de

calidad en unas operaciones, capacidad del sistema, funcionabilidad,

rendimiento o evolucionabilidad a bajo costo, agendas o riesgos para el

cliente."

El propósito de la reingeniería es que los sistemas existentes tomen ventajas

de las nuevas tecnologías y habilitar el nuevo esfuerzo de desarrollo para

que aproveche las ventajas de reutilizar sistemas existentes. La reingeniería

tiene el potencial de mejorar la productividad y calidad del software a

través de todo el ciclo de vida.

La reingeniería casi siempre implica cambiar la forma de un programa y

mejorar su documentación. En este caso, la funcionabilidad del programa

no es cambiada; sólo su forma es modificada. En otros casos, la

reingeniería va más allá de la forma e incluye rediseñar para cambiar la

funcionabilidad del programa para buscar mejores requerimientos de

usuario.

Beneficios de Aplicar Reingeniería de Software

Entre los beneficios de aplicar reingeniería a un producto existente se

puede incluir:

Pueden reducir los riegos evolutivos de una organización.

Reducir los errores y costos del mantenimiento.

Puede ayudar a las organizaciones a recuperar sus inversiones en

software.

Habilitar la conversión y migración de sistemas.

Puede convertir el software en uno más fácilmente modificable.

Amplía las capacidades de las herramientas CASE.

Es un catalizador para la automatización del mantenimiento del

software.

Page 4: Reingenieria de Software (Gr.4 a II 0801)

Grupo #4 Reingeniería de Software

4

Puede actuar como catalizador para la aplicación de técnicas de

inteligencia artificial para resolver problemas de reingeniería.

Métodos y Modelos de la Reingeniería de Software

Los principales métodos para llevar a cabo la Reingeniería de software de

una manera eficiente y satisfactoria son los siguientes:

El Método Análisis de Opciones para Reingeniería (OAR)

El Modelo Herradura

El Modelo Cíclico

Método Análisis de Opciones para Reingeniería (OAR)

Es un método sistemático, de arquitectura central y de toma de decisiones

para la identificación y extracción de componentes dentro de grandes y

complejos sistemas de software. La extracción envuelve rehabilitación de

partes de un sistema viejo para su re-uso. OAR identifica componentes de

arquitectura potencialmente relevantes y analiza los cambios requeridos

para usarlos en una línea de producción de software o nuevas

arquitecturas de software. En esencia, OAR proporciona un conjunto de

opciones de extracción junto con estimación de costos, esfuerzo y riesgos

asociados con estas opciones.

El Modelo Herradura

Los tres procesos básicos (análisis de un sistema existente, transformación

lógica y desarrollo de un nuevo sistema) forman la base del modelo de

herradura.

En su más pura y completa forma, el primer proceso recupera la

arquitectura por medio de la extracción de artefactos desde el código

fuente. Esta estructura recuperada es analizada para determinar si esta se

adapta a la arquitectura antes diseñada.

El segundo proceso es la transformación de arquitectura. En este caso, la

arquitectura antes construida es recuperada y es re ingeniada para

hacerla una nueva arquitectura deseable. Esta es reevaluada contra las

metas de calidad del sistema y sujetas a otras restricciones

organizacionales y económicas.

Page 5: Reingenieria de Software (Gr.4 a II 0801)

Grupo #4 Reingeniería de Software

5

El tercer proceso del modelo de herradura usa el "Architecture-Based

Development (ABD)" para ejemplificar la arquitectura deseable. En este

proceso, ya empaquetados los tópicos son decididas e interconectadas

las estrategias elegidas. Los artefactos a nivel de código del sistema de

información son normalmente tapados o reescritos para adaptarlos dentro

de la nueva arquitectura.

El Modelo Cíclico

Este es el modelo más común y mayormente utilizado, debido a su alto

grado de confiablidad y eficiencia, además consta de una secuencia de

seis actividades bien estructuradas, que hacen posible practicar la

Reingeniería de software de una manera que genere los mejores

resultados. Es por esta razón que nos enfocaremos a explicar y definir de

una manera más profunda este modelo de Reingeniería de Software.

Los diferentes pasos a seguir en este método son los siguientes:

Análisis de inventarios

Reestructuración de documentos

Ingeniería inversa

Reestructuración de código

Reestructuración de datos.

Ingeniería directa

Todos estos pasos se realizan con la finalidad de crear versiones de

programas ya existentes que sean de mejor calidad y los mismos tengan

una mayor facilidad de mantenimiento.

La siguiente imagen es una representación gráfica de los diferentes pasos

que se realizan al aplicar la Reingeniería de Software:

Page 6: Reingenieria de Software (Gr.4 a II 0801)

Grupo #4 Reingeniería de Software

6

La reingeniería debe ser entendida como un proceso mediante el cual se

mejora un software existente haciendo uso de técnicas de ingeniería

inversa y reestructuración de código.

Una representación más simple para del modelo Cíclico, define las seis

actividades de una forma secuencial y lineal, pero esto no siempre es así.

Por ejemplo, puede ser que la ingeniería inversa (la comprensión del

funcionamiento interno de un programa) tenga que producirse antes de

que pueda comenzar la reestructuración de documentos.

El paradigma de este método de reingeniería, mostrado en la figura, como

se dijo anteriormente, es un ciclo. Esto significa que cada una de las

actividades presentadas como parte del paradigma pueden repetirse en

otras ocasiones. Para un ciclo en particular, el proceso puede terminar

después de cualquier de estas actividades.

Pasos o actividades del modelo Cíclico.

A continuación se explicara en qué consisten las diferentes etapas del

proceso de reingeniería de software en este modelo.

Análisis de inventario:

Todas las organizaciones de software deberán disponer de un inventario

de todas sus aplicaciones. El inventario puede que no sea más que una

hoja de cálculo con la información que proporciona una descripción

Page 7: Reingenieria de Software (Gr.4 a II 0801)

Grupo #4 Reingeniería de Software

7

detallada (por ejemplo: tamaño, edad, importancia para el negocio) de

todas las aplicaciones activas.

Los candidatos a la reingeniería aparecen cuando se ordena esta

información en función de su importancia para el negocio, longevidad,

mantenibilidad actual y otros criterios localmente importantes. Es entonces

cuando es posible asignar recursos a las aplicaciones candidatas para el

trabajo de reingeniería.

Es importante destacar que el inventario deberá revisarse con regularidad.

El estado de las aplicaciones (por ejemplo, la importancia con respecto al

negocio) puede cambiar en función del tiempo y, como resultado,

cambiarán también las prioridades para la reingeniería.

Reestructuración de documentos:

Una documentación escasa es la marca de muchos sistemas de

información heredados. ¿Qué se puede hacer al respecto?

Opción 1: La creación de documentación consume muchísimo tiempo. El

sistema funciona, y ya nos ajustaremos con lo que se tiene. En algunos

casos, éste es el enfoque correcto. No es posible volver a crear la

documentación para cientos de programas de computadoras. Si un

programa es relativamente estático está llegando al final de vida útil, y no

es probable que experimente muchos cambios.

Opción 2: Es preciso actualizar la documentación, pero se dispone de

recursos limitados. Se utilizará un enfoque “del tipo documentar si se

modifica”. Quizá no es necesario volver a documentar por completo la

aplicación. Más bien se documentarán por completo aquellas partes del

sistema que estén experimentando cambios en ese momento. La

colección de documentos útil y relevante irá evolucionando con el tiempo.

Opción 3: El sistema es fundamental para el negocio, y es preciso volver a

documentarlo por completo. En este caso, un enfoque inteligente consiste

en reducir la documentación al mínimo necesario.

Page 8: Reingenieria de Software (Gr.4 a II 0801)

Grupo #4 Reingeniería de Software

8

Todas y cada una de estas opciones son viables. Las organizaciones del

software deberán seleccionar aquella que resulte más adecuada para

cada caso.

Ingeniería inversa:

El término “ingeniería inversa” tiene sus orígenes en el mundo del hardware.

Una cierta compañía desensambla un producto de hardware competitivo

en un esfuerzo por comprender los “secretos” del diseño y fabricación de

su competidor. Estos secretos se podrán comprender más fácilmente si se

obtuvieran las especificaciones de diseño y fabricación del mismo. Pero

estos documentos son privados, y no están disponibles para la compañía

que efectúa la ingeniería inversa. En esencia, una ingeniería inversa con

éxito precede de una o más especificaciones de diseño y fabricación para

el producto, mediante el examen de ejemplos reales de ese producto.

La ingeniería inversa del software es algo bastante similar. Sin embargo, en

la mayoría de los casos, el programa del cual hay que hacer una

ingeniería inversa no es el de un rival, sino, más bien, el propio trabajo de la

compañía (con frecuencia efectuado hace muchos años). Los “secretos”

que hay que comprender resultan incomprensibles porque nunca se llegó

a desarrollar una especificación. Consiguientemente, la ingeniería inversa

del software es el proceso de análisis de un programa con el fin de crear

una representación de programa con un nivel de abstracción más

elevado que el código fuente. La ingeniería inversa se extraerá del

programa existente información del diseño arquitectónico y de proceso, e

información de los datos.

Reestructuración del código:

El tipo más común de reingeniería es la reestructuración del código.

Algunos sistemas heredados tienen una arquitectura de programa

relativamente sólida, pero los módulos individuales han sido codificados de

una forma que hace difícil comprenderlos, comprobarlos y mantenerlos. En

estos casos, se puede reestructurar el código ubicado dentro de los

módulos sospechosos.

Para llevar a cabo esta actividad, se analiza el código fuente mediante

una herramienta de reestructuración, se indican las violaciones de las

Page 9: Reingenieria de Software (Gr.4 a II 0801)

Grupo #4 Reingeniería de Software

9

estructuras de programación estructurada, y entonces se reestructura el

código (esto se puede hacer automáticamente). El código reestructurado

resultante se revisa y se comprueba para asegurar que no se hayan

introducido anomalías. Se actualiza la documentación interna del código.

Reestructuración de datos:

Un programa que posea una estructura de datos débil será difícil de

adaptar y de mejorar. De hecho, para muchas aplicaciones, la

arquitectura de datos tiene más que ver con la viabilidad a largo plazo del

programa que el propio código fuente.

A diferencia de la reestructuración de código, que se produce en un nivel

relativamente bajo de abstracción, la estructuración de datos es una

actividad de reingeniería a gran escala. En la mayoría de los casos, la

reestructuración de datos comienza por una actividad de ingeniería

inversa. La arquitectura de datos actual se analiza minuciosamente y se

definen los modelos de datos necesarios. Se identifican los objetos de

datos y atributos y, a continuación, se revisan las estructuras de datos a

efectos de calidad.

Cuando la estructura de datos es débil (por ejemplo, actualmente se

implementan archivos planos, cuando un enfoque relacional simplificaría

muchísimo el procesamiento), se aplica una reingeniería a los datos.

Dado que la arquitectura de datos tiene una gran influencia sobre la

arquitectura del programa, y también sobre los algoritmos que los pueblan,

los cambios en datos darán lugar invariablemente a cambios o bien de

arquitectura o bien de código.

Ingeniería directa:

En un mundo ideal, las aplicaciones se reconstruyen utilizando un “motor

de reingeniería” automatizado. En el motor se insertaría el programa viejo,

que lo analizaría, reestructuraría y después regeneraría la forma de exhibir

los mejores aspectos de la calidad del software. Después de un espacio de

tiempo corto, es probable que llegue a aparecer este “motor”, pero los

fabricantes de CASE han presentado herramientas que proporcionan un

subconjunto limitado de estas capacidades y que se enfrentan con

Page 10: Reingenieria de Software (Gr.4 a II 0801)

Grupo #4 Reingeniería de Software

10

dominios de aplicaciones específicos (por ejemplo, aplicaciones que han

sido implementadas empleando un sistema de bases de datos específico).

Lo que es más importante, estas herramientas de reingeniería cada vez son

más sofisticadas.

La ingeniería directa, que se denomina también renovación o

reclamación, no solamente recupera la información de diseño de un

software ya existente, sino que, además, utiliza esta información en un

esfuerzo por mejorar su calidad global. En la mayoría de los casos, el

software procedente de una reingeniería vuelve a implementar la

funcionalidad del sistema existente, y añade además nuevas funciones y/o

mejora el rendimiento global.

Page 11: Reingenieria de Software (Gr.4 a II 0801)

Grupo #4 Reingeniería de Software

11

Conclusión

El software siempre ha sido y será lo que le puede dar vida y plusvalía a la

computación; sin el software, las computadoras serían inservibles y no

podrían ser utilizadas para ningún beneficio. Conforme pasa el tiempo,

hemos visto que las computadoras son utilizadas en casi todos los aspectos

de la vida del ser humano, hoy en día se ven computadoras en los bancos,

tiendas, automóviles, oficinas gubernamentales, empresas privadas, el

hogar y en un futuro cercano hasta en el propio cuerpo humano.

En la actualidad se puede observar que una falla en el software, en el

mejor de los casos puede dar como resultados la pérdida de tiempo pero

en algunos otros casos también puede resultar en pérdidas de vidas

humanas

El desarrollo de software siempre ha estado en un proceso continuo de

evolución, y como en cualquier actividad evolutiva, los primeros años

siempre van acompañados de grandes dificultades debidas en gran parte

a que no se cuenta con las herramientas ni los conocimientos para realizar

bien las tareas que involucra esta actividad.

La reingeniería no es una actividad que se lleva a cabo de la noche a la

mañana, además implica una gran inversión de esfuerzo, tiempo y

recursos. Es por ello que es necesario planear de una manera muy

cuidadosa todo el proceso

En la reingeniería de software existen métodos y modelos que permiten

que esta actividad se pueda desarrollar de una manera bien direccionada

para poder crear una nueva aplicación con un alto nivel de calidad,

fiabilidad y plusvalía. De esta manera continuar con el interminable

camino que espera el futuro de la informática en nuestras vidas y las de

todos los demás.

Page 12: Reingenieria de Software (Gr.4 a II 0801)

Grupo #4 Reingeniería de Software

12

Bibliografía

www.monografias.com/trabajos14/historiaingenieria/historiaingenieria.shtml

www.monografias.com/trabajos5/inso/inso.shtml

www.monografias.com/trabajos10/reing/reing.shtml

http://cnx.org/member_profile/msicilia