Programar no es una tarea similar a unir 2 maderas con un clavo o llevar a alguien a un lugar o poner una torta al horno y calcular cuantos minutos faltan para sacarla.
No menospreciando otras actividades tiene la caracteristica de no ser repetitiva (todos los programas que se hacen son nuevos) , funcionan para diversas personas, y en distintos entornos.
Un error es algo que actua diferente a como se esperaba. La pregunta entonces por que funciona diferente de como se esperaba?
Tal vez se tenian expectativas que nadie especifico ni nadie prometio. Tal vez sea un error real.
El simple algoritmo de los triángulos
Supongamos un simple programa que dado la longitud de 3 lados de un triangulo nos responda si el triangulo es issoceles, escaleno o equilatero.
Entonces si el usuario ingresa
5 5 5
deberia responder: equilatero
5 4 4
deberia responder issóceles
5 4 3
deberia responder escaleno
Cuantas decisiones debemos tomar para saber la solucion?
Basicamente 2 o 3
Desarrollo del algoritmo de los triángulos
Parece un programa sencillo, donde comparamos el primer lado con el 2do … si es igual y es igual al 3ro -> es equilatero
si es igual pero es diferente del 3ro -> es issoceles
si es diferente tambien con otras 2 condiciones resolvemos si es escaleno o issoceles (ya equilatero no puede ser)
Fin del problema muy facil de resolver.
Basta de programar :
Condiciones de Error del Algoritmo de los triángulos
Ahora soy el usuario de este problema que como es tan simple el cliente que es muy generoso me dio 1 hora para resolver.
Se hace el programa, se instala y ahi vienen los usaurios…. perdon… los usuarios
le explicamos la ventaja del programa y el usuario ingresa
tres cinco ocho
1.- ERROR ERROR -> nadie nos dijo que se podia o no podia ingresar letras… le decimos: ingresa numeros
ingresa
3.2 4.33333333 2,8
2.- ERROR ERROR – Pero no se puede con decimales, el decimal es el punto o es la coma?…
Viene otro usuario que sabe que van numeros ingresa
6 6 -2
El programa responde issoceles
3.- ERROR ERROR . Como no consideraste que no ingresen negativos? es OOOOOOOOOBVIO
Vienen todos los usuarios con sus martillos y cinceles a tallar en el teclado sus inputs en busca de la iluminada respuesta que el genio del programador hizo
0 0 0
Resultado: equilátero
(4- error eso es un punto )
7 1 1
Resultado: issóceles
(5.- error los dos lados de 1 no llegan a unirse — son demasiado pequeñós)
8 4 200000000000000000019210281293871290387190
(6.- error no admite numeros tan grandes )
Puedo asegurarles que para este problema existen aproximadamente otros 10 casos de error
Corolario del algoritmo de los triángulos
Entonces , para un sistema con 3 o 4 condiciones encontramos casi 20 casos de error, cada uno con sus controles , y muchos de esos errores si proponemos controlarlos nos dicen que no hace falta o que se va del presupuesto (con razon), imaginen los sistemas operativos con decenas de miles de condiciones, y de lineas.
Es matematicamente imposible hacer un sistema sin errores que sea superior a cierta complejidad (si alguien lo consigue puedo decir que ESE sistema es de menor complejidad de los que estoy mencionando)
Tratamiento de los errores
Por otra parte , hay una razon. Hay errores que es muy poco probables que ocurran, y otros no son tan graves.
Como la calidad es infinita para que un sistema sea viable, se consideran para los errores (condiciones inesperadas) algunos factores, en general son
- la probabilidad de ocurrencia
- la gravedad de que eso ocurra
Se le asigna un valor a cada un para cada error identificado tanto para su probabilidad de ocurrencia como para su gravedad (ej de 1 a 5)
y se multiplican los coeficientes
Entonces se determina qué vamos a hacer para los mas altos, en algunos casos mitigarlos, en otros evitarlos, en otros generar una alternativa cuando fallen , arreglarlos y en ontros simplemente dejar que sucedan y aun va a haber otros que descubriremos mas tarde.
Relevancia de la información
Por ejemplo: Yo tengo un canal en youtube llamado “yo no sé tampoco”
A veces estoy mirando por ejemplo las vistas del video de “Como ganar dinero por internet” y me decia que tenia 315 vistas a poco de publicarlo.
Al rato lo vuelvo a mirar y decia 305 vistas.
¿Como puede ser que las vistas hayan bajado? ¿Es un error de Youtube?
…. NO .. simplemente Youtube considera que ese numero NO ES CRITICO y me muestra un valor para mantenerme lo mas actualizado posible y cuando lo calcula mejor lo ajusta y simplemente me lo vuelve a mostrar.
La calidad es infinita y no existe la posibilidad de probar un sistema completamente porque el hacerlo y evaluar todos los resultados posibles de todas las combinaciones tambien seria infinito. Es mas … definir todos los resultados esperados para cada condicion tambien seria infinito.
Un millón de tests no es suficiente
Otro ejemplo:
Un sistema me tiene que decir si un numero es menor que 1000000.
Para los menores de 1000000 tiene que decir SI
para los mayores dice NO
Yo hago el programa (MAL CON ERRORES)
si numero < 2000000 responder SI si no responder NO
Este programa con errores me dara buenos resultados para todos los numeros menores que 1000000 y para todos los mayores a 2000000
pero fallara entre 1000000 y 2000000
Cuando hago las pruebas puedo obtener millones y millones de tests de resultados que me dicen que anda bien.
Entonces es muy costoso hacer la comprobacion por mas que tengamos muchos casos que creamos que lo confirmen.
Asi, que dicho esto.
cometen muchos errores PORQUE ES ASI.
Conclusión
Y a los que no les guste…. que empiecen a programar y que los programadores se sienten a criticar.