Anda di halaman 1dari 4

Responsabilidades del programador, Estilos de Programacin, Robustez

de un programa, Optimizacin de algoritmos


Bibliografa: (Jorge Vasconcellos Santillan Manual de construccin de programas)

http://www.cyta.com.ar/biblioteca/bddoc/bdlibros/construccion_programas/programar.pdf
Ver Captulos I, IV, V, VI, VII
Responsabilidades del programador
1) Usar estructuras de datos y tipos de datos adecuados al programa a desarrollar.
2) Construir soluciones a medida y no adaptar los problemas a soluciones preestablecidas.
(facturacin, sueldos, compras, ventas, etc.)
3) Ser capaz de analizar un problema hasta comprenderlo completamente.
4) Usar las herramientas disponibles pero evitando que una herramienta detenga o altere la
solucin de un problema. (ejs: grficos, el uso la web, bases de datos robustas)
Estilos de Programacin
1) Usar variables representativas al problema que est resolviendo. Tratar de no confundirse entre
variables en maysculas y variables en minsculas.
2) Optimizar las sentencias de control. (ciclos, decisiones)
Ej:
For I:=1 to n
For J:=i+1 to n
If x(i)<x(j) then
Else
Aux:=x(i)
X(i)=x(j)
X(j)=aux
Ej.2
If x>10
If x>200
If x>500
Tarifa=1.00
Else
Tarifa=0.5
Else
Tarifa=0
3) Documentar el programa.
4) Realice interfaces amigables y comprensibles para el usuario.
5) Hacer programas robustos.
Robustez de un programa
Un programa es robusto si se comporta razonablemente aun en circunstancias que no fueron anticipadas en
los requerimientos. Si se puede pensar en acontecimientos imprevistos, entonces hay que incluirlos en la
especificacin y se habla de correccin.
Robustez: Un programa es robusto cuando es capaz de manejar razonablemente situaciones inesperadas (que
falten archivos, que se acabe la memoria, que haya un error interno en el mismo programa), y minimiza el
dao producido por estas situaciones.

Optimizacin de algoritmos
Consiste en minimizar el tiempo de ejecucin o la cantidad de memoria utilizada
1)
2)
3)
4)
5)
6)
7)
Ej:

Comprenda primero el problema, resulvalo y luego optimice.


Usar estructuras de datos y tipos de datos adecuados al problema.
Evaluar el programa lgicamente a fin de optimizarlo. (ejemplo de la ordenacion)
La aritmtica de enteros es mas rpida que la de reales.
Los accesos a memoria secundaria son lentos..(ejemplo del borrado)
Un lenguaje de bajo nivel es mas rpido que uno de alto nivel.
En operaciones matemticas, trate de realizar mas sumas y restas que productos

a) A= ac + ad + bc + bd Se puede reemplazar por A=(a + b) . (c + d)


b) M= 1 + x/y
1 - x/y
Se puede reemplazar por:
y+x
y
_____
yx
y

queda: y + x
y- x

Pruebas de Programas
Bibliografa:

(Autor: Manuel Collado Fecha: Marzo 2003 (http://lml.ls.fi.upm.es/~mcollado/ed2/pruebas.ppt)


Probar un programa es ejercitarlo con la peor intencin a fin de encontrarle fallos.

Un programador nunca debe probar su propio programa.


Objetivos:
Encontrar defectos en el software
Una prueba tiene xito si descubre un defecto
Una prueba fracasa si hay defectos pero no los descubre
Dos tipos de prueba: caja blanca y caja negra.
Caja Blanca: se conoce el cdigo a probar. Se prueba:
-

Cubrimiento (se ejecute por lo menos una vez una sentencia).


Condiciones (cada decisin tenga, por lo menos una vez, un resultado verdadero y uno
falso, si se cumple o no cada condicin)
Bucles (Repetir cero, una y dos veces, repetir un nmero medio (tpico) de veces, Repetir el
mximo-1, mximo y mximo +1, probar los anidados)

Caja Negra: Pruebas en que se conoce la entrada y lo que debe ser la salida. Se prueba:
- Cada una de las opciones del programa.
- Valores tipos.
- Valores limites.
- Valores extremos.
- Valores de pertenencia y de no pertenencia.
- Valores especiales.
Herramientas para pruebas:
- Manuales.
- Uso de otros programas.
- Valores al azar.

Costos de algoritmos
Bibliografa: Estructura de datos y algoritmos Alfred V. Aho, John Hopcroft Editorial Adison Wesley.
Pginas: 16-27
Tiempo de Ejecucin de un programa
Cuando se resuelve un problema, existen dos objetivos que suelen contradecirse:
- Que el algoritmo sea fcil de entender, codificar y depurar.
- Que el algoritmo use eficientemente los recursos del ordenador, y que se ejecute con la mayor
rapidez posible.
El primer objetivo es ms razonable cuando el programa se va a usar una o pocas veces. El costo del tiempo
de programacin excede en mucho al costo del tiempo de ejecucin.
En cambio cuando una solucin se va a utilizar muchas veces, es importante centrarse en el segundo objetivo.

Medicin del tiempo de ejecucin de un programa

El tiempo de ejecucin depende de los siguientes factores:


- Los datos de entrada del programa.
- La calidad del cdigo generado por el compilador utilizado para crear el programa.
- La naturaleza y rapidez de las instrucciones de mquina empleadas en la ejecucin del programa
y la complejidad del tiempo de algoritmo base del programa.
En el primer caso significa que debe medirse el tiempo de ejecucin como una funcin de la entrada. Por
ejemplo si tengo que ordenar 20 elementos, el tiempo est determinado en funcin de esos 20 elementos. Por
lo cual si usamos la notacin n definiremos como T(n) como el tiempo de ejecucin de un programa con
tamao de entrada n. T(n) tendr un valor determinado de acuerdo a una funcin de la entrada especfica.
Esta funcin ser calculada como el tiempo de ejecucin del peor caso, o sea el mximo valor del tiempo
de ejecucin para entradas de tamao n .
En el resto de los casos es casi imposible determinar el tiempo de ejecucin pues va a depender de factores no
siempre constantes (tipo de compilador, equipo, procesador, memoria, etc.)
Explicado el motivo por el cual se va a calcular el tiempo de ejecucin en base al tamao de entrada, se va a
definir por notacin como la funcin obtenida como O. Por ejemplo el T(n)=O(n2), o el T(n)=O(n3), o el
T(n)=O(cn3)
Tambin por notacin vamos a tomar como el tiempo de ejecucin de la funcin a la mxima obtenida del
exponente. Por ejemplo T(n)= O(3n2+2n) ser O(3n2)

Con esto suponemos que un programa con tiempo de ejecucin n 2 es menor que un
programa con tiempo de ejecucin n3. Esto siempre es posible con tamao de entrada
grandes . Veamos en la siguiente tabla el ejemplo:
Tamao
n
1
2
3
10
20
50

Tiempo
100n
100
200
300
1000
2000
5000

Tiempo
5n2
5
20
45
500
2000
12500

Tiempo
n3/2
0.5
4
13.5
500
4000
62500

En conclusin:
1) Si el programa se va a utilizar solo algunas veces, el costo de escritura es el mas
importante. Debe elegirse el algoritmo ms fcil de utilizar.
2) No calcular el tiempo de ejecucin de un programa con entradas pequeas.
3) Un algoritmo eficiente pero complicado puede no ser apropiado para el
mantenimiento.
4) Existen algoritmos demasiados eficientes que necesitan ocupar almacenamiento
secundarios lentos que anulan su eficiencia.
5) En algoritmos numricos, la precisin y la estabilidad son tan importantes como la
eficiencia.
Calculo del tiempo de ejecucin de un programa
Se va a definir por notacin a Ti(n) como el tiempo de ejecucin de un fragmento de programa P i. . Entonces
O(fi(n)) es el mximo valor obtenido de todas las expresiones Ti(n) del programa.

Ejemplo
a)
Sean T1(n)=5 , T2(n)=7, T3(n)=3, T4(n)=6
O(f(n)) = max(T1(n)+ T2(n)+ T3(n)+ T4(n)) = T2(n)= 7
b)
O(f(n)) = (O(n), O(n3), O(n4)) = n4
Como se mide:?

1) El tiempo de ejecucin de cada sentencia de asignacin, lectura, escritura se toma como O(1).
2) El tiempo de ejecucin de cada sentencia condicional if-else-case, se mide como el mximo valor
obtenido que exista en cada condicin. La evolucin de cada condicin tiene un costo O(1).
3) El tiempo de ejecucin de un ciclo es el mximo valor obtenido del cuerpo del ciclo multiplicado
por el nmero de veces que se ejecuta el ciclo.
4) En el caso de procedimientos y funciones, el costo debe ser calculado evalundolo en forma
separada y luego comparar conjuntamente con el resto de los costos de las proposiciones del cuerpo
del programa a fin de obtener el mximo.

Anda mungkin juga menyukai