El desarrollo basado en pruebas (TDD) es un enfoque del desarrollo de software en el que las pruebas de software se escriben antes de sus funciones correspondientes.
Los desarrolladores escriben suficiente código para pasar cada prueba, luego tanto la prueba como el código se refinan antes de pasar a una nueva prueba y luego a una nueva característica.
El desarrollo basado en pruebas esencialmente obliga a los desarrolladores a ralentizar, validar y refinar su código en ciclos de retroalimentación más cortos. Si bien no es obligatorio, los equipos de DevOps alientan a los programadores, desde principiantes hasta profesionales experimentados, a usar TDD en una amplia gama de lenguajes de programación. Por ejemplo, Java, Python, etc., interfaces de programación de aplicaciones (API) y aplicaciones de programas.
La programación en este estilo fortalece la relación entre la programación, las pruebas (en forma de pruebas automatizadas a nivel de unidad) y el diseño de código. Si bien el desarrollo basado en pruebas puede aumentar el tiempo de desarrollo inicial, se ha demostrado que mejora la funcionalidad y la destreza del código y ahorra tiempo en general.
Al identificar y direccionar inmediatamente cualquier error, los desarrolladores que utilizan TDD pueden evitar que los pequeños problemas se conviertan en problemas mayores. El desarrollo basado en pruebas obliga a los desarrolladores a validar y refinar su código sobre la marcha, lo que agiliza los controles de calidad y las correcciones finales.
Los marcos de prueba alternativos incluyen escribir el código de producción antes de escribir todas las pruebas automatizadas o escribir la suite antes de escribir el código de producción. Se ha demostrado que estos métodos, aunque no necesariamente ineficaces, aumentan los tiempos de depuración necesarios, especialmente con proyectos más grandes y complejos.
Si bien el desarrollo basado en pruebas se emplea comúnmente para la creación de nuevo código de producción, también se aplica a menudo para mejorar la depuración de código existente desarrollado con técnicas más antiguas u otras.
El desarrollo basado en pruebas invierte el proceso de desarrollo tradicional al anteponer las pruebas al desarrollo. Como enfoque iterativo, el desarrollo basado en pruebas mejora la calidad y legibilidad del código al promover flujos de trabajo comprobables que dan como resultado un código de alta calidad a nivel unitario. Cuando los desarrolladores implementan pruebas unitarias, se centran en una pequeña parte de la lógica, como un algoritmo individual. Escribir código específicamente para que las pruebas pasen no solo da como resultado un código más limpio y duradero, sino que también ayuda a mejorar la documentación.
Boletín de la industria
Manténgase al día sobre las tendencias más importantes e intrigantes de la industria sobre IA, automatización, datos y más con el boletín Think. Consulte la Declaración de privacidad de IBM.
Su suscripción se entregará en inglés. En cada boletín, encontrará un enlace para darse de baja. Puede gestionar sus suscripciones o darse de baja aquí. Consulte nuestra Declaración de privacidad de IBM para obtener más información.
Hay dos niveles principales de desarrollo basado en pruebas.
Para la TDD de aceptación, a veces llamada Desarrollo basado en el comportamiento (BDD), los programadores escriben una única prueba de aceptación y luego suficiente código nuevo para pasar. Las pruebas de aceptación a veces se denominan pruebas del cliente o pruebas de aceptación del cliente.
Por lo general, pueden entenderse como casos de prueba necesarios para una funcionalidad mínima según lo descrito por los stakeholders. ATDD se esfuerza por identificar requisitos detallados y ejecutables. Las pruebas de aceptación se pueden realizar empleando varias herramientas de prueba, como Fitnesse o RSpec.
A veces denominado simplemente TDD, el TDD para desarrolladores requiere que los programadores escriban pruebas individuales para evaluar su propia solución a una prueba ATDD. El desarrollador TDD utiliza herramientas de automatización de pruebas, como JUnit o VBUnit.
Al emplear una estrategia de desarrollo basada en pruebas, los programadores primero escriben pruebas para verificar cada elemento o función individual de una pieza de software antes de escribir suficiente código para pasar esa prueba individual. Una vez completado, el software se prueba nuevamente y, si pasa, el código se refina (un proceso conocido como refactorización) para incluir solo los elementos esenciales. Luego, los desarrolladores repiten este proceso para cada función de software posterior.
El proceso de desarrollo basado en pruebas se divide en cinco pasos individuales:
En pocas palabras, el proceso de desarrollo basado en pruebas sigue un bucle repetible, denominado ciclo rojo-verde-refactorizar. Los pasos del ciclo son:
Si bien se desconocen los orígenes específicos del desarrollo basado en pruebas, el concepto de escribir primero las pruebas y después el código de producción no era una práctica común hasta mediados de la década de 1990. Antes de eso, los marcos de prueba separaban a los desarrolladores de probar sus propias bases de código. Sin embargo, a medida que la ingeniería de software evolucionó, los equipos de DevOps exigieron metodologías más rápidas y flexibles para satisfacer las demandas de las partes interesadas, especialmente cuando se trata de requisitos de los stakeholders que cambian rápidamente.
El desarrollo basado en pruebas evolucionó a partir de varios marcos de prueba novedosos y junto con ellos, y también se ha adoptado como un componente modular en otros marcos. En particular, el TDD está incluido en el concepto de Programación Extrema (XP), un marco de desarrollo de software ágil desarrollado para mejorar tanto la calidad del software como la calidad de vida de los desarrolladores.
Al ingeniero de software Kent Beck, una figura importante en la comunidad ágil y creador de Extreme Programming, se le atribuye el "redescubrimiento" del desarrollo basado en pruebas. En las propias palabras de Beck:
"La descripción original del TDD estaba en un libro antiguo sobre programación. Decía que tomes la cinta de entrada, escribas manualmente lo que esperas en la cinta de salida y luego programes hasta que la cinta de salida real coincida con la salida esperada. Después de escribir el primer marco xUnit en Smalltalk, recordé haber leído esto y lo probé. Ese fue el origen del TDD para mí. Cuando describo el TDD a programadores mayores, a menudo escucho: "Por supuesto. ¿De qué otra manera podrías programar?" Por lo tanto, me refiero a mi papel como el de "redescubrir" el TDD".
Las fechas notables en la evolución del desarrollo basado en pruebas incluyen:
Como componente de la programación extrema, se ha descubierto que el desarrollo basado en pruebas es beneficioso no solo para crear un código mejor, sino también para mejorar a los propios codificadores. El TDD puede permitir a los codificadores obtener un mejor insight de sus proyectos y ayudar a impulsar el diseño del programa. Al centrar el caso de prueba antes de implementar cada característica, los desarrolladores deben visualizar cómo utilizará una función un cliente o usuario. Este enfoque sitúa la interfaz del producto antes de la implementación y ayuda a los desarrolladores a crear aplicaciones más centradas en el usuario.
Algunos beneficios adicionales del desarrollo basado en pruebas incluyen:
Si bien el uso del desarrollo basado en pruebas (TDD) tiene muchos beneficios valiosos, no está exento de desafíos. Si bien la gravedad de estos desafíos puede depender del proyecto o mitigar con varias otras técnicas, algunas de las desventajas del TDD incluyen:
Cree un negocio más resiliente con las soluciones impulsadas por IA para la gestión inteligente de activos y de la cadena de suministro.
Transforme sus operaciones comerciales con IBM mediante el uso de datos enriquecidos y potentes tecnologías de IA que le permitan integrar procesos de optimización.
IBM Cloud Pak for Business Automation es un conjunto modular de componentes de software integrados para la gestión y automatización de operaciones.