<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE document PUBLIC "-//CNX//DTD CNXML 0.5 plus MathML//EN" "http://cnx.rice.edu/cnxml/0.5/DTD/cnxml_mathml.dtd">
<document xmlns="http://cnx.rice.edu/cnxml" xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="id11019006">
  <name>Ingeniería Inversa</name>
  <metadata>
  <md:version>1.3</md:version>
  <md:created>2008/09/10 15:30:07 GMT-5</md:created>
  <md:revised>2008/10/07 14:29:23.803 GMT-5</md:revised>
  <md:authorlist>
      <md:author id="msicilia">
      <md:firstname>Miguel-Angel</md:firstname>
      
      <md:surname>Sicilia</md:surname>
      <md:email>msicilia@uah.es</md:email>
    </md:author>
  </md:authorlist>

  <md:maintainerlist>
    <md:maintainer id="msicilia">
      <md:firstname>Miguel-Angel</md:firstname>
      
      <md:surname>Sicilia</md:surname>
      <md:email>msicilia@uah.es</md:email>
    </md:maintainer>
    <md:maintainer id="veronicadlmm">
      <md:firstname>Verónica</md:firstname>
      
      <md:surname>De la Morena</md:surname>
      <md:email>veronicadlmm@hotmail.com</md:email>
    </md:maintainer>
  </md:maintainerlist>
  
  <md:keywordlist>
    <md:keyword>Ingeniería Inversa</md:keyword>
  </md:keywordlist>

  <md:abstract>Definición, beneficios y tipos de Ingeniería Inversa.</md:abstract>
</metadata>
  <content>
    <section id="id11304462">
      <name>Ingeniería Inversa</name>
      <para id="id10388974">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). </para>
      <para id="id10451437">Estas especificaciones pueden volver ser utilizadas para construir una nueva implementación del sistema utilizando, por ejemplo, técnicas de ingeniería directa. </para>
      <para id="id10473084">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:</para>
      <list type="bulleted" id="id7907885">
        <item>Reducir la complejidad del sistema.</item>
        <item>Generar diferentes alternativas.</item>
        <item>Recuperar y/o actualizar la información perdida (cambios que no se documentaron en su momento).</item>
        <item>Detectar efectos laterales.</item>
        <item>Facilitar la reutilización.</item>
      </list>
      <para id="id10997701">La ingeniería inversa puede ser de varios tipos:</para>
      <list type="bulleted" id="id9308267">
        <item>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</item>
        <item>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.</item>
        <item>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.</item>
      </list>
    </section>
  </content>
</document>
