Por Daniel Guerrero Rivera y Andrés Cubero Salas - Estudiantes de diferentes carreras en ULACIT 

Es un hecho que la forma más eficaz para descubrir la mayor cantidad posible de errores de código, en fases tempranas de desarrollo de software, es a través de pruebas unitarias.

Introducción

Digital Guide, en el 2019, postuló que con la ayuda de Unit test —en español, prueba unitaria— es posible comprobar los componentes individuales de los programas informáticos. Estas pruebas permiten examinar el correcto funcionamiento de cada uno de los elementos, antes de que ocupen su lugar en el concepto general de un programa. Además, ayuda a comprobar de forma relativamente rápida y fácil si el componente funciona según lo previsto por el desarrollador.

El Unit testing juega un papel fundamental en el control de calidad de cualquier programa. En especial porque en el ágil desarrollo de software se apuesta cada vez más por este método. Por lo general, las pruebas unitarias tienen como objetivo la comprobación frecuente de diversos componentes, es por esto por lo que se realizan de forma automática. Así, con solo presionar un botón, los respectivos programas realizan varias pruebas unitarias al azar.

Kualitatem postuló en el 2016 que las pruebas unitarias pueden ahorrar tiempo, ya que pueden facilitar el hacer cambios enormes y rápidos para mejorar el código. Los desarrolladores se dan cuenta de que funciona bien para el código si ha ejecutado las pruebas unitarias correctamente. Cuando realiza modificaciones en el código, debe ejecutar las pruebas nuevamente para asegurarse de que el comportamiento no ha cambiado.

Las pruebas unitarias mejoran la capacidad de administración (habilidades de planificación y ejecución de un proyecto en particular) en términos de visibilidad, informes, control, corrección, eficiencia, velocidad, planificación y satisfacción del cliente. Además, ayudan al desarrollador a comprender el diseño del código en el que está trabajando. En lugar de escribir el código para hacer algo, comienza describiendo todas las condiciones a las que está sometiendo el código y las salidas que espera de eso.

Las pruebas unitarias pueden ayudar con la reutilización del código, pues pueden utilizar tanto su código como sus pruebas en su nuevo proyecto. De esta manera, reduce los errores, facilita el procedimiento de documentación precisa y también mejora el diseño.

Desarrollo

El término Unit Test proviene del inglés y se refiere al método de comprobación de las unidades más pequeñas del software. Los componentes más pequeños que pueden probarse y cuyos resultados más significativos son los módulos. Es recomendable comprobarlos en la primera fase del desarrollo, pues, en la fase de prueba, el módulo aún se puede corregir de forma relativamente rápida y poco costosa. Por lo general, el desarrollador es quien ejecuta las pruebas y se encarga de corregir errores y asegurar la correcta funcionalidad del componente.

Las pruebas de los test unitarios se realizan en el llamado entorno autónomo, por lo que entonces el reto está en la creación de dicho entorno, que resulta ser complejo y requiere de mucho tiempo en caso de querer implementarlo manualmente. Debido a que los módulos se ejecutan de manera independiente, es necesario hacer el llamado arnés de prueba. Este arnés se encargará de realizar las pruebas y permite que el objeto del test se convierta en un programa ejecutable. Para crear un entorno de prueba realista, se utilizan sustitutos de código que sirven como marcadores cuando el módulo requiere otros componentes para poder interactuar.

Existen frameworks de prueba de software que son especiales para la ejecución del Unit Test. La gran mayoría de los lenguajes de programación cuenta con un software de pruebas unitarias apropiado, el cual se encargará de leer el código, fuente y comprobar si hay errores. Las herramientas se encargan de fijar automáticamente el código.

¿Qué características podemos encontrar en las pruebas unitarias?

Son automatizables, esto quiere decir que, aunque los resultados deben ser específicos de cada test unitario desarrollado, los resultados se pueden automatizar, de forma que podemos hacer las pruebas de manera individual o en grupos. Segundo punto: son completas. Esto hace que el proceso conste de pequeños test sobre parte del código. No obstante, al final se debe comprobar su totalidad de los resultados. Tercero: son repetibles. Esto quiere decir que, en el caso de repetir las pruebas de forma individual o grupal, el resultado debe ser siempre el mismo y dar el mismo resultado en el orden en que se realicen los test; estos se almacenan para realizar estas repeticiones o para usarlos en otra ocasión. Además, son independientes. Es un código aislado que se ha creado con la misión de comprobar otros códigos muy concreto. Por último, son rápidos de crear, a pesar de los que muchos desarrolladores opinen. El código de los tests unitarios no debe llevar más de 5 min en ser creado, están diseñados para hacer que el trabajo sea más rápido.

Ventajas

El Unit Testing proporciona muchas ventajas, las cuales serán mencionadas a continuación.

Apiumhub en el año 2017 postuló que proporcionan un trabajo ágil. Esto quiere decir que se comportará ágilmente a la hora de verificar el código. También permite detectar los errores a tiempo, de forma que se pueda reescribir el código o corregir errores sin necesidad de tener que volver al principio y rehacer el trabajo. Puesto que las pequeñas se van haciendo periódicamente y en pequeños packs (iconos), esto permite disminuir el tiempo y el coste.

Calidad del código: Al realizar pruebas continuamente y detectar los errores, cuando el código está terminado, es un código limpio y de calidad.

Detectar errores rápido: A diferencias de otros procesos, los tests unitarios nos permiten detectar los errores rápidamente. Analizamos el código por partes, haciendo pequeñas pruebas y de manera periódica. Además, las pruebas se pueden realizar las veces que hagan falta hasta obtener el resultado óptimo.

Facilita los cambios y favorece la integración: Los tests unitarios permiten modificar partes del código sin afectar al conjunto para poder solucionar bugs (errores del software) que nos encontramos por el camino. Los tests unitarios, al estar desglosados en bloques individuales, permiten la integración de nuevas aportaciones para hacer un código más complejo o actualizarlo en función de lo que el cliente demande.

Proporciona información: Gracias al continuo flujo de información y la superación de errores, se puede recopilar gran cantidad de información para evitar bugs venideros.

Proceso debugging: Un proceso debugging significa la depuración de identificar y corregir errores del programa. Los tests unitarios ayudan en el proceso de debugging. Cuando se encuentra un error en el código, solo es necesario desglosar el trozo de código testeado. Este es uno de los motivos principales por los que los tests unitarios se hacen en pequeños trozos de código; simplifican mucho la tarea de resolver problemas.

El diseño: Si el primer paso que se hace es la creación de los tests, es mucho más fácil saber con anterioridad cómo debemos enfocar el diseño y ver qué necesidades debemos cumplir. Testeando una pieza del código, también se puede saber qué requisitos debe cumplir, y por eso mismo será mucho más fácil llegar a una cohesión entre el código y el diseño.

Reduce el coste: Se parte de la base de que los errores se detectan a tiempo, lo cual implica tener que escribir menos código. Se puede diseñar a la vez que se optimizan los tiempos de entrega. Así, vemos una clara relación con una reducción económica.

Desventajas

Se deben tomar en cuenta ciertas desventajas que se pueden presentar con este tipo de pruebas. Entre ellas se encuentran:

Sommariva, en el 2014, postuló que las pruebas unitarias no descubrirán errores de integración, problemas de rendimiento y otras inconveniencias que afectan a todo el sistema en su conjunto.

En algunos casos, puede ser complicado anticipar inicialmente cuáles son los valores de entradas adecuados para las pruebas, por lo tanto, las pruebas deberán evolucionar e ir incorporando valores de entrada representativos.

Si la utilización de pruebas unitarias no se incorpora como parte de la metodología de trabajo, probablemente, el código quedará fuera de sincronismo con los casos de prueba.

Para el desarrollo de casos de prueba realistas y útiles, es necesario crear condiciones iniciales para que la porción de aplicación que está siendo probada funcione como parte completa del sistema al que pertenece.

Al escribir un código para un caso de pruebas unitario, tiene que haber tantas probabilidades de estar libre de errores como el mismo código que se está probando.

Conclusión

Para concluir, las pruebas unitarias son muy importantes si desea desarrollar productos de software complejos. Además, podría haber menores posibilidades de que ocurran o produzcan errores. Por lo tanto, los desarrolladores deben escribir sus propios scripts (código fuente, aquel texto o información escrita usando lenguaje de programación y respetando una determinada sintaxis para formar un algoritmo o función específica que compondrá al programa) de prueba de unidad para cada módulo. También se deben realizar pruebas antes de entregarlo al equipo de control de calidad. Además, la razón por la cual escribir pruebas de unidad sirve es porque hace que los desarrolladores puedan centrarse en las pruebas unitarias antes de la implementación del producto. Cuando los desarrolladores no prestan atención a las pruebas unitarias y entregan la compilación al probador para que la pruebe, esta situación produce muchos problemas para el probador.

 

MOXIE es el Canal de ULACIT (www.ulacit.ac.cr), producido por y para los estudiantes universitarios, en alianza con el medio periodístico independiente Delfino.cr, con el propósito de brindarles un espacio para generar y difundir sus ideas.  Se llama Moxie - que en inglés urbano significa tener la capacidad de enfrentar las dificultades con inteligencia, audacia y valentía - en honor a nuestros alumnos, cuyo “moxie” los caracteriza.

 

Referencia bibliográfica:
  • Apiumhub. (2017). Beneficios de las pruebas unitarias. Recuperado de https://apiumhub.com/es/tech-blog-barcelona/beneficios-de-las-pruebas-unitarias/
  • Digital Guide. (2019). Unit testing: la prueba de calidad para software. Recuperado d https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/el-papel-del-unit-test-en-el-desarrollo-de-software/
  • Kualitatem. (2016). Why unit testing is important? Recuperado de https://www.kualitatem.com/blog/why-unit-testing-is-important
  • Sommariva, A. (2014). Pruebas Unitarias, Parte 1: Introducción y utilización de objetos simulados (Mock). Recuperado de  http://www.microgestion.com/index.php/mg-developers/articulos/74-unit-test-part1-mock