reingenieria e ingenieria de reverso

16
Reingeniería e Ingeniería de reverso. Reingeniería del software se puede definir como: “modificación de un producto software, o de ciertos componentes, usando para el análisis del sistema existente técnicas de Ingeniería Inversa y, para la etapa de reconstrucción, herramientas de Ingeniería Directa, de tal manera que se oriente este cambio hacia mayores niveles de facilidad en cuanto a mantenimiento, reutilización, comprensión o evaluación.” La Ingeniería de Reverso es lo opuesto a la generación de código: el código fuente del sistema es examinado, analizado y convertido en entidades en el repositorio. Entre las técnicas de Reingeniería tenemos: •Reestructuración de Datos: Esto es reversar el modelo físico al modelo lógico para obtener el modelo de E-R de la base de datos, recuperando el diccionario de datos, atributos, entidades, dominios, cardinalidad entre otros, la mayoría de las herramientas CASE del mercado cumplen con esta función. Reestructuración de Código: Llevar a cabo esta actividad requiere analizar el código fuente empleando una herramienta de reestructuración, de no tener el código fuente disponible puede aplicarse ingeniería inversa sobre el compilado para obtener el código fuente original siempre y cuando la licencia del software lo permita, inmediatamente se indican las violaciones de las estructuras de programación estructurada u orientada a objetos, y entonces se reestructura el código (esto se puede hacer automáticamente). El código reestructurado resultante se revisa y se comprueba para asegurar que no se hayan introducido anomalías. Se actualiza la documentación interna del código. Reingeniería del software se puede definir como: “modificación de un producto software, o de ciertos componentes, usando para el análisis del sistema existente técnicas de Ingeniería Inversa y, para la etapa de reconstrucción, herramientas de Ingeniería Directa, de tal manera que se oriente este cambio hacia mayores niveles de facilidad en cuanto a mantenimiento, reutilización, comprensión o evaluación.” Cuando una aplicación lleva siendo usada años, es fácil que esta aplicación se vuelva inestable como fruto de las múltiples correcciones, adaptaciones o mejoras que han podido surgir a lo largo del tiempo. Esto deriva en que cada vez que se pretende realizar un cambio se producen efectos colaterales inesperados y hasta de

Upload: patriciacd19

Post on 14-Feb-2015

550 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Reingenieria e Ingenieria de Reverso

Reingeniería e Ingeniería de reverso.Reingeniería del software se puede definir como: “modificación de un producto software, o de ciertos componentes, usando para el análisis del sistema existente técnicas de Ingeniería Inversa y, para la etapa de reconstrucción, herramientas de Ingeniería Directa, de tal manera que se oriente este cambio hacia mayores niveles de facilidad en cuanto a mantenimiento, reutilización, comprensión o evaluación.” La Ingeniería de Reverso es lo opuesto a la generación de código: el código fuente del sistema es examinado, analizado y convertido en entidades en el repositorio.Entre las técnicas de Reingeniería tenemos:

•Reestructuración de Datos: Esto es reversar el modelo físico al modelo lógico para obtener el modelo de E-R de la base de datos, recuperando el diccionario de datos, atributos, entidades, dominios, cardinalidad entre otros, la mayoría de las herramientas CASE del mercado cumplen con esta función. •    Reestructuración de Código: Llevar a cabo esta actividad requiere analizar el código fuente empleando una herramienta de reestructuración, de no tener el código fuente disponible puede aplicarse ingeniería inversa sobre el compilado para obtener el código fuente original siempre y cuando la licencia del software lo permita, inmediatamente se indican las violaciones de las estructuras de programación estructurada u orientada a objetos, y entonces se reestructura el código (esto se puede hacer automáticamente). El código reestructurado resultante se revisa y se comprueba para asegurar que no se hayan introducido anomalías. Se actualiza la documentación interna del código.Reingeniería del software se puede definir como: “modificación de un producto software, o de

ciertos componentes, usando para el análisis del sistema existente técnicas de Ingeniería Inversa y, para la etapa de reconstrucción, herramientas de Ingeniería Directa, de tal manera que se oriente este cambio hacia mayores niveles de facilidad en cuanto a mantenimiento,

reutilización, comprensión o evaluación.”

Cuando una aplicación lleva siendo usada años, es fácil que esta aplicación se vuelva inestable como fruto de las múltiples correcciones, adaptaciones o mejoras que han podido surgir a lo largo del tiempo. Esto deriva en que cada vez que se pretende realizar un cambio se producen efectos colaterales inesperados y hasta de gravedad, por lo que se hace necesario, si se prevé que la aplicación seguirá siendo de utilidad, aplicar reingeniería a la misma.

Entre los beneficios de aplicar reingeniería a un producto existente se puede incluir:

Pueden reducir los riegos evolutivos de una organización. Puede ayudar a las organizaciones a recuperar sus inversiones en software. Puede hacer el software más fácilmente modificable Amplía las capacidades de las herramientas CASE Es un catalizador para la automatización del mantenimiento del software Puede actuar como catalizador para la aplicación de técnicas de inteligencia artificial para

resolver problemas de reingenieríaLa reingeniería del software involucra diferentes actividades como son:

análisis de inventarios reestructuración de documentos

Page 2: Reingenieria e Ingenieria de Reverso

ingeniería inversa reestructuración de programas y datos ingeniería directa

con la finalidad de crear versiones de programas ya existentes que sean de mejor calidad y los mismos tengan una mayor facilidad de mantenimiento.

Figure 1Figura 1. Pasos de la Reingeniería del Software

Análisis de InventariosTodas las organizaciones de software deberían tener un inventario de todas sus aplicaciones. El inventario tal vez no sea más que un modelo en una hoja de cálculo que contenga información que proporcione una descripción detallada (tamaño, edad, importancia para el negocio) de las aplicaciones activas.

Los candidatos a la reingeniería aparecen cuando se ordena esta información en función de su importancia para el negocio, longevidad, mantenibilidad actual y otros criterios localmente importantes. Es entonces cuando es posible asignar recursos a las aplicaciones candidatas para el trabajo de reingeniería.

Es importante señalar que el inventario deberá visitarse con regularidad, el estado de las aplicaciones puede cambiar en función del tiempo y, como resultado, cambiarán las prioridades para la reingeniería.

Reestructuración de documentosLa documentación débil es la marca de muchos sistemas heredados. ¿Pero que se hace acerca de ellos? ¿Cuáles son las opciones? Crear documentación consume mucho tiempo, si el sistema funciona vivirá con lo que tenga. La documentación debe actualizarse pero se tiene recursos limitados. Se utiliza un enfoque de “documentar cuando se toque”. El sistema es crucial para el negocio y debe volver a documentarse por completo incluso en este caso un enfoque inteligente es recortar la documentación a un mínimo esencial. Cada una de estas opciones es viable. Una organización de software debe elegir la más apropiada para cada caso.

Ingeniería InversaEste término tiene sus orígenes en el mundo del hardware. Una cierta compañía desensambla un producto de hardware competitivo en un esfuerzo por comprender los

Page 3: Reingenieria e Ingenieria de Reverso

“secretos” del diseño y fabricación de su competidor. Estos secretos se podrán comprender más fácilmente si se obtuvieran las especificaciones de diseño y fabricación del mismo. Pero estos documentos son privados, y no están disponibles para la compañía que efectúa la ingeniería inversa. En esencia, una ingeniería inversa con éxito precede de una o más especificaciones de diseño y fabricación para el producto, mediante el examen de ejemplos reales de ese producto.

La ingeniería inversa del software es algo similar. En la mayoría de los casos, el programa del cual hay que hacer una ingeniería inversa no es el de un rival, sino, más bien, el propio trabajo de la compañía. Los “secretos” que hay que comprender resultan incomprensibles porque nunca se llegó a desarrollar una especificación. Consiguientemente, la ingeniería inversa del software es el proceso de análisis de un programa con el fin de crear una representación de programa con un nivel de abstracción más elevado que el código fuente.

La Ingeniería inversa es un proceso de recuperación de diseño. Con las herramientas de la ingeniería inversa se extraerá del programa existente información del diseño arquitectónico y de proceso, e información de los datos.

Reestructuración de códigoEl tipo más común de reingeniería es la reestructuración de código, se puede hacer con módulos individuales que se codifican de una manera que dificultan comprenderlos, probarlos y mantenerlos.

Llevar a cabo esta actividad requiere analizar el código fuente empleando una herramienta de reestructuración, se indican las violaciones de las estructuras de programación estructurada, y entonces se reestructura el código (esto se puede hacer automáticamente). El código reestructurado resultante se revisa y se comprueba para asegurar que no se hayan introducido anomalías. Se actualiza la documentación interna del código.

Reestructuración de datosLa reestructuración de datos es una actividad de reingeniería a gran escala. En la mayoría de los casos, la reestructuración de datos comienza con una actividad de ingeniería inversa. La arquitectura de datos actual se analiza con minuciosidad y se define los modelos de datos necesarios, se identifican los objetivos de datos y los atributos, y después se revisa la calidad de las estructuras de datos existentes.

Cuando la estructura de datos es débil (por ejemplo, actualmente se implementan archivos planos, cuando un enfoque relacional simplificaría muchísimo el procesamiento), se aplica una reingeniería a los datos.

Dado que la arquitectura de datos tiene una gran influencia sobre la arquitectura del programa, y también sobre los algoritmos que lo pueblan, los cambios en datos darán lugar invariablemente a cambios o bien de arquitectura o bien de código.

Ingeniería directaEn un mundo ideal, las aplicaciones se reconstruyen utilizando un “motor de reingeniería” automatizado. En el motor se insertaría el programa viejo, que lo analizaría, reestructuraría y después regeneraría la forma de exhibir los mejores aspectos de la calidad del software. Después de un espacio de tiempo corto, es probable que llegue a aparecer este “motor”, pero los fabricantes de CASE han presentado herramientas que proporcionan un subconjunto limitado de estas capacidades y que se enfrentan con dominios de aplicaciones específicos. Lo que es más importante, estas herramientas de reingeniería cada vez son más sofisticadas.

Page 4: Reingenieria e Ingenieria de Reverso

La ingeniería directa no solo recupera la información de diseño a partir del software existente, también utiliza esta información para alterar o reconstruir el sistema existente con la finalidad de mejorar su calidad global. En la mayoría de los casos el software sometido a reingeniería vuelve a implementar la función del sistema existente y también añade nuevas funciones o mejoras.

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 InversaLa 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 InversaLa 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ón

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

Page 5: Reingenieria e Ingenieria de Reverso

Los DepuradoresUn 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 FallosLas 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 DesensambladoresSe 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 desensambladotes 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 desensambladotes 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.

Page 6: Reingenieria e Ingenieria de Reverso

Los compiladores Inversos o DecompiladoresUn decompilador 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 decompiladores 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 decompiladores son parecidos a los desensambladotes pero llevan el proceso un importante paso más allá.

Algunos decompiladores pueden ser:

DCC Decompiler → es una exacelente 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 CASELas 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.

 Reingeniería de Software Se puede definir como el proceso completo de convertir elcódigo de programa al diseño CASE, modificar el diseño yvolver a generar el nuevo código. El termino se usa endistintas áreas de la ingeniería, programación y negocios.

15. Reingeniería de software Con respecto a los negocios, es

una forma de darle una nuevaorientación a los procesos claves de

una organización, de estamanera el rol de los analistas de sistemas

radica en el uso detecnologías de información novedosas, como

consecuencia alos cambios requeridos.

16. Beneficios de la Reingeniería de Software Entre los beneficios

de aplicar reingeniería a un producto existente se puede incluir:

Pueden reducir los riegos evolutivos de una organización. Puede

ayudar a las organizaciones a recuperar sus inversiones en

software. Puede hacer el software más fácilmente modificable.

17. Beneficios de la Reingeniería de Software Amplía las

capacidades de las herramientas CASE. Es un catalizador para la

automatización del mantenimiento del software. Puede actuar

como catalizador para la aplicación de técnicas de inteligencia

Page 7: Reingenieria e Ingenieria de Reverso

artificial para resolver problemas de reingeniería.

18. Pasos para la Reingeniería de software

19. Pasos para la Reingeniería de Software Análisis de

inventario: Todas las organizaciones de software deberían tener un

inventario de todas sus aplicaciones. Los candidatos a la

reingeniería aparecen cuando se ordena esta información en

función de su importancia para el negocio, longevidad,

mantenibilidad actual y otros criterios localmente importantes. Es

importante señalar que el inventario deberá visitarse con

regularidad, el estado de las aplicaciones puede cambiar en función

del tiempo y, como resultado, cambiarán las prioridades para la

reingeniería.

20. Pasos para la Reingeniería de Software Restauración de

documentos: La documentación debe actualizarse pero se tiene

recursos limitados. Se utiliza un enfoque de “documentar cuando se

toque”. El sistema es crucial para el negocio y debe volver a

documentarse por completo incluso en este caso un enfoque

inteligente es recortar la documentación a un mínimo esencial.

Cada una de estas opciones es viable. Una organización de

software debe elegir la más apropiada para cada caso.

21. Pasos para la Reingeniería de Software Ingeniería Inversa:

La Ingeniería inversa es un proceso de recuperación de diseño.

Con las herramientas de la ingeniería inversa se extraerá del

programa existente información del diseño arquitectónico y de

proceso, e información de los datos.

22. Pasos para la Reingeniería de Software Restructuración de

códigos: Llevar a cabo esta actividad requiere analizar el código

fuente empleando una herramienta de reestructuración, se indican

las violaciones de las estructuras de programación estructurada, y

entonces se reestructura el código (esto se puede hacer

automáticamente). El código reestructurado resultante se revisa y

Page 8: Reingenieria e Ingenieria de Reverso

se comprueba para asegurar que no se hayan introducido

anomalías.

23. Pasos para la Reingeniería de Software La reestructuración

de datos: Es una actividad de reingeniería a gran escala. En la

mayoría de los casos, la reestructuración de datos comienza con

una actividad de ingeniería inversa. La arquitectura de datos actual

se analiza con minuciosidad y se define los modelos de datos

necesarios, se identifican los objetivos de datos y los atributos, y

después se revisa la calidad de las estructuras de datos existentes.

24. Pasos para la Reingeniería de Software Ingeniería directa: La

ingeniería directa no solo recupera la información de diseño a partir

del software existente, también utiliza esta información para alterar

o reconstruir el sistema existente con la finalidad de mejorar su

calidad global. En la mayoría de los casos el software sometido a

reingeniería vuelve a implementar la función del sistema existente y

también añade nuevas funciones o mejoras.

Qué es un estándar?De acuerdo con la definición de la Real Academia Española, “estándar es aquello que sirve como tipo, modelo, norma, patrón o referencia”.

Qué es un estándar de calidad?Estándar de calidad es el que reúne los requisitos mínimos en busca de la excelencia dentro de una organización institucional.

¿Qué son los estándares básicos de competencias?Son criterios claros y públicos que permiten conocer lo que deben aprender nuestros jóvenes, y establecen el punto de referencia en cada área, núcleo de formación o contenidos temáticos, lo que están en capacidad de saber y saber hacer en contexto situado.

Qué es un estándar de calidad en la educación?

El estándar de calidad en la educación se define como: “Señalamiento de lo que la comunidad especializada considera que son las condiciones básicas para que se merezca una investidura o título universitario. A estas condiciones básicas se les ha denominado estándares de calidad”.1

La comunidad académica y los estándares de calidad

El registro calificado es un proceso que está inscrito en el marco de la inspección y vigilancia que debe realizar el estado para asegurar que los programas de la IES presten sus servicios.

1 .

Page 9: Reingenieria e Ingenieria de Reverso

Sólo si cumple con los estándares de calidad exigidos se otorgará este registro.

Con este objetivo, los estándares de calidad han sido difundidos a toda la comunidad académica y trabajados siguiendo los parámetros establecidos en el Decreto 2566 de septiembre 10 de 2003, expedido por la Presidencia de la República.

. Explique ejemplificando los estándares de calidad en el desarrollo de software.

Cuando se habla de calidad del software se hace referencia la conjunto de cualidades que determinan su utilidad. Es el grado en que un software cumple con los requisitos especificados. (eficiencia, flexibilidad, corrección, mantenimiento, seguridad e integridad.)

La Calidad del software es medible y varia según el tipo de sistema y de programa, por ejemplo: no es lo mismo un software para control de viajes especiales el cual debe ser confiable a un nivel de cero errores, que un software elaborado para la implementación de un sistema de calidad (investigación).

Esta calidad puede ser inspeccionada al finalizar el producto, pero normalmente es mas costoso que realizarlo durante las diferentes etapas del ciclo de vida de producción delproducto.

 Explique ejemplificando las herramientas case.

Las herramientas CASE (Computer Aided Software Engineering, Ingeniería de Software Asistida por Computadora) son diversas aplicaciones informáticas destinadas a aumentar la productividad en el desarrollo de software reduciendo el coste de las mismas en términos de tiempo y de dinero. Estas herramientas nos pueden ayudar en todos los aspectos del ciclo de vida de desarrollo del software en tareas como el proceso de realizar un diseño del proyecto, cálculo de costes, implementación de parte del código automáticamente con el diseño dado, compilación automática, documentación o detección de errores entre otras.

Sistema de software que intenta proporcionar ayuda automatizada a las actividades del proceso de software. Los sistemas CASE a menudo se utilizan como apoyo al método.Objetivos

1.Mejorar la productividad en el desarrollo y mantenimiento del software.

2.Aumentar la calidad del software.

3.Reducir el tiempo y coste de desarrollo y mantenimiento de los sistemas

informáticos.

4.Mejorar la planificación de un proyecto

5.Aumentar la biblioteca de conocimiento informático de una empresa ayudando a la

búsqueda de soluciones para los requisitos.

6.Automatizar el desarrollo del software, la documentación, la generación de código,

Page 10: Reingenieria e Ingenieria de Reverso

las pruebas de errores y la gestión del proyecto.

7.Ayuda a la reutilización del software, portabilidad y estandarización de la

documentación

8.Gestión global en todas las fases de desarrollo de software con una misma

herramienta.

9.Facilitar el uso de las distintas metodologías propias de la ingeniería del software.

Clasificacion

Aunque no es fácil y no existe una forma única de clasificarlas, las herramientas

CASE se pueden clasificar teniendo en cuenta los siguientes parámetros:

1.Las plataformas que soportan.

2.Las fases del ciclo de vida del desarrollo de sistemas que cubren.

3.La arquitectura de las aplicaciones que producen.

4.Su funcionalidad.

La siguiente clasificación es la más habitual basada en las fases del ciclo de

desarrollo que cubren:

Upper CASE (U-CASE), herramientas que ayudan en las fases de planificación,

análisis de requisitos y estrategia del desarrollo, usando, entre otros diagramas

UML.

Middle CASE (M-CASE), herramientas para automatizar tareas en el análisis y

diseño de la aplicación.

Lower CASE (L-CASE), herramientas que semi-automatizan la generación de

código, crean programas de detección de errores, soportan la depuración de

programas y pruebas.

Además automatizan la documentación completa de la aplicación. Aquí pueden

incluirse las herramientas de Desarrollo rápido de aplicaciones.

Existen otros nombres que se le dan a este tipo de herramientas, y que no es una

clasificación excluyente entre sí, ni con la anterior:

Page 11: Reingenieria e Ingenieria de Reverso

Integrated CASE (I-CASE), herramientas que engloban todo el proceso de

desarrollo software, desde análisis hasta implementación.

MetaCASE, herramientas que permiten la definición de nuestra propia técnica de

modelado, los elementos permitidos del metamodelo generado se guardan en

un repositorio y pueden ser usados por otros analistas, es decir, es como si

definiéramos nuestro propio UML, con nuestros elementos, restricciones y

relaciones posibles.

CAST (Computer-Aided Software Testing), herramientas de soporte a la prueba de

software.

IPSE (Integrated Programming Support Environment), herramientas que soportan

todo el ciclo de vida, incluyen componentes para la gestión de proyectos y

gestión de la configuración.

Por funcionalidad podríamos diferenciar algunas como:

Herramientas de generación semiautomática de código.

Editores UML.

Herramientas de Refactorización de código.

Herramientas de mantenimiento como los sistemas de control de versiones·

Ejemplos:

Page 12: Reingenieria e Ingenieria de Reverso