Test Driven Development (TDD) en iOS

Aplicando el TDD a Objective C & iOS en la práctica

 

Desde que el TDD (Test-Driven Development) fue creado por Kent Beck, se ha extendido como la pólvora y goza de especial popularidad en estos momentos. Sin embargo, a menudo es mal aplicado y los equipos que lo implementan se ven aquejados de problemas comunes, que terminan haciendo que se abandone:

- Se testa lo que no se debe - Se diseñan mal los tests, de tal forma que un fallo tiene varias posibles causas - Los tests tardan mucho en ejecutarse, haciendo que muchos desarrolladores se los salten - Se intenta testarlo todo, en vez de aquello que hace falta - No se sabe aplicar a las peculiaridades de iOS, Cocoa y Objective C

La totalidad de estos errores se debe a que muchos equipos de desarrollo aprenden el "cómo" del TDD pero no el "por qué".

El Test-Driven Development, más que una serie de herramientas de software (OCUnit, GHUnit, Kiwi, OCMojito, etc...) es un conjunto de hábitos de desarrollo, que a menudo van en contra de los "instintos" innatos de todo programador.

El no cambiar dichos hábitos es la causa de los problemas ya citados y del abandono del mismo, o peor todavía, de su transformación en un lastre para la empresa.

"Test-Driven Development" (desarollo dictado por tests) consiste en aplicar iteraciones cortas y rápidas del ciclo "Red Green Refactor". Aplica el algoritmo clásico de "divide y vencerás" al precepto de calidad en la producción de software, basándose en 3 pasos:

  1. Red: Crea un test que representa una especificación, a sabiendas que va a fallar y tal vez ni siquiera compilar.
  2. Green: Haz cualquier cosa, para que el test pase.
  3. Refactor: Elimina redundancias del código y el test y generaliza el mismo.

De esta forma el desarrollo realmente es dictado por los tests que representan las especificaciones del programa,  logrando así crear software 100% correcto y en tiempo récord.

Solo existe una forma de modificar hábitos: practicando los nuevos. Por eso este curso, que ha sido impartido con éxito en varias empresas de Europa y LATAM, es fundamentalmente práctico y se basa en el desarrollo de una App real para iPhone.

El Mantra de TDD: Red, Green, Refactor.

Filosofía de Enseñanza

Al igual que todos los demás cursos de Agbo Training, el de Test-Driven Development (TDD) para iOS es eminentemente práctico. Los conceptos de TDD se van viendo a medida que van haciendo falta en el desarrollo de una App  real que los alumnos irán creando.

Veremos los errores más comunes, como testar lo que no debe ser testado, tests que tardan demasiado en ejecutarse o tests que no cubren un porcentaje suficiente del código ("test coverage").

Ante todo, al reproducir el desarrollo real de una App, veremos cuales son los hábitos que debemos modificar para lograr que nuestro desarrollo sea dictado por los tests ("Test-Driven Development"), logrando así una mejora notable en la productividad y un código claro que funciona de acuerdo a sus especificaciones ("Clear Code That Works").

Los cursos de @agbotraining totalmente obligatorios, sobre todo si tienes la suerte y el placer de cruzarte con @frr149 con ganas de repetir -- @daferpi en Twitter

Temario

  • Introducción al TDD
  1. TDD vs BDD
  2. El Ciclo de TDD: Red Green Refactor
  3. Ventajas de TDD: "Clean Code that Works", Productividad personal
  4. Frameworks para TDD en Objective C 
  5. Funcionamiento de una Framework de TDD
  • TDD en la práctica
  1. Características de un buen test
  2. Qué debemos de testar
  3. Qué no debemos testar y por qué
  4. Excepciones a la regla
  5. Qué hacer para que nuestro código sea testable
  6. "Tell, don't ask"
  7. Ejemplo de TDD con un IBAction
  8. Ventajas inmediatas de TDD para el desarrollo de Apps
  • Desarrollo con TDD
  1. Cambio de mentalidad: nuevas prioridades
  2. Nuevo ciclo de desarrollo: iteraciones cortas dictadas por los tests
  • La App que vamos a crear
  • El Modelo
  1. ¿Qué tests necesitaremos?
  2. ¿Por cual empezamos?
  3. Tests de funcionalidad
  4. Tests de igualdad
  5. Tests que dependen unos de otros.
  6. Eliminar duplicidades en nuestro código.
  7. No pienses, comprueba.
  8. Evitar el "over engineering"
  9. Repaso del código que tenemos:  Funciona al 100%, ¿Puedo pasar a otra cosa?
  • View Controllers
  1. UITableViewControllers
  2. Test de Delegados y Data Sources
  3. Mock Objects: una pequeña mentira no mata a nadie
  4. ¿Debo de testar el UITableViewController o la UITableView?
  • Notifications
  1. Test de clases que envían y reciben notificaciones
  2. Test de singletons
  3. Testar avisos de memoria y cambios de estado de la App
  4. Mock Objects al rescate
  • Interfaz pública vs privada
  1. ¿Testamos la interfaz pública o su implementación?
  2. Excepciones
  • Core Data
  1. Aplicar TDD a NSManagedObjects
  2. Persistent Stores & TDD
  • Código de Red
  1. Test de NSURLConnection y similares
  2. Mi App tiene un web service, ¿lo testo?
  3. Qué debemos de testar y qué no.
  4. Excepciones y cómo implementarlas
  • Cosas que no se pueden testar de forma sistemática
  1. Concurrencia
  2. Seguridad
  3. Datos erróneos
  4. ¿Qué hacer en estos casos?
  • Conclusiones de TDD para Apps
  1. TDD para proyectos preexistentes
  2. TDD en el mantenimiento de una App
  3. El camino a seguir: integrar TDD con control de versiones
  4. Herramientas recomendadas y buenas prácticas
  5. Bibliografía
 

Chef de iOS

Este curso es 100% diseñado por nuestro Chef de Formación Fernando Rodríguez  (@frr149Linkedin), quien lo imparte en diferentes ciudades y países.

Fernando es un  globetrotter experto en  la enseñanza de máxima calidad en programación y desarrollo para  dispositivos iOS, Cocoa Touch, Objective C, o eso es lo que dicen sus alumnos. Colabora como Instructor de iOS con algunos de los más prestigiosos centros de enseñanza de programación del mundo. Profesor Asociado de algunas universidades privadas, autor invitado de revistas como iPhoneWorld, Applesfera.com, cuenta además con su propio blog tecnológico CocoaMental.com. Ponente habitual en conferencias dentro y fuera de España iOSDevUK, NSSpainCodeMotion,  BCNDevCon, etc) y frecuentemente uno de los afortunados que logran conseguir tickets para los WWDCs de Apple en San Francisco. Un amante incondicional de la tecnología, de los dispositivos móviles y de la buena comida.

Duración

12 horas.

Requisitos

Es indispensable tener experiencia previa en el desarrollo con Objective C y Cocoa. No es necesario ningún tipo de conocimiento previo de TDD (Test-Driven Development). Si tienes dudas, contáctanos.

Más información Alta Newsletter