Вы находитесь на странице: 1из 32

Reingeniera del Software

M.C. Juan Carlos Olivares Rojas

CECyTEM, Morelia, Junio 2010

Software Hoy en Da
Mito: programadores ahora ya programan como de antes. los de no los

Herramientas ms fciles y productivas El software es cada da ms complejo

Reingeniera del Software


Si su software fuera un edificio, se parecera 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 cdigo simple, legible y bien diseado para que en un futuro pueda ser extensible.

Reingeniera
Se origin a finales de la dcada de 1980 aunque se populariz en la dcada de 1990.
La reingeniera es un proceso que trata de dar respuesta a una interrogante: Estamos acaso

haciendo las cosas bien o podramos hacerlas mejor? Es el rediseo o cambio drastico de un proceso en un negocio (deriva hacia el producto). Es comenzar de cero, cambio de todo o nada.

Ejemplo de Reingeniera

Reingeniera del Software


La reingeniera de software es costosa y consumidora de tiempo. La reingeniera es una actividad de reconstruccin, preferible de realizar antes de que se derrumbe la obra. Antes de derribar una casa, quizs se necesita corroborar que est mal.

Reingeniera del Software

Reingeniera del Software


La reingeniera es un proceso que altera los elementos internos de toda obra, no es una sola remodelacin de la fallada. La reingeniera ayuda a mantenimiento del software la evolucin y

Generalmente se siguen los siguientes pasos para aplicar reingeniera:

Reingeniera del Software

Reingeniera del Software

Refactoring
Refactoring (Reestructuracin) es modificar el comportamiento interno (generalmente cdigo 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, comprensin, [Beck, 1999]

Definicin
El trmino se cre como analoga con la factorizacin de nmeros 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 races en -1 y +1) El libro de Martin Fowler Refactoring es la referencia clsica (1999).

Ejemplo de Refactoring
Es correcto el siguiente modelo

Se puede mejorar?cmo?

Ejemplo de Refactoring
Si. Subiendo el mtodo a la clase padre

En qu casos no sera conveniente esta refactorizacin? Cuando los mtodos difieren en su implementacin. Pero aun as es mala?

Qu hay de malo en esto?

Antipatrn BLOB

Antipatrn BLOB

Bad Smells
BAD SMELL REFACTORING PROPUESTO Algunas ideas sobre que reestructura
CODIGO DUPLICADO EXTRAER EL MTODO SUBIR VARIABLES SUSTITUIR EL ALGORITMO EXTRAER EL MTODO INTRODUCIR OBJETOS COMO PARMETROS REEMPLAZAR EL MTODO CON UN OBJETO MTODO

MTODOS LARGOS

CLASES GRANDES

EXTRAER CLASES EXTRAER SUBCLASES MOVER MTODO COLAPSAR JERARQUAS

CARACTERSTICA DE LA ENVIDIA CLASES PEREZOSAS

Ingeniera Inversa
Se aplica para obtener un modelo detallado de anlisis, ingeniera de requerimientos, diseo y en algunos casos implementacin teniendo una solucin, la cual es una actividad consumidora de tiempo. Tanto la Ingeniera Inversa como la Reingeniera en la mayora de las licencias de Software se encuentran penadas por la ley.

Ingeniera Inversa
Los archivos ejecutables pueden ser desemsamblados obteniendo su cdigo fuente en ensamblador. Los archivos ejecutables con cdigo portable (Java, .NET) pueden ser desemsamblados para obtener su cdigo fuente.

Rediseo

Reuso de Software
El reuso es una de las tcnicas de resolucin de problemas que ms utilizamos los humanos. De hecho es lo primero que verifica nuestro cerebro.

El reuso en software nos ayuda a mejorar la produccin y calidad del software al no reinventar la rueda.
Desafortunadamente reutilizar. no todo se puede

Reuso de Software
La reutilizacin es la propiedad de utilizar conocimiento, procesos, metodologas 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 abstraccin. Entre mayor es su nivel de abstraccin, mayor es su nivel de reuso.

Ofuscacin

Otros Ejercicios
P1: Reestructuracin de auto documentacin con Javadoc P2: traduccin de un cdigo a otro

P3: Estndares de codificacin (notacin Camello-Hngaro, manejo de IDs) y Pruebas Unitarias.


P4: manejo de versiones, construccin desde cero. Ofuscacin de cdigo.

Otros Ejercicios
P5: reestructuracin de datos (archivos a base de datos). Internalizacin. P6: creacin de bibliotecas utilizando patrn de diseo MVC P7: uso de catlogo de refactorings P8: Utilizacin de patrn de diseo factora

Otros Ejercicios
P9: Refactoring otro lenguaje mismo paradigma de programacin P10: Ingeniera inversa

P11: Refactoring de POO a Aspectos


P12: Patrn Diseo Adapter P13: Patrn diseo memento

Calidad del Software en Mxico Referencias


Roger S. Pressman, Ingeniera de software un enfoque prctico.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 Computacin 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

Вам также может понравиться