X
BLOG

Por qué la gente odia las pruebas unitarias y cómo recuperar el amor

Por qué la gente odia las pruebas unitarias y cómo recuperar el amor Tiempo de leer: 4 minutos
Creamos el Parasoft Jtest Asistente de prueba unitaria para aliviar el dolor de las pruebas unitarias porque le escuchamos decir cuánto odia las pruebas unitarias, pero sabemos que las necesita para tener éxito.

Seamos sinceros. A nadie le gusta hacer pruebas unitarias. He tenido personas que se me acercan en conferencias con historias e historias de cuánto lo odian. Y si bien hay algunas personas que son buenas en eso, para la mayoría de nosotros, es solo un mal necesario que debe hacerse a pesar de las mejores y más inteligentes quejas. Hoy voy a ver algunas de las razones por las que no nos gusta y cómo superar estos obstáculos con la automatización de software.

Entonces, ¿por qué hacer pruebas unitarias, de todos modos?

La mayoría de los equipos de desarrollo estarán de acuerdo en que, aunque no les gusta, las pruebas unitarias son, de hecho, valiosas. Ayuda a los desarrolladores a comprender realmente el código que están desarrollando y proporciona una base sólida para la pirámide de pruebas continuas, como se muestra a la derecha, lo que, a su vez, permite a los equipos acelerar el desarrollo ágil al tiempo que mitiga el riesgo de que los defectos se deslicen hacia las etapas posteriores del proceso. tubería.

Yo iría más allá y diría que el proceso de crear una prueba unitaria es una actividad beneficiosa en sí misma, que ayuda al desarrollador a mirar su código a través de una lente diferente, esencialmente haciendo una revisión adicional del código.

Cuando realiza pruebas unitarias, revisa la interfaz de la funcionalidad desde un punto de vista externo, y se beneficia de hacer preguntas como, ¿Cómo se utilizará mi código? (que conduce a una interfaz simplificada y un menor costo de mantenimiento del código) o, ¿Qué sucede si obtengo datos no válidos? (resultando en un código más robusto y reutilizable).

Donde fracasan las intenciones de las grandes pruebas unitarias

Por lo general, los equipos de desarrollo realizan una cantidad mínima de pruebas unitarias, o las omiten por completo, a menudo debido a alguna combinación de (1) la presión (y el tiempo que lleva) para entregar más y más funcionalidad, y (2) la complejidad y el tiempo naturaleza consumidora de la creación de pruebas unitarias valiosas.

Esto se desglosa en algunas razones comunes por las que los desarrolladores citan que limitan la adopción de las pruebas unitarias como una práctica de desarrollo central incluyen:

  • Es difícil comprender, inicializar y / o aislar las dependencias de la unidad bajo prueba.
  • Determinar qué validar y definir las afirmaciones adecuadas requiere mucho tiempo y, a menudo, requiere un "trabajo de conjetura" inteligente.
  • Hay una gran cantidad de codificación manual involucrada, a menudo incluso más de la necesaria para implementar una característica o mejora específica.
  • No es tan interesante ... Los desarrolladores no quieren sentirse como probadores, quieren dedicar tiempo a ofrecer más funciones.

Para ayudar con estas limitaciones, existen varias herramientas que están disponibles actualmente y que pueden ayudar con las pruebas unitarias. Las pruebas unitarias y los marcos de afirmación proporcionan formatos de ejecución estandarizados (por ejemplo, Junit) para una integración perfecta en la infraestructura de CI (por ejemplo, Jenkins, Bamboo, TeamCity). Los IDE ayudan en la creación de código de prueba (por ejemplo, Eclipse, IntelliJ). Los frameworks de simulación aíslan el código de sus dependencias (por ejemplo, Mockito, PowerMock). Las herramientas de cobertura de código proporcionan cierta visibilidad de qué código se ejecutó (por ejemplo, Emma, ​​Cobertura, Clover). Los depuradores permiten a los desarrolladores monitorear e inspeccionar la ejecución paso a paso de una prueba individual.

Pero, desafortunadamente, todas estas herramientas tienen limitaciones y los desarrolladores todavía encuentran muchos puntos débiles, como los siguientes:

  • El IDE ayuda a crear un esqueleto para la prueba unitaria, pero no "contenido". El desarrollador aún necesita agregar mucho código para crear una prueba en ejecución:

  • Las afirmaciones deben definirse manualmente y las pruebas deben ejecutarse para ver si se han afirmado los valores correctos.
  • Los frameworks de simulación requieren una cantidad significativa de codificación manual para crear instancias y configurar, además del conocimiento de cómo usarlos correctamente.
  • Las herramientas de cobertura brindan información sobre qué código ha cubierto una prueba ejecutada, pero no brindan información sobre el comportamiento en tiempo de ejecución de la prueba.
  • Los depuradores se pueden usar para una prueba individual, pero no escalan como una forma de monitorear una ejecución de prueba completa.

En resumen, la creación de la prueba unitaria aún requiere mucho esfuerzo manual, lento y, a menudo, abrumador, incluso antes de comenzar a agregar lógica empresarial a una prueba.

¿La solución? ¡Creamos un asistente!

Para crear una herramienta que lo ayude a evitar estos puntos débiles, recurrimos a la automatización de pruebas de software (por supuesto). El Asistente de prueba unitaria de Parasoft Jtest ahora está disponible para ayudarlo a crear una prueba unitaria completamente funcional con solo hacer clic en un botón.

Las pruebas creadas con UTA son JUnits “regulares” pero con todo el trabajo mundano hecho por usted. UTA configura el marco de prueba, crea instancias de objetos y configura simulacros para los objetos apropiados y las llamadas a métodos utilizados por el método bajo prueba.

Estos JUnits se pueden ejecutar como parte de su flujo de trabajo de CI estándar de la misma manera que sus pruebas existentes; sin embargo, cuando UTA ejecuta un JUnit, incluidas sus pruebas existentes, la prueba se supervisa de una manera que proporciona un análisis más allá de simplemente proporcionar números de cobertura de código.

Al analizar la prueba en tiempo de ejecución, UTA puede proporcionar una serie de recomendaciones, muchas con Arreglos rápidos que lo ayudan a tomar medidas con un solo clic, como:

  • Resaltando los valores de los objetos que han cambiado y deben afirmarse,
  • Identificar las llamadas a métodos que deben simularse para aislar mejor el código bajo prueba, y
  • Encontrar pruebas que no se 'limpian' después de sí mismas y crear un entorno de prueba potencialmente inestable (por ejemplo, debido al uso de subprocesos, archivos externos, campos estáticos o propiedades del sistema).

Creamos UTA ​​para aliviar el dolor de las pruebas unitarias porque, como organización que se especializa en perfeccionar el software, sabemos que las pruebas unitarias son un paso esencial para crear software que sea seguro, confiable y de alta calidad. Así que espero tener conversaciones contigo en futuras conferencias y eventos, donde en lugar de decirme cuánto odias las pruebas unitarias, puedes contarme sobre tus experiencias usando UTA para traer de vuelta el amor.

Para obtener una demostración gratuita de Jtest UTA, haz clic aquí.

TL; DR?

Para ver el asistente de prueba unitaria en acción, vea el video a continuación:

 

Automatice la creación de pruebas JUnit y comience a amar las pruebas unitarias

Escrito por

Mark Lambert

Mark, vicepresidente de productos de Parasoft, es responsable de garantizar que las soluciones de Parasoft brinden un valor real a las organizaciones que las adoptan. Mark ha estado con Parasoft desde 2004, trabajando con una amplia variedad de clientes de Global 2000, desde implementaciones de tecnología específicas hasta iniciativas de mejora de procesos SDLC más amplias.

Reciba las últimas noticias y recursos sobre pruebas de software en su bandeja de entrada.

Prueba Parasoft