Testing y la importancia de su planeación

Anderson Ariza, Analista de desarrollo

Es muy común que los desarrolladores piensen que su código carece de errores dado que ellos mismos lo escribieron. En alguna parte del proceso probaron dos o tres casos que no fallaron, pero, en realidad, estas pequeñas pruebas no son suficientes para asegurar el correcto funcionamiento de la solución, ya que en su mayoría, analizan el llamado “camino feliz”, la opción en la que todo sucede de manera correcta, por lo cual es necesario recurrir a realizar pruebas formales al desarrollo.

Estas pruebas están divididas en cuatro tipos que se mencionan a continuación, de la más simple a la más compleja respectivamente: unitarias, de integración, del sistema y de la situación. La complejidad de implementar dichos tests depende de la situación, del tipo de desarrollo, de la metodología y de los recursos disponibles.

Por ejemplo, iniciar la implementación de pruebas unitarias sobre un desarrollo que lleva en ejecución tres meses duraría, aproximadamente, el tiempo completo de una persona durante un par de semanas. Además, podría generar retraso al surgir la necesidad de cambiar código, debido a un fallo no manejado, lo cual, a fin de cuentas, es tiempo y dinero extra. De allí la importancia de definir a tiempo, qué pruebas se realizarán sobre las soluciones.

A continuación explicaré dos tipos de pruebas que cuentan con menor grado de dificultad pero que, al realizarlas, darán un grado elevado de certeza del funcionamiento de un desarrollo de software. Ellas son: pruebas unitarias y pruebas de integración.

PRUEBAS UNITARIAS

El propósito de este tipo de pruebas es garantizar que cada componente del sistema funcione de manera aislado, es decir, que las operaciones se realicen adecuadamente, que reciba solamente los tipos de parámetros definidos, que responda de manera correcta y que falle cuando deba fallar.

Estas pruebas toman en cuenta la unidad mínima de trabajo, que no es más que una función o un método que ejecuta una operación puntual o un conjunto de operaciones, para las cuales es necesario diseñar pruebas en las que el resultado sea exitoso y en las cuales, la ejecución sea fallida.

Es importante dedicar el tiempo suficiente a validar la mayor cantidad de casos de ejecución exitosa y fallida para tener más certeza del código a probar. Estas pruebas se limitan a bloques de código específico, por lo cual, su codificación es sencilla, pero dada la necesidad de realizarla sobre muchos de estos bloques, en desarrollos “grandes” toma mucho tiempo.

La recomendación es hacerlas inmediatamente sobre el nuevo código realizado para no acumular deudas técnicas que a futuro puedan afectar los tiempos de entrega.

Para saber un poco más de pruebas unitarias visita: http://softwaretestingfundamentals.com/unit-testing/

PRUEBAS DE INTEGRACIÓN

Su propósito es asegurar que los componentes previamente probados, de manera aislada, funcionen bien entre sí, es decir, que interactúen de forma correcta en el envío y recepción de peticiones, validando que se ejecuten y que las respuestas generadas sean las adecuadas. Nuevamente se validan casos de éxito y errores para poder cerciorarse de que los métodos de contingencia funcionen.

Su ejecución toma un poco más de tiempo ya que es necesario que se levante el contexto de la aplicación, ya que las pruebas de integración también validan llamados a las peticiones a las bases de datos, utilizando como punto de partida los Endpoints definidos en los servicios rest, por lo cual, es importante integrar a los test el manejo de seguridad implementado en el desarrollo.

Para saber más de pruebas de integración visita: http://softwaretestingfundamentals.com/integration-testing/

Aunque las pruebas unitarias y de integración no son todas las que se deben realizar a un sistema para asegurar su funcionamiento, son un buen comienzo ya que estas te darán una base sólida que te permitirá tener certeza del desarrollo realizado. Es importante empezar a planear cómo y cuándo iniciará su desarrollo.