Programa de Actualización Programa de Actualización ProfesionalProfesionalIngeniería de Sistemas - EPEIngeniería de Sistemas - EPE
Desarrollo para Entorno Desarrollo para Entorno WebWebModelo de dominio
UPC - EPE - Ingeniería de Sistemas - Programa de Actualización Profesional 10/04/232
ÍndiceÍndice
Modelo de dominio
Domain Driven Design
Test Driven Development
JUnit
MODELO DE DOMINIOMODELO DE DOMINIO
UPC - EPE - Ingeniería de Sistemas - Programa de Actualización Profesional 10/04/233
¿Qué es un dominio?¿Qué es un dominio?
Un dominio es una esfera de conocimiento, influencia o actividad.
El dominio del software es el área temática a la que el usuario aplica un programa.
¿Por qué es importante comprender el dominio?
La complejidad de los proyectos de software más críticos está en la comprensión del dominio de sí mismo.
UPC - EPE - Ingeniería de Sistemas - Programa de Actualización Profesional 10/04/234
¿Qué es un modelo?¿Qué es un modelo?
Es un sistema de abstracciones que describe algunos aspectos de un dominio y se puede utilizar para resolver problemas relacionados con ese dominio.
Un modelo es una simplificación.
Un modelo es una interpretación de la realidad.
Los modelos involucran el mundo físico y también entidades intangibles.
UPC - EPE - Ingeniería de Sistemas - Programa de Actualización Profesional 10/04/235
Modelo de dominioModelo de dominio
El Modelo de Dominio es la representación de los conceptos de importancia en el área de la aplicación del software, así como de las relaciones entre estos.
El Modelo de Dominio no contiene conceptos propios de un sistema de software sino de la propia realidad física.
UPC - EPE - Ingeniería de Sistemas - Programa de Actualización Profesional 10/04/236
Modelo de dominioModelo de dominio
UPC - EPE - Ingeniería de Sistemas - Programa de Actualización Profesional 10/04/237
Modelo de dominioModelo de dominio
Los modelos de dominio pueden utilizarse para capturar y expresar el entendimiento ganado en un área bajo análisis.
Similares a los mapas mentales utilizados en el aprendizaje, el modelo de dominio es utilizado por el equipo de desarrollo como un medio para comprender el sector industrial o de negocios al cual el sistema va a servir.
UPC - EPE - Ingeniería de Sistemas - Programa de Actualización Profesional 10/04/238
Construcción de un modelo Construcción de un modelo de dominiode dominio
Se construyen como parte del proceso de identificación de requisitos ya sea en reuniones con el cliente o como parte de un proceso de aprendizaje en el área de negocio.
Sirve para capturar el conocimiento de un área de negocios, ha de ser desarrollado con fuerte participación del cliente y de expertos en el área.
UPC - EPE - Ingeniería de Sistemas - Programa de Actualización Profesional 10/04/239
Ejemplo de un modelo de Ejemplo de un modelo de dominiodominio
UPC - EPE - Ingeniería de Sistemas - Programa de Actualización Profesional 10/04/2310
Ejemplo de un modelo de Ejemplo de un modelo de dominiodominio
UPC - EPE - Ingeniería de Sistemas - Programa de Actualización Profesional 10/04/2311
DOMAIN DRIVEN DESIGNDOMAIN DRIVEN DESIGN
UPC - EPE - Ingeniería de Sistemas - Programa de Actualización Profesional 10/04/2312
Domain Driven DesignDomain Driven Design
Domain Driven Design (DDD) es un método de diseño creado para construir aplicaciones basadas en un modelo de dominio.
DDD provee:Mejores prácticas
Patrones
Recomendaciones
, para la construcción de modelos de dominio complejos.
UPC - EPE - Ingeniería de Sistemas - Programa de Actualización Profesional 10/04/2313
Domain Driven DesignDomain Driven Design
La comunidad de desarrollo de software reconoce ampliamente que el modelo de dominio es fundamental para el diseño de software.
A través de modelos de dominio, desarrolladores de software son capaces de expresar una gran funcionalidad y traducirlo en una aplicación de software que sirva realmente a las necesidades de sus usuarios.
UPC - EPE - Ingeniería de Sistemas - Programa de Actualización Profesional 10/04/2314
Domain Driven DesignDomain Driven Design
Pero a pesar de su evidente importancia, hay pocos recursos prácticos que explican cómo incorporar el modelado de dominio eficaz en el proceso de desarrollo de software.
DDD cubre esa necesidad.
UPC - EPE - Ingeniería de Sistemas - Programa de Actualización Profesional 10/04/2315
DDD - Ubiquitous languageDDD - Ubiquitous language
UPC - EPE - Ingeniería de Sistemas - Programa de Actualización Profesional 10/04/2316
DDD – Arquitectura en capasDDD – Arquitectura en capas
UPC - EPE - Ingeniería de Sistemas - Programa de Actualización Profesional 10/04/2317
DDD – Arquitectura en capasDDD – Arquitectura en capas
Domain LayerEn esta capa reside el corazón del software: reglas y lógica de negocio.
Se mantiene el estado de las entidades de negocio y su conducta.
La persistencia se define en la capa de infraestructura.
Patrones en esta capa: Entities, Value Objects, Services, Repositories y Factories.
UPC - EPE - Ingeniería de Sistemas - Programa de Actualización Profesional 10/04/2318
TEST DRIVEN TEST DRIVEN DEVELOPMENTDEVELOPMENT
UPC - EPE - Ingeniería de Sistemas - Programa de Actualización Profesional 10/04/2319
Test Driven DevelopmentTest Driven Development
TDD o Desarrollo Guiado por Pruebas es una metodología de desarrollo consistente en escribir las pruebas antes que el código.
TDD es utilizado en metodologías ágiles.
El objetivo es código limpio y simple que funcione bien.
No reemplaza a las pruebas de rendimiento ni usabilidad.
Las pruebas deben ser automáticas, es decir, las pruebas son código.
Escribir las pruebas cuesta más tiempo que probar manualmente una vez. Pero trae beneficios.
UPC - EPE - Ingeniería de Sistemas - Programa de Actualización Profesional 10/04/2320
TDD: Pasos para cada TDD: Pasos para cada iteracióniteración1. Escribir una prueba
2. Verificar que la prueba falla (debido a que todavía no hay código)
3. Escribir el código para que la prueba funcione
4. Verificar que la prueba funciona
5. Simplificar el código mediante “refactoring”
6. Verificar que la prueba funciona
7. Regresar a paso 1UPC - EPE - Ingeniería de Sistemas - Programa de Actualización Profesional 10/04/2321
Pruebas unitariasPruebas unitarias
Busca probar cada unidad de código.
Una unidad es la mínima parte distinguible de un sistema. En POO es el método.
Las pruebas unitarias ayudan a verificar que el código correspondiente a un módulo concreto de un software funciona de acuerdo a lo esperado.
UPC - EPE - Ingeniería de Sistemas - Programa de Actualización Profesional 10/04/2322
Pruebas unitarias. Pruebas unitarias. CaracterísticasCaracterísticas
Concisas (simples y escrita por programadores)
Fácil verificación (funciona o no)
Repetibles (automáticas y sin la interpretación de un ser humano)
Robusta (produce el mismo resultado)
Suficiente y necesaria (verificar todos los requerimientos)
Clara (fácil de entender)
Eficiente (en el tiempo)
Específica (funcionalidad concreta y reducida)
Independiente (de las demás pruebas)
Mantenible (fácil de modificar y extender)
UPC - EPE - Ingeniería de Sistemas - Programa de Actualización Profesional 10/04/2323
JUNITJUNIT
UPC - EPE - Ingeniería de Sistemas - Programa de Actualización Profesional 10/04/2324
JUnitJUnit
Framework libre que nos ayuda a generar las pruebas unitarias.
Permite estandarizar las pruebas y correrlas en forma conjunta.
Ayuda a ver de manera amigable, dónde y por qué falla una prueba.
JUnit + IDE = Facilidad de implementación.
Las pruebas se agrupan en TestCases, que pueden integrar TestSuites.
UPC - EPE - Ingeniería de Sistemas - Programa de Actualización Profesional 10/04/2325
JUnitJUnit
Herramienta principal: ASSERT
assertTrue(expresion)
assertFalse(expresion)
assertEquals(esperado, real)
assertNotSame(objeto, objeto)
assertNull(objeto)
assertNotNull(objeto)
Otras herramientas
setUp(): Realizar algo antes de cada test
tearDown(): Realizar algo después de cada test
fail(): Si se llega a esa parte del código, está mal
UPC - EPE - Ingeniería de Sistemas - Programa de Actualización Profesional 10/04/2326
ConclusionesConclusiones
El modelo de dominio ocupa un rol protagónico en el desarrollo moderno de software y constituye un artefacto muy valioso para desarrollar el software.
Test Driven Development (TDD) no es un método de testing, sino de desarrollo.
TDD sugiere escribir las pruebas antes del código y refactorizar incrementalmente.
JUnit es un framework de pruebas unitarias para el lenguaje Java.
UPC - EPE - Ingeniería de Sistemas - Programa de Actualización Profesional 10/04/2327
BibliografíaBibliografía
Eric Evans. Strategic Design – Making models work in large projects.
Eric Evans. Domain-Driven Design: Tackling complexity in the heart of Software.
http://synergix.wordpress.com/2008/07/10/modelo-de-dominio/
Hunt y Thomas. Pragmatic Unit Testing
http://junit.org
UPC - EPE - Ingeniería de Sistemas - Programa de Actualización Profesional 10/04/2328
Top Related