Optimización del programa


En informática , optimización de programas, optimización de código u optimización de software es el proceso de modificar un sistema de software para hacer que algún aspecto funcione de manera más eficiente o use menos recursos. [1] En general, un programa de computadora puede optimizarse para que se ejecute más rápidamente, o para que sea capaz de operar con menos almacenamiento de memoria u otros recursos, o consumir menos energía.

Aunque la palabra "optimización" comparte la misma raíz que "óptimo", es raro que el proceso de optimización produzca un sistema verdaderamente óptimo. Por lo general, un sistema puede hacerse óptimo no en términos absolutos, sino solo con respecto a una métrica de calidad dada, que puede contrastar con otras métricas posibles. Como resultado, el sistema optimizado normalmente solo será óptimo en una aplicación o para una audiencia. Se podría reducir la cantidad de tiempo que tarda un programa en realizar alguna tarea al precio de hacer que consuma más memoria. En una aplicación donde el espacio de memoria es escaso, uno podría elegir deliberadamente un algoritmo más lento para usar menos memoria. A menudo no existe un diseño de "talla única" que funcione bien en todos los casos,para que los ingenieros hagan concesionesoptimizar los atributos de mayor interés. Además, el esfuerzo requerido para hacer que una pieza de software sea completamente óptima, incapaz de cualquier mejora adicional, es casi siempre más de lo razonable para los beneficios que se acumularían; por lo que el proceso de optimización puede detenerse antes de que se alcance una solución completamente óptima. Afortunadamente, a menudo ocurre que las mayores mejoras se producen al principio del proceso.

Incluso para una métrica de calidad determinada (como la velocidad de ejecución), la mayoría de los métodos de optimización solo mejoran el resultado; no tienen la pretensión de producir una salida óptima. La superoptimización es el proceso de encontrar un resultado verdaderamente óptimo.

La optimización puede ocurrir en varios niveles. Por lo general, los niveles más altos tienen un mayor impacto y son más difíciles de cambiar más adelante en un proyecto, lo que requiere cambios significativos o una reescritura completa si es necesario cambiarlos. Por lo tanto, la optimización normalmente puede proceder a través del refinamiento de mayor a menor, siendo las ganancias iniciales mayores y logradas con menos trabajo, y las ganancias posteriores siendo menores y requiriendo más trabajo. Sin embargo, en algunos casos, el rendimiento general depende del rendimiento de partes de un programa de muy bajo nivel, y los pequeños cambios en una etapa tardía o la consideración temprana de detalles de bajo nivel pueden tener un impacto enorme. Por lo general, se presta cierta atención a la eficiencia a lo largo de un proyecto, aunque esto varía significativamente, pero la optimización importante a menudo se considera un refinamiento que se debe hacer tarde, si es que se hace alguna vez.En proyectos de mayor duración, normalmente hay ciclos de optimización, donde la mejora de un área revela limitaciones en otra, y estas suelen reducirse cuando el rendimiento es aceptable o las ganancias se vuelven demasiado pequeñas o costosas.