Skip to content

Latest commit

 

History

History
167 lines (140 loc) · 5.93 KB

File metadata and controls

167 lines (140 loc) · 5.93 KB

Modelo DDD - Módulo QA

Navegación Bilingüe: English · Español (este documento) Fase Requerida: Fase 4 — Validación (QA) Audiencia Principal: Arquitectos, QA/SDET, Desarrolladores

1. Lenguaje Ubicuo (Ubiquitous Language)

Términos estrictos compartidos entre el negocio y el área técnica dentro de este contexto:

  • Test Cycle (Ciclo de Pruebas): Contenedor temporal que agrupa múltiples ejecuciones de pruebas, generalmente asociado a un Ciclo de Implementación o Release.
  • Test Execution (Ejecución de Prueba): La corrida atómica y rastreable de un caso de prueba (manual o automatizada) contra una funcionalidad específica.
  • Defect (Defecto/Bug): Una falla identificada durante una ejecución. Su ciclo de vida es independiente para permitir sincronización con sistemas externos.
  • Test Summary Report: El artefacto formal y obligatorio de Evolith que consolida las métricas del ciclo de QA para autorizar el paso a Release.

2. Mapas Conceptuales y Agregados (Mermaid)

2.0. Leyendas y Glosario Visual

Símbolo/Estereotipo Significado
<<Aggregate Root>> Entidad raíz transaccional. Gobierna la persistencia de sus entidades internas.
<<Value Object>> Objeto inmutable sin identidad propia. Representa una propiedad estructural.
*-- (Línea sólida) Composición. El elemento hijo no puede existir sin el padre.
..> (Línea punteada) Dependencia. El elemento depende de interactúa con el otro componente para delegar acciones.

2.1. Vista 1: Core de Negocio (Agregados y Entidades)

classDiagram
    class TestCycle {
        <<Aggregate Root>>
        +UUID id
        +UUID implementationCycleId?
        +String tenantId
        +String targetVersion
        +Date startDate
        +Date endDate
        +Float passRatePercentage
        +CycleStatus status
        +UUID qaLeadId_umsUserId
        +List~UUID~ executionIds
        +List~ExternalReference~ externalRefs
        +startTesting(UUID umsUserId)
        +generateSummaryReport(UUID umsUserId)
        +closeCycle(UUID umsUserId)
    }
    note for TestCycle "En modo generate, implementationCycleId enlaza a un ImplementationCycle. En modo initiative-only, permanece nulo."

    class TestExecution {
        <<Aggregate Root>>
        +UUID id
        +UUID cycleId
        +UUID technicalStoryId?
        +UUID checkpointId?
        +String testCaseCode
        +ExecutionStatus status
        +UUID executorId_umsUserId
        +String executionLogs
        +List~ExternalReference~ externalRefs
        +logResult(ExecutionStatus status, UUID umsUserId)
        +blockExecution(String reason, UUID umsUserId)
    }
    note for TestExecution "En modo generate, technicalStoryId enlaza a TechnicalStory. En modo initiative-only, se enlaza a un checkpoint mediante checkpointId."

    class Defect {
        <<Aggregate Root>>
        +UUID id
        +UUID testExecutionId
        +UUID linkedStoryId
        +UUID linkedCheckpointId?
        +Severity severity
        +Priority priority
        +DefectStatus status
        +UUID reporterId_umsUserId
        +UUID assigneeId_umsUserId
        +List~String~ labels
        +List~ExternalReference~ externalRefs
        +updateStatus(DefectStatus status, UUID umsUserId)
        +assignTo(UUID umsUserId)
        +syncWithExternal(ExternalReference)
    }
    note for Defect "En modo initiative-only, los defectos se enlazan a checkpoints mediante linkedCheckpointId."

    class ExternalReference {
        <<Value Object>>
        +ExternalSystem system
        +String externalId
        +String url
        +ReferenceType type
        +String label
        +Date linkedAt
        +Map metadata
    }

    TestCycle "1" --> "0..*" TestExecution : orquesta
    TestExecution "1" --> "0..*" Defect : detecta
    TestCycle "1" *-- "0..*" ExternalReference : mapeado a
    TestExecution "1" *-- "0..*" ExternalReference : mapeado a
    Defect "1" *-- "0..*" ExternalReference : mapeado a
Loading

2.2. Vista 2: Componentes de Workflow y Auditoría

classDiagram
    class AuditControl {
        <<Value Object>>
        +String createdBy
        +Date createdAt
    }

    class QualityGate {
        <<Value Object>>
        +String approvedById_umsUserId
        +GateDecision decision
        +Date decidedAt
    }

    class TestCycle {
        <<Aggregate Root>>
    }

    class Defect {
        <<Aggregate Root>>
    }

    TestCycle "1" *-- "1" AuditControl : auditada por
    TestCycle "1" *-- "0..1" QualityGate : gobernada por
    Defect "1" *-- "1" AuditControl : auditada por
Loading

2.3. Vista 3: Infraestructura Transversal (Shells)

classDiagram
    class IntegrationFabric {
        <<Shared Kernel Shell>>
        +syncDefects()
        +ingestTestResults()
    }

    class UMS_SDK {
        <<Cross-Cutting>>
        +RequiresDomainAccess()
    }

    class Defect {
        <<Aggregate Root>>
    }

    class TestExecution {
        <<Aggregate Root>>
    }

    Defect ..> IntegrationFabric : exporta hacia (ej. Jira/Bugzilla)
    TestExecution ..> IntegrationFabric : hidratada por (ej. Cypress/JUnit)
    TestCycle ..> UMS_SDK : asegurada vía
Loading

3. Diseño Táctico

3.1. Aggregate Roots Independientes (Anti-Bloqueos)

Para permitir una sincronización masiva y asíncrona desde plataformas de automatización externa, el módulo divide agresivamente el dominio:

  • Defect: Es un Agregado independiente de TestExecution. Esto asegura que los webhooks de Jira o GitHub Issues puedan actualizar el estado del bug sin causar bloqueos de concurrencia optimista sobre las métricas del TestCycle.

3.2. Mapeo Seguro UMS y Mapeo ALM

Todos los actores (QA Leads, Reporters, Assignees) exigen un identificador umsUserId para garantizar cumplimiento RBAC y autorizar acciones mutadoras (ej. closeCycle(UUID umsUserId)). Adicionalmente, el ExternalReference permite rastrear URLs directas de logs o tickets externos.