Ingeniería Inversa

download Ingeniería Inversa

of 12

Transcript of Ingeniería Inversa

  • Universidad Mariano Glvez de Guatemala

    Ingeniera en Sistemas

    Ingeniera de Software

    Ing. Osberto Pineda

    Ingeniera Inversa

    Nombre Carnet

    Gilberth Edward 0900-05-4807

    Mauricio Linares 090-07-1359

    Erny Cuque 0394-06-19370

    Julio Barrios 090-07-9

    Gary Rodas 090-06-154

  • Contenido Ingeniera Inversa .......................................................................................................................... 3

    Que es la ingeniera inversa? ...................................................................................................... 3

    Ingeniera Inversa, un proceso de reingeniera ........................................................................... 3

    Es aplicable a sistemas con las siguientes caractersticas: ........................................................... 4

    Nivel de abstraccin ................................................................................................................... 4

    Completitud ............................................................................................................................... 5

    Interactividad ............................................................................................................................. 5

    Direccionalidad .......................................................................................................................... 5

    El proceso de ingeniera inversa ..................................................................................................... 6

    Ingeniera inversa para comprender el procesamiento ............................................................... 7

    Reestructuracin ........................................................................................................................ 8

    Re documentacin ..................................................................................................................... 9

    Metodologa .............................................................................................................................. 9

    Definicin y delimitacin .......................................................................................................... 10

    Casos de Uso ............................................................................................................................ 11

    Mapeo de requerimientos a paquetes ...................................................................................... 11

  • Ingeniera Inversa

    Que es la ingeniera inversa?

    La ingeniera inversa es un procedimiento mediante el cual se toma un objeto

    por separado para ver cmo funciona con la finalidad de duplicarlo o mejorarlo.

    Aunque esta prctica era empleada por las antiguas industrias, en la actualidad

    su uso se ha extendido al software y hardware, en cuyo caso, la ingeniera inversa aplicada al software implica la reversin de un programa que est

    codificado en lenguaje maquina (lenguaje de bajo nivel) a el cdigo fuente de

    alto nivel en el que fue escrito originalmente.

    La ingeniera inversa en el software tiene como objetivo recuperar el cdigo fuente de un programa que necesita ser corregido, mejorado o estudiado para

    ser nuevamente escrito y que no cuenta con su cdigo fuente original.

    Hay que dejar en claro que la ingeniera inversa de software que tiene como

    objetivo el duplicado o el estudio con propsito comercial, como el empleo de

    aplicar ingeniera inversa a un producto para estudiarlo y hacer en base a este un producto de competencia, puede ser considerado como una violacin a las

    leyes de copyright e incluso en muchos casos, el uso de un programa bajo

    licencia prohbe esta prctica. En el caso de la ingeniera inversa de hardware, se recurre al desmontaje de un dispositivo con la intencin de comprobar cmo

    es que funciona, pero al igual que sucede en la ingeniera inversa de software,

    aqu tambin est prohibido hacer esto con la intencin de fabricar un producto

    similar.

    Otro tipo de ingeniera inversa consiste en la reproduccin de imgenes en 3D

    de piezas ya fabricadas cuando no se cuenta con un plano y con la finalidad de

    reacondicionar la pieza.

    Ingeniera Inversa, un proceso de reingeniera

    La ingeniera inversa tiene la misin de desentraar los misterios y secretos de

    los sistemas en uso. Consiste principalmente en recuperar el diseo de una

    aplicacin a partir del cdigo.

    Esto se realiza principalmente mediante herramientas que extraen informacin

    de los datos, procedimientos y arquitectura del sistema existente.

  • Es aplicable a sistemas con las siguientes caractersticas:

    Documentacin inexistente o totalmente obsoleta.

    Programacin en bloque de cdigo s muy grandes y/o sin estructurar.

    Inexistencia de documentacin interna en los programas, o bien sta es

    incomprensible o est desfasada.

    La aplicacin cubre gran parte de los requisitos y del rendimiento

    esperado.

    La aplicacin est sujeta a cambios frecuentes, que pueden afectar a parte

    del diseo.

    Se prev que la aplicacin pueda tener an larga vida.

    La ingeniera inversa puede extraer informacin de diseo del cdigo fuente,

    pero el nivel de abstraccin, la completitud de la documentacin, el grado con

    el cual trabajan al mismo tiempo las herramientas y el analista humano, y la

    direccionalidad del proceso son sumamente variables.

    Nivel de abstraccin

    El nivel de abstraccin de un proceso de ingeniera inversa y las herramientas

    que se utilizan para realizarlo aluden a la sofisticacin de la informacin de

    diseo que se puede extraer del cdigo fuente. El nivel de abstraccin ideal

    deber ser lo ms alto posible, es decir, el proceso de ingeniera inversa debe

    ser capaz de derivar:

    Sus representaciones de diseo de procedimiento (con un bajo nivel de

    abstraccin).

    La informacin de las estructuras de datos y de programas (un nivel de

    abstraccin ligeramente ms elevado).

    Modelos de flujo de datos y de control (un nivel de abstraccin

    relativamente alto)

    Modelos de entidades y de relaciones (un elevado nivel de abstraccin)

    A medida que crece el nivel de abstraccin se proporciona al ingeniero de

    software informacin que le permitir comprender ms fcilmente estos

    programas.

  • Completitud

    La completitud de un proceso de ingeniera inversa alude al nivel de detalle que

    se proporciona en un determinado nivel de abstraccin. En la mayora de los

    casos, la completitud decrece a medida que aumenta el nivel de abstraccin. Por

    ejemplo, dado un listado del cdigo fuente, es relativamente sencillo desarrollar

    una representacin de diseo de procedimientos completa. Tambin se pueden

    derivar representaciones sencillas del flujo de datos, pero es mucho ms difcil

    desarrollar un conjunto completo de diagramas de flujo de datos o un diagrama

    de transicin de datos.

    La completitud mejora en proporcin directa a la cantidad de anlisis efectuado

    por la persona que est efectuando la ingeniera inversa.

    Interactividad

    La interactividad alude al grado con el cual el ser humano se integra con las

    herramientas automatizadas para crear un proceso de ingeniera inversa

    efectivo. En la mayora de los casos, a medida que crece el nivel de abstraccin,

    la interactividad deber incrementarse, o si no la completitud se ver reducida.

    Direccionalidad

    Si la direccionalidad del proceso de ingeniera inversa es mono direccional, toda

    la informacin extrada del cdigo fuente se proporcionar a la ingeniera del

    software que podr entonces utilizar la durante la actividad de mantenimiento.

    Si la direccionalidad es bidireccional, entonces la informacin se suministrar a

    una herramienta de reingeniera que intentar reestructurar o regenerar el viejo

    programa.

  • El proceso de ingeniera inversa

    El proceso de ingeniera se representa en la figura 4.1. Antes de que puedan

    comenzar las actividades de ingeniera inversa, el cdigo fuente no estructurado

    (sucio) se reestructura para que solamente contenga construcciones de

    programacin estructurada. Esto hace que el cdigo fuente sea ms fcil de leer,

    y es lo que proporciona la base para todas las actividades subsiguiente de

    ingeniera inversa.

  • El ncleo de la ingeniera inversa es una actividad denominada extraccin de

    abstracciones. El ingeniero tiene que evaluar el viejo programa y a partir del

    cdigo fuente (que no suele estar documentado) tiene que extraer una

    especificacin significativa del procesamiento que se realizar, la interfaz de

    usuario que se aplica y las estructuras de datos de programa o de base de datos

    que se utiliza.

    Ingeniera inversa para comprender el procesamiento

    La primera actividad real de la ingeniera inversa comienza con un intento de

    comprender y extraer despus abstracciones de procedimientos representadas

    por el cdigo fuente. Para comprender las abstracciones de procedimientos, se

    analiza el cdigo en distintos niveles de abstraccin: sistema, programa,

    componente, configuracin y sentencia. La funcionalidad general de todo el

    sistema de aplicaciones deber ser algo perfectamente comprendido antes de

    que tenga lugar un trabajo de ingeniera inversa ms detallado.

    Esto es lo que establece un contexto para un anlisis posterior, y se proporciona

    ideas generales acerca de los problemas de interoperabilidad entre aplicaciones

    dentro del sistema. Cada uno de los programas de que consta el sistema de

    aplicaciones representar una abstraccin funcional con un elevado nivel de

    detalle. Tambin se crear un diagrama de bloques como representacin de la

    iteracin entre estas abstracciones funcionales. Cada uno de los componentes

    efecta una sub-funcin, y representa una abstraccin definida de

    procedimientos. En cada componente se crea una narrativa de procesamiento.

    En algunas situaciones ya existe n especificaciones de sistema, programa y

    componente

    Cuando ocurre tal cosa, se revisan las especificaciones para evaluar si se ajustan

    al cdigo existente.

    Todo se complica cuando se considera el cdigo que reside en el interior del

    componente. El ingeniero busca las secciones de cdigo que representan las

    configuraciones genricas de procedimientos. En casi todos los componentes,

    existe una seccin de cdigo que prepara los datos para su procesamiento

    (dentro del componente), una seccin diferente de cdigo que efecta el

    procesamiento y otra seccin de cdigo que prepara los resultados del

    procesamiento para exportarlos de ese componente. En el interior de cada una

    de estas secciones, se encuentran configuraciones ms pequeas. Por ejemplo,

    suele producirse una verificacin de los datos y una comprobacin de los lmites

    dentro de la seccin de cdigo que prepara los datos para su procesamiento.

  • Para los sistemas grandes, la ingeniera inversa suele efectuarse mediante el uso

    de un enfoque semi-automatizado. Las herramientas CASE se utilizan para

    analizar la semntica del cdigo existente. La salida de este proceso se pasa

    entonces a unas herramientas de reestructuracin y de ingeniera directa que

    completarn el proceso de reingeniera.

    Reestructuracin

    La reestructuracin del software modifica el cdigo fuente y/o los datos en un

    intento de adecuarlo a futuros cambios. En general, la reestructuracin no

    modifica la arquitectura global del programa. Tiene adentrarse en los detalles de

    diseo de mdulos individuales y en estructuras de datos locales definidas dentro

    de los mdulos. Si el esfuerzo de la reestructuracin se extiende ms all de los

    lmites de los mdulos y abarca la arquitectura del software, la reestructuracin

    pasa a ser ingeniera directa (forward engineering).

    Arnold [Arnold, 1989] define un cierto nmero de beneficios que se pueden

    lograr cuando se reestructura el software:

    Programas de mayor calidad con mejor documentacin y menos

    complejidad, y ajustados a las prctica s y estndares de la ingeniera del

    software moderna.

    Reduce la frustracin entre ingenieros del software que deban trabajar

    con el programa, mejorando por tanto la productividad y haciendo ms

    sencillo el aprendizaje.

    Reduce el esfuerzo requerido para llevar a cabo las actividades

    demantenimiento.

    Hace que el software sea ms sencillo de comprobar y de depurar.

    La reestructuracin se produce cuando la arquitectura bsica de la aplicacin es

    slida, aun cuando sus interioridades tcnicas necesiten un retoque. Comienza

    cuando existen partes considerables del software que son tiles todava, y

    solamente existe un subconjunto de todos los mdulos y datos que requieren

    una extensa modificacin.

  • Re documentacin

    La re documentacin es tambin una forma de ingeniera inversa. Es el proceso

    mediante el que se roduce documentacin retroactivamente desde un sistema existente. Si la redocumentacin toma la forma de modificacin de comentarios

    en el cdigo fuente, puede ser considerada una forma suave de reestructuracin.

    Sin embargo, puede ser considerada como una sub-rea de la ingeniera inversa

    porque la documentacin reconstruida es usada para ayudar al conocimiento del programa.

    Se piensa en ella como una transformacin desde el cdigo fuente a pseudocdigo y/o prosa, esta ltima considerada como ms alto nivel de

    abstraccin que la primera. Aunque la aparicin de multitud de herramientas

    facilita las labores de la ingeniera inversa, es la labor humana (humanware) la decisiva a la hora de completar el estudio del sistema.

    Metodologa Debido a que no hay un documento que especifique como es exactamente un

    proceso de ingeniera inversa, cada ingeniero de software que desea realizar un

    proceso de este tipo propone su propia metodologa. El instituto de ingeniera de software propone un marco de trabajo para llevar a cabo un proceso de

    ingeniera. Tomando en cuenta este documento y con la ayuda de un experto en

    la materia se propuso la metodologa para realizar un proceso de ingeniera inversa. Principalmente lo que incluye la metodologa propuesta es:

    1. Definicin y delimitacin del componente de software

    2. Recoleccin de funcionalidades existente a. Documentacin de Casos de Uso

    3. Generacin automtica de diagramas de clase y de paquete mediante una

    herramienta semi-autimatizada CASE a. Diagramas de clase

    b. Diagramas de paquete

    4. Anlisis de cdigo y relacin entre paquetes 5. Mapeo de requerimientos a paquetes y de ser posible a clases

  • Definicin y delimitacin

    Esta es la primera etapa del proceso de ingeniera inversa y es la que comprende la seleccin y evaluacin del o de los componentes a los que se les aplicar el

    proceso de ingeniera inversa. Geoserver fue escogido primeramente por ser una

    implementacin pblica que cumple con los requisitos que se necesitan para

    nuestra solucin. Algunos de estos requisitos es que est hecho en Java, es OpenSource, cumple con la especificacin que rige las implementaciones WFS,

    maneja peticiones por HTTP GET y HTTP POST.

  • Casos de Uso Para el proceso de recoleccin de funcionalidades existentes se desarrollaron los

    casos de uso de las tres operaciones que soporta el WFS. La figura 4.3 muestra

    el diagrama de caso de uso que incluye a estas tres operaciones y despus estn los casos de uso de cada operacin:

    Mapeo de requerimientos a paquetes

    Esta parte del proceso es una aportacin importante a la documentacin de un software o componente pues facilita mucho identificar que ocurre cuando

    deseamos modificar una parte del cdigo. Consiste en una tabla donde se ponen

    los requerimientos del sistema, los casos de uso involucrados, y las clases o paquetes afectados y establece la relacin entre todos estos elementos de la

    tabla. Una vez que se tenga la tabla (la cual puede llegar al nivel de detalle que

  • se necesite) si en un futuro se quiere modificar parte del cdigo la tabla indique

    que casos de uso se vern afectados y por consiguiente que requerimientos

    tambin estarn involucrados. Esto es de gran ayuda en sistemas grandes porque no tenemos que esperar a las pruebas de regresin para descubrir que

    fue lo que se alter.