Reingeniería
La reingeniería se produce en dos niveles distintos de abstracción. En el nivel de negocios, la reingeniería se concentra en el proceso de negocios con la intención de efectuar cambios que mejoren la competitividad en algún aspecto de los negocios.
¿Qué es la Reingeniería?
“Modificación de un producto software, o de ciertos componentes, usando para el análisis del sistema existente técnicas de Ingeniería Inversa y, para la etapa de reconstrucción, herramientas de Ingeniería directa, de tal manera que se oriente este cambio hacia mayores niveles de facilidad en cuanto a mantenimiento, reutilización, comprensión o evaluación.”
Beneficios de aplicar reingeniería
- Pueden reducir los riesgos evolutivos de una organización.
- Puede ayudar a las organizaciones a recuperar sus inversiones en software.
- Puede hacer el software más fácilmente modificable
- Amplía las capacidades de las herramientas CASE
- Es un catalizador para la automatización del mantenimiento del software
- Puede actuar como catalizador para la aplicación de técnicas de inteligencia artificial para resolver problemas de ingeniería
Pasos para la aplicación de reingeniería del software
- Define las Metas comerciales.
- Identifica y evalúa los procesos de negocios existentes.
- Crea Procesos Comerciales revisados que mejoren las metas comerciales.
El proceso de la reingeniería del software
- Acompaña el análisis de inventarios.
- La reestructuración de documentos.
- La ingeniería Inversa.
- La estructuración de Programas y datos.
- La ingeniería directa.
Reingeniería de Procesos de Negocios
La reingeniería constituye una recreación y reconfiguración de las actividades y procesos de la empresa
Todo sistema es en realidad una jerarquía de subsistemas
Principios de reingeniería de procesos.
Organización en torno a los resultados, no en torno a las tareas
Hay que hacer que quienes utilicen la salida del proceso lleven a cabo el proceso
Un modelo de RPN
Reingeniería del Software
Mantenimiento del software:
Un modelo de procesos de reingeniería del software:
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 detallada (por ejemplo: tamaño, edad, importancia para el negocio) de todas las aplicaciones activas.
Reestructuración de documentos. Una documentación escasa es la marca de muchos sistemas heredados.
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.).
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
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.
Tipos de Ingeniería 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 Ingeniería Inversa
Los Depuradores: Un depurador es un programa que se utiliza para controlar otros programas.
Las Herramientas de Inyección de Fallos: Las herramientas que pueden proporcionar entradas malformadas con formato inadecuado a procesos del software objetivo para provocar errores son una clase de herramientas de inserción de fallos.
Los Desensambladores: Se trata de una herramienta que convierte código máquina en lenguaje ensamblador. El lenguaje ensamblador es una forma legible para los humanos del código máquina.
Los compiladores Inversos o Decompiladores: Un decompilador es una herramienta que transforma código en ensamblador o código máquina en código fuente en lenguaje de alto nivel.
Las Herramientas CASE: Las herramientas de ingeniería de sistemas asistida por ordenador (Computer-Aided Systems Engineering – CASE) aplican la tecnología informática a las actividades, las técnicas y las metodologías propias de desarrollo de sistemas para automatizar o apoyar una o más fases del ciclo de vida del desarrollo de sistemas.
Reestructuración del Software
La reestructuración del software modifica el código fuente y/o los datos en un intento de adecuarlo a futuros cambios.
Los beneficios 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 es más sencillo de comprobar y depurar.
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.
Ingeniería directa (forward engineering):
La Economía de la Reingeniería:
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
En un mundo ideal, las aplicaciones se reconstruyen utilizan utilizando un «motor de reingeniería» automatizado.