Las dos características de un algoritmo fácil de probar

Cada vez que tengamos la tarea de crear una funcionalidad completa de software debemos planificar cómo organizar los distintos algoritmos involucrados. Un buen diseño hace que la mayoría de los algoritmos puedan verificarse con pruebas unitarias. Es decir, hay una relación directa entre un buen diseño y un sistema fácil de probar.

Un algoritmo fácil de probar tiene dos características:

  1. Es observable.
  2. Está aislado.

Observable

Un algoritmo es observable cuando nos retorna su resultado y a este lo podemos analizar. La siguiente función es observable pues retorna el monto de la valoración en colones:

GenereElMontoDeLaValoracion.PNG
Un algoritmo observable

Si es observable, entonces podemos invocar al algoritmo y comparar si el resultado obtenido es el que esperamos con los parámetros dados.

La siguiente función no es observable:

no-es-observable.PNG
No es observable.

Si la función realiza sus operaciones, pero guarda su resultado en una base de datos o en un archivo, será más difícil y lento de probar. Si la prueba se automatiza ya no la podremos considerar una prueba unitaria, pues ya no ejecuta totalmente en memoria. Es decir, ya no es fácil de probar.

Aislado

Un algoritmo es aislado si todo lo que necesita lo recibe a través de sus parámetros:

aislado.PNG
Un algoritmo aislado

¿De qué maneras podríamos tener un algoritmo que no reciba lo que necesita por parámetros?

  • Si accede a variables o constantes globales.
  • Si obtiene datos de una base de datos, archivo o webservice.
  • Si depende de condiciones externas como, por ejemplo, si accede directamente a funcionalidades aleatorias (Random) o usa la fecha actual (DateTime.Now).

Entonces, un algoritmo no está aislado si accede a recursos externos dentro de su ejecución, como en el siguiente caso, donde no recibe elTipoDeCambio sino que lo pregunta a un servicio web:

no-es-aislado.PNG
No está aislado.

En conclusión, para diseñar un algoritmo fácil de probar debemos asegurarnos de que reciba todo por sus parámetros y que retorne su resultado.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s