b'\n_START_ARTICLE_\nDesarrollo guiado por pruebas\n_START_PARAGRAPH_\nDesarrollo guiado por pruebas de software, o Test-driven development (TDD) es una pr\xc3\xa1ctica de ingenier\xc3\xada de software que involucra otras dos pr\xc3\xa1cticas: Escribir las pruebas primero (Test First Development) y Refactorizaci\xc3\xb3n (Refactoring). Para escribir las pruebas generalmente se utilizan las pruebas unitarias (unit test en ingl\xc3\xa9s). En primer lugar, se escribe una prueba y se verifica que las pruebas fallan. A continuaci\xc3\xb3n, se implementa el c\xc3\xb3digo que hace que la prueba pase satisfactoriamente y seguidamente se refactoriza el c\xc3\xb3digo escrito. El prop\xc3\xb3sito del desarrollo guiado por pruebas es lograr un c\xc3\xb3digo limpio que funcione._NEWLINE_La idea es que los requisitos sean traducidos a pruebas, de este modo, cuando las pruebas pasen se garantizar\xc3\xa1 que el software cumple con los requisitos que se han establecido.\n_START_SECTION_\nRequisitos\n_START_PARAGRAPH_\nPara 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\xc3\xa1ticamente. Cada prueba ser\xc3\xa1 suficientemente peque\xc3\xb1a como para que permita determinar un\xc3\xadvocamente si el c\xc3\xb3digo probado pasa o no la verificaci\xc3\xb3n que \xc3\xa9sta le impone. El dise\xc3\xb1o se ve favorecido ya que se evita el indeseado "sobre dise\xc3\xb1o" de las aplicaciones y se logran interfaces m\xc3\xa1s claras y un c\xc3\xb3digo m\xc3\xa1s cohesivo.\n_START_SECTION_\nCaracter\xc3\xadsticas\n_START_PARAGRAPH_\nUna caracter\xc3\xadstica de esta forma de programaci\xc3\xb3n es el evitar escribir c\xc3\xb3digo innecesario ("You Ain\'t Gonna Need It" (YAGNI)). Se intenta escribir el m\xc3\xadnimo c\xc3\xb3digo posible, y si el c\xc3\xb3digo pasa una prueba aunque sepamos que es incorrecto nos da una idea de que tenemos que modificar nuestra lista de requisitos agregando uno nuevo._NEWLINE_La generaci\xc3\xb3n de pruebas para cada funcionalidad hace que el programador conf\xc3\xade en el c\xc3\xb3digo escrito. Esto permite hacer modificaciones profundas del c\xc3\xb3digo (posiblemente en una etapa de mantenimiento del programa) pues sabemos que si luego logramos hacer pasar todas las pruebas tendremos un c\xc3\xb3digo que funcione correctamente._NEWLINE_Otra caracter\xc3\xadstica 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.\n_START_SECTION_\nVentajas\n_START_PARAGRAPH_\nLos 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._NEWLINE_A pesar de los elevados requisitos iniciales de aplicar esta metodolog\xc3\xada, el desarrollo guiado por pruebas (TDD) puede proporcionar un gran valor a\xc3\xb1adido en la creaci\xc3\xb3n de software, produciendo aplicaciones de m\xc3\xa1s calidad y en menos tiempo. Ofrece m\xc3\xa1s que una simple validaci\xc3\xb3n del cumplimiento de los requisitos, tambi\xc3\xa9n puede guiar el dise\xc3\xb1o de un programa. Centr\xc3\xa1ndose en primer lugar en los casos de prueba uno debe imaginarse c\xc3\xb3mo los clientes utilizar\xc3\xa1n la funcionalidad (en este caso, los casos de prueba). Por lo tanto, al programador solo le importa la interfaz y no la implementaci\xc3\xb3n. Esta ventaja es similar al dise\xc3\xb1o por convenio pero se parece a \xc3\xa9l por los casos de prueba m\xc3\xa1s que por las aserciones matem\xc3\xa1ticas._NEWLINE_El poder del TDD radica en la capacidad de avanzar en peque\xc3\xb1os 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\xc3\xa9s de que se haya alcanzado la funcionalidad principal. Otra ventaja es que, cuando es utilizada correctamente, se asegura de que todo el c\xc3\xb3digo escrito est\xc3\xa1 cubierto por una prueba. Esto puede dar al programador un mayor nivel de confianza en el c\xc3\xb3digo.'