Hay toda un serie de clases en ingeniería de software y manuales escritos acerca de como realizar las pruebas de software básicamente no voy a meterme en todos los detalles, pero quiero decirles un par de cosas para pensar acerca de las pruebas de verificación una vez que tenemos la documentación vamos a tener algunos temas acerca del modelo conceptual, es un poco más refinado que la descripción en lenguaje natural podemos empezar a implementar nuestro modelo de lo que queremos estar seguros es de que el modelo está haciendo lo que nosotros consideramos que debería estar haciendo y para lograr eso, necesitamos implementar algunas pruebas y estas pruebas son esencialmente decirle que haga algo con los valores de salida del modelo para asegurarnos que la funcionalidad del modelo, para asegurarnos que se está comportando de la manera en que lo imaginamos en muchos casos es una buena práctica escribir la prueba, antes de escribir el código, lo que quiero decir con esto es que muchas veces, cuando escribimos el código, nos parece que es la forma correcta para que el modelo haga lo que debería hacer, así podemos imaginar qué es lo que el modelo debería hacer antes de escribirlo, escribir la prueba, la prueba nos muestra algunos valores de salida y luego escribir el código que genera esa prueba empecemos por una forma particular de hacer pruebas, que es muy común en los MBA es muy útil, que la prueba de componentes La prueba de componentes significa que hay que probar los aspectos individuales del modelo, lo que debería ser la conducta particular que estamos asignando lo que está bueno de esto, es que escribimos la prueba de componentes sólo para ese aspecto, uno puede seguir agregando componentes, agregar nueva funcionalidad y podemos volver a correr las mismas pruebas de componentes para verificar aquel viejo componente, para asegurarnos que nada de lo que agregamos está afectándolo Algunas veces son hechos para ser corridos tanto online como offline, así por ejemplo podemos agregar una prueba de componente para verificar si los cálculos están hechos del modo correcto y puede que se lo corra escribiendo en el propio componente y luego generar los resultados y volver, o puede que corra mientras el modelo está corriendo, hey mirá, tenemos esto, parece que no está funcionando correctamente de la forma en que queremos que lo haga y podemos verlo en mayor detalle cuando veamos más ejemplos del modelo del voto podemos comenzar, por ejemplo, en el modelo del voto, escribiendo código para asegurarnos de que la rutina de arranque está distribuyendo los votos en forma equitativa digamos que estamos preocupados por la forma en que escribimos la rutina de arranque, puede que haya mayor cantidad de votos verdes que votos azules tenemos esta pieza de código, que les voy a mostrar en un segundo modelo donde básicamente tomamos las diferencias entre esas clases de votos y vemos si las diferencias son mayores al 10% del número de parches si es así, entonces decimos, oh mirá hay algo anormal acerca de este arranque en particular. Ahora bien, estadísticamente esto puede ocurrir, una de las cosas importantes que quiero remarcar es que en una prueba de componente no necesariamente tiene que ser algo que diga que nuestro modelo está definitivamente roto podría ser que cuando corremos el modelo muchas muchas veces, para estar seguros esto no debería estar pasando tan a menudo y podríamos revisarlo y aquí estamos mirando si es mayor que el 10%, pero en verdad podemos hacer algo más sofisticado en términos estadísticos para ver si los números son más grandes que 3 desvíos estándares de lo que esperamos del proceso aleatorio cuando asignamos los votos pero quería darles unos ejemplos de casos donde uno puede hacer esto muy rápidamente y este es un ejemplo de ello déjenme cambiar al modelo de los votos y les mostraré allí aquí estamos en este modelo, esto viene de la biblioteca de modelos del manual si vemos abajo en el capítulo 7 encontrarán el cuerpo del modelo de la verificación de componentes como pueden ver, este modelo está escrito básicamente en la forma en la que describimos en nuestro pseudo código, las variables de los parches son "voto" tienen los totales de los que votaron limpiamos todo, tenemos la rutina de asignación de votos al azar coloreamos basados en eso en la rutina "go" preguntamos cuales son los votos; en esta parte hablaremos de ello en un segundo, cuando veamos como manejar los votos actuales lo que quiero decir es esta rutina "check- setup" si vamos a la rutina, lo que hace es preguntar si la diferencia en la cuenta absoluta, el valor absoluto, perdón si el valor absoluto de la diferencia entre los parches es 0 o 1, es mayor que .1, en otras palabras, hay más de .1 en la diferencia, entonces vamos a colorear y lo que quiero decir es que esta es sólo una forma de realizar una prueba rápida y si vemos la rutina "setup" está corriendo, así que volvemos a la interfaz presionamos en "setup" y está corriendo y si queremos chequearlo, podemos, esperen que me asegure que esté de verdad corriendo podemos ir y podemos poner algo tipo que imprima "asignación del chequeo" y también podemos ver si es falso si no es falso, podemos decir que imprima "verificación superada" ahora hacemos click en "setup" y ahora vemos las impresiones "asignación del chequeo" y "verificación pasada" Otra forma de prueba, hablamos de la documentación, hablamos de las pruebas programáticas y ahora hablaremos un poco de utilizar casos, perdón de casos específicos, uno de los casos específicos que vamos a ver es lo que se conoce como análisis sensitivo. El análisis sensitivo examina cuan sensitivo es un resultado a un parámetro particular del modelo está relacionado con la verificación, debido a que podemos tener alguna experticia acerca de cómo debería afectar un parámetro al resultado por ejemplo, imaginemos que volvemos con los cientistas políticos y les mostramos el modelo y ellos nos dicen: hey, lo que es interesante aquí este modelo, ahora, es 50 y 50, cuán importante es ese valor de resultado cuanto afecta, que estén así divididos, el resultado final si cambiamos de 10% a 20%, el resultado puede cambiar dramáticamente uno puede hacer algo como plotear donde buscamos los valores iniciales de los votantes verdes, vs. los valores finales de esos mismos votantes exploramos así la sensitividad, la relación que hay entre estos dos aguardemos un poco y volvamos al modelo aquí estamos mirando otra vez, en la biblioteca de modelos, el capítulo 7 del manual, esta vez estamos mirando el modelo de análisis de sensitividad de votos y en este caso, tenemos ahora la habilidad para cambiar el valor inicial de los votos verdes, podemos tomar el 70% y ver cual es el resultado, y en este caso aparentemente llegamos a un 100% de verdes podemos explorar los resultados del modelo a lo largo del tiempo mirando los diferentes porcentajes iniciales ahora me doy cuenta que para hacer esto tenemos que cambiar nuestra asignación del chequeo, el código de asignación del chequeo ahora dice que, si la diferencia en los parches verdes son iguales o menores que los números esperados, podemos computar los números esperados tomando la cuenta de los parches por el número de los parches verdes iniciales, divididos por 100 lo computamos y luego determinamos las diferencias, tenemos que cambiar nuestro componente de verificación, de hecho si nosotros agregamos lo que dejamos de lo esperado, que sea la mitad contamos los parches multiplicado por 0.5 esto nos dará, ups y todo estará correcto el número inicial en 50 es sólo un ejemplo de por qué el componente de prueba es bueno, debido a que podemos hacer este cambio y darnos cuenta que no tenemos que cambiar la prueba del componente, podemos estar seguros que funciona aún con este código tenemos todos estos componentes todos juntos, ahora podemos correr el espacio de conducta el modelo y realmente el porcentaje inicial de verdes en 25 con un incremento de 5% y mostrar en la salida la fracción actual de los parches verdes al final y atrapar esos resultados podemos hacer un último test de verificación, ya que lo que esperamos que no habrá una relación lineal entre el porcentaje de entrada y el de salida