fbpx
Wikipedia

Desarrollo guiado por pruebas

Desarrollo guiado por pruebas de software, o Test-driven development (TDD) es una práctica de ingeniería de software que involucra otras dos prácticas: Escribir las pruebas primero (Test First Development) y Refactorización (Refactoring). Para escribir las pruebas generalmente se utilizan las pruebas unitarias (unit test en inglés). En primer lugar, se escribe una prueba y se verifica que la nueva prueba falla. A continuación, se implementa el código que hace que la prueba pase satisfactoriamente y seguidamente se refactoriza el código escrito. El propósito del desarrollo guiado por pruebas es lograr un código limpio que funcione. La idea es que los requisitos sean traducidos a pruebas, de este modo, cuando las pruebas pasen se garantizará que el software cumple con los requisitos que se han establecido.

Requisitos

Para que funcione el desarrollo guiado por pruebas, el sistema que se programa tiene que ser lo suficientemente flexible como para permitir que sea probado automáticamente. Cada prueba será suficientemente pequeña como para que permita determinar unívocamente si el código probado pasa o no la verificación que esta le impone. El diseño se ve favorecido ya que se evita el indeseado "sobre diseño" de las aplicaciones y se logran interfaces más claras y un código más cohesivo.

Ciclo de desarrollo conducido por pruebas TDD

En primer lugar se debe definir una lista de requisitos y después se ejecuta el siguiente ciclo:

  1. Elegir un requisito: Se elige de una lista el requisito que se cree que nos dará mayor conocimiento del problema y que a la vez sea fácilmente implementable.
  2. Escribir una prueba: Se comienza escribiendo una prueba para el requisito. Para ello el programador debe entender claramente las especificaciones y los requisitos de la funcionalidad que está por implementar. Este paso fuerza al programador a tomar la perspectiva de un cliente considerando el código a través de sus interfaces.
  3. Verificar que la prueba falla: Si la prueba no falla es porque el requisito ya estaba implementado o porque la prueba es errónea.
  4. Escribir la implementación: Escribir el código más sencillo que haga que la prueba funcione. Se usa la expresión "Déjelo simple" ("Keep It Simple, Stupid!"), conocida como principio KISS.
  5. Ejecutar las pruebas automatizadas: Verificar si todo el conjunto de pruebas funciona correctamente.
  6. Eliminación de duplicación: El paso final es la refactorización, que se utilizará principalmente para eliminar código duplicado. Se hace un pequeño cambio cada vez y luego se corren las pruebas hasta que funcionen.
  7. Actualización de la lista de requisitos: Se actualiza la lista de requisitos tachando el requisito implementado. Asimismo se agregan requisitos que se hayan visto como necesarios durante este ciclo y se agregan requisitos de diseño (P. ej que una funcionalidad esté desacoplada de otra).

Tener un único repositorio universal de pruebas facilita complementar TDD con otra práctica recomendada por los procesos ágiles de desarrollo, la "Integración Continua". Integrar continuamente nuestro trabajo con el del resto del equipo de desarrollo permite ejecutar toda la batería de pruebas y así descubrir, si nuestra última versión es compatible con el resto del sistema. Es recomendable y menos costoso corregir pequeños problemas cada pocas horas, que enfrentarse a problemas enormes cerca de la fecha de entrega fijada.

Características

Una característica de esta forma de programación es el evitar escribir código innecesario ("You Ain't Gonna Need It" (YAGNI)). Se intenta escribir el mínimo código posible, y si el código pasa una prueba aunque sepamos que es incorrecto nos da una idea de que tenemos que modificar nuestra lista de requisitos agregando uno nuevo.

La generación de pruebas para cada funcionalidad hace que el programador confíe en el código escrito. Esto permite hacer modificaciones profundas del código (posiblemente en una etapa de mantenimiento del programa) pues sabemos que si luego logramos hacer pasar todas las pruebas tendremos un código que funcione correctamente.

Otra característica del Test Driven Development es que requiere que el programador primero haga fallar los casos de prueba. La idea es asegurarse de que los casos de prueba realmente funcionen y puedan recoger un error.

Estrategias de implementación

Uno de los puntos más delicados a la hora de aplicar TDD como herramienta de diseño es en el paso en el que ya tenemos un test que falla y debemos crear la implementación mínima para que el test pase. Para ello Kent Beck expone un conjunto de estrategias que nos van a permitir avanzar en pasos pequeños hacia la solución del problema.

  • Implementación falsa: Una vez que tenemos el test fallando, la forma más rápida de obtener la primera implementación es creando un fake que devuelva una constante. Esto nos ayudará a ir progresando poco a poco en la resolución del problema, ya que al tener la prueba pasando estamos listos para afrontar el siguiente caso.
  • Triangular: o la técnica de la triangulación, es el paso natural que sigue a la técnica de la implementación falsa. Es más, en la mayoría de los contextos, forma parte de la triangulación, basándose en lo siguiente:
    1. Escoger el caso más simple que debe resolver el algoritmo.
    2. Aplicar el algoritmo del TDD.
    3. Repetir los pasos anteriores cubriendo las diferentes casuísticas.
  • Implementación obvia: cuando la solución parece muy sencilla, lo ideal es escribir la implementación obvia en las primeras iteraciones del ciclo del TDD.

Ventajas

Los programadores que utilizan el desarrollo guiado por pruebas en un proyecto virgen encuentran que en raras ocasiones tienen la necesidad de utilizar el depurador o debugger.

A pesar de los elevados requisitos iniciales de aplicar esta metodología, el desarrollo guiado por pruebas (TDD) puede proporcionar un gran valor añadido en la creación de software, produciendo aplicaciones de más calidad y en menos tiempo. Ofrece más que una simple validación del cumplimiento de los requisitos, también puede guiar el diseño de un programa. Centrándose en primer lugar en los casos de prueba uno debe imaginarse cómo los clientes utilizarán la funcionalidad (en este caso, los casos de prueba). Por lo tanto, al programador solo le importa la interfaz y no la implementación. Esta ventaja es similar al diseño por convenio pero se parece a él por los casos de prueba más que por las aserciones matemáticas.

El poder del TDD radica en la capacidad de avanzar en pequeños pasos cuando se necesita. Permite que un programador se centre en la tarea actual y la primera meta es, a menudo, hacer que la prueba pase. Inicialmente no se consideran los casos excepcionales y el manejo de errores. Estos, se implementan después de que se haya alcanzado la funcionalidad principal. Otra ventaja es que, cuando es utilizada correctamente, se asegura de que todo el código escrito está cubierto por una prueba. Esto puede dar al programador un mayor nivel de confianza en el código.

Limitaciones

El desarrollo guiado por pruebas requiere que las pruebas puedan automatizarse. Esto resulta complejo en los siguientes dominios:

  • Interfaces Gráfica de usuario (GUIs), aunque hay soluciones parciales propuestas.
  • Objetos distribuidos, aunque los objetos simulados (MockObjects) pueden ayudar.
  • Bases de datos. Hacer pruebas de código que trabaja con base de datos es complejo porque requiere poner en la base de datos unos datos conocidos antes de hacer las pruebas y verificar que el contenido de la base de datos es el esperado después de la prueba. Todo esto hace que la prueba sea costosa de codificar, aparte de tener disponible una base de datos que se pueda modificar libremente. Además, la prueba puede tardar demasiado en ejecutarse, lo que viola uno de los principios de TDD.

Véase también

Enlaces externos

  • Introducción a TDD
  • TDD (Test Driven Development) en JavaScript
  • Estado del arte y tendencias en Test-Driven Development
  • MockObjects y TDD en .Net Framework
  •   Datos: Q950250

desarrollo, guiado, pruebas, software, test, driven, development, práctica, ingeniería, software, involucra, otras, prácticas, escribir, pruebas, primero, test, first, development, refactorización, refactoring, para, escribir, pruebas, generalmente, utilizan, . Desarrollo guiado por pruebas de software o Test driven development TDD es una practica de ingenieria de software que involucra otras dos practicas Escribir las pruebas primero Test First Development y Refactorizacion Refactoring Para escribir las pruebas generalmente se utilizan las pruebas unitarias unit test en ingles En primer lugar se escribe una prueba y se verifica que la nueva prueba falla A continuacion se implementa el codigo que hace que la prueba pase satisfactoriamente y seguidamente se refactoriza el codigo escrito El proposito del desarrollo guiado por pruebas es lograr un codigo limpio que funcione La idea es que los requisitos sean traducidos a pruebas de este modo cuando las pruebas pasen se garantizara que el software cumple con los requisitos que se han establecido Indice 1 Requisitos 2 Ciclo de desarrollo conducido por pruebas TDD 3 Caracteristicas 4 Estrategias de implementacion 5 Ventajas 6 Limitaciones 7 Vease tambien 8 Enlaces externosRequisitos EditarPara que funcione el desarrollo guiado por pruebas el sistema que se programa tiene que ser lo suficientemente flexible como para permitir que sea probado automaticamente Cada prueba sera suficientemente pequena como para que permita determinar univocamente si el codigo probado pasa o no la verificacion que esta le impone El diseno se ve favorecido ya que se evita el indeseado sobre diseno de las aplicaciones y se logran interfaces mas claras y un codigo mas cohesivo Ciclo de desarrollo conducido por pruebas TDD EditarEn primer lugar se debe definir una lista de requisitos y despues se ejecuta el siguiente ciclo Elegir un requisito Se elige de una lista el requisito que se cree que nos dara mayor conocimiento del problema y que a la vez sea facilmente implementable Escribir una prueba Se comienza escribiendo una prueba para el requisito Para ello el programador debe entender claramente las especificaciones y los requisitos de la funcionalidad que esta por implementar Este paso fuerza al programador a tomar la perspectiva de un cliente considerando el codigo a traves de sus interfaces Verificar que la prueba falla Si la prueba no falla es porque el requisito ya estaba implementado o porque la prueba es erronea Escribir la implementacion Escribir el codigo mas sencillo que haga que la prueba funcione Se usa la expresion Dejelo simple Keep It Simple Stupid conocida como principio KISS Ejecutar las pruebas automatizadas Verificar si todo el conjunto de pruebas funciona correctamente Eliminacion de duplicacion El paso final es la refactorizacion que se utilizara principalmente para eliminar codigo duplicado Se hace un pequeno cambio cada vez y luego se corren las pruebas hasta que funcionen Actualizacion de la lista de requisitos Se actualiza la lista de requisitos tachando el requisito implementado Asimismo se agregan requisitos que se hayan visto como necesarios durante este ciclo y se agregan requisitos de diseno P ej que una funcionalidad este desacoplada de otra Tener un unico repositorio universal de pruebas facilita complementar TDD con otra practica recomendada por los procesos agiles de desarrollo la Integracion Continua Integrar continuamente nuestro trabajo con el del resto del equipo de desarrollo permite ejecutar toda la bateria de pruebas y asi descubrir si nuestra ultima version es compatible con el resto del sistema Es recomendable y menos costoso corregir pequenos problemas cada pocas horas que enfrentarse a problemas enormes cerca de la fecha de entrega fijada Caracteristicas EditarUna caracteristica de esta forma de programacion es el evitar escribir codigo innecesario You Ain t Gonna Need It YAGNI Se intenta escribir el minimo codigo posible y si el codigo pasa una prueba aunque sepamos que es incorrecto nos da una idea de que tenemos que modificar nuestra lista de requisitos agregando uno nuevo La generacion de pruebas para cada funcionalidad hace que el programador confie en el codigo escrito Esto permite hacer modificaciones profundas del codigo posiblemente en una etapa de mantenimiento del programa pues sabemos que si luego logramos hacer pasar todas las pruebas tendremos un codigo que funcione correctamente Otra caracteristica del Test Driven Development es que requiere que el programador primero haga fallar los casos de prueba La idea es asegurarse de que los casos de prueba realmente funcionen y puedan recoger un error Estrategias de implementacion EditarUno de los puntos mas delicados a la hora de aplicar TDD como herramienta de diseno es en el paso en el que ya tenemos un test que falla y debemos crear la implementacion minima para que el test pase Para ello Kent Beck expone un conjunto de estrategias que nos van a permitir avanzar en pasos pequenos hacia la solucion del problema Implementacion falsa Una vez que tenemos el test fallando la forma mas rapida de obtener la primera implementacion es creando un fake que devuelva una constante Esto nos ayudara a ir progresando poco a poco en la resolucion del problema ya que al tener la prueba pasando estamos listos para afrontar el siguiente caso Triangular o la tecnica de la triangulacion es el paso natural que sigue a la tecnica de la implementacion falsa Es mas en la mayoria de los contextos forma parte de la triangulacion basandose en lo siguiente Escoger el caso mas simple que debe resolver el algoritmo Aplicar el algoritmo del TDD Repetir los pasos anteriores cubriendo las diferentes casuisticas Implementacion obvia cuando la solucion parece muy sencilla lo ideal es escribir la implementacion obvia en las primeras iteraciones del ciclo del TDD Ventajas EditarLos programadores que utilizan el desarrollo guiado por pruebas en un proyecto virgen encuentran que en raras ocasiones tienen la necesidad de utilizar el depurador o debugger A pesar de los elevados requisitos iniciales de aplicar esta metodologia el desarrollo guiado por pruebas TDD puede proporcionar un gran valor anadido en la creacion de software produciendo aplicaciones de mas calidad y en menos tiempo Ofrece mas que una simple validacion del cumplimiento de los requisitos tambien puede guiar el diseno de un programa Centrandose en primer lugar en los casos de prueba uno debe imaginarse como los clientes utilizaran la funcionalidad en este caso los casos de prueba Por lo tanto al programador solo le importa la interfaz y no la implementacion Esta ventaja es similar al diseno por convenio pero se parece a el por los casos de prueba mas que por las aserciones matematicas El poder del TDD radica en la capacidad de avanzar en pequenos pasos cuando se necesita Permite que un programador se centre en la tarea actual y la primera meta es a menudo hacer que la prueba pase Inicialmente no se consideran los casos excepcionales y el manejo de errores Estos se implementan despues de que se haya alcanzado la funcionalidad principal Otra ventaja es que cuando es utilizada correctamente se asegura de que todo el codigo escrito esta cubierto por una prueba Esto puede dar al programador un mayor nivel de confianza en el codigo Limitaciones EditarEl desarrollo guiado por pruebas requiere que las pruebas puedan automatizarse Esto resulta complejo en los siguientes dominios Interfaces Grafica de usuario GUIs aunque hay soluciones parciales propuestas Objetos distribuidos aunque los objetos simulados MockObjects pueden ayudar Bases de datos Hacer pruebas de codigo que trabaja con base de datos es complejo porque requiere poner en la base de datos unos datos conocidos antes de hacer las pruebas y verificar que el contenido de la base de datos es el esperado despues de la prueba Todo esto hace que la prueba sea costosa de codificar aparte de tener disponible una base de datos que se pueda modificar libremente Ademas la prueba puede tardar demasiado en ejecutarse lo que viola uno de los principios de TDD Vease tambien EditarPrueba de software Casos de prueba Prueba unitaria Filosofias del desarrollo de softwareEnlaces externos EditarIntroduccion a TDD TDD Test Driven Development en JavaScript Estado del arte y tendencias en Test Driven Development MockObjects y TDD en Net Framework Datos Q950250 Obtenido de https es wikipedia org w index php title Desarrollo guiado por pruebas amp oldid 126589567, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos