3.2 Costos

Los costos son el factor más importante a tomar en cuenta a la hora de optimizar ya que en ocasiones la mejora obtenida puede verse no reflejada en el programa final pero si ser perjudicial para el equipo de desarrollo.

Los costos son el factor más importante a tomar en cuenta a la hora de optimizar ya que en ocasiones la mejora obtenida puede verse no reflejada en el programa final pero si ser perjudicial para el equipo de desarrollo.

3.2.1 Costo de ejecución. (Memoria, Registros, Pilas)

Los costos de ejecución son aquellos que vienen implícitos al ejecutar el programa.


En algunos programas se tiene un mínimo para ejecutar el programa, por lo que el espacio y la velocidad de los microprocesadores son elementos que se deben optimizar para tener un mercado potencial más amplio.



Las aplicaciones multimedia como los videojuegos tienen un costo de ejecución alto por lo cual la optimización de su desempeño es crítico, la gran mayoría de las veces requieren de procesadores rápidos (e.g. tarjetas de video) o de mucha memoria. Otro tipo de aplicaciones que deben optimizarse son las aplicaciones para dispositivos móviles.



Los dispositivos móviles tienen recursos más limitados que un dispositivo de cómputo convencional razón por la cual, el mejor uso de memoria y otros recursos de hardware tiene mayor rendimiento. En algunos casos es preferible tener la lógica del negocio más fuerte en otros dispositivos y hacer uso de arquitecturas descentralizadas como cliente/servidor o P2P.





3.2.2 Criterios para mejorar el código

La mejor manera de optimizar el código es hacer ver a los programadores que optimicen su código desde el inicio, el problema radica en que el costo podría ser muy grande ya que tendría que codificar más y/o hacer su código mas legible.
Los criterios de optimización siempre están definidos por el compilador.
Muchos de estos criterios pueden modificarse con directivas del compilador desde el código o de manera externa.




Se pueden encontrar 3 criterios para mejorar el código:

  • Asignación de registros
Un registro es una memoria de alta velocidad y poca capacidad, integrada en el microprocesador, que permite guardar transitoriamente y acceder valores muy usados, generalmente en operaciones matemáticas.




  • Operaciones innecesarias
Las operaciones innecesarias surgen a menudo por un desempeño inadecuado de la operación anterior. Debe utilizarse una segunda operación para "corregir" o dejar aceptable el trabajo de la primera.

  • Operaciones costosas
En algunos casos la realización de algunas operaciones suelen tener un costo de ejecución elevado, y en ocasiones estas operaciones pueden cambiarse por otros métodos de producción que podrían ser mas complejos si es la primera vez que se realiza pero a lo largo estos métodos terminan por ser beneficiosos trayendo consigo ganancias al a hora de ejecutar las operaciones.



3.2.3 Herramientas para el análisis de flujo de datos

Existen algunas herramientas que permiten el análisis de los flujos de datos, entre ellas encontramos los depuradores y desensambladores, diagramas de flujo y diccionarios de datos.
La optimización al igual que la programación es un arte y no se ha podido sistematizar del todo.

Depurador:
Es una aplicación que permite correr otros programas, permitiendo al usuario ejercer cierto control sobre los mismos a medida que estos se ejecutan, y examinar el estado del sistema (variables, registros, banderas, etc.) en el momento en que se presenta algún problema.

El depurador permite hacer pausas al programa en:
  • Un punto determinado mediante un punto de ruptura.
  • Un punto determinado bajo ciertas condiciones mediante un punto de ruptura condicional.
  • Un momento determinado cuando se cumplan ciertas condiciones.
  • Un momento determinado a petición del usuario.

Durante esta interrupción, el usuario puede:

  • Examinar el contenido de los registros del procesador.
  • Examinar y modificar la memoria y las variables del programa.
  • Cambiar el punto de ejecución, de manera que el programa continúe su ejecución en un punto diferente al punto en el que fue detenido.
  • Ejecutar instrucción a instrucción
  • Ejecutar partes determinadas del código como el interior de una función o el resto de código antes de salir de una función.



Desensamblador

Programa de computadora qué traduce el lenguaje de máquina a lenguaje ensamblador la operación inversa de la que hace el ensamblador.
Un desensamblador se diferencia de un decompilador, en que está dirigido a un lenguaje de alto nivel en vez de al lenguaje ensamblador.

Son ampliamente utilizados para crackear programas y para realizar ingeniería inversa. También son utilizados por desarrolladores de software, investigadores o estudiantes.

Diagrama de flujo de datos

Es una herramienta de modelización que permite describir, de un sistema, la transformación de entradas en salidas. El DFD también es conocido con el nombre de Modelo de Procesos de Negocios.



Diccionario de datos:

El diccionario de datos es un listado organizado de todos los elementos de datos que son pertinentes para el sistema, con definiciones precisas y rigurosas que le permite al usuario y al proyectista del sistema tener una misma comprensión de las entradas, de las salidas, y también de cálculos intermedios.










3.2.1 Elaborado por:
Omar Josafath Martínez Sánchez

Información obtenida de:


3.2.2 y 3.2.3
Elaborado por: 
Andrés Martínez Damián 

Información obtenida de:

López, C., Crespo, Y., Manso, E., & Marticorena, R. (2009). Evaluación de código mediante múltiples intervalos de métricas. Revista de Procesos y Métricas, 6(1), 19-30

Cortés, E. L. (2005). Utilidades para el desarrollo y  prueba de programas. Compiladores. Intérpretes. Depuradores. Informática: Volumen II: Temario de oposiciones al cuerpo de profesores de enseñanza secundaria, 2, 245.
Lovello, J. M. C. (1998). Conceptos básicos de procesadores de lenguaje. Servitec.