Fuente: Unsplash
Los desarrolladores y probadores desempeñan un papel clave en la creación de aplicaciones de software en el ciclo de vida del desarrollo de software (o Software Development Life Cycle - SDLC por sus siglas en Inglés). En los primeros días del desarrollo de software, los desarrolladores solo eran responsables de crear el código, y los probadores solo eran responsables de probar la calidad de la aplicación de software después del desarrollo. Como resultado, los problemas no surgieron hasta las etapas finales del SDLC durante las pruebas funcionales / de un extremo a otro. Estos problemas podrían agravarse aún más por la posible complejidad del problema, y el proyecto podría retrasarse y / o excederse del presupuesto. La introducción de las pruebas unitarias ayudó a identificar problemas en etapas anteriores, durante el desarrollo, en lugar de al final, y brindó a los desarrolladores tiempo para abordar y resolver problemas.
Ahora, los casos de prueba unitaria son una parte estándar de los entregables de los desarrolladores modernos. Los procesos como el desarrollo basado en pruebas o Test-Driven Development (TDD) evolucionaron para que los desarrolladores puedan escribir pruebas incluso antes de escribir el código de la aplicación. Sin embargo, esta responsabilidad adicional no es asumida por todos los desarrolladores y las compilaciones continúan fallando porque los desarrolladores no realizan pruebas unitarias o no cumplen con el porcentaje de cobertura de las pruebas unitarias. Muchos desarrolladores citan el cumplimiento de los plazos del proyecto como la razón para omitir las pruebas unitarias sin darse cuenta cómo los proyectos podrían sufrir a largo plazo si no se implementan las pruebas unitarias. Los desarrolladores deben tener una prueba unitaria para cada línea de código que se introduzca. Esto solo puede suceder si los desarrolladores comprenden los beneficios y la importancia de las pruebas unitarias y se les anima a adoptarlas como parte del desarrollo.
Figura 1 - Algunas percepciones que los desarrolladores pueden tener acerca de las pruebas unitarias
Dado que el desarrollo se produce en las primeras etapas de SDLC, las pruebas unitarias son clave para garantizar la calidad del código, comprobando el código en busca de fallas temprano y con frecuencia. Esto se alinea bien con el concepto "Fail Fast!", que respalda una estrategia de velocidad de comercialización necesaria en el panorama competitivo actual. Los desarrolladores que incorporen esta práctica como parte de su función contribuirían al desarrollo acelerado de aplicaciones de software.
A continuación, se muestran cuatro beneficios importantes a considerar para alentar a los desarrolladores a incorporar pruebas unitarias en sus procesos de compilación.
1. Las pruebas unitarias exploran los escenarios esperados e inesperados mientras aseguran la calidad y estabilidad de la base de códigos
Los desarrolladores realizan pruebas de sistema llamadas pruebas de desarrollo. Con este enfoque de validación manual, los desarrolladores podrían terminar validando la funcionalidad existente que ya conocían. Sin embargo, es probable que pasen por alto los problemas que surgen del escalado o los problemas que ocurren en los casos de esquina o de borde. Por ejemplo, si un desarrollador ejecuta cambios en una API existente, probaría los cambios validando la API a través de Postman. Esto podría ser simple para un pequeño cambio, pero a medida que crece el tamaño de la aplicación, aumenta el número de desarrolladores que contribuyen a la base del código y sus esfuerzos de validación también aumentarán significativamente.
El código puede parecer simple cuando se revisa de forma aislada porque las pruebas unitarias solo ejecutan una tarea específica y prohíben todos los efectos externos, como dependencias entre unidades, llamadas a otras funciones, etc. A pesar de esto, a medida que el código evoluciona, puede volverse más complejo, lo que puede provocar un retraso en las versiones, ya que no tiene en cuenta los resultados inesperados.
Supongamos que los desarrolladores escriben pruebas unitarias para cada cambio de código que realizan en la aplicación. En este enfoque cuentan con pruebas unitarias que actúan como barreras que pueden validar toda la funcionalidad existente. La creación de pruebas unitarias también proporciona estabilidad al código base a medida que se escala. Por lo tanto, tener pruebas unitarias como parte del código hará que el desarrollo del código sea mejor y más rápido.
2. Las pruebas unitarias son más eficientes y efectivas que las validaciones manuales
Las pruebas unitarias pueden parecer más laboriosas que la validación manual, pero imagina un escenario en el que un desarrollador necesita un día para efectuar cambios en el código y un día adicional para escribir pruebas unitarias para los respectivos cambios en el código. El esfuerzo de un día para las pruebas unitarias frente a las 3-4 horas para la validación manual puede parecer una obviedad. Durante un tiempo, otro desarrollador necesita modificar el mismo código para adaptarse a los nuevos requisitos comerciales. Para estos nuevos requisitos es probable que los desarrolladores realicen cambios en el código y lo lleven a producción. Puede terminar rompiendo la funcionalidad actual porque no hay pruebas unitarias existentes para advertir al nuevo desarrollador, lo que genera una pérdida de tiempo, recursos y un mayor esfuerzo en general.
Hoy en día varios equipos trabajan en la misma base de código e inevitablemente se requerirán cambios, es fundamental contar con pruebas unitarias adecuadas para garantizar la validez del código y ahorrar en esfuerzos generales al proporcionar una guía del código.
3. Las pruebas unitarias ayudan a evitar pruebas inválidas
A medida que evolucionan los procesos, la cobertura del código se verifica como parte del proceso de integración continua para proporcionar comentarios inmediatos a los desarrolladores en los casos en que la cobertura desciende por debajo de un cierto porcentaje. El propósito de esta validación es garantizar la calidad y que se cumplan las expectativas cuando varios equipos trabajan con el desarrollo del código.
Algunos desarrolladores tratan esto como un entregable porque se aplica en el proceso de compilación. Se recomienda que la cultura de los desarrolladores trate las pruebas unitarias como parte del desarrollo y que escriban pruebas para cada línea de código que introduzcan. De lo contrario, terminan teniendo pruebas no válidas, por ejemplo, código repetitivo como getters/setters para cumplir con el porcentaje de cobertura de la prueba unitaria.
4. Se ha comprobado que las pruebas unitarias ofrecen mayor valor que otras pruebas
El control de calidad juega un papel crítico en el desarrollo speed-to-market. Como parte de esto, distintos tipos de pruebas de automatización, como pruebas de servicios, pruebas de la Interfaz de Usuario, y pruebas de integración, se fueron introduciendo sumado a las pruebas unitarias. Así, se ha comprobado que las pruebas unitarias proveen más valor con un costo menor.
Figura 2 - Esta imagen se adaptó de la pirámide de pruebas del artículo de Martin Fowler
Los desarrolladores deben incluir pruebas unitarias en su cultura de construcción
La mayoría de los desarrolladores que trabajan han sido capacitados para incluir las pruebas unitarias como parte de las estrategias técnicas que impulsan la velocidad de comercialización. La prueba unitaria es un concepto simple en términos de pila técnica; sin embargo, en mi experiencia, la tasa de adopción de las pruebas unitarias ha sido baja y requiere un cambio de mentalidad cultural para ser realmente adoptado como parte de la práctica de los desarrolladores. A menudo, se percibe como fuera de su alcance y, muchas veces, los desarrolladores tienden a pasar por alto la importancia de crear y mantener un código de calidad debido a las presiones inmediatas para entregar los proyectos a tiempo y dentro del presupuesto. Tiene que haber un cambio cultural en la forma en que los desarrolladores construyen y prueban para permitirles construir código de calidad con velocidad, lo que luego les permite escalar sin problemas y lograr objetivos comerciales a largo plazo para ayudar a sus empresas a mantenerse por delante de la competencia.
Para conocer más sobre nuestros servicios, contáctanos.