Upgrade to Pro — share decks privately, control downloads, hide ads and more …

TEST DRIVEN DEVELOPMENT EN LA PLATAFORMA SALESFORCE – Aldo Fernández

TEST DRIVEN DEVELOPMENT EN LA PLATAFORMA SALESFORCE – Aldo Fernández

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.

Aldo Fernandez

April 27, 2016
Tweet

More Decks by Aldo Fernandez

Other Decks in Technology

Transcript

  1. Agenda ▪ Plataforma Salesforce ▪ Que es TDD? ▪ Proceso

    TDD ▪ Un ejemplo de TDD en Apex ▪ Beneficios ▪ Desafios
  2. 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
  3. 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.
  4. 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)
  5. 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”
  6. 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
  7. 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.
  8. 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
  9. Un ejemplo de TDD en Apex (III) Repetir el proceso

    hasta completar la especificación
  10. 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
  11. 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
  12. 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
  13. 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