Optimización del programa


En informática , la optimización de programas, la optimización de códigos o la optimización de software es el proceso de modificar un sistema de software para hacer que algún aspecto del mismo funcione de manera más eficiente o utilice menos recursos. [1] En general, un programa de computadora puede optimizarse para que se ejecute más rápidamente, o para hacerlo capaz de operar con menos almacenamiento de memoria u otros recursos, o para 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 se puede optimizar no en términos absolutos, sino solo con respecto a una métrica de calidad determinada, 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 concesionespara optimizar los atributos de mayor interés. Además, el esfuerzo requerido para hacer que un software sea completamente óptimo - incapaz de mejorar más - es casi siempre más de lo que es razonable para los beneficios que se acumularían; por lo que el proceso de optimización puede detenerse antes de que se haya alcanzado 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 ninguna pretensión de producir resultados óptimos. La superoptimización es el proceso de encontrar resultados verdaderamente óptimos.

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 puede proceder típicamente a través del refinamiento de mayor a menor, siendo las ganancias iniciales más grandes y logradas con menos trabajo, y las ganancias posteriores son más pequeñas y requieren más trabajo. Sin embargo, en algunos casos, el desempeño general depende del desempeño 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 descomunal. Por lo general, se considera 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 realizar tarde, si es que se hace alguna vez.En proyectos de ejecución más larga, normalmente hay ciclos de optimización, en los que 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.