Reingeniería del Software

Slides:



Advertisements
Presentaciones similares
MODELOS ORIENTADOS A OBJETOS
Advertisements

Fundamentos de Diseño de Software INFT.1
FACHADA COMPOSITOR MEMENTO
Juan Carlos Olivares Rojas
Unidad II Interfaces Hombre Máquina
Pruebas de Unidad y Refactorización
METODOLOGÍAS ÁGILES “PROCESO UNIFICADO ÁGIL (AUP)
Arquitectura CLARO-TECNOTREE
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.
POO Santiago, Mayo 2004 TRABAJO DE INVESTIGACIÓN POO Programación Orientada a Objetos CENAFOM Carolina Bravo V. Jaime Jofré B.
1  2008 Universidad de Las Américas - Ingeniería de Software : Dr. Juan José Aranda Aboy ACI491: Ingeniería de Software Unidad 7: Proceso de Ingeniería.
M.C. Juan Carlos Olivares Rojas
M.S.C. Ivette Hernández Dávila
U NIDAD III P ROGRAMACIÓN O RIENTADA A O BJETOS (POO) Facilitadora: Ing. Patricia Gómez.
El paradigma de la orientación a objetos La programación orientada a objetos genera códigos eficientes y estandariza la metodología de programación, además.
M.C. Juan Carlos Olivares Rojas
Material de apoyo Unidad 1 Fundamentos de programación
Inteligencia Artificial M.C. Juan Carlos Olivares Rojas.
DEPARTAMENTO DE INGENIERÍA INFORMÁTICA
Ingeniería de Software Libre para Ambientes Móviles M.C. Juan Carlos Olivares Rojas Pátzcuaro, Michoacán, 29 de abril de 2014.
Ingeniería de Sistemas Requerimientos
(c) P. Gomez-Gil, INAOE DISEÑO DE COMPONENTES DE SOFTWARE * NOTAS DEL CURSO Ingeniería de Software I DRA. MARIA DEL PILAR GÓMEZ GIL INAOEP.
Ingeniería de Software
1 Proyecto de Solución de Problemas con Programación Verano 2008.
Ingeniería de Software Orientado a Objetos
DISEÑO DE SOFTWARE 1ª. Parte
Fundamentos de programación
Técnicas para la obtención de requerimientos
Reestructuración del Código M.C. Juan Carlos Olivares Rojas Marzo 2010.
ASEGURANDO LA CALIDAD DEL CODIGO REFACTORING. Refactorizar (o Refactoring) es realizar una transformación al software preservando su comportamiento, modificando.
Software Reengineering Juan Carlos Olivares Rojas MSN:
Ciclo de Vida del Software Paradigmas de Desarrollo
Software Testing Juan Carlos Olivares Rojas MSN:
Ciclo de Vida del Software
CONCEPTOS BÁSICOS Diseño de Sistemas.
Ingeniería de Software Asistida por Computadora
Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,
Ingeniería de Software
REINGENIERIA Alumno: Ronald Marquez A.W. Modulo: Ing. Software.
Ingeniería de Requerimiento
Metodología para la construcción de programas
Test-Driven Development Juan Carlos Olivares Rojas MSN:
Tema 1: Introducción a la Ingeniería de Software
INSTITUTO TECNOLOGICO DE MINATITLAN ASIGNATURA: FUNDAMENTOS DE PROGRAMACION DOCENTE: JOSE ANGEL TOLEDO ALVAREZ ALUMNA: ALEJANDRA OSORIO ARVISU SEMESTRE:
INTRODUCCIÓN A LA INGENIERÍA DEL SOFTWARE
Metodología de la programación
Ingeniería de Software II
Reuso y Reingeniería M.C. Juan Carlos Olivares Rojas.
Docente: Lic. M. Alina Vargas García Horario: Lunes 20:05 – 21:25 Miércoles 20:05 – 21:25 Gestión: 2011.
Capitulo 1 Roger S. Presman
Introducción a UML Departamento de Informática Universidad de Rancagua
INGENIERÍA DEL SOFTWARE GESTIÓN DE PROYECTOS
 Sara Isabel Osorio Alcaraz Ana Isabel Vallejo Grisales 10 Informática 1.
Guía metodológica para la gestión de proyectos de software en PyMEs que no son fábricas de software por medio de metodologías ágiles Tatiana Alejandra.
Ingeniería de Software Ingeniería en Computación M.C. J. Jesús Arellano Pimentel.
III. DESARROLLO DE SISTEMAS.. Podemos definir el desarrollo de sistemas informáticos como el proceso mediante el cual el conocimiento humano y el uso.
M.C. Juan Carlos Olivares Rojas
Actividades en el Proceso de desarrollo de Software
Ingeniería del Software I
Tecnicas del Mantenimiento del Software
Ing. Johanna Macias Algoritmo, Estructura y Programación III.
Tipo de relación entre clases Es uno de los aspectos que distinguen el paradigma de orientación a objetos frente a otros paradigmas. Mecanismo que,
INGENIERIA DE SOFTWARE
Proceso de desarrollo de Software
Software de Comunicaciones
Modelo de procesos de software
Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos.
Prof. Manuel B. Sánchez. Un paradigma de programación representa un enfoque particular o filosofía para la construcción del software. No es mejor uno.
Transcripción de la presentación:

Reingeniería del Software M.C. Juan Carlos Olivares Rojas CECyTEM, Morelia, Junio 2010

Software Hoy en Día Mito: los programadores de ahora ya no programan como los de antes. Herramientas más fáciles y productivas El software es cada día más complejo

Reingeniería del Software ¿Si su software fuera un edificio, se parecería mas a uno de la izquierda o de la derecha?

¿Software Sustentable?

Software Sustentable Reducir Reusar Reciclar 80% Desarrollo de Software es para mantenimiento. Por lo tanto se necesita de un código simple, legible y bien diseñado para que en un futuro pueda ser extensible.

Reingeniería Se originó a finales de la década de 1980 aunque se popularizó en la década de 1990. La reingeniería es un proceso que trata de dar respuesta a una interrogante: ¿Estamos acaso haciendo las cosas bien o podríamos hacerlas mejor? Es el rediseño o cambio drastico de un proceso en un negocio (deriva hacia el producto). Es comenzar de cero, cambio de todo o nada.

Ejemplo de Reingeniería

Reingeniería del Software La reingeniería de software es costosa y consumidora de tiempo. La reingeniería es una actividad de reconstrucción, preferible de realizar antes de que se “derrumbe” la obra. Antes de derribar una casa, quizás se necesita corroborar que está mal.

Reingeniería del Software

Reingeniería del Software La reingeniería es un proceso que altera los elementos internos de toda obra, no es una sola remodelación de la fallada. La reingeniería ayuda a la evolución y mantenimiento del software Generalmente se siguen los siguientes pasos para aplicar reingeniería:

Reingeniería del Software

Reingeniería del Software

Refactoring Refactoring (Reestructuración) es modificar el comportamiento interno (generalmente código fuente) sin modificar su comportamiento externo (apariencia, funcionalidad). Un cambio al sistema que deja su comportamiento inalterable (sin cambios), pero aumenta alguna cualidad no funcional como simplicidad, flexibilidad, comprensión, … [Beck, 1999] Si se llega a modificar su comportamiento externo formalmente no se le considera “refactorización” sino más bien una modificación.

Definición El término se creó como analogía con la factorización de números y polinomios. Por ejemplo, x² − 1 puede ser factorizado como (x + 1)(x − 1), revelando una estructura interna que no era visible previamente (como las dos raíces en -1 y +1) El libro de Martin Fowler Refactoring es la referencia clásica (1999).

Ejemplo de Refactoring Es correcto el siguiente modelo ¿Se puede mejorar?¿cómo?

Ejemplo de Refactoring Si. Subiendo el método a la clase padre ¿En qué casos no sería conveniente esta refactorización? Cuando los métodos difieren en su implementación. ¿Pero aun así es mala?

¿Qué hay de malo en esto?

Antipatrón BLOB

Antipatrón BLOB

REFACTORING PROPUESTO Bad Smells BAD SMELL REFACTORING PROPUESTO CODIGO DUPLICADO EXTRAER EL MÉTODO SUBIR VARIABLES SUSTITUIR EL ALGORITMO MÉTODOS LARGOS INTRODUCIR OBJETOS COMO PARÁMETROS REEMPLAZAR EL MÉTODO CON UN OBJETO MÉTODO CLASES GRANDES EXTRAER CLASES EXTRAER SUBCLASES CARACTERÍSTICA DE LA “ENVIDIA” MOVER MÉTODO CLASES “PEREZOSAS” COLAPSAR JERARQUÍAS Algunas ideas sobre que reestructura

Ingeniería Inversa Se aplica para obtener un modelo detallado de análisis, ingeniería de requerimientos, diseño y en algunos casos implementación teniendo una solución, la cual es una actividad consumidora de tiempo. Tanto la Ingeniería Inversa como la Reingeniería en la mayoría de las licencias de Software se encuentran penadas por la ley.

Ingeniería Inversa Los archivos ejecutables pueden ser desemsamblados obteniendo su código fuente en ensamblador. Los archivos ejecutables con código portable (Java, .NET) pueden ser desemsamblados para obtener su código fuente.

Rediseño

Reuso de Software El reuso es una de las técnicas de resolución de problemas que más utilizamos los humanos. De hecho es lo primero que verifica nuestro cerebro. El reuso en software nos ayuda a mejorar la producción y calidad del software al “no reinventar la rueda”. Desafortunadamente no todo se puede reutilizar.

Reuso de Software La reutilización es la propiedad de utilizar conocimiento, procesos, metodologías o componentes de software ya existente para adaptarlo a una nueva necesidad, incrementando significativamente la calidad y productividad del desarrollo. Para que un objeto pueda ser reusable se necesita de un alto nivel de abstracción. Entre mayor es su nivel de abstracción, mayor es su nivel de reuso.

Ofuscación

Otros Ejercicios P1: Reestructuración de auto documentación con Javadoc P2: traducción de un código a otro P3: Estándares de codificación (notación Camello-Húngaro, manejo de IDs) y Pruebas Unitarias. P4: manejo de versiones, construcción desde cero. Ofuscación de código.

Otros Ejercicios P5: reestructuración de datos (archivos a base de datos). Internalización. P6: creación de bibliotecas utilizando patrón de diseño MVC P7: uso de catálogo de refactorings P8: Utilización de patrón de diseño factoría

Otros Ejercicios P9: Refactoring otro lenguaje mismo paradigma de programación P10: Ingeniería inversa P11: Refactoring de POO a Aspectos P12: Patrón Diseño Adapter P13: Patrón diseño memento

Calidad del Software en México Referencias Roger S. Pressman, Ingeniería de software un enfoque práctico.Ed. McGraw Hill.   Piattini M.G. y F.O, Calidad en el desarrollo y mantenimiento del software. Ed. RAMA. Fowler, M. (1999), Refactoring, Adison-Wesley.

Dudas

Datos de Contacto Departamento de Sistemas y Computación Edificio I, Inst. Tec. De Morelia jcolivar@itmorelia.edu.mx http://antares.itmorelia.edu.mx/~jcolivar MSN: juancarlosolivares@hotmail.com Skype: juancarlosolivares Twitter: @jcolivares Facebook: Juan Carlos Olivares Rojas