La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Reingeniería del Software

Presentaciones similares


Presentación del tema: "Reingeniería del Software"— Transcripción de la presentación:

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

2 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

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

4 ¿Software Sustentable?

5 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.

6 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.

7 Ejemplo de Reingeniería

8 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.

9 Reingeniería del Software

10 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:

11 Reingeniería del Software

12 Reingeniería del Software

13 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.

14 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).

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

16 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?

17 ¿Qué hay de malo en esto?

18 Antipatrón BLOB

19 Antipatrón BLOB

20 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

21 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.

22 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.

23 Rediseño

24 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.

25 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.

26 Ofuscación

27 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.

28 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

29 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

30 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.

31 Dudas

32 Datos de Contacto Departamento de Sistemas y Computación
Edificio I, Inst. Tec. De Morelia MSN: Skype: juancarlosolivares Facebook: Juan Carlos Olivares Rojas


Descargar ppt "Reingeniería del Software"

Presentaciones similares


Anuncios Google