miércoles, 1 de diciembre de 2010

Modelo de Proceso de Reingeniería del Software.




Reestructuración de documentos:  Una documentación escasa es la marca de muchos sistemas 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 apañaremos con lo que tengamos. 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: idejémoslo así!

 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 se 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.

 
Ingeniería inversa:

  Es el proceso de construir especificaciones de un mayor nivel de abstracción partiendo del código fuente de un sistema software o cualquier otro producto (se puede utilizar como punto de partida cualquier otro elemento de diseño, etc.). Estas especificaciones pueden volver ser utilizadas para construir una nueva implementación del sistema utilizando, por ejemplo, técnicas de ingeniería directa.

Ventajas de la Ingeniería Inversa:
Reducir la complejidad del sistema: al intentar comprender el software se facilita su mantenimiento y la complejidad existente disminuye. Generar diferentes alternativas: del punto de partida del proceso, principalmente código fuente, se generan representaciones gráficas lo que facilita su comprensión. Recuperar y/o actualizar la información perdida (cambios que no se documentaron en su momento). 

Detectar efectos laterales: los cambios que se puedan realizar en un sistema puede conducirnos a que surjan efectos no deseados, esta serie de anomalías puede ser detectados por la ingeniería inversa.

Facilitar la reutilización: por medio de la ingeniería inversa se pueden detectar componentes de posible reutilización de sistemas existentes, pudiendo aumentar la productividad, reducir los costes y los riesgos de mantenimiento.

La finalidad de la ingeniería inversa es la de desentrañar los misterios y secretos de los sistemas en uso a partir del código. Para ello, se emplean una serie de herramientas que extraen información de los datos, procedimientos y arquitectura del sistema existente.

TIPOS DE INGENIERIA INVERSA.

Ingeniería inversa de datos: Se aplica sobre algún código de bases datos (aplicación, código SQL, etc) para obtener los modelos relacionales o sobre el modelo relacional para obtener el diagrama entidad-relación.

Ingeniería inversa de lógica o de proceso: Cuando la ingeniería inversa se aplica sobre código de un programa para averiguar su lógica o sobre cualquier documento de diseño para obtener documentos de análisis o de requisitos.

Ingeniería inversa de interfaces de usuario: Se aplica con objeto de mantener la lógica interna del programa para obtener los modelos y especificaciones que sirvieron de base para la construcción de la misma, con objeto de tomarlas como punto de partida en procesos de ingeniería directa que permitan modificar dicha interfaz.

HERRAMIENTAS PARA LA INGENIERIA INVERSA.

Los Depuradores.
Las Herramientas de Inyección de Fallos.
Los Desensambladores.
Los compiladores Inversos o Decompiladores.
Las Herramientas CASE.

 
REESTRUCTURACION DEL SOFTWARE.

La reestructuración del software modifica el código fuente y/o los datos en un intento de adecuarlo a futuros cambios. Tiende a centrarse en los detalles de diseño de módulos individuales y en estructuras de datos locales definidas dentro de los módulos. Los beneficios de de la reestructuración son:

Programas de mayor calidad con mejor documentación y menos complejidad, y ajustados a las prácticas y estándares de la ingeniería del software moderno.

Reduce la frustración entre ingenieros del software que deban trabajar con el programa, mejorando por tanto la productividad y haciendo más sencillo el aprendizaje.

Reduce el esfuerzo requerido para llevar a cabo las actividades de mantenimiento.

Hace que el software se mas sencillo de comprobar y depurar.

La reestructuración se produce cuando la arquitectura básica de la aplicación es sólida, aún cuando sus interioridades técnicas necesiten un retoque. Comienza cuando existen partes considerables del software que son útiles todavía y solamente existe un subconjunto de todos los módulos y datos que requieren una extensa modificación.

Los tipos de reestructuración, básicamente son 2: del código y de datos.

Reestructuración del código.

La reestructuración del código se lleva a cabo para conseguir un diseño que produzca la misma función pero con mayor calidad que el programa original.

Reestructuración de datos.

Primero se realiza el ANALISIS del código. 

Se evalúan las definiciones de los datos, archivos, O/I e Interfaces. 

Extraer elementos y objetos de datos para obtener información del flujo de datos y comprender la estructura.

 
Ingeniería directa (forward engineering):

En un mundo ideal, las aplicaciones se  reconstruyen utilizan utilizando un «motor de reingeniería» automatizado. En el motor se insertm’a el programa viejo, que lo analizaría, reestructurm’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 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 para alterar o reconstruir el sistema existente 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.

LA ECONOMIA DE LA REINGENIERIA:

En un mundo perfecto, todo programa que no se pudiera mantener se retiraría inmediatamente, para ser sustituido por unas aplicaciones de alta calidad, fabricadas mediante reingeniería y desarrolladas empleando las prácticas de la ingeniería del software modernas. Sin embargo, vivimos en un mundo de recursos limitados. La reingeniería consume recursos que se pueden utilizar para otros propósitos de negocio. Consiguientemente, antes de que una organización intente efectuar una reingeniería de la aplicación existente, deberá llevar a cabo un análisis de costes y beneficios.

Se ha propuesto un modelo de análisis de costes y beneficios para la reingeniería. Se definen nueve parámetros:

  • P, = coste de mantenimiento anual actual para una aplicación;
    P, = coste de operación anual de una aplicación;
    P, = valor de negocios anual actual de una aplicación;
    P, = coste de mantenimiento anual predicho después
    P, = coste de operaciones anual predicho después de
    P, = valor de negocio actual predicho después de la
    P, = costes de reingeniería estimados;
    P, = fecha estimada de reingeniería;
  • P, = factor de riesgo de la reingeniería (P, = 1 ,O es
    L = vida esperada del sistema.

    El coste asociado al mantenimiento continuado de una aplicación candidata (esto es, si no se realiza la reingeniería) se puede definir como:

    Cmant=  [P3-(P1+P2)] *L

    Los costes asociados con la reingeniería se definen empleando la relación siguiente:

    Creing=[P6 - (P4+P5)] * (L –P8) – (P7 * P9)]

    Empleando los costes presentados en la ecuaciones (30.1) y (30.2), los beneficios globales de la reingeniería se pueden calcular en la forma siguiente> 

    Beneficio y coste = Creing- Cmant  El análisis de costes y beneficios presentados en las ecuaciones anteriores se puede llevar a cabo para todas aquellas aplicaciones de alta prioridad que se hayan identificado durante un análisis de inventario (Sección 30.2.2). Aquellas aplicaciones que muestren el mayor beneficio en relación con los costes podrán
    destinarse a la reingeniería, mientras que las demás podrán ser propuestas hasta que se disponga de más recursos.

     

No hay comentarios:

Publicar un comentario