Академический Документы
Профессиональный Документы
Культура Документы
Software Hoy en Da
Mito: programadores ahora ya programan como de antes. los de no los
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
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?
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
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
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
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