TDD

Test Driven Development

Un poco de mi

Sagrario Meneses
Senior Software Engineer

 

           @sagmmd

Test/Prueba

Acción de probar a alguien o algo para conocer sus cualidades, verificar su eficacia, saber cómo funciona o reacciona, o qué resultado produce.

Durante la construcción de un software, la etapa de mantenimiento se lleva aproximadamente el 65%

Title Text

INNOCENT

El TDD es un proceso de desarrollo de software que propone la repetición de pequeños fragmentos de código en un ciclo, estableciendo los requerimientos específicos por casos de uso, de esa forma el software únicamente es mejorado para pasar las pruebas creadas para cada caso de uso.

¿Cuándo fue la primera vez que se practicó TDD?

El TDD propone 2 prácticas:

1. Escribir las pruebas. 

2. Refactorizar.

1. Escribir las pruebas

2. Construir lo necesario para pasar esas pruebas.

3. Mejorar el código.

RED

GREEN

REFACTOR

Ventajas en el negocio por practicar TDD

  • Permite la verificación de requerimientos.

  • Detección ágil de errores.

  • Un menor costo de mantenimiento.

Ventajas en el desarrollo por practicar TDD

  • Diseño de arquitectura - Primero 

  • Evitar la sobre - ingeniería.

  • Confianza.

Ejemplo

import unittest
from mycode import *

class MyFirstTests(unittest.TestCase):

    def test_hello(self):
    self.assertEqual(hello_world(), 'hello world')
def hello_world():
    pass

Ejemplo

F
====================================================================
FAIL: test_hello (__main__.MyFirstTests)
--------------------------------------------------------------------
Traceback (most recent call last):
File "mytests.py", line 7, in test_hello
self.assertEqual(hello_world(), 'hello world')
AssertionError: None != 'hello world'
--------------------------------------------------------------------
Ran 1 test in 0.000s
FAILED (failures=1)

Ejemplo

.
--------------------------------------------------------------------
Ran 1 test in 0.000s
OK
def hello_world():
    return 'hello world'

Sugerencias y buenas prácticas

Probar el código cómo si estuviera ya corriendo en producción.

  • Configuraciones independientes.

  • Fixtures de base de datos.

  • Enfocarse en los valores y resultados necesarios.

  • Revisar las pruebas y practicar el testing con el equipo.

  • NO crear dependencias entre las pruebas.

  • Integración continua -> Automatización de pruebas.

La refactorización es como resolver el cubo de Rubik. Se necesitan muchos pasos pequeños para lograr un objetivo mayor."

No basta con que el código funcione, los programadores que se conforman con esto no son profesionales."

Bibliografía recomendada

"Clean Code" by Robert Cecil Martin

"Working Effectively with Legacy Code" by Michael Feathers

"Test-Driven Development By Example" by Kent Beck

"Refactoring" by Kent Beck and Martin Fowler

¡ G R A C I A S !

 @sagmmd

TDD

By smmd