Expositor: Aldo Fernández
Resumen:
El Testing es una de las claves de éxito para el desarrollo de software a largo plazo convirtiéndose en un componente fundamental en todo el proceso. Las mejores prácticas de Salesforce recomiendan utilizar un proceso de desarrollo basado en testing (Test Driven Development) lo cual significa que el desarrollo de los componentes correspondientes al testing se realizan al mismo tiempo que el código de implementación. Que tan cierto es esto en nuestros proyectos? Cuales son los beneficios a corto y largo plazo? Cómo motivar a los desarrolladores a pensar primero en el testing y luego en la solución? Hablemos sobre mitos y verdades del Test Driven Development.
4. Que es Salesforce?
▪ Originalmente CRM (1999) a demanda
▪ Evolución natural a una plataforma multi-tenant (Force.com Platform)
▪ Plataforma declarativa
▪ Modelo de datos y Objetos
▪ UI
▪ Procesos / Workflows
▪ Reportes y análisis de datos
▪ Seguridad, Identidad, segmentación
▪ Aplicaciones móviles.
▪ Plataforma programática
▪ APIs (REST, SOAP, Streaming, Metadata, etc)
▪ Apex (Lenguaje OO, similar a Java / C#)
▪ Lightning Components (Javascript client-side)
Más información: salesforce.com/trailhead - UYSDUG.com
5. Que es Apex?
▪ Lenguaje de programación OO
▪ Basado en Java / C#
▪ Fuertemente tipado
▪ Ejecutado en transacciones sobre la plataforma
multi-tenant (compilado, ejecutado y controlado)
▪ Implementa lógica de negocios en eventos, clicks,
operaciones en la base de datos, web services, etc.
▪ Framework de testing incorporado
▪ Código de producción debe tener como mínimo 75%
de code coverage.
6. Que es TDD? (I)
▪ Se refiere a Test Driven Development (TDD) como un estilo de
programación donde tres actividades están marcadamente entrelazadas:
▪ Codigo
▪ Testing (en la forma de unit test)
▪ Diseño (en la forma de refactoring)
7. Que es TDD? (II)
“TDD es una forma de desarrollar
software donde los tests se escriben
antes que el código funcional”
“TDD es una técnica que utiliza tests
unitarios automatizados para guiar el
diseño del software forzando a
desacoplar sus dependencias”
8. El proceso TDD
1. Escribir un test
2. Ejecutar todos los tests (el nuevo
debería fallar)
3. Escribir algo de código
4. Ejecutar todos los tests
5. Si el test es exitoso, hacer refactor
6. Repetir paso 1
9. Test Unitario vs Test de Integración
▪ Test Unitario
▪ Verifica que una parte relativamente
pequeña del código haga lo que tiene
que hacer
▪ Alcance acotado
▪ Fácil de escribir y ejecutar
▪ Test útil para el desarrollador
▪ No hay dependencias de componentes
externos
▪ Los componentes externos son
simulados (mocked or stubbed out)
▪ Evalúa la consistencia interna
▪ Test de Integración
▪ Verifica que diferentes piezas del sistema
funcionen conjuntamente correctas.
▪ Cubre todo un requerimiento o feature
del negocio
▪ Requiere mas recursos para completar
su evaluación
▪ Test útil para el negocio
▪ Las dependencies son requeridas debido
a la aproximación holistica de la prueba.
▪ Evalúa la consistencia entre
componentes.
10. Un ejemplo de TDD en Apex (I)
▪ Algebra de Aldo (no existe! es un ejemplo trivial)
▪ Dados 2 números enteros a, b
▪ el resultado de la operación sum (a,b) es a + b
▪ Si uno (o ambos) números son null entonces tratarlos como cero
▪ ejemplos
▪ AA.sum(2, 3) = 5
▪ AA.sum(2, null) = 2
▪ AA.sum(null, null) = 0
18. Un ejemplo de TDD en Apex (VII)
inyectando la dependencia
o/
19. Beneficios
▪ Obliga a tener un buen diseño/arquitectura
▪ Reduce el tiempo de buscar el origen de un bug
▪ Crea una especificación detallada de cada feature
▪ Se escribe código mas corto y menos complejo
▪ Write shorter and less complex code
▪ Feedback inmediato de donde se rompió el código
▪ Aumenta el código de cobertura
▪ Obliga a mantener las cosas simples (KISS!)
▪ Tests se ejecutan mas rápido
20. Desafios
▪ Curva de aprendizaje
▪ Costo de TDD vs Budget de Proyecto
▪ Explicar el ROI con TDD a jerarquias.
▪ Conceptos técnicos avanzados
▪ Dependency Injection
▪ Mocking
▪ Problemas culturales en los equipos
▪ Frecuentes cambios en los requerimientos de negocio
21. Resources + Kudos
▪ Test Driven Development Method in Software Development Process. Denis Duka,
Lovre Hribar 2010
▪ Test Driven Development in Apex by Chris Aldridge (@caldrig3)
▪ Unit Testing, Apex Enterprise Patterns and ApexMock, Andrew Fawcett
(@andyinthecloud)
▪ Writing true unit tests using dependency injection mocking apex, Alex Tennant
(@adtennant)
▪ ApexMocks: How Does It Work? Jesse Altman (@jessealtman)
▪ Inversion of Control Containers and the Dependency Injection Pattern. Martin Fowler,
2004
▪ Demo Code repo: https://github.com/aldoforce/uysdug_tdd_demo
22. Gracias!!!
Test Driven Development en la
Plataforma Salesorce
Mitos y verdades
TestingUy 3
Abril 27, 2016
Montevideo, Uruguay
Aldo Fernandez
Technical Architect
@aldoforce
#uysdug
#tdd
#dependencyInjection
#apex
#testinguy