Professional Documents
Culture Documents
Pruebas
Tarea 18 a 19
Mgr. Indira Camacho del Castillo UMSS: Cochabamba - Bolivia
x2 1
(x + 1)(x 1),
programacin extrema.
La refactorizacin es un concepto tan importante que
ha sido identificado como una de las ms importantes innovaciones en el campo del software segn David A. Wheeler.
4 De refactorizacin.com
De refactorizacin.com
Carrera de Sistemas&Informtica UMSS: Cochabamba-Bolivia Mgr. Indira Camacho del Castillo Materia: Ingeniera de Software
Refactorizacin
Cambios
De refactorizacin.com
De refactorizacin.com
Carrera de Sistemas&Informtica UMSS: Cochabamba-Bolivia Mgr. Indira Camacho del Castillo Materia: Ingeniera de Software
...
Difcil de hacer una estimacin confiable Difcil de cumplir con lo planeado Aparecen los bugs Difcil de solucionar los bugs Aparecen Expertos o Dueos de cdigo
! Es un circulo vicioso
El proyecto adquiere deuda tecnologica
Carrera de Sistemas&Informtica UMSS: Cochabamba-Bolivia
De refactorizacin.com
Mgr. Indira Camacho del Castillo Materia: Ingeniera de Software
proceso, encapsulacin, componentes, los frameworks, reutilizacin etc. Sin embargo, hay que empezar manejando complejidad en el nivel de cdigo.
De refactorizacin.com
Carrera de Sistemas&Informtica UMSS: Cochabamba-Bolivia Mgr. Indira Camacho del Castillo Materia: Ingeniera de Software
10
Antes, nuestras prioridades eran tener un cdigo rpido, pequeo (ocupa poca memoria), optimizado, utilizando los algoritmos mas eficaces etc... Hoy en da el enfoque es en cdigo como tal, este cdigo tiene que ser simple
De refactorizacin.com
Mgr. Indira Camacho del Castillo Materia: Ingeniera de Software
11
De refactorizacin.com
Mgr. Indira Camacho del Castillo Materia: Ingeniera de Software
12
13
Definicin:
"Refactorizar un software es modificar su estructura interna con el objeto de que sea ms fcil de entender y de modificar a futuro, tal que el comportamiento observable del software al ejecutarse no se vea afectado." (Martin Fowler).
Refactorizar significa cambiar el cdigo internamente sin alterar su funcionalidad externa. En general, con motivos de mejorar el diseo y obtener un cdigo ms simple. Refactorizacin ensea tcnicas para descubrir el cdigo de mala calidad y tcnicas para cambiarlo.
14
Refactorizacin ?
Un ejemplo de una refactorizacin trivial es cambiar el
nombre de una variable para que sea ms significativo, como una sola letra 't' a 'tiempo'.
Una refactorizacin ms compleja es transformar el
15
deberamos cambiarlo
Difcil de imponer las mtricas Por eso se habla de los Olores malos en el cdigo
16
Cdigo duplicado
Olor No. 1!
Cierto Cdigo tiene que estar en un lugar y en ningn otro ms Hay que eliminar el cdigo duplicado, tecnicas: Extraer mtodo ,Extraer mtodo + Subir Campo (clases hermanas), Extraer Clase (clases no relacionadas)
17
Mtodos largos
Olor No. 2!
Programas con mtodos mas cortos, tienen vida mas larga Mtodos cortos traen beneficios de indireccin: compartir lgica, intento claro, cambio aislado
Comentarios son muchas veces indicadores de distancia semntica, podemos reemplazar comentario con mtodo cuyo nombre tiene mismo significado.
Carrera de Sistemas&Informtica UMSS: Cochabamba-Bolivia Mgr. Indira Camacho del Castillo Materia: Ingeniera de Software
18
Clase grande
Olor No. 3!
Hay que empezar eliminando cdigo duplicado y podemos terminar sin necesidad de extraer clase
19
y muchos ms
Grupos de datos Jerarquas de herencia paralelas Cadenas de mensajes Intimidad inapropiada Intermediario Legado rechazado Generalizacin especulada Etc...
Comentarios
No pueden reemplazar falta de cdigo mal escrito Despus de una refactorizacin meticulosa, lo mas probable que los comentarios sean innecesarios
Renombrar mtodo
Mgr. Indira Camacho del Castillo Materia: Ingeniera de Software
21
Refactorizando: Extraer
agrupar
mtodo
Tenemos un fragmento de cdigo que es posible Vamos a transformar el fragmento a un mtodo nuevo
22
Cdigo
void imprimirDebe() {
23
Refactorizando:
Extraer mtodo
Variable temporal fue asignada una vez con una simple
expresin
Vamos a reemplazar todas las referencias con la
expresin
24
Cdigo
double precioBase = pedido.precioBase(); return (precioBase > 1000);
return(pedido.precioBase()>1000);
25
Refactorizando:
mtodo
Variable temporal esta guardando resultado de una
expresin.
Extraer la expresin en un mtodo. Remplazar todas
26
Cdigo
double precioBase = cantidad * valorItem; if(precioBase > 1000) return precioBase * 0.95; else return precioBase * 0.98;
if(precioBase() > 1000) return precioBase() * 0.95; else return precioBase() * 0.98; double precioBase(){ return cantidad * valorItem;}
Carrera de Sistemas&Informtica UMSS: Cochabamba-Bolivia Mgr. Indira Camacho del Castillo Materia: Ingeniera de Software
27
Es un mtodo largo pero es difcil aplicar Extraer mtodo por modo en que se utilizan variables locales El mtodo se transforma en un objeto de tal modo que todas las variables locales sean campos del mismo, constructor recibe objeto y parmetros originales, se copia el mtodo original con nombre calcular() y se procede a refactorizar Ahora es fcil aplicar Extrer mtodo!
Mgr. Indira Camacho del Castillo Materia: Ingeniera de Software
28
Cdigo
class Pedido{ double precio(int numeroItems){ double precioBasePrimario; double precioBaseSecundario; int valorX = numeroItems * delta(); //computo largo... } }
29
computacin Si en un momento hay que cambiar el numero, el esfuerzo necesario puede ser enorme Cdigo difcil de leer
30
Cdigo
double energiaPotencial(double masa, double altura){ return masa * 9.81 * altura; }
double energiaPotencial(double masa, double altura){ return masa * INTENSIDAD_DE_GRAVEDAD * altura; } static const double INTENSIDAD_DE_GRAVEDAD = 9.81;
Carrera de Sistemas&Informtica UMSS: Cochabamba-Bolivia Mgr. Indira Camacho del Castillo Materia: Ingeniera de Software
31
Extraer Clase
Una clase haciendo trabajo de dos
Crear nueva clase y separar las responsabilidades Clase antigua delega trabajo a la nueva o la nueva clase
esta expuesta al cliente Debera estar la clase nueva expuesta a los clientes?
32
Ejemplo
33
Mgr. Indira Camacho del Castillo Materia: Ingeniera de Software
33
Alinear Clase
34
Duplicar datos obervados (MVC) Encapsular coleccin Reemplazar cdigo de tipo con enumeracin Reemplazar cdigo de tipo con subclase Reemplazar cdigo de tipo con Estado/ Estrategia
Mgr. Indira Camacho del Castillo Materia: Ingeniera de Software
35
...
Descomponer condicional Reemplazar condicional con polimorfismo Introducir Objeto Nulo Reemplazar mtodo constructor con la factora Reemplazar cdigo de error con la Excepcin Subir Mtodo Subir Campo
Mgr. Indira Camacho del Castillo Materia: Ingeniera de Software
36
...
Bajar mtodo Bajar campo Extraer subclase Extraer Interfaz Separar dominio de presentacin Convertir diseo estructurado a objetos Extrer jerarqua ...
Mgr. Indira Camacho del Castillo Materia: Ingeniera de Software
37
38
...
Se refactoriza paso a paso: refactorizacin mnima, ejecucin de pruebas Herramientas para crear y ejecutar pruebas unitarias: Nunit y CSUnit etc
Carrera de Sistemas&Informtica UMSS: Cochabamba-Bolivia Mgr. Indira Camacho del Castillo Materia: Ingeniera de Software
39
40
41
42
Sntesis
Cdigo Simple Fault avoidance Entienda sin necesidad de comentarios
Confiable
Carrera de Sistemas&Informtica UMSS: Cochabamba-Bolivia Mgr. Indira Camacho del Castillo
Mantenible
Materia: Ingeniera de Software
43