Está en la página 1de 27

REINGENIERA DE SOFTWARE

Mgt. MARCO POLO SILVA SEGOVIA

Software Hoy en Da
Mito: los programadores de ahora ya no programan como los de antes.
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 la evolucin y mantenimiento del software 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

Algunas ideas sobre que reestructura


BAD SMELL REFACTORING PROPUESTO

CODIGO DUPLICADO

EXTRAER EL MTODO SUBIR VARIABLES SUSTITUIR EL ALGORITMO


EXTRAER EL MTODO INTRODUCIR OBJETOS COMO PARMETROS REEMPLAZAR EL MTODO CON UN OBJETO MTODO EXTRAER CLASES EXTRAER SUBCLASES MOVER MTODO

MTODOS LARGOS

CLASES GRANDES CARACTERSTICA DE LA ENVIDIA

CLASES PEREZOSAS

COLAPSAR JERARQUAS

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 no todo se puede reutilizar.

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

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, AdisonWesley.