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