Instituto Tecnológico De Tuxtepec ESPECIALIDAD ING. EN SISTEMAS COMPUTACIONALES MATERIA REINGENIERIA DEL SOFTWARE CATEDRATICO MA. ELENA ESPEJO AGUILAR.

Slides:



Advertisements
Presentaciones similares
Lic. Juan Gabriel Bernal López
Advertisements

Ciclo de vida de desarrollo de software
MODELOS ORIENTADOS A OBJETOS
Fundamentos de Diseño de Software INFT.1
También conocido como Diseño Lógico Rodrigo Salvatierra Alberú.
ANÁLISIS DE REQUERIMIENTOS
COLEGIO DE BACHILLERES PLANTEL 13 XOCHIMILCO-TEPEPAN MATERIA:TIC EQUIPO:23 PRESENTACION: BASE DE DATOS ALUMNAS: Velazquez Corona Elsa Ponciano Antonio.
Pruebas de Unidad y Refactorización
METRICAS DE PROCESO Y PROYECTO
Gestión de proyectos Es la primera etapa de Ingeniería del Software.
Resolución de Problemas Algoritmos y Programación
Arquitectura CLARO-TECNOTREE
Diseño orientado al flujo de datos
Introducción 1 Puntos Clave –La orientación a objetos representa un cambio radical en los métodos tradicionales de creación de software –Los métodos tradicionales.
COSTOS ESTANDAR DEFINCIÓN
Ciclo de desarrollo del software
COMPONENTIZACIÓN DE ALGORITMOS GENETICOS Y SU IMPLEMENTACIÓN EN UNA PLATAFORMA ABIERTA PARA APRENDIZAJE COMPUTACIONAL.
DIAGRAMAS DE CLASES Completando los diagramas de interacción, es posible identificar la especificación de las clases que participarán en la solución indicando.
Índice 1. CONSIDERACIONES INICIALES 3
M.S.C. Ivette Hernández Dávila
HERRAMIENTAS CASE.
5.2. Definición de las funcionalidades
* FRAUSTO JIMENEZ GABRIELA * * HERNANDEZ TORRES ANA LAURA * * MANDUJANO JUAN CARLOS * * NOVA MARIN YARELI PAULINA * * ZAVALA CORTE JOCELYN ARELI *

Sistema de Información
DISEÑO DE SOFTWARE 1ª. Parte
DATA WAREHOUSE Equipo 9.
Ciclo de Vida del Software Paradigmas de Desarrollo
UNIDAD 2. ALGORITMOS Y ESTRUCTURAS DE DATOS.
CONCEPTOS BÁSICOS Diseño de Sistemas.
Administración Proyectos Jorge Baracaldo Robin Ochoa.
Programación Lineal Entera Antonio H. Escobar Z Universidad Tecnológica de Pereira – Colombia Posgrado en Ingeniería Maestría en Ingeniería Eléctrica.
Metodología para solución de problemas
REINGENIERIA Alumno: Ronald Marquez A.W. Modulo: Ing. Software.
INSTITUTO TECNOLOGICO DE MINATITLAN ASIGNATURA: FUNDAMENTOS DE PROGRAMACION DOCENTE: JOSE ANGEL TOLEDO ALVAREZ ALUMNA: ALEJANDRA OSORIO ARVISU SEMESTRE:
Importancia en la efectividad del:
Diseño de Software y su Proceso
INTRODUCCIÓN A LA INGENIERÍA DEL SOFTWARE
VISIÓN GENERAL DE LA IS Con independencia del modelo de proceso hay tres fases genéricas: Fase de definición Fase de desarrollo Fase de mantenimiento Cada.
Herramientas CASE para el mantenimiento del Software
Trainning DFD.
El modelo de análisis tiene como objetivo generar una arquitectura de objetos que sirva como base para el diseño posterior del sistema. Dependiendo del.
COLEGIO DE BACHILLERES PLANTEL 13 XOCHIMILCO-TEPEPAN MATERIA:TIC EQUIPO:21 PRESENTACION: BASE DE DATOS ALUMNAS: Adán Millán Sánchez.
Reuso y Reingeniería M.C. Juan Carlos Olivares Rojas.
Capitulo 1 Roger S. Presman
Ciclo de vida de un sistema
Ingeniería de Requisitos
Roles de Open UP.
TIPOS DE AUDITORÍAS EN SISTEMAS DE INFORMACIÓN
TIPOS DE PRUEBAS DEL SOFTWARE
Introducción al proceso de verificación y validación.
LA MEJORA DE LOS PROCESOS
Análisis y Diseño de Aplicaciones
TEMA: DISEÑO DE LA SOLUCION INTREGRANTES DE EQUIPO: ERIKA CRUZ MARTINEZ RODOLFO LOPEZ ANOTA LUIS ARMANDO LIÑA QUECHA JOSE FRANCISCO MEZO VARELA LUIS ENRIQUE.
Desarrollo de lógica algorítmica.
Modelo Prescriptivos de proceso
La reingenieria del software Integrantes: Marcela Avila Beltran Anderson Hortua Cruz Michael Mendoza Gomez.
problemas de la calidad del software
“ NO HAY NADA MÁS DIFÍCIL DE CONSEGUIR, MÁS ARRIESGADO DE MANTENER NI MÁS INSEGURO DE TENER ÉXITO, QUE ESTAR A LA CABEZA EN LA INTRODUCCIÓN DE UN.
Ciclo de Vida del Software
Tecnicas del Mantenimiento del Software
Ciclo de desarrollo del software
Ingeniería en Informática F UNDAMENTOS DE C OMPUTACIÓN B ACHILLERATO EN I NGENIERÍA I NFORMÁTICA L IC. C ARLOS H. G UTIÉRREZ L EÓN.
INGENIERIA DE SOFTWARE
Proceso de desarrollo de Software
Marco de Trabajo para Indexación, Clasificación y Recopilación Automática de Documentos Digitales Javier Caicedo Espinoza Gonzalo Parra Chico.
Taller de investigación 1
Modelo de procesos de software
Planificación de Sistemas de Información
Objetivos de la prueba Los objetivos principales de realizar una prueba son: Detectar un error. Tener un buen caso de prueba, es decir que tenga más probabilidad.
Transcripción de la presentación:

Instituto Tecnológico De Tuxtepec ESPECIALIDAD ING. EN SISTEMAS COMPUTACIONALES MATERIA REINGENIERIA DEL SOFTWARE CATEDRATICO MA. ELENA ESPEJO AGUILAR INTEGRANTES CABRERA CARRERA OSCAR CHAIRES VERGARA ROLANDO MICHAEL DIAZ SANCHEZ JOSE ANTONIO GUERRERO QUIÑONEZ EDGAR HERMIDA ROBLES JOSE LUIS LOPEZ CARDENAS HUGO LUIS SANTIAGO ANA ELVIA MARTINEZ HERNANDEZ NANCY MARTINEZ YESCAS LUZ ADRIANA RAMIREZ FERNANDEZ MICHELL SANCHEZ JIMENEZ LUIS ANGEL SOTO ANTONIO RUTH ESTHER VELASCO CARRERA ANGEL SEMESTRE 8° GRUPO“B” TUXTEPEC, OAXACA ENERO DE 2011

ANÁLISIS DE INVENTARIO: Todas 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. Para posteriormente 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 DOCUMENTOS: Una documentación escasa es la marca de muchos sistemas de información heredados. ¿Qué se puede hacer al respecto? Opción 1: La creación de documentación consume muchísimo tiempo. El sistema funciona, y ya nos ajustaremos con lo que se tiene. En algunos casos, éste es el enfoque correcto. No es posible volver a crear la documentación para cientos de programas de computadoras. Si un programa es relativamente estático está llegando al final de vida útil, y no es probable que experimente muchos cambios.

Opción 2: Es preciso actualizar la documentación, pero se dispone de recursos limitados. Se utilizará un enfoque “del tipo documentar si se modifica”. Quizá no es necesario volver a documentar por completo la aplicación. Más bien se documentarán por completo aquellas partes del sistema que estén experimentando cambios en ese momento. La colección de documentos útil y relevante irá evolucionando con el tiempo. Opción 3: El sistema es fundamental para el negocio, y es preciso volver a documentarlo por completo. En este caso, un enfoque inteligente consiste en reducir la documentación al mínimo necesario.

Todas y cada una de estas opciones son viables. Las organizaciones del software deberán seleccionar aquella que resulte más adecuada para cada caso. INGENIERÍA INVERSA: Es un Proceso de recuperación de diseño. Se extrae información acerca de los datos, arquitectura y diseño de procedimientos de un programa existente. Lo normal es que la entrada a este proceso sea el código fuente si se dispone de él. Se alterna el análisis utilizando herramientas automatizadas con el trabajo manual en el código fuente para obtener el diseño del sistema.

La información obtenida suele almacenarse como grafo dirigido, que se va modificando y completando. A partir del grafo se generarán otros documentos como diagramas de estructura de programas, diagramas de estructura de datos y matrices de trazabilidad. Las herramientas que se utilizan para comprender el programa suelen ser de tipo navegadores, que permiten moverse por el código, definir unos datos y rastrearlos por el programa. Suelen ser necesarias anotaciones manuales. Algunas de estas herramientas son (cflow, CIA, field, mkfuncmap, rigiparse).

Diagrama de una Ingeniería Inversa OBJETIVOS: Detectar efectos laterales: los cambios sobre un sistema pueden generar efectos laterales no deseados. Facilitar la reutilización: mediante las técnicas de ingeniería inversa podemos detectar los componentes candidatos a reutilizar de sistemas existentes

¿CUANDO UTILIZAR LA INGENIERÍA INVERSA? Dado que es una labor estratégica, es conveniente conocer cuando conviene realizar la tarea de reingeniería para una aplicación y cuando es mas rentable sustituirla e implementar una nueva. Las aplicaciones para el primer paso, son aquellas en las que se producen las siguientes situaciones:  Fallos frecuentes que son difíciles de localizar.  Son pocos eficientes, pero realizan la función esperada.  Dificultades en la integración con otros sistemas.  Calidad pobre del software final.

 Resistencia a introducir cambios.  Pocas personas capacitadas para realizar modificaciones.  Dificultad para realizar pruebas.  El mantenimiento consume muchos recursos.  Es necesario incluir nuevos requisitos, pero los básicos se mantienen.

REESTRUCTURACIÓN DE CÓDIGO: El tipo más común de reingeniería es la reestructuración del código. Algunos sistemas heredados tienen una arquitectura de programa relativamente sólida, pero los módulos individuales han sido codificados de una forma que hace difícil comprenderlos, comprobarlos y mantenerlos. En estos casos, se puede reestructurar el código ubicado dentro de los módulos sospechosos. Para llevar a cabo esta actividad, se analiza el código fuente mediante 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. Debido a la complejidad del software y a la capacidad de las herramientas de software actuales se está generando muchas aplicaciones mal diseñadas que son ineficientes y difíciles de mantener. El 80% del desarrollo de software es el mantenimiento (evolución) a sistemas existentes.

El término se creó como analogía con la factorización de números y polinomios. Lo cual revela una estructura interna que no era visible previamente. Ejemplo:  Problema: Hay un atributo público en una clase.  Solución: hacer el atributo privado y proporcionar métodos de acceso público

Ejemplo en Código (Problema): public class Persona{ public int edad;... }

(Solución) public class Persona{ private int edad; public void setEdad(int val){ edad = val } public int getEdad(){ return edad; }

La reestructuración de códigos está basada en técnicas probadas por otras personas que en muchas ocasiones se dan como leyes pero que es necesario entender para mejorar nuestra práctica de programación. Por definición, los objetos tienen propiedades/carácterísticas/atributos (variables) que son propias y que no deben de ser modificables por otros, incluso objetos del mismo tipo. Si una persona tiene un atributo peso este no puede ser modificado al azar (una persona tiene 60 kilos y de repente ya 65) sólo a través de un comportamiento/hablidad (método) como hacerEjercicio() o comerGolosinas().

 ¿Esto implica que cada atributo de la clase debe tener métodos get/set?  No, sólo aquellos elementos que deban ser modificados en el exterior. Es como el caso de los métodos privados.  ¿En que ocasiones se recomienda que los atributos de una clase sean públicos? Cuando son constantes numéricas.

REESTRUCTURA DE DATOS: Se evaluan todas las sentencias del lenguaje de programación con definiciones de datos, descripciones de archivos de E/S y descripciones de interfaz. Esta actividad a veces se denomina análisis de datos. Extraen elementos y objetos de datos para obtener información del flujo de datos y comprender la estructura Una vez finalizado el análisis de datos, comienza el rediseño de datos.

Un programa que posea una estructura de datos débil será difícil de adaptar y de mejorar. De hecho, para muchas aplicaciones, la arquitectura de datos tiene más que ver con la viabilidad a largo plazo del programa que el propio código fuente. A diferencia de la reestructuración de código, que se produce en un nivel relativamente bajo de abstracción, la estructuració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 por una actividad de ingeniería inversa. La arquitectura de datos actual se analiza minuciosamente y se definen los modelos de datos necesarios. Se identifican los objetos de datos y atributos y, a continuación, se revisan las estructuras de datos a efectos de calidad.

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 los pueblan, los cambios en datos darán lugar invariablemente a cambios o bien de arquitectura o bien de código.

INGENIERIA PROGRESIVA: Reconstruye el programa empleando prácticas de ingeniería moderna de software y también la información obtenida durante la ingeniería inversa La ingeniería progresiva que se denomina también renovación o reclamación, no solamente recupera la información de diseño de un Software ya existente, si no que además, utiliza esta información para alterar o reconstituir el sistema existente en un esfuerzo para mejorar su calidad global

Puede decirse que es el conjunto de todas las actividades anteriores. Su aplicación se realiza sobre todo sobre sistemas cuya funcionalidad es adecuada, pero que tienen una estructura, código, interfaz y/o estructura de datos obsoletas. Son sistemas críticos para el funcionamiento de la empresa, pero necesitan un “lavado de cara” al mismo tiempo que una mejora en el rendimiento. Esta renovación se puede aprovechar para añadir nuevas funciones y pensando en perspectivas futuras de crecimiento. Existen herramientas automatizadas para llevar a cabo este proceso (siempre con bastante interacción humana), en base a herramientas de ingeniería inversa y regeneradores de código.

La reingeniería debe ser entendida como un proceso mediante el cual se mejora un software existente haciendo uso de técnicas de ingeniería inversa y reestructuración de código. Para llevar a cabo la reingeniería del Software se puede realizar a través del modelo Cíclico. Este modelo define seis actividades las cuales se muestran en la figura de abajo. En algunas ocasiones, estas actividades se producen de forma secuencial y lineal, pero esto no siempre es así. Por ejemplo, puede ser que la ingeniería inversa (la comprensión del funcionamiento interno de un programa) tenga que producirse antes de que pueda comenzar la reestructuración de documentos.

El paradigma de la reingeniería mostrado en la figura es un modelo cíclico. Esto significa que cada una de las actividades presentadas como parte del paradigma pueden repetirse en otras ocasiones. Para un ciclo en particular, el proceso puede terminar después de cualquier de estas actividades.