La teoría de la prueba unitaria, parte 3

En los últimos dos artículos, hemos analizado de cerca la teoría detrás de las pruebas unitarias y cómo puede ayudarnos en nuestros esfuerzos de desarrollo de WordPress. Hemos definido las pruebas de unidad y hemos examinado varias maneras en que puede ayudarnos en nuestros proyectos..

Pero aún tenemos más por cubrir..

En este artículo final, revisaremos por qué deberíamos siquiera molestarnos en hacer pruebas unitarias y resumiremos las ventajas y desventajas de hacerlo. A continuación, veremos cómo podemos adaptar las pruebas en nuestros proyectos existentes. Y para resumir, resumiremos una lista de recursos que están disponibles específicamente para nosotros los desarrolladores de WordPress que ayudarán a comenzar a probar nuestros temas por unidad..


¿Por qué hacemos la prueba de unidad? Todo sobre la calidad

El tema general de esta serie entera ha sido sobre por qué deberíamos preocuparnos con las pruebas de unidad, pero si no se ha dicho de manera sucinta, esta es la razón:

Unit Testing nos ayuda a descubrir problemas en una etapa temprana, proporciona a los desarrolladores un nivel de código de auto-documentación y nos brinda un nivel más alto de calidad de software.

Por supuesto, esto supone que seguimos practicando buenas técnicas de prueba de unidad. Por supuesto, esto fue cubierto con gran detalle en el artículo anterior, pero vale la pena reiterarlo..

Una cosa importante a tener en cuenta, especialmente si está tratando de aplicar esto en un entorno más corporativo o en el contexto de una empresa más grande, es que las pruebas unitarias no son solo algo que los desarrolladores hacen por sí mismos. La calidad tiene dos caras: beneficia al cliente y beneficia al negocio.

Al proporcionar un mayor nivel de calidad para el cliente, es decir, un software más probado, deberían experimentar menos errores. Dado que los errores resultan en el tiempo que los desarrolladores deben dedicar a resolver en lugar de trabajar en nuevos proyectos o nuevas características de productos existentes, esto puede ahorrar dinero.

Al proporcionar un mayor nivel de calidad para el negocio, los desarrolladores tienen más confianza en sus esfuerzos porque pueden ejecutar una serie de pruebas cada vez que se realiza un cambio al saber cómo afectó su trabajo a toda la aplicación. Si una prueba falla, entonces pueden resolverla antes de implementarla en producción.

Unit Testing tiene que ver con la calidad y afecta no solo a quienes escriben el código, sino también a la empresa que lo envía y a los clientes que lo están utilizando..


Ventajas y desventajas

La verdad es que ya hemos cubierto las ventajas de las pruebas unitarias. Para completar, resumámoslos aquí (¡aunque siempre puedes revisarlos en detalle!). Examen de la unidad…

  • Ayuda a los desarrolladores a encontrar problemas temprano y puede ahorrar tiempo a medida que la aplicación crece y se introducen nuevas características
  • Proporciona un nivel de documentación en el código para que los desarrolladores actuales y futuros puedan entender cómo se supone que funciona el código
  • Controla la arquitectura para que la aplicación se pueda probar a lo largo de su ciclo de vida.
  • Mejora el lenguaje del código al proporcionar funciones más legibles y flujo de control.

Todo suena bien, ¿verdad? Y sí, se basa en que los desarrolladores se responsabilicen de los altos estándares y prácticas a la hora de implementar esto en el trabajo diario, pero las pruebas unitarias no están exentas de desventajas..

El tiempo es dinero y usted está gastando tiempo

Esto se ha dicho a lo largo de esta serie: las pruebas unitarias requieren una importante inversión de tiempo. Es cierto que si está comenzando un nuevo proyecto, la inversión de tiempo es mucho menor que si está ajustando esto en una aplicación existente, pero está todavía Tener que escribir más código que sin probar.

Debido a que está escribiendo más código, está demorando más tiempo, nuevamente, en la parte delantera del proyecto. Los beneficios de las pruebas unitarias a menudo no llegan hasta más tarde, pero si un proyecto tiene una fecha específica de lanzamiento y esa versión incluye una cierta cantidad de funciones, es probable que no se adapten a todas las pruebas unitarias y las características la liberación.

Si desea evitar conjuntos de características más pequeños en fechas de lanzamiento o demoras, tener para construir a tiempo para la prueba de la unidad.

La complejidad mata y otros clichés

Los has escuchado a todos: la complejidad mata, mantenlo simple, estúpido, menos es más, etc..

Honestamente, todos estos son verdaderos y tienen su lugar adecuado en el desarrollo, pero el hecho es que las pruebas de unidad es código adicional y código adicional siempre Introduce más complejidad. Como tal, tenemos que asegurarnos de que tenemos una manera adecuada de administrar y organizar todas nuestras pruebas de unidad.

Quizás sea la organización de archivos, el espacio entre nombres, las convenciones de nomenclatura, las pruebas versionadas o todo lo anterior. Independientemente de lo que termine haciendo, las pruebas unitarias no deben tratarse como ciudadanos de segunda clase en el mundo del software; deben estar sujetos a los mismos principios de diseño que otras clases o funciones tanto como sea posible.

La desventaja del diseño

Sí, en el último artículo dijimos que las pruebas unitarias pueden ayudar a impulsar el diseño de una aplicación y pueden ayudar a fomentar un diseño que haga que toda la aplicación sea más comprobable. Esto sigue siendo cierto, pero tiene un costo: a veces el diseño más comprobable por unidad no es el más claro.

Con eso quiero decir que debido a que un conjunto de funciones, o incluso una clase, está totalmente probado por unidades, la cohesión tiene el potencial de verse comprometida porque estamos haciendo sacrificios para acceder a ciertas funciones para verificar su procesamiento de datos. Por supuesto, esto no es una regla difícil y rápida y puede que incluso no sea un problema para algunos, pero tiene que decidir de qué va a ser dogmático: es un conjunto de clases y funciones perfectamente diseñado o Un sistema contiguo de pruebas y funciones que trabajan en conjunto.?

En última instancia, creo que todo se reduce a cómo se ven las pruebas como una parte más amplia del conjunto. Si forman parte del diseño de la aplicación, es posible que el diseño no sufra. Pero si ve las pruebas como una idea de último momento, entonces el diseño de la aplicación principal puede verse comprometido solo ligeramente.

Ajustes continuos

Como dicen, el software nunca se hace y, como las pruebas unitarias forman parte de un software, nunca se hacen..

Debido a que una aplicación siempre va a evolucionar, ya se trate de errores que se eliminen, se introduzcan nuevas funciones (o incluso se eliminen), las pruebas asociadas también deberán agregarse o actualizarse. Y siempre vuelve al tiempo..

Además, si está trabajando en un equipo de desarrolladores, nuestra falta de pruebas de actualización puede afectar negativamente al equipo, ya que los resultados que reportan las pruebas pueden ser falsos positivos o falsos negativos. Una vez que se escriben las pruebas, es imperativo que se actualicen; De lo contrario, pueden resultar en un producto muy pobre..


Incorporación de pruebas unitarias en su flujo de trabajo

Unit Testing es mucho más fácil de vender cuando está comenzando con un proyecto, pero si está buscando adaptarlo a una aplicación existente (o tema o complemento, en nuestro caso), tomará un poco de tiempo y esfuerzo.

Y aunque no hay una bala de plata sobre cómo puede ejecutarse perfectamente en esto, hay algunas buenas maneras de comenzar a implementar la práctica en su trabajo diario:

  • Asegúrate de que tu proyecto esté bajo control de código fuente - Esto debería ser un hecho, pero si no lo es, comience tan pronto como sea posible. Los "como y por que"están fuera del alcance de este artículo, pero es fundamental tener su trabajo bajo control de código fuente, especialmente una vez que introduzca las pruebas.
  • Presentar las pruebas unitarias de WordPress - Realice la configuración con las pruebas unitarias de WordPress (instrucciones aquí). Recomiendo mantenerlos en un subdirectorio en su proyecto para organizar más fácilmente las pruebas. Asegúrese de que se comprometan con el control de la fuente.
  • Comience agregando pruebas - Cada vez que trabaje en una función o introduzca una nueva, agregue la prueba de unidad correspondiente. Si una función preexistente no es comprobable, dedique tiempo a asegurarse de que lo sea. Esta es una batalla cuesta arriba pero será saldar.
  • Recordar el éxito y el fracaso - Recuerde que mientras escribe las pruebas, también debe introducir las pruebas para los casos de éxito y las pruebas para los casos de falla..

Si sigue los pasos anteriores, eventualmente terminará con una cantidad significativa de cobertura de código. Sí, lleva tiempo y sí es probable que tenga que volver a trabajar una gran parte del código, pero esa misma inversión de tiempo dará dividendos en el futuro de su producto..


Recursos disponibles

Aquí hay un resumen de los recursos que pueden contribuir a las pruebas exitosas de sus proyectos basados ​​en WordPress:

  • La guía del principiante para la prueba de unidad - Una serie de artículos que escribí sobre la introducción de pruebas unitarias y sobre cómo probar complementos y temas..
  • PHPUnit - El framework en el que se basan las pruebas de WordPress..
  • PHPUnit Documentation - El manual para PHPUnit. Esto es útil cuando está buscando métodos disponibles para escribir aserciones en su código.
  • Hola lector - Un simple complemento que escribí para demostrar cómo probar complementos.
  • Pruebas de WordPress - Las pruebas oficiales de WordPress y el marco de pruebas disponibles para el pago a través de Subversion.
  • Tema basico - Un simple tema de WordPress usado para demostrar cómo hacer una prueba de los temas.

Entre la primera serie de artículos y esta serie de artículos, se ha sentado una base sólida sobre la cual puede continuar construyendo sus prácticas de prueba de unidad..