DSN_XP y el diseñar inversamente

Reverse Engineering

Reverse engineering is the process of discovering the technological principles of a human (or non-human) made device, object or system through analysis of its structure, function and operation. It often involves taking something (e.g., a mechanical device, electronic component, or software program) apart and analyzing its workings in detail to be used in maintenance, or to try to make a new device or program that does the same thing without using or simply duplicating (without understanding) the original. 
Reverse engineering has its origins in the analysis of hardware for commercial or military advantage. 
The purpose is to deduce design decisions from end products with little or no additional knowledge about the procedures involved in the original production. The same techniques are subsequently being researched for application to legacy software systems, not for industrial or defence ends, but rather to replace incorrect, incomplete, or otherwise unavailable documentation.[Wikipedia]

La ingeniería inversa es el proceso de descubrir los principios tecnológicos de un dispositivo, objeto o sistema humano (o no humano) a través del análisis de su estructura, función y operación. A menudo implica desarmar algo (por ejemplo, un dispositivo mecánico, un componente electrónico o un programa de software) y analizar detalladamente su funcionamiento para usarlo en el mantenimiento, o intentar crear un nuevo dispositivo o programa que haga lo mismo sin usar o simplemente duplicando (sin entender) el original.

La ingeniería inversa tiene sus orígenes en el análisis de hardware para ventajas comerciales o militares. 
El propósito es deducir las decisiones de diseño de los productos finales con poco o ningún conocimiento adicional sobre los procedimientos involucrados en la producción original. Posteriormente, se están investigando las mismas técnicas para su aplicación a sistemas de software heredados, no para fines industriales o de defensa, sino para reemplazar la documentación incorrecta, incompleta o no disponible. [Wikipedia]

Pensamiento inverso

Para DSN_XP la ingeniería en reversa (al contrario que la ingeniería directa) se volvió el método que empleamos para lograr adaptarnos desde una escuela de programación estructurada, hacia una nueva escuela de programación orientada a objetos, ya que teníamos que comprender la forma en la cual se programaba, se compilaba, se ponía en producción y se le daba mantenimiento a estos nuevos sistemas basados en objetos.
Profesionalmente hablando, los proyectos en los que empezamos a participar promocionando DSN_XP requerían de un rol documentador que permitiese al equipo de desarrollo, conseguir todo el marco teórico que sostendría los diseños realizados por los codificadores.

La documentación como tal, formó parte de la cultura de desarrollo de software y a su vez fue el área de conocimiento menos atendida en las organizaciones debido a varios aspectos, el principal, por la característica de la tecnología de ir cambiando muy drásticamente en el tiempo y la necesidad de tener gobernanza en la tecnología  requería comprender los procesos automatizados y la algoritmia del software desarrollado.

Para lograr comprender todos los aspectos técnicos y no técnicos detrás del proceso de desarrollo de software profesional en el Ecuador, se requieren conocimientos suficientes sobre la ingeniería de software y estos conocimientos deben verse reflejados tanto en el código programable como en todo el proceso de su puesta en producción.

Conocimiento mínimo



Estos últimos conceptos requieren de un esfuerzo formidable por entender la tecnología aplicada al proceso de computación, implicando un estudio de:
  • Desarrollo de software a bajo nivel, estudiando el Lenguaje Assembler, teoría sobre compiladores, máquinas virtuales y bytecodes.
  • Sistemas operativos y su arquitectura de diseño y despliegue.
  • Perspectivas de alto nivel para módulos y constructores comunes codificados.
  • Administración de datos y el uso de variables, estructuras de datos definidos por el usuario, listas.
  • Flujos de control y estructuras de control y secuencia.
  • Lenguajes de programación como C, C++, Java, C#
  • Perspectivas a bajo nivel como registros, pilas, saltos y secciones de datos ejecutables.
Todo este marco teórico se encuentra respaldado en el estudio profundo de este libro disponible en nuestra biblioteca de conocimientos DSN_XP.

Ingeniería inversa

La ingeniería inversa o en reversa, en el desarrollo de software puede ser increíblemente útil para los codificadores.  Por ejemplo, los codificadores de software pueden emplear las técnicas de reversado para descubrir cómo interoperar con software total o parcialmente indocumentado.  En otros casos, el poder reversar puede ser utilizado para determinar la calidad del código de un tercero, tal como una librería o inclusive aún, un sistema operativo.

Finalmente, es posible a veces el utilizar técnicas de reversado para extraer información valiosa desde un producto de la competencia con el propósito de mejorar las propias tecnologías. 

Diseño inverso de software 

La aplicación de la ingeniería inversa en el estudio y documentación del desarrollo de software en Ecuador es discutida por DSN_XP bajo los siguientes escenarios de uso:

  • Lograr la interoperabilidad con el software propietario, la interoperabilidad es la situación de mayor uso de la ingeniería inversa a diario, cuando se trabaja con una librería de software propietaria o una API del sistema operativo, la documentación usualmente en la mayoría de casos es insuficiente.
  • Desarrollar software competitivo, en la mayoría de industrias es por lo menos la aplicación más popular de la ingeniería inversa.  El software, tiende a ser más complejo que la mayoría de productos, de tal forma que, desarmar por entero un producto software para crear un producto competitivo parece no tener sentido.  Es más fácil el diseñar y desarrollar un producto desde la nada o simplemente licenciar con terceros los más grandes componentes que desarrollarlos localmente.
  • Evaluar la calidad de software y su robustez, se requieren conceptos de ingeniería inversa para evaluar la seguridad y vulnerabilidad del software, usualmente solo basta una porción del código para evaluar y estimar la calidad general del código y sus prácticas de codificación de todo el producto.

Enfoque de la ingeniería inversa ontológica


Esta es una síntesis de los resultados obtenidos de la investigación sobre la ontología de la Ingeniería Inversa liderada por Peter Belohlavek.

La ingeniería inversa ontológica es el proceso de descubrir los principios ontológicos de un objeto, sistema o realidad a través del análisis de su estructura ontológica, función y operación.

La ingeniería inversa ontológica es el proceso mecánico unicista para descubrir o redescubrir la naturaleza de un objeto de la realidad que se investiga. Es un enfoque tecnológico que se hace necesario cuando se trata de la naturaleza de los problemas.

Es la herramienta básica para la resolución de problemas complejos. Sin poder lidiar con el proceso de ingeniería inversa, no se puede abordar la naturaleza de los problemas. Este es el límite real de los problemas que un individuo puede resolver.

Copyright Instituto de investigación Unicista

Todo el mundo puede utilizar este enfoque en algún nivel. La cuestión es aceptarlo y entrenarlo para expandir los límites de su aplicación.

El proceso de ingeniería inversa ontológica

La ontointeligencia define la capacidad de los individuos para hacer frente a problemas complejos. La ontointeligencia está integrada por la inteligencia estratégica de los individuos, su tipo de pensamiento lógico y su inteligencia ética.

Esto define el enfoque de la actividad de un individuo, el valor que agrega al medio ambiente, la capacidad de pronosticar el futuro y el campo en el que un individuo es naturalmente exitoso.

La inteligencia evoluciona cuando un individuo madura. La madurez permite a un individuo alcanzar el máximo nivel de influencia en la realidad. 

Pensar hacia atrás implica ser capaz de pensar desde el final hasta el principio. Considere una línea de montaje. Es la capacidad de un individuo para descomponer el "producto" final en sus componentes.

Copyright Instituto de investigación Unicista

Cuando hablamos de ingeniería inversa ontológica significa que en este proceso el individuo es capaz de encontrar la naturaleza de una realidad específica. Para hacerlo, un individuo tiene que ser capaz de descubrir la estructura de la naturaleza de esa realidad.

El proceso de ingeniería inversa ontológica es el enfoque básico para redescubrir los conceptos de una realidad que ha sido descubierta. Y para hacer esto, los individuos necesitan descubrir los componentes de la “línea de montaje” que definen la realidad final hasta encontrar los objetos que integran esa realidad.

No hay comentarios: