sábado, 17 de mayo de 2014

Informacion



                                     Ingenieria en Software


Juvenal Jaimes Beltrán                        235533
Oscar Alberto Márquez Chávez           257340
Joel Ricardo Valdez Ruiz                      256811
José Francisco Tavares Rubio             257327



Profesora: Yesica Olivia Ruiz Holguín 





martes, 29 de abril de 2014

Rediseño del software


Es un rediseño radical y la reconcepción fundamental de los procesos de negocios para lograr mejoras dramáticas en medidas como en costos, calidad, servicio y rapidez. Está destinada a incrementar las capacidades de gestión del nivel operativo y complementarias de las apuestas estratégicas y políticas de una organización. Es un modo planificado de establecer secuencias nuevas e interacciones novedosas en los procesos administrativos, regulativos y sustantivos con la pretensión de elevar la eficiencia, la eficacia, la productividad y la efectividad de la red de producción institucional y alcanzar un balance global positivo.





Migración de sistemas


En los últimos años ha quedado de manifiesto la necesidad de dar solución al problema de los SIH. Entre las situaciones que han generado esta necesidad, podemos mencionar, entre otras: la constante necesidad de integrar sistemas dentro de una organización, el creciente interés de las distintas organizaciones por habilitar el acceso a sus sistemas, o parte de ellos, a través de internet, el interés por acceder a los beneficios que prometen las nuevas tecnologías (como por ejemplo redes, intranets, bases de datos, etc.) y por último, mejorar el servicio e imagen de la organización ante los clientes y la competencia.

Brodie y Stonebraker [BRODI95], plantean la migración como una solución lógica al problema de los SIH, la cual conllevaría la problemática de reemplazar el hardware y software, incluyendo las interfaces, aplicaciones, y bases de datos que componen la infraestructura del SIH, por un hardware y software nuevos y más modernos. Ellos consideran que la migración de un SIH implica comenzar con un SIH y terminar con un nuevo sistema de información equivalente. El nuevo sistema será significativamente diferente del original, pero deberá contener la funcionalidad elemental y los datos del SIH.

Bisbal et al. [BISBA97,BISBA99], consideran que las migraciones si son exitosas traen mayores beneficios a largo plazo. Por ejemplo, la migración permitirá mayor entendimiento de sistema, facilidad y reducción de costos en mantención. Ellos definen la migración de un SIH como el proceso de mover el SIH a un nuevo ambiente o plataforma que permita que el nuevo sistema de información sea fácilmente mantenido y adaptado a los nuevos requerimientos de negocios de la organización, sin que pierda la funcionalidad del SIH y sin tener que re desarrollarlo completamente.


Un hecho fundamental dentro del proceso de migración, este es que la funcionalidad del SIH debe mantenerse, lo que implicará que quienes tengan a cargo un proyecto de este tipo deberán preocuparse por adquirir el mayor conocimiento posible acerca de dicha funcionalidad. Todas las metodologías para la migración de SIH, revisadas durante esta investigación contemplan entre sus etapas una en la cual se cubre esta necesidad, destacándola como esencial para el éxito de un proyecto de este tipo. Sin embargo, a pesar de este reconocimiento, ninguna la aborda con el debido detalle. Por ejemplo, revisar Metodología Chicken Little y Metodología Butterfly. [BISBA97,BISBA99], [BRODI95].

Junto con lo anterior, es necesario destacar lo compleja que puede ser la tarea de recuperar los requisitos de un SIH, ya que dadas las características de este tipo de sistemas es difícil contar con todos los elementos necesarios para realizar un completo levantamiento de los requerimientos que satisfacen y que deberán ser replicados en el nuevo sistema. También una tarea importante y no abordada por dichas metodologías es la determinación de la calidad de los datos heredados. No olvidemos que los datos deberán ser traspasados al nuevo sistema y si su nivel de calidad es deficiente se deberán tomar medidas correctivas.

En función de todo lo anterior, surge la hipótesis de que la técnica de Minería de Datos, desarrollada para descubrir conocimiento oculto en grandes volúmenes de datos, podría ser de mucha utilidad en un proceso de migración de SIH tanto para el proceso global de migración del sistema así como para la migración de los datos propiamente tal. En particular, en aquellas situaciones en que no se cuenta con mucha documentación sobre el SIH, que no se dispone de programas fuentes y/o que el equipo de migración desconoce totalmente el SIH.


Análisis de impacto


Es fundamental contar con la capacidad para prever el impacto de cualquier cambio en todos los procesos asociados de la empresa considerada en su totalidad, ya que normalmente los procesos interactúan entre sí. Para esto, es necesario comprender todas las relaciones entre organización, operación, funciones de negocios, planeación, políticas, recursos humanos y apoyo de servicios de información. Con base en estas relaciones, cualquier cambio puede seguirse a través de sus asociaciones para determinar el impacto potencial total de una acción propuesta.

Replanteamiento de software y de sistemas


 

Mientras va avanzando el desarrollo del sistema, en algunas ocasiones, se determina que las especificaciones  o requerimientos  no cumplen con las necesidades del cliente, por lo tanto es volver a replantear los puntos críticos del sistema y realizar una reevaluación del análisis y  cambiar la información. Para evitar las posibles fallas del sistema.







Ingeniería en reversa y comprensión del software

   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.).
Estas especificaciones pueden volver ser utilizadas para construir una nueva implementación del sistema utilizando, por ejemplo, técnicas de ingeniería directa. 

 Beneficios de Ingeniería Inversa

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: 
  • 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.
  • 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.
  • 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.
La finalidad de la ingeniería inversa es la de desentrañar los misterios y secretos de los sistemas en uso a partir del código. Para ello, se emplean una serie de herramientas que extraen información de los datos, procedimientos y arquitectura del sistema existente. 

 

Tipos de Ingeniería Inversa

La ingeniería inversa puede ser de varios tipos 
  • 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ó.
  • 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. 
  • 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.

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. Un punto de ruptura (breakpoint) es una instrucción al depurador que permite parar la ejecución del programa cuando cierta condición se cumpla. Por ejemplo, cuando un programa accede a cierta variable, o llama a cierta función de la API, el depurador puede parar la ejecución del programa.

Algunos depuradores de Windows son:
  • OllyDbg → es un potente depurador con un motor de ensamblado y desensamblado integrado. Tiene numerosas otras características incluyendo un precio de 0 $. Muy útil para parcheado, desensamblado y depuración.
  • WinDBG → es una pieza de software gratuita de Microsoft que puede ser usada para depuración local en modo usuario, o incluso depuración remota en modo kernel. 

 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. Hay herramientas de inyección de fallos basados en el anfitrión que funcionan como depuradores y pueden alterar las condiciones del programa para observar los resultados y también están los inyectores basados en redes que manipulan el tráfico de la red para determinar el efecto en el aparato receptor.

Los Desambladores

   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.
Algunos ejemplos de desensambladores son: 
  • IDA Pro → es un desensamblador profesional extremadamente potente. La parte mala es su elevado precio. 
  • PE Explorer → es un desensamblador que “se centra en facilidad de uso, claridad y navegación”. No es tan completo como IDA Pro, pero tiene un precio más bajo.
  • IDA Pro Freeware 4.1 → se comporta casi como IDA Pro, pero solo desensambla código para procesadores Intel x86 y solo funciona en Windows. 
  • Bastard Disassembler → es un potente y programable desensamblador para Linux y FreeBSD. 
  • Ciasdis → esta herramienta basada en Forth permite construir conocimiento sobre un cuerpo de código de manera interactiva e incremental. Es único en que todo el código desensamblado puede ser re-ensamblado exactamente al mismo código. 
 

 Los Compiladores Inversos o 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 lenguae 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 decompilados. Los descompiladores son parecidos a los desensambladores pero llevan el proceso un importante paso más allá.
Algunos descompiladores pueden ser: 
  • DCC Decompiler → es una excelente perspectiva teórica a la descompilación, pero el descompilador sólo soporta programas MSDOS. 
  • Boomerang Decompiler Project → es un intento de construir un potente descompilador para varias máquinas y lenguajes. 
  • Reverse Engineering Compiler (REC) → es un potente “descompilador” que descompila código ensamblador a una representación del código semejante a C. El código está a medio camino entre ensamblador y C, pero es mucho más legible que el ensamblador puro. 
 

Las Herramientas 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. En el caso de la ingeniería inversa generalmente este tipo de herramientas suelen englobar una o más de las anteriores junto con otras que mejoran el rendimiento y la eficiencia.