Se le denomina ingeniería inversa al proceso mediante el cual se parte de un objeto, dispositivo o sistema para descubrir el proceso tecnológico mediante el cual se le ha confeccionado, estudiando su estructura, su operación y funcionamiento, analizando con especial atención, los detalles de cada parte que le conforma, con el objetivo de deshilvanar el modo en que funciona y a su vez obtener la capacidad de recrear tal sistema u objeto desde cero, de forma idéntica o similar.
¿Qué hace la ingeniería inversa?
El desglose de un sistema de información (o deconstrucción) es similar al de construcción pero en sentido inverso. Se comienza identificando la implementación, dentro de la cual podrá observarse la primera pista para la posterior reconstrucción, que es el diseño estructural; acto seguido se busca identificar el llamado diseño arquitectónico, instancia en la que pueden apreciarse las funciones más sutiles con mayor lujo de detalles y de la que puede derivar la identificación de problemas que luego, al definirlos con exactitud proveen la posibilidad de resolverlos en la posterior reconstrucción del sistema, mejorándolo de ese modo. Por supuesto, este tipo análisis abarca bases de datos, aplicaciones, procedimientos, diversos estándares de funcionamiento y seguridad, todo acerca de hardware y software, redes, entre otros múltiples factores.
Ingeniería inversa en sistemas de información
Se pueden considerar dos tipos de ingeniería inversa: uno basado en el código fuente (el que debe estar disponible) y otro (desconociendo este código) a partir del programa ejecutable y buscando descifrar tal código fuente. Para tales menesteres hay a la mano diversas herramientas o programas que se pueden usar.
Algunas de ellas son:
Imagix 4D: Puede revertir códigos fuente C, C++ y Java para facilitar el análisis, la documentación y mejorar el software existente mostrando aspectos del diseño del mismo a través de una variedad de gráficos UML.
URL: http://www.imagix.com/products/source-code-analysis.html
1. Green UML: Sirve tanto para ingeniería inversa como tradicional, con esta herramienta puede crearse un diagrama de clase UML desde el código fuente o generar código dibujando un diagrama de clase, cuenta con un editor de características simples (señala y cliquea) y fue desarrollado con el objetivo pedagógico de enfocar a los estudiantes en el diseño, aunque su uso no se limita a este campo
URL: http://green.sourceforge.net/
2. WinTranslator: Sirve para general modelos de clase o tarjetas CRC de software escritos en C++, C#, Java, PHO, Delphi o ADA, funciona particionando sistemas de software grandes en múltiples diagramas con objetos enlazados al código fuente relacionado.
URL: http://www.excelsoftware.com/wintranslator.html
3. CodeLogic: Este sistema se utiliza para descubrir y representar gráficamente la lógica interna más profunda de cualquier código Java, con sólo apuntar el CodeLogic a cualquier proyecto Java o C++ el desarrollador puede obtener una vista intuitiva acerca de cómo funciona exactamente el código.
URL: http://www.logicexplorers.com/products/codelogic/
Aplicación de la ingeniería inversa en sistemas de información
Para implementar ingeniería inversa en un sistema se debe comenzar por identificar los casos de uso (mecanismo que representa con mayor detalle los requerimientos funcionales que busca satisfacer un sistema) y construir un grafo de relaciones (mecanismo que en base a las relaciones entre los diferentes artefactos usados en las diversas fases de desarrollo busca conectarlos) para conectar aquellos (casos de uso) con el código fuente. Para ello se comienza identificando los casos de uso y las relaciones entre éstos, construir con estas relaciones un grafo, al que se le agregarán los artefactos localizados al encontrar los archivos de código fuente correspondientes a cada caso de uso y entidades de código fuente derivadas; a partir de esto pueden identificarse las relaciones entre las entidades de código fuente y ha de conectarse los artefactos de código fuente entre sí y con el nivel anterior del grafo. Por último se genera una versión final del grafo de relaciones, en caso de que no se disponga del código ejecutable se efectúa el mismo proceso a partir del código fuente.
El proceso de deconstrucción permite no solo aprender de un sistema de información ya concreto, sino entenderlo estructuralmente y de ese modo identificar puntos a corregir para la posterior restructuración del mismo, dividiendo problemas de gran tamaño en elementos manipulables, simplificar los sistemas para así elevar la eficacia y a la vez comprender la utilidad de una metodología estructural de desarrollo de sistemas informáticos, la cual genera sistemas con un nivel correcto o más bien deseable de documentación.
comments powered by Disqus