¿Qué es el Risk-Based Testing?

El Risk-Based Testing (RBT) o Testing Basado en Riesgos es un enfoque estratégico para el testing de software que prioriza las actividades de prueba según la probabilidad e impacto de fallos potenciales. En lugar de intentar probar todo por igual, el RBT enfoca los recursos de testing en las áreas que representan el mayor riesgo para el negocio, los usuarios o la funcionalidad del sistema.

El principio fundamental es simple: no todos los defectos son creados iguales. Un bug crítico en el procesamiento de pagos que afecta al 100% de usuarios tiene consecuencias mucho mayores que un problema cosmético en un panel de administración usado por tres personas. El testing basado en riesgos ayuda a los equipos a tomar decisiones inteligentes sobre dónde invertir el tiempo y recursos limitados de testing.

Por Qué Importa el Risk-Based Testing

Enfoque Tradicional vs Basado en Riesgos

Testing TradicionalTesting Basado en Riesgos
Esfuerzo igual en todas las featuresEsfuerzo proporcional al nivel de riesgo
Cobertura comprehensiva como objetivoCobertura de riesgos como objetivo
Ejecución lineal de testsEjecución priorizada de tests
Alcance de testing fijoAlcance de testing adaptativo
Puede perder riesgos críticosSe enfoca primero en riesgos críticos

Beneficios del Risk-Based Testing

  • Asignación eficiente de recursos: Enfoca el esfuerzo donde más importa
  • Detección temprana de defectos: Testea áreas de alto riesgo primero, capturando issues críticos antes
  • Toma de decisiones informada: Visibilidad clara de qué se ha testeado y qué riesgos permanecen
  • Confianza de stakeholders: Comunicación transparente de riesgos y estrategias de mitigación
  • Testing adaptativo: Capacidad de ajustar prioridades cuando cambian las condiciones del proyecto
  • Optimización de costos: Mejor ROI en la inversión de testing

Cuándo Aplicar Risk-Based Testing

El testing basado en riesgos es particularmente valioso cuando:

  • Tiempo o recursos limitados: No se puede probar todo exhaustivamente
  • Sistemas complejos: Múltiples puntos de integración y dependencias
  • Releases frecuentes: Necesidad de enfocar el regression testing eficientemente
  • Alto impacto del negocio: Los fallos podrían tener consecuencias significativas
  • Requisitos regulatorios: Los riesgos de compliance deben ser gestionados
  • Sistemas legacy: La deuda técnica y dependencias desconocidas aumentan el riesgo

Componentes Centrales del Risk-Based Testing

1. Identificación de Riesgos

El primer paso es identificar riesgos potenciales en diferentes dimensiones:

Riesgos Técnicos

  • Algoritmos complejos o lógica de negocio
  • Tecnología o frameworks nuevos
  • Puntos de integración con sistemas externos
  • Preocupaciones de rendimiento y escalabilidad
  • Vulnerabilidades de seguridad
  • Problemas de integridad de datos

Riesgos de Negocio

  • Features críticas para el revenue (ej. checkout, procesamiento de pagos)
  • Violaciones de compliance regulatorio
  • Daño a la reputación de marca
  • Impacto en satisfacción del cliente
  • Desventaja competitiva
  • Responsabilidad legal

Riesgos Operacionales

  • Complejidad de deployment y rollback
  • Dependencias de infraestructura
  • Confiabilidad de servicios de terceros
  • Desafíos de migración de datos
  • Brechas en monitoreo y observabilidad

2. Evaluación de Riesgos

Una vez identificados, los riesgos deben evaluarse en dos dimensiones:

Probabilidad (Likelihood)

¿Qué tan probable es que el riesgo se materialice?

NivelDescripciónEjemplo
Muy Alta (5)Casi seguro que ocurraTecnología nueva, no probada
Alta (4)Probable que ocurraCódigo complejo con muchas dependencias
Media (3)Posible que ocurraComplejidad moderada, algo de historia
Baja (2)Improbable que ocurraFuncionalidad simple, bien testeada
Muy Baja (1)Ocurrencia raraComponente maduro, estable

Impacto (Severity)

¿Cuáles son las consecuencias si el riesgo ocurre?

NivelDescripciónEjemplo
Muy Alto (5)Impacto catastrófico en el negocioFallo de procesamiento de pagos, pérdida de datos
Alto (4)Impacto significativo en usuario/negocioFeature clave no disponible, pérdida de revenue
Medio (3)Impacto moderadoDegradación de feature, workaround disponible
Bajo (2)Inconveniencia menorProblema cosmético, glitch en herramienta admin
Muy Bajo (1)Impacto negligibleFeature poco usada, visibilidad mínima

3. Cálculo de Riesgo

El nivel de riesgo típicamente se calcula como:

Puntuación de Riesgo = Probabilidad × Impacto

Ejemplo de matriz de riesgos:

Impacto: Muy Bajo (1)Bajo (2)Medio (3)Alto (4)Muy Alto (5)
Probabilidad: Muy Alta (5)5 (Bajo)10 (Medio)15 (Alto)20 (Muy Alto)25 (Crítico)
Alta (4)4 (Bajo)8 (Medio)12 (Alto)16 (Alto)20 (Muy Alto)
Media (3)3 (Bajo)6 (Medio)9 (Medio)12 (Alto)15 (Alto)
Baja (2)2 (Muy Bajo)4 (Bajo)6 (Medio)8 (Medio)10 (Medio)
Muy Baja (1)1 (Muy Bajo)2 (Muy Bajo)3 (Bajo)4 (Bajo)5 (Bajo)

Categorías de Riesgo:

  • Crítico (21-25): Atención inmediata, testing extensivo requerido
  • Muy Alto (16-20): Alta prioridad, testing exhaustivo necesario
  • Alto (11-15): Enfoque significativo de testing
  • Medio (6-10): Enfoque estándar de testing
  • Bajo (3-5): Testing mínimo, puede diferirse si es necesario
  • Muy Bajo (1-2): Testing opcional, puede omitirse si hay restricciones de recursos

4. Estrategia de Mitigación de Riesgos

Basado en las puntuaciones de riesgo, define estrategias de testing:

Nivel de RiesgoEstrategia de Testing
Crítico / Muy Alto• Cobertura de testing comprehensiva (funcional, performance, seguridad)
• Múltiples tipos de pruebas (unit, integración, sistema, UAT)
• Tests de regresión automatizados
• Testing exploratorio manual
• Testing temprano en ciclo de desarrollo
• Monitoreo continuo en producción
Alto• Testing funcional exhaustivo
• Cobertura automatizada para escenarios core
• Testing dirigido de performance/seguridad
• Incluir en suite de regresión
Medio• Testing funcional estándar
• Automatización selectiva
• Regression testing periódico
Bajo• Smoke testing básico
• Testing ad-hoc según tiempo disponible
• Puede diferirse a sprints posteriores
Muy Bajo• Testing mínimo o sin testing dedicado
• Depender de monitoreo en producción
• Testear solo si hay recursos disponibles

Implementando Risk-Based Testing: Paso a Paso

Paso 1: Reunir Input de Stakeholders

La evaluación de riesgos debe involucrar múltiples perspectivas:

# Ejemplo: Template de Workshop de Evaluación de Riesgos
risk_assessment_participants = {
    'product_owner': ['Impacto del negocio', 'Prioridad del usuario', 'Riesgo de revenue'],
    'developers': ['Complejidad técnica', 'Calidad del código', 'Dependencias'],
    'qa_lead': ['Gaps de cobertura', 'Defectos históricos', 'Complejidad de testing'],
    'ops_team': ['Riesgo de infraestructura', 'Complejidad de deployment', 'Monitoreo'],
    'security': ['Riesgo de vulnerabilidad', 'Exposición de datos', 'Compliance'],
    'support': ['Impacto en cliente', 'Carga de soporte', 'Disponibilidad de workaround']
}

Paso 2: Crear Inventario de Riesgos

Documenta todos los riesgos identificados con detalles relevantes:

IDDescripción de RiesgoCategoríaProbabilidadImpactoPuntuaciónOwner
R-001Fallo de integración de payment gatewayTécnico4520Dev Lead
R-002Performance lento de checkout (>3s)Técnico3412QA Lead
R-003Violación de compliance PCINegocio2510Security
R-004Problemas de responsividad en UI adminTécnico326Dev Team
R-005Timeout en generación de reportesOperacional4312DevOps

Paso 3: Priorizar Actividades de Testing

Mapea casos de prueba a niveles de riesgo:

Áreas de Alto Riesgo (Puntuación 15+):
  - Procesamiento de Pagos
    * Casos de Prueba: TC-001 a TC-025 (25 casos de prueba)
    * Automatización: 100% regresión automatizada
    * Manual: Testing exploratorio para casos edge
    * Performance: Load test hasta 10,000 usuarios concurrentes
    * Seguridad: Penetration testing, validación de compliance PCI

  - Autenticación de Usuario
    * Casos de Prueba: TC-026 a TC-045 (20 casos de prueba)
    * Automatización: 95% automatizado
    * Seguridad: Testing de flujo OAuth, manejo de sesiones

Áreas de Riesgo Medio (Puntuación 6-14):
  - Búsqueda de Productos
    * Casos de Prueba: TC-046 a TC-065 (20 casos de prueba)
    * Automatización: 75% escenarios core
    * Performance: Validación de tiempo de respuesta

  - Historial de Pedidos
    * Casos de Prueba: TC-066 a TC-080 (15 casos de prueba)
    * Automatización: 60% workflows clave

Áreas de Bajo Riesgo (Puntuación 1-5):
  - Dashboard Admin
    * Casos de Prueba: TC-081 a TC-090 (10 casos de prueba)
    * Automatización: 30% rutas críticas
    * Manual: Testing ad-hoc

Paso 4: Asignar Recursos de Testing

Distribuye esfuerzo proporcionalmente al riesgo:

Ejemplo de Asignación de Recursos:
Tiempo Total de Testing: 100 horas

Áreas de Alto Riesgo (60% del esfuerzo):
  - Procesamiento de Pagos: 35 horas
  - Autenticación de Usuario: 25 horas

Áreas de Riesgo Medio (30% del esfuerzo):
  - Búsqueda de Productos: 18 horas
  - Historial de Pedidos: 12 horas

Áreas de Bajo Riesgo (10% del esfuerzo):
  - Dashboard Admin: 6 horas
  - Reportes: 4 horas

Paso 5: Monitorear y Ajustar

La evaluación de riesgos no es una actividad única:

  • Rastrear defectos por área de riesgo: ¿Las áreas de alto riesgo están produciendo más defectos de lo esperado?
  • Reevaluar después de cambios: Nuevas features o cambios arquitectónicos pueden cambiar perfiles de riesgo
  • Revisar en retrospectivas: Actualizar puntuaciones de riesgo basándose en aprendizajes
  • Ajustar cobertura de testing: Aumentar enfoque en áreas donde los riesgos se materializaron

Ejemplo Práctico: Release de Plataforma E-commerce

Escenario

Una plataforma e-commerce está lanzando una actualización mayor con:

  • Nueva integración de payment gateway
  • Flujo de checkout rediseñado
  • Motor de recomendación de productos mejorado
  • Dashboard de reportes admin actualizado

Evaluación de Riesgos

Feature 1: Nueva Integración de Payment Gateway

Identificación de Riesgo:

  • Técnico: Integración con API de terceros
  • Negocio: Fallos de pago = pérdida directa de revenue
  • Operacional: Requisitos de compliance PCI

Evaluación de Riesgo:

  • Probabilidad: 4 (Alta) - Nueva integración, no testeada en producción
  • Impacto: 5 (Muy Alto) - Fallos de pago bloquean todas las transacciones
  • Puntuación de Riesgo: 20 (Muy Alto)

Estrategia de Mitigación:

  • Testing comprehensivo de integración (escenarios positivos y negativos)
  • Performance testing bajo carga (1,000+ transacciones concurrentes)
  • Security testing (validación PCI DSS)
  • Tests de regresión automatizados para todos los flujos de pago
  • Rollout gradual con feature flag (10% → 50% → 100%)
  • Monitoreo en tiempo real con capacidad de rollback instantáneo

Feature 2: Flujo de Checkout Rediseñado

Identificación de Riesgo:

  • Negocio: Fricción en checkout = abandono de carrito
  • Técnico: Manejo complejo de estado en UI
  • Experiencia de Usuario: Curva de aprendizaje para usuarios existentes

Evaluación de Riesgo:

  • Probabilidad: 3 (Media) - Cambios significativos, pero controlados
  • Impacto: 4 (Alto) - Afecta tasas de conversión
  • Puntuación de Riesgo: 12 (Alto)

Estrategia de Mitigación:

  • A/B testing con grupo control (20% nuevo flujo, 80% flujo viejo)
  • Testing funcional comprehensivo de todos los escenarios de checkout
  • Usability testing con usuarios representativos
  • Performance testing (carga de página < 2 segundos)
  • Monitoreo de analytics (tasa de abandono de carrito, tiempo de completación)

Feature 3: Motor de Recomendación de Productos

Identificación de Riesgo:

  • Técnico: Precisión del modelo de machine learning
  • Negocio: Malas recomendaciones = oportunidades de venta perdidas
  • Performance: Carga incrementada en backend

Evaluación de Riesgo:

  • Probabilidad: 3 (Media) - Los modelos ML tienen incertidumbre inherente
  • Impacto: 3 (Medio) - Feature no crítica, valor incremental
  • Puntuación de Riesgo: 9 (Medio)

Estrategia de Mitigación:

  • Validación de precisión del modelo (métricas de precision, recall)
  • A/B testing contra recomendaciones existentes
  • Performance testing (latencia de recomendación < 100ms)
  • Testing funcional (casos edge: usuarios nuevos, datos escasos)
  • Degradación elegante (fallback a recomendaciones básicas)

Feature 4: Dashboard de Reportes Admin

Identificación de Riesgo:

  • Técnico: Queries complejas de agregación de datos
  • Negocio: Bajo número de usuarios (solo admins internos)
  • Operacional: Performance de generación de reportes

Evaluación de Riesgo:

  • Probabilidad: 2 (Baja) - Feature relativamente simple
  • Impacto: 2 (Bajo) - Base de usuarios limitada, workarounds disponibles
  • Puntuación de Riesgo: 4 (Bajo)

Estrategia de Mitigación:

  • Testing funcional básico de reportes clave
  • Spot-check de precisión de datos
  • Performance testing ad-hoc (generación de reporte < 10 segundos)
  • Diferir testing profundo si hay restricciones de tiempo

Asignación de Esfuerzo de Testing

Presupuesto Total de Testing: 200 horas

FeaturePuntuaciónEsfuerzoActividades Clave
Payment Gateway2080 horas (40%)Integración, performance, seguridad, automatización
Rediseño Checkout1260 horas (30%)Funcional, usability, A/B testing, analytics
Motor de Recomendación940 horas (20%)Validación de modelo, A/B testing, performance
Dashboard Admin420 horas (10%)Funcional básico, spot checks

Risk-Based Testing en Entornos Ágiles

Sprint Planning con Enfoque en Riesgos

Sprint Goal: Implementar integración de payment gateway

Planificación de Testing Impulsada por Riesgos:
1. Identificar user stories de alto riesgo
   - US-101: Procesar pago con tarjeta de crédito (Riesgo: 20)
   - US-102: Manejar fallos de pago (Riesgo: 18)
   - US-103: Procesamiento de reembolsos (Riesgo: 16)

2. Definir criterios "Done" basados en riesgo
   - Riesgos críticos (16+): 100% cobertura, automatizado, revisión de seguridad
   - Riesgos altos (11-15): 90% cobertura, flujos core automatizados
   - Riesgos medios (6-10): 75% cobertura, automatización selectiva

3. Asignar testing dentro del sprint
   - Día 1-2: Desarrollo + unit tests
   - Día 3-5: Integration testing (escenarios de alto riesgo primero)
   - Día 6-7: System testing, revisión de seguridad
   - Día 8-9: UAT con product owner
   - Día 10: Regression testing, preparación de deployment

Evaluación Continua de Riesgos

# Ejemplo: Tracking Automatizado de Indicadores de Riesgo
def calculate_dynamic_risk_score(feature):
    base_risk = feature.initial_risk_score

    # Ajustar basado en métricas de desarrollo
    if feature.code_complexity > threshold:
        base_risk += 2
    if feature.test_coverage < 80:
        base_risk += 3
    if feature.defect_density > average:
        base_risk += 2

    # Ajustar basado en frecuencia de cambios
    if feature.commits_last_sprint > 50:
        base_risk += 1

    # Ajustar basado en incidentes de producción
    if feature.prod_incidents_last_month > 0:
        base_risk += 5

    return min(base_risk, 25)  # Tope en puntuación máxima de riesgo

# Re-priorizar testing basado en puntuaciones de riesgo actualizadas
features_by_risk = sorted(features, key=calculate_dynamic_risk_score, reverse=True)

Errores Comunes y Cómo Evitarlos

Error 1: Evaluación Subjetiva de Riesgos

Problema: Puntuaciones de riesgo basadas en intuición en lugar de datos y análisis estructurado.

Solución: Usa criterios objetivos y datos históricos. Involucra stakeholders cross-funcionales para perspectivas diversas.

Buena Práctica:

Checklist de Evaluación de Riesgos:
  - ¿Datos de defectos históricos revisados? ✓
  - ¿Métricas de complejidad de código analizadas? ✓
  - ¿Impacto en stakeholder validado? ✓
  - ¿Proyectos similares pasados referenciados? ✓
  - ¿Múltiples miembros del equipo consultados? ✓

Error 2: Ignorar Completamente Áreas de Bajo Riesgo

Problema: Negligencia completa de áreas de bajo riesgo puede llevar a fallos inesperados.

Solución: Aplica smoke testing mínimo a todas las áreas. Bajo riesgo ≠ cero riesgo.

Ejemplo: Asigna 10% del esfuerzo de testing para cubrir todas las áreas de bajo riesgo con smoke tests básicos.

Error 3: Evaluación de Riesgos Estática

Problema: Los perfiles de riesgo cambian mientras los proyectos evolucionan, pero la evaluación inicial nunca se actualiza.

Solución: Revisa y actualiza evaluaciones de riesgos regularmente (ej. retrospectivas de sprint, después de cambios mayores).

Eventos Trigger para Reevaluación de Riesgo:

  • Nueva feature agregada
  • Cambio de arquitectura
  • Cambio de miembro del equipo (pérdida de conocimiento)
  • Incidente de producción
  • Cambio de dependencia externa
  • Actualización de requisito regulatorio

Error 4: Exceso de Confianza en Mitigación de Riesgos

Problema: Asumir que el testing elimina el riesgo completamente.

Solución: Comunica el riesgo residual. El testing reduce el riesgo pero no lo elimina.

Ejemplo de Comunicación de Riesgo:

Feature: Integración de Payment Gateway
Puntuación de Riesgo: 20 (Muy Alto)
Esfuerzo de Testing: 80 horas, 95% cobertura
Riesgo Residual: Medio (puntuación: 6)
  - Casos edge no testeados: Tarjetas internacionales con bypass CVV
  - Cambios en API de terceros fuera de nuestro control
  - Patrones de carga en producción pueden diferir del entorno de prueba
Mitigación: Feature flag para rollback instantáneo, monitoreo mejorado

Herramientas y Técnicas para Risk-Based Testing

Herramientas de Evaluación de Riesgos

  1. Hojas de Cálculo de Matriz de Riesgos: Simple, personalizable
  2. Herramientas de Test Management: Jira, TestRail con campos de riesgo
  3. Registros de Riesgos: Documentación formal para industrias reguladas
  4. Puntuación Automatizada de Riesgos: Integrar con pipelines CI/CD

Fuentes de Datos para Evaluación de Riesgos

  • Análisis Estático de Código: Métricas de complejidad de SonarQube
  • Reportes de Cobertura de Tests: Identificar gaps en áreas críticas
  • Tracking de Defectos: Patrones históricos de bugs por módulo
  • Monitoreo de Producción: Frecuencia y severidad de incidentes
  • Feedback de Clientes: Tickets de soporte, scores NPS
  • Analytics de Negocio: Uso de features, atribución de revenue

Priorización de Casos de Prueba Basada en Riesgos

# Ejemplo: Algoritmo de priorización de casos de prueba
def prioritize_test_cases(test_cases, risk_scores):
    prioritized = []

    for tc in test_cases:
        # Calcular puntuación de prioridad del caso de prueba
        priority = (
            risk_scores[tc.feature] * 0.5 +  # Peso de riesgo: 50%
            tc.defect_detection_history * 0.3 +  # Valor histórico: 30%
            tc.execution_time_efficiency * 0.2  # Eficiencia: 20%
        )
        prioritized.append((tc, priority))

    # Ordenar por prioridad (más alto primero)
    return sorted(prioritized, key=lambda x: x[1], reverse=True)

# Ejecutar tests en orden de prioridad
for test_case, priority in prioritize_test_cases(all_tests, risk_map):
    if time_remaining > 0:
        execute(test_case)
        time_remaining -= test_case.duration
    else:
        log_deferred_test(test_case, priority)

Midiendo la Efectividad del Risk-Based Testing

Métricas Clave

  1. Tasa de Detección de Defectos por Categoría de Riesgo

    • ¿Las áreas de alto riesgo están produciendo proporcionalmente más defectos?
    • Valida la precisión de la evaluación de riesgos
  2. Cobertura de Riesgos

    • Porcentaje de riesgos identificados con cobertura de testing asociada
    • Objetivo: 100% de riesgos altos, 80%+ de riesgos medios
  3. Correlación de Incidentes de Producción

    • ¿Los issues de producción ocurren en áreas identificadas como alto riesgo?
    • Mide la precisión predictiva del modelo de riesgo
  4. ROI de Testing

    • Costo de defectos encontrados en testing vs. costo si se encuentran en producción
    • Cuantifica el valor del esfuerzo de testing enfocado

Ejemplo de Dashboard

Dashboard de Risk-Based Testing (Sprint 15)

Cobertura de Riesgos:
  Riesgos Críticos/Muy Altos: 12/12 (100%) ✅
  Riesgos Altos: 18/20 (90%) ⚠️
  Riesgos Medios: 25/35 (71%) ⚠️
  Riesgos Bajos: 8/40 (20%) ✅

Defectos por Categoría de Riesgo:
  Áreas de Alto Riesgo: 18 defectos (60% del total)
  Áreas de Riesgo Medio: 9 defectos (30% del total)
  Áreas de Bajo Riesgo: 3 defectos (10% del total)

Distribución de Esfuerzo de Testing:
  Planeado: Alto (60%), Medio (30%), Bajo (10%)
  Real: Alto (58%), Medio (32%), Bajo (10%)
  ✅ Dentro de varianza esperada

Incidentes de Producción (Últimos 30 días):
  Áreas de Alto Riesgo: 2 incidentes (testeado exhaustivamente)
  Áreas de Riesgo Medio: 1 incidente (cobertura adecuada)
  Áreas de Bajo Riesgo: 0 incidentes
  Áreas Desconocidas/Nuevas: 1 incidente (no en modelo de riesgo)

Mejores Prácticas para Risk-Based Testing

Involucra stakeholders temprano: La evaluación de riesgos se beneficia de perspectivas diversas

Usa datos, no solo intuición: Aprovecha métricas, datos históricos y criterios objetivos

Documenta decisiones de riesgo: La transparencia construye confianza y habilita aprendizaje

Revisita regularmente: Los perfiles de riesgo cambian; mantén las evaluaciones actualizadas

Comunica riesgo residual: Sé claro sobre qué NO se ha testeado y por qué

Balancea riesgo con otros factores: No ignores features solicitadas por clientes solo porque son de bajo riesgo

Empieza simple: Comienza con categorías básicas alto/medio/bajo antes de scoring complejo

Automatiza donde sea posible: Integra indicadores de riesgo en CI/CD y dashboards

Conclusión

El testing basado en riesgos transforma el testing desde un objetivo comprehensivo (y frecuentemente imposible) de “testear todo” a un enfoque estratégico e inteligente de “testear lo que más importa.” Al enfocar el esfuerzo en áreas de alto riesgo, los equipos maximizan el valor de su inversión en testing mientras toman decisiones informadas sobre el riesgo residual aceptable.

Puntos clave:

  • Prioriza implacablemente: No todas las features merecen igual atención de testing
  • Evalúa sistemáticamente: Usa frameworks estructurados para identificar, evaluar y puntuar riesgos
  • Adapta continuamente: Los perfiles de riesgo cambian; mantén tu evaluación actualizada
  • Comunica claramente: Haz los niveles de riesgo y estrategias de mitigación transparentes para stakeholders
  • Mide efectividad: Rastrea si tu modelo de riesgo predice con precisión dónde ocurren issues

El testing basado en riesgos no se trata de hacer menos testing—se trata de hacer testing más inteligente. En un mundo de tiempo y recursos limitados, enfocarse en lo que más importa no es solo una buena práctica; es esencial para entregar software de calidad que cumpla objetivos del negocio.