Este documento resume los conceptos de ingeniería inversa, reingeniería de software, análisis y diseño orientados a objetos, y programación extrema. La ingeniería inversa analiza el código existente para generar representaciones de alto nivel como diagramas, la reingeniería mejora el software existente, el análisis y diseño orientados a objetos usa clases, herencia y otros principios, y la programación extrema se basa en valores como la simplicidad.
1. República Bolivariana de Venezuela
Gobierno del Distrito Metropolitano de Caracas
Secretaría de Educación del Distrito Capital
E. T. C. R “Juan España”
El Valle - Caracas
Ingeniería Inversa y
Reingeniería de Software
Prof.: Ana Toro
Asignatura: Sistemas de información
Sección: 5 “A”
Autores: Moisés Aldana #09
Norelys Delgado #10
Moisés Medina #15
2. Contenido:
Ingeniería Inversa
* Beneficios de la Ingeniería Inversa
* Tipos de Ingeniería Inversa
* Herramientas para la Ingeniería Inversa
Reingeniería de Software
* Beneficios de la Reingeniería de Software
* Pasos de la Reingeniería de Software
Análisis y Diseño de Sistemas Orientados a Objetos
* Principios del Análisis y Diseño de Sistemas Orientados a Objetos
* Metodologías Orientadas al Análisis y Diseño de Sistemas Orientados a
Objetos
Programación Extrema
* Valores de la Programación Extrema
3. Ingeniería Inversa
No es generar códigos, sino que, el código fuente es
examinado, analizado y convertido en entidades para el
deposito. Su primer paso es cargar, en el conjunto de
herramientas el código de programas existen, según ese
conjunto de herramientas.
4. Beneficios 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.
5. Beneficios de la Ingeniería
Inversa
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.
6. Beneficios de la Ingeniería
Inversa
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.
7. Tipos de Ingeniería Inversa
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.
8. 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.
9. 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.
10. Herramientas para la
Ingeniería Inversa
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.
11. Herramientas para la
Ingeniería Inversa
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
desensambladores 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
desensambladores son escritor expresamente para la arquitectura
del hardware del software a desensamblar.
12. Herramientas para la
Ingeniería Inversa
Los Descompiladores: Un descompilador 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
descompiladores que transforman lenguaje 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 descompilados.
13. Herramientas para la
Ingeniería Inversa
La Herramienta 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.
14. Reingeniería de Software
Se puede definir como el proceso completo de convertir el
código de programa al diseño CASE, modificar el diseño y
volver a generar el nuevo código. El termino se usa en
distintas á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 nueva
orientación a los procesos claves de una organización, de esta
manera el rol de los analistas de sistemas radica en el uso de
tecnologías de información novedosas, como consecuencia a
los 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.
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.
25. Análisis y Diseño de Sistemas
Orientados a Objetos
Se puede definir como el enfoque con el propósito de
facilitar el desarrollo de sistemas que deben cambiar con
rapidez en respuesta a entornos de negocios dinámicos. Se
utilizan el estándar de la industria para la modelación de los
mismos, en su defecto el lenguaje unificado de modelación
(UML), para analizar los sistemas en forma de modelo de caso
de uso.
26. Principios del Análisis y Diseño de
Sistemas Orientados a Objetos
La idea básica del análisis y diseño de sistema orientados a
objetos se basa en 8 principios, que se muestran para un mejor
entendimiento de la metodología:
Clases: Una clase es una categoría de objetos similares. Los
objetos se agrupan en clases.
27. Principios del Análisis y Diseño de
Sistemas Orientados a Objetos
Herencia: Las clases pueden tener hijos, esto es, una
clase puede ser creada a partir de otra clase. La clase
original, o madre, es llamada “clase base”. La clase
hija es llamada “clase derivada”. Una clase derivada
puede ser creada en forma tal que herede todos los
atributos y comportamientos de la clase base.
28. Principios del Análisis y Diseño de
Sistemas Orientados a Objetos
Objetos: Un objeto es una representación en una
computadora de alguna cosa o evento del mundo real.
Encapsulación: Típicamente, la información dentro de un
objeto esta encapsulada por su comportamiento. Esto significa
que un objeto mantiene datos acerca de cosas del mundo real a
las que representa en un sentido verdadero.
29. Principios del Análisis y Diseño de
Sistemas Orientados a Objetos
Atributo: dato asociado a un objeto.
Mensajes: Se puede enviar información de un objeto a otro.
Método: proceso que realiza un objeto cuando recibe un
mensaje.
30. Principios del Análisis y Diseño de
Sistemas Orientados a Objetos
Polimorfismo: El término polimorfismo se refiere a
comportamientos alternos entre clases derivadas relacionadas.
Cuando varias clases heredan atributos y comportamientos,
pude haber casos en donde el comportamiento de una clase
derivada debe ser diferente del de su clase base o de sus
clases derivadas parientes.
31. Metodologías Orientadas al
Análisis y Diseño de Sistema
Orientado a Objetos
Existen diferentes metodologías orientadas al análisis y diseño
de sistema orientado a objetos, entre estas se encuentran:
El método de Rumbaugh: este método mejor conocido como
OMT, se utiliza para el análisis, diseño del sistema y diseño a
nivel de objetos. La de análisis crea tres modelos: el modelo de
objetos, el modelo dinámico y el modelo funcional. El diseño
se divide en dos actividades diseño de sistemas y diseño de
objetos.
32. Metodologías Orientadas al
Análisis y Diseño de Sistema
Orientado a Objetos
El método de Booch: Consta de un micro proceso y un macro
proceso de desarrollo tanto para el análisis y el diseño. El micro
proceso identifica clase y objetos, define relaciones entre clases y
objetos y realizan una serie de refinamientos para elaborar el modelo
del análisis. El macro proceso, en el diseño, engloba una actividad de
planificación arquitectónica, identifica situaciones relevantes, crea un
prototipo de diseño y valida el prototipo aplicándolo a situaciones de
uso.
33. Metodologías Orientadas al
Análisis y Diseño de Sistema
Orientado a Objetos
El método de Jacobson: Este método, en el análisis, se
diferencia de los otros por la importancia que da al caso de uso.
En principio, el modelo idealizado del análisis se adapta para
acoplarse al ambiente del mundo real. Después los objetos de
diseño primarios, llamados bloques, son creados y catalogados
como bloques de interfaz, bloques de entidades y bloques de
control. La comunicación entre bloques durante la ejecución se
define y los bloques se organizan en subsistemas.
34. Programación Extrema (XP)
Es un metodología de desarrollo de software más exitosas de
los tiempos recientes. Es el enfoque de desarrollo, usando
prácticas de desarrollo y las lleva a los extremos valiéndose de
valores para ello.
35. Valores de la programación
Extrema
Simplicidad: Es la base de la programación extrema. Se
simplifica el diseño para agilizar el desarrollo y facilitar el
mantenimiento.
Comunicación: Para los programadores el código comunica
mejor cuanto más simple sea. El código autodocumentado es
más fiable que los comentarios ya que éstos últimos pronto
quedan desfasados con el código a medida que es modificado.
36. Valores de la programación
Extrema
Retroalimentación: Al realizarse ciclos muy cortos tras los
cuales se muestran resultados, se minimiza el tener que
rehacer partes que no cumplen con los requisitos y ayuda a los
programadores a centrarse en lo que es más importante.
Valentía: La valentía le permite a los desarrolladores que se
sientan cómodos con reconstruir su código cuando sea
necesario. Esto significa revisar el sistema existente y
modificarlo si con ello los cambios futuros se implementaran
mas fácilmente.
37. Fuentes Consultadas
De la Morena, Verónica (2009 a). ¿Qué es la ingeniería inversa? Documento en línea.
Disponible en: [http://cnx.org/content/m17432/latest/]. Recuperado: 10/ 02/ 2012 – 07:23
p.m.
De la Morena, Verónica (2009 b). ¿Qué es la reingeniería del software? Documento en línea.
Disponible en: [http://cnx.org/content/m17438/latest/]. Recuperado: 10/ 02/ 2012 – 07:27
p.m.
Fundación Wikipedia, Inc. (2012) Programación Extrema, Documento en línea. Disponible
en: [http://es.wikipedia.org/wiki/Programaci%C3%B3n_extrema]. Recuperado: 10/ 02/2012
– 10:53 p.m.
Galeano, Abraham; Porras, Reinaldo; Gutiérrez, Osman (2005) Análisis y diseño orientado a
objetos. Documento en línea. Disponible en:
[http://docentes.uni.edu.ni/fec/Giovanni.Saenz/Ingenieria_de_Software/Analisis_y_DisenoO
O.pdf]. Recuperado: 10/ 02/ 2012 – 07:42 p.m.
Kendall, Kenneth; Kendall, Julie (2005) Análisis y Diseño de Sistemas (6 ed.) México:
Pearson Educación.