Está en la página 1de 12

Reingeniería e Ingeniería de reverso.

Reingeniería del software se puede definir como: “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.” La Ingeniería de Reverso es lo opuesto a la
generación de código: el código fuente del sistema es examinado, analizado y convertido en
entidades en el repositorio.
Entre las técnicas de Reingeniería tenemos:

•Reestructuración de Datos: Esto es reversar el modelo físico al modelo lógico para obtener
el modelo de E-R de la base de datos, recuperando el diccionario de datos, atributos,
entidades, dominios, cardinalidad entre otros, la mayoría de las herramientas CASE del
mercado cumplen con esta función.
• Reestructuración de Código: Llevar a cabo esta actividad requiere analizar el código
fuente empleando una herramienta de reestructuración, de no tener el código fuente
disponible puede aplicarse ingeniería inversa sobre el compilado para obtener el código
fuente original siempre y cuando la licencia del software lo permita, inmediatamente se
indican las violaciones de las estructuras de programación estructurada u orientada a
objetos, 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.
Reingeniería del software se puede definir como: “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.”
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, si se prevé que la aplicación seguirá siendo de utilidad, aplicar reingeniería a la
misma.
Entre los beneficios de aplicar reingeniería a un producto existente se puede incluir:
 Pueden reducir los riegos 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 reingeniería
La reingeniería del software involucra diferentes actividades como son:
 análisis de inventarios
 reestructuración de documentos
 ingeniería inversa
 reestructuración de programas y datos
 ingeniería directa
con la finalidad de crear versiones de programas ya existentes que sean de mejor calidad y
los mismos tengan una mayor facilidad de mantenimiento.

Figure 1
Figura 1. Pasos de la Reingeniería del Software
Análisis de Inventarios
Todas las organizaciones de software deberían tener un inventario de todas sus aplicaciones.
El inventario tal vez no sea más que un modelo en una hoja de cálculo que contenga
información que proporcione una descripción detallada (tamaño, edad, importancia para el
negocio) de 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 señalar que el inventario deberá visitarse con regularidad, el estado de las
aplicaciones puede cambiar en función del tiempo y, como resultado, cambiarán las
prioridades para la reingeniería.
Reestructuración de documentos
La documentación débil es la marca de muchos sistemas heredados. ¿Pero que se hace
acerca de ellos? ¿Cuáles son las opciones? Crear documentación consume mucho tiempo,
si el sistema funciona vivirá con lo que tenga. La documentación debe actualizarse pero se
tiene recursos limitados. Se utiliza un enfoque de “documentar cuando se toque”. El sistema
es crucial para el negocio y debe volver a documentarse por completo incluso en este caso
un enfoque inteligente es recortar la documentación a un mínimo esencial. Cada una de
estas opciones es viable. Una organización de software debe elegir la más apropiada para
cada caso.
Ingeniería Inversa
Este término 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 similar. 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. 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 es un proceso de recuperación de diseño. Con las herramientas de 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 de código
El tipo más común de reingeniería es la reestructuración de código, se puede hacer con
módulos individuales que se codifican de una manera que dificultan comprenderlos,
probarlos y mantenerlos.
Llevar a cabo esta actividad requiere analizar el código fuente empleando una herramienta
de reestructuración, se indican las violaciones de las 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
La reestructuració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 con una actividad de ingeniería inversa. La
arquitectura de datos actual se analiza con minuciosidad y se define los modelos de datos
necesarios, se identifican los objetivos de datos y los atributos, y después se revisa la calidad
de las estructuras de datos existentes.
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 lo 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 dominios de aplicaciones
específicos. Lo que es más importante, estas herramientas de reingeniería cada vez son más
sofisticadas.
La ingeniería directa no solo recupera la información de diseño a partir del software existente,
también utiliza esta información para alterar o reconstruir el sistema existente con la finalidad
de mejorar su calidad global. En la mayoría de los casos el software sometido a reingeniería
vuelve a implementar la función del sistema existente y también añade nuevas funciones o
mejoras.
La ingeniería inversa se ha definido como 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.
Beneficios de Ingeniería Inversa
La aplicación de ingeniería inversa nunca cambia la funcionalidad del software sino que
permite obtener productos que indican cómo se ha construido el mismo. Se realiza permite
obtener los siguientes beneficios:
 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): en la evolución del sistema se realizan cambios que no se suele actualizar en las
representaciones de nivel de abstracción más alto, para lo cual se utiliza la recuperación de
diseño.
 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 Ingeniería Inversa
La ingeniería inversa puede ser de varios tipos:
 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. Permite avanzar
paso a paso por el código, rastrear fallos, establecer puntos de control y observar las
variables y el estado de la memoria en un momento dado del programa que se esté
depurando. Los depuradores son muy valiosos a la hora de determinar el flujo lógico del
programa.
Un punto de ruptura (breakpoint) es una instrucción al depurador que permite parar la
ejecución del programa cuando cierta condición se cumpla. Por ejemplo, cuando un
programa accede a cierta variable, o llama a cierta función de la API, el depurador puede
parar la ejecución del programa.
Algunos depuradores de Windows son:
 OllyDbg → es un potente depurador con un motor de ensamblado y desensamblado
integrado. Tiene numerosas otras características incluyendo un precio de 0 $. Muy útil para
parcheado, desensamblado y depuración.
 WinDBG → es una pieza de software gratuita de Microsoft que puede ser usada para
depuración local en modo usuario, o incluso depuración remota en modo kernel.
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 errores del programa pueden ser analizados para determinar si los
errores existen en el software objetivo. Algunos fallos tienen implicaciones en la seguridad,
como los fallos que permiten un acceso directo del asaltante al ordenador principal o red.
Hay herramientas de inyección de fallos basados en el anfitrión que funcionan como
depuradores y pueden alterar las condiciones del programa para observar los resultados y
también están los inyectores basados en redes que manipulan el tráfico de la red para
determinar el efecto en el aparato receptor.
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
desensambladotes revelan que instrucciones máquinas son usadas en el código. El código
máquina normalmente es específico para una arquitectura dada del hardware. De forma que
los desensambladotes son escritor expresamente para la arquitectura del hardware del
software a desensamblar.
Algunos ejemplos de desensambladores son:
 IDA Pro → es un desensamblador profesional extremadamente potente. La parte mala es su
elevado precio.
 PE Explorer → es un desensamblador que “se centra en facilidad de uso, claridad y
navegación”. No es tan completo como IDA Pro, pero tiene un precio más bajo.
 IDA Pro Freeware 4.1 → se comporta casi como IDA Pro, pero solo desensambla código
para procesadores Intel x86 y solo funciona en Windows.
 Bastard Disassembler → es un potente y programable desensamblador para Linux y
FreeBSD.
 Ciasdis → esta herramienta basada en Forth permite construir conocimiento sobre un cuerpo
de código de manera interactiva e incremental. Es único en que todo el código
desensamblado puede ser re-ensamblado exactamente al mismo código.
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. También existen decompiladores que
transforman lenguae intermedio en código fuente en lenguaje de alto nivel. Estas
herramientas son sumamente útiles para determinar la lógica a nivel superior como bucles o
declaraciones if-then de los programas que son decompilados. Los decompiladores son
parecidos a los desensambladotes pero llevan el proceso un importante paso más allá.
Algunos decompiladores pueden ser:
 DCC Decompiler → es una exacelente perspectiva teórica a la descompilación, pero el
descompilador sólo soporta programas MSDOS.
 Boomerang Decompiler Project → es un intento de construir un potente descompilador para
varias máquinas y lenguajes.
 Reverse Engineering Compiler (REC) → es un potente “descompilador” que descompila
código ensamblador a una representación del código semejante a C. El código está a medio
camino entre ensamblador y C, pero es mucho más legible que el ensamblador puro.
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. En el caso de la ingeniería inversa
generalmente este tipo de herramientas suelen englobar una o más de las anteriores junto
con otras que mejoran el rendimiento y la eficiencia.
Reingeniería de Software Se puede definir como el proceso completo de convertir elcódigo
de programa al diseño CASE, modificar el diseño yvolver a generar el nuevo código. El
termino se usa endistintas áreas de la ingeniería, programación y negocios.

15. Reingeniería de software Con respecto a los negocios, es


una forma de darle una nuevaorientación a los procesos claves de
una organización, de estamanera el rol de los analistas de sistemas
radica en el uso detecnologías de información novedosas, como
consecuencia alos cambios requeridos.

16. Beneficios de la 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.  Puede
ayudar a las organizaciones a recuperar sus inversiones en
software. Puede hacer el software más fácilmente modificable.

17. Beneficios de la Reingeniería de Software  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 reingeniería.

18. Pasos para la Reingeniería de software

19. Pasos para la Reingeniería de Software  Análisis de


inventario: Todas las organizaciones de software deberían tener un
inventario de todas sus aplicaciones. 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
importante señalar que el inventario deberá visitarse con
regularidad, el estado de las aplicaciones puede cambiar en función
del tiempo y, como resultado, cambiarán las prioridades para la
reingeniería.

20. Pasos para la Reingeniería de Software  Restauración de


documentos: La documentación debe actualizarse pero se tiene
recursos limitados. Se utiliza un enfoque de “documentar cuando se
toque”. El sistema es crucial para el negocio y debe volver a
documentarse por completo incluso en este caso un enfoque
inteligente es recortar la documentación a un mínimo esencial.
Cada una de estas opciones es viable. Una organización de
software debe elegir la más apropiada para cada caso.

21. Pasos para la Reingeniería de Software  Ingeniería Inversa:


La Ingeniería inversa es un proceso de recuperación de diseño.
Con las herramientas de 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.

22. Pasos para la Reingeniería de Software  Restructuración de


códigos: Llevar a cabo esta actividad requiere analizar el código
fuente empleando una herramienta de reestructuración, se indican
las violaciones de las 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.

23. Pasos para la Reingeniería de Software  La reestructuració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 con
una actividad de ingeniería inversa. La arquitectura de datos actual
se analiza con minuciosidad y se define los modelos de datos
necesarios, se identifican los objetivos de datos y los atributos, y
después se revisa la calidad de las estructuras de datos existentes.

24. Pasos para la Reingeniería de Software  Ingeniería directa:


La ingeniería directa no solo recupera la información de diseño a
partir del software existente, también utiliza esta información para
alterar o reconstruir el sistema existente con la finalidad de mejorar
su calidad global. En la mayoría de los casos el software sometido a
reingeniería vuelve a implementar la función del sistema existente y
también añade nuevas funciones o mejoras.

Qué es un estándar?
De acuerdo con la definición de la Real Academia Española, “estándar es aquello que sirve
como tipo, modelo, norma, patrón o referencia”.
Qué es un estándar de calidad?
Estándar de calidad es el que reúne los requisitos mínimos en busca de la excelencia dentro
de una organización institucional.
¿Qué son los estándares básicos de competencias?
Son criterios claros y públicos que permiten conocer lo que deben aprender nuestros
jóvenes, y establecen el punto de referencia en cada área, núcleo de formación o contenidos
temáticos, lo que están en capacidad de saber y saber hacer en contexto situado.
Qué es un estándar de calidad en la educación?
El estándar de calidad en la educación se define como: “Señalamiento de lo que la
comunidad especializada considera que son las condiciones básicas para que se merezca
una investidura o título universitario. A estas condiciones básicas se les ha denominado
estándares de calidad”.1
La comunidad académica y los estándares de calidad
El registro calificado es un proceso que está inscrito en el marco de la inspección y vigilancia
1
.
que debe realizar el estado para asegurar que los programas de la IES presten sus servicios.
Sólo si cumple con los estándares de calidad exigidos se otorgará este registro.
Con este objetivo, los estándares de calidad han sido difundidos a toda la comunidad
académica y trabajados siguiendo los parámetros establecidos en el Decreto 2566 de
septiembre 10 de 2003, expedido por la Presidencia de la República.

. Explique ejemplificando los estándares de calidad en el desarrollo de software.


Cuando se habla de calidad del software se hace referencia la conjunto de cualidades que
determinan su utilidad. Es el grado en que un software cumple con los requisitos
especificados. (eficiencia, flexibilidad, corrección, mantenimiento, seguridad e integridad.)

La Calidad del software es medible y varia según el tipo de sistema y de programa, por
ejemplo: no es lo mismo un software para control de viajes especiales el cual debe ser
confiable a un nivel de cero errores, que un software elaborado para la implementación de un
sistema de calidad (investigación).

Esta calidad puede ser inspeccionada al finalizar el producto, pero normalmente es mas
costoso que realizarlo durante las diferentes etapas del ciclo de vida de producción del
producto.

Explique ejemplificando las herramientas case.


Las herramientas CASE (Computer Aided Software Engineering, Ingeniería de
Software Asistida por Computadora) son diversas aplicaciones informáticas destinadas a
aumentar la productividad en el desarrollo de software reduciendo el coste de las mismas
en términos de tiempo y de dinero. Estas herramientas nos pueden ayudar en todos los
aspectos del ciclo de vida de desarrollo del software en tareas como el proceso de
realizar un diseño del proyecto, cálculo de costes, implementación de parte del código
automáticamente con el diseño dado, compilación automática, documentación o
detección de errores entre otras.
Sistema de software que intenta proporcionar ayuda automatizada a las actividades
del proceso de software. Los sistemas CASE a menudo se utilizan como apoyo al
método.
Objetivos
1.Mejorar la productividad en el desarrollo y mantenimiento del software.
2.Aumentar la calidad del software.
3.Reducir el tiempo y coste de desarrollo y mantenimiento de los sistemas
informáticos.
4.Mejorar la planificación de un proyecto
5.Aumentar la biblioteca de conocimiento informático de una empresa ayudando a la
búsqueda de soluciones para los requisitos.
6.Automatizar el desarrollo del software, la documentación, la generación de código,
las pruebas de errores y la gestión del proyecto.
7.Ayuda a la reutilización del software, portabilidad y estandarización de la
documentación
8.Gestión global en todas las fases de desarrollo de software con una misma
herramienta.
9.Facilitar el uso de las distintas metodologías propias de la ingeniería del software.

Clasificacion

Aunque no es fácil y no existe una forma única de clasificarlas, las herramientas


CASE se pueden clasificar teniendo en cuenta los siguientes parámetros:

1.Las plataformas que soportan.


2.Las fases del ciclo de vida del desarrollo de sistemas que cubren.
3.La arquitectura de las aplicaciones que producen.
4.Su funcionalidad.

La siguiente clasificación es la más habitual basada en las fases del ciclo de


desarrollo que cubren:

•Upper CASE (U-CASE), herramientas que ayudan en las fases de planificación,


análisis de requisitos y estrategia del desarrollo, usando, entre otros diagramas
UML.
•Middle CASE (M-CASE), herramientas para automatizar tareas en el análisis y
diseño de la aplicación.
•Lower CASE (L-CASE), herramientas que semi-automatizan la generación de
código, crean programas de detección de errores, soportan la depuración de
programas y pruebas.

Además automatizan la documentación completa de la aplicación. Aquí pueden


incluirse las herramientas de Desarrollo rápido de aplicaciones.

Existen otros nombres que se le dan a este tipo de herramientas, y que no es una
clasificación excluyente entre sí, ni con la anterior:
•Integrated CASE (I-CASE), herramientas que engloban todo el proceso de
desarrollo software, desde análisis hasta implementación.
•MetaCASE, herramientas que permiten la definición de nuestra propia técnica de
modelado, los elementos permitidos del metamodelo generado se guardan en
un repositorio y pueden ser usados por otros analistas, es decir, es como si
definiéramos nuestro propio UML, con nuestros elementos, restricciones y
relaciones posibles.
•CAST (Computer-Aided Software Testing), herramientas de soporte a la prueba de
software.
•IPSE (Integrated Programming Support Environment), herramientas que soportan
todo el ciclo de vida, incluyen componentes para la gestión de proyectos y
gestión de la configuración.

Por funcionalidad podríamos diferenciar algunas como:

•Herramientas de generación semiautomática de código.


•Editores UML.
•Herramientas de Refactorización de código.
•Herramientas de mantenimiento como los sistemas de control de versiones·

Ejemplos:

También podría gustarte