ingeniería inversa y reingeniería de software

38
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 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

Upload: moises-medina

Post on 19-Dec-2014

17.643 views

Category:

Technology


7 download

DESCRIPTION

Ingenieria Inversa y Reingenieria de Software

TRANSCRIPT

Page 1: Ingeniería inversa y reingeniería de software

Ingeniería Inversa y Reingeniería de Software

Prof.: Ana ToroAsignatura: Sistemas de informaciónSección: 5° “A”Autores: Moisés Aldana #09 Norelys Delgado #10

Moisés Medina #15

República Bolivariana de VenezuelaGobierno del Distrito Metropolitano de Caracas

Secretaría de Educación del Distrito CapitalE. T. C. R “Juan España”

El Valle - Caracas

Page 2: Ingeniería inversa y reingeniería de software

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

Page 3: Ingeniería inversa y reingeniería de software

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.

Page 4: Ingeniería inversa y reingeniería de software

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.

Page 5: Ingeniería inversa y reingeniería de software

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.

Page 6: Ingeniería inversa y reingeniería de software

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.

Page 7: Ingeniería inversa y reingeniería de software

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.

Page 8: Ingeniería inversa y reingeniería de software

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.

Page 9: Ingeniería inversa y reingeniería de software

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.

Page 10: Ingeniería inversa y reingeniería de software

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.

Page 11: Ingeniería inversa y reingeniería de software

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.

Page 12: Ingeniería inversa y reingeniería de software

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.

Page 13: Ingeniería inversa y reingeniería de software

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.

Page 14: Ingeniería inversa y reingeniería de software

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.

Page 15: Ingeniería inversa y reingeniería de software

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.

Page 16: Ingeniería inversa y reingeniería de software

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.

Page 17: Ingeniería inversa y reingeniería de software

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.

Page 18: Ingeniería inversa y reingeniería de software

Pasos para la Reingeniería de software

Page 19: Ingeniería inversa y reingeniería de software

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.

Page 20: Ingeniería inversa y reingeniería de software

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.

Page 21: Ingeniería inversa y reingeniería de software

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.

Page 22: Ingeniería inversa y reingeniería de software

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.

Page 23: Ingeniería inversa y reingeniería de software

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.

Page 24: Ingeniería inversa y reingeniería de software

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.

Page 25: Ingeniería inversa y reingeniería de software

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.

Page 26: Ingeniería inversa y reingeniería de software

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.

Page 27: Ingeniería inversa y reingeniería de software

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.

Page 28: Ingeniería inversa y reingeniería de software

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.

Page 29: Ingeniería inversa y reingeniería de software

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.

Page 30: Ingeniería inversa y reingeniería de software

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.

Page 31: Ingeniería inversa y reingeniería de software

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.

Page 32: Ingeniería inversa y reingeniería de software

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.

Page 33: Ingeniería inversa y reingeniería de software

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.

Page 34: Ingeniería inversa y reingeniería de software

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.

Page 35: Ingeniería inversa y reingeniería de software

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. 

Page 36: Ingeniería inversa y reingeniería de software

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. 

Page 37: Ingeniería inversa y reingeniería de software

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

Page 38: Ingeniería inversa y reingeniería de software

Gracias por su atención