Sei sulla pagina 1di 19

Construcción de software

Ingeniería de Sistemas e Informática

•5
•1
Propósito y contenido de la sesión

Propósito de la sesión
• Elabora cuadros sinópticos
sobre las estrategias y técnicas
de afinamiento de código.

Contenido de la sesión
• Estrategias y técnicas de
afinamiento de código.
Recapitulando …
Técnicas de afinación del
código
Minimizar la complejidad
Técnicas de afinación del código

Afinar el código consiste en mejorarlo


de acuerdo con ciertas técnicas.

La mejora se enfoca a un determinado


número de aspectos,
fundamentalmente .la eficiencia.
Técnicas de afinación del código, Jon
Bentley (1)

Reglas de cesión de espacio para ganar tiempo


• Estas reglas abogan por sacrificar algo de espacio de almacenamiento con tal de
obtener beneficios en términos de tiempo.
• Por ejemplo, reducir el tiempo de acceso y manipulación de datos en una
estructura aumentando el tamaño de la misma, ganar tiempo son las tablas
arcoíris, conjuntos de valores recalculados que se emplean en criptografía para la
obtención de una contraseña a partir de su codificación encriptada.

Reglas de cesion de tiempo para ganar espacio


• Ceder en términos de tiempo para obtener una cierta ganancia en termines de
espacio.
• Por ejemplo, una estructura de datos puede reducir costes de almacenamiento si
se le permite solapar datos que no se utilizan simultáneamente, haciendo use de
alguna forma de memoria virtual, lo cual inevitablemente aumenta el tiempo de
acceso a los dates que contiene.
Técnicas de afinación del código, Jon
Bentley (2)
• Reglas de bucles
• Mejorar la eficiencia haciendo modificaciones en los bucles del código
original

for (i=0; i<15 ;i++){


x = n * m;
y += x * i;
}

x= n * m;
for (i=0; i<15; i++)
y += x * i;
Técnicas de afinación del código, Jon
Bentley (3)
• Reglas lógicas
• Mejora de las expresiones lógicas mediante su sustitución por expresiones
algebraicas equivalentes (pero menos costosas de evaluar) y el
reordenamiento de expresiones lógicas compuestas para que se evalúen antes
las menos costosas y más frecuentes, y más tarde las más costosas y raras.

if ((x > 0) || (y > 0)) x += y;

• La posibilidad de que x sea positivo es mucho menor que la posibilidad de


que lo sea y:

if ((y > 0) || (x > 0)) x += y;


Técnicas de afinación del código, Jon
Bentley (4)
• Reglas de procedimientos
• Mejorar la eficiencia mediante la modificación de procedimientos o
funciones.
• Se recomienda, por ejemplo, reescribir los métodos recursivos en forma
iterativa, modificar las llamadas entre métodos relacionados para evitar que el
segundo en ejecutarse tenga que esperar la finalización del primero y el
tercero la del segundo (trabajo en tubería), o explotar las posibilidades de
trabajo en paralelo.
• La solución recursiva

public static long factorialRecursivo(int n){


if (n < 2)
return 1;
else
return n * factorialRecursivo (n-1);
}
Técnicas de afinación del código, Jon
Bentley (5)
• Reglas de procedimientos
• La solución iterativa

public static long factorialIterativo (int n){


int acumulador = 1;
for (int i = 1; i <= n; i++)
acumulador *= i;
return acumulador;
}
Técnicas de afinación del código, Jon
Bentley (5)
• Reglas de expresiones
• Obtener expresiones más eficientes sin modificar como es lógico, su
resultado.
• De este modo, proponen sustituir expresiones por otras algebraicamente
equivalentes, pero más eficientes, eliminar subexpresiones comunes, o
explotar el paralelismo en la evaluación de expresiones.
• Algunos ejemplos de estas técnicas serán el reemplazo de operaciones
trigonométricas costosas por sumas multiplicaciones, y el evitar multiplicar y
dividir por múltiplos de 2 para en su lugar utilizar desplazamientos de bits,
sustituyendo:
y=x/2
• por la operación equivalente con desplazamiento de bits
y = x >> 1
Tener en cuenta

• La primera de ellas es que los modernos compiladores realizan


optimizaciones del código que llevan a cabo algunas de las mejoras
enumeradas, como la eliminación de subexpresiones comunes, la
mejora de eficiencia en las instrucciones iterativas moviendo código
para que se ejecute fuera del bucle, o el reemplazo de
multiplicaciones por sumas en instrucciones repetitivas. Simplemente,
muchas veces no merece la pena el esfuerzo: es cuestión de
documentarse antes de realizar la afinación.
• La segunda cosa a tener en cuenta es el impacto de muchas de estas
técnicas sobre la legibilidad del código, lo cual debe sopesarse para
no aumentar innecesariamente los costes de mantenimiento asociados
a un código menos legible.
Estrategias y técnicas de
afinamiento de código
“25 Code-Tuning Strategies” & “26 Code-Tuning Techniques”
Cuadro sinóptico
Preguntas
¿Qué hemos aprendido?
Reflexionemos

Potrebbero piacerti anche