Navegación Bilingüe: English · Español (este documento) Fase Requerida: Fase 4 — Validación (QA) Audiencia Principal: Arquitectos, QA/SDET, Desarrolladores
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.
| 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. |
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
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
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
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 deTestExecution. 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 delTestCycle.
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.