Probar cada valor de entrada posible es imposible. Un campo de contraseña simple que acepta 8-32 caracteres tiene miles de millones de entradas potenciales. ¿Cómo probar de manera integral sin pasar años escribiendo casos de prueba?

Entra Partición de Equivalencia (EP) — una técnica fundamental de diseño de casos de prueba y enfoque de pruebas de caja negra que divide datos de entrada en grupos lógicos (particiones) donde todos los valores en una partición deberían comportarse de la misma manera. Al probar un valor representativo de cada partición, logras amplia cobertura con casos de prueba mínimos.

El Concepto Central

Principio de Partición de Equivalencia: Si un valor de una partición funciona correctamente, todos los valores en esa partición deberían funcionar correctamente. Por el contrario, si un valor falla, todos los valores en esa partición deberían fallar.

En lugar de probar:

Entradas de edad: 5, 10, 15, 18, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80...

Pruebas:

Particiones de edad:
- Inválida (muy joven): Valor de prueba = 10
- Válida (adulto): Valor de prueba = 40
- Inválida (muy viejo): Valor de prueba = 75

Tres casos de prueba en lugar de docenas, con la misma o mejor detección de defectos.

Cómo Aplicar Partición de Equivalencia

Paso 1: Identificar Condiciones de Entrada

Lista todas las entradas y sus requisitos:

Ejemplo: Sistema de Reserva de Boletos

Entrada: Número de boletos
Requisito: Debe estar entre 1 y 10 (inclusive)

Paso 2: Identificar Particiones de Equivalencia

Divide el espacio de entrada en particiones válidas e inválidas:

Tipo de ParticiónRangoDescripción
Inválida< 1Muy pocos boletos
Válida1-10Rango aceptable
Inválida> 10Demasiados boletos

Paso 3: Seleccionar Valores de Prueba

Elige un valor representativo de cada partición:

ParticiónValor de PruebaResultado Esperado
Inválida (< 1)0Error: “Se requiere mínimo 1 boleto”
Válida (1-10)5Reserva exitosa
Inválida (> 10)15Error: “Máximo 10 boletos permitidos”

Resultado: 3 casos de prueba cubren todos los escenarios

Particiones Válidas vs Inválidas

Cada entrada típicamente tiene:

Particiones Válidas

  • Entradas que el sistema debería aceptar
  • Se espera que produzcan resultados exitosos
  • A menudo hay una partición válida, pero entradas complejas pueden tener múltiples

Particiones Inválidas

  • Entradas que el sistema debería rechazar
  • Se espera que produzcan errores
  • Usualmente múltiples particiones inválidas (debajo del rango, encima del rango, tipo incorrecto, nulo, etc.)

Ejemplo: Campo de Email

Particiones Válidas:
- ✅ Email estándar: "user@example.com"
- ✅ Email con números: "user123@test.com"
- ✅ Email con subdominio: "user@mail.example.com"

Particiones Inválidas:
- ❌ Falta @: "userexample.com"
- ❌ Falta dominio: "user@"
- ❌ Falta parte local: "@example.com"
- ❌ Múltiples @: "user@@example.com"
- ❌ Cadena vacía: ""
- ❌ Caracteres especiales: "user name@example.com"
- ❌ Muy largo: [email > 254 caracteres]

Estrategia de Prueba: Selecciona 1-2 valores de particiones válidas, 1 valor de cada partición inválida.

Ejemplo de Caso de Prueba EP

**Característica**: Registro de Usuario - Campo de Edad
**Requisito**: La edad debe ser 18-65 años

**Particiones de Equivalencia:**

| ID Partición | Tipo de Partición | Rango | Valor de Prueba | Resultado Esperado |
|-------------|------------------|-------|----------------|-------------------|
| EP1 | Inválida | Edad < 18 | 15 | Error: "Debes tener 18 o más" |
| EP2 | Válida | 18 ≤ Edad ≤ 65 | 30 | Registro exitoso |
| EP3 | Inválida | Edad > 65 | 70 | Error: "Límite de edad excedido" |
| EP4 | Inválida | No numérico | "abc" | Error: "La edad debe ser un número" |
| EP5 | Inválida | Negativo | -5 | Error: "La edad debe ser positiva" |
| EP6 | Inválida | Decimal | 25.5 | Error: "La edad debe ser número entero" |
| EP7 | Inválida | Vacío | "" | Error: "Se requiere edad" |

**Total de Casos de Prueba**: 7 (en lugar de probar todas las edades 0-999)

Combinando EP con Análisis de Valores Límite (BVA)

Partición de Equivalencia y Análisis de Valores Límite funcionan perfectamente juntos:

Solo EP:

Partición válida (18-65): Valor de prueba = 30

EP + BVA:

Partición válida (18-65):
- Valor de prueba = 18 (límite inferior)
- Valor de prueba = 30 (rango medio)
- Valor de prueba = 65 (límite superior)

Ejemplo: Niveles de Descuento

Requisito: Descuentos de compra basados en monto

  • $0-$99: Sin descuento
  • $100-$499: 10% descuento
  • $500-$999: 15% descuento
  • $1000+: 20% descuento

Particiones EP:

ParticiónRangoValor de Prueba EPValores de Prueba EP+BVA
Nivel 1$0-$99$50$0, $50, $99
Nivel 2$100-$499$300$100, $300, $499
Nivel 3$500-$999$750$500, $750, $999
Nivel 4$1000+$1500$1000, $1500, $5000

Solo EP: 4 casos de prueba EP + BVA: 12 casos de prueba (más exhaustivo)

Ejemplos del Mundo Real

Ejemplo 1: Validación de Contraseña

Requisitos:

  • Longitud: 8-20 caracteres
  • Debe contener: mayúscula, minúscula, número, caracter especial
  • No puede contener: nombre de usuario, palabras comunes

Particiones de Equivalencia:

Partición Válida:
EP-V1: Contraseña válida cumpliendo todos los criterios
  Prueba: "MyP@ssw0rd"

Particiones Inválidas:
EP-I1: Muy corta (< 8 caracteres)
  Prueba: "Pass1!"

EP-I2: Muy larga (> 20 caracteres)
  Prueba: "MyVeryLongP@ssw0rd123456"

EP-I3: Falta mayúscula
  Prueba: "myp@ssw0rd1"

EP-I4: Falta minúscula
  Prueba: "MYP@SSW0RD1"

EP-I5: Falta número
  Prueba: "MyP@ssword"

EP-I6: Falta caracter especial
  Prueba: "MyPassword1"

EP-I7: Contiene nombre de usuario
  Prueba: "JohnP@ssw0rd" (si nombre de usuario es "john")

EP-I8: Palabra común
  Prueba: "Password123!"

EP-I9: Vacía
  Prueba: ""

Automatización de Pruebas:

import pytest

@pytest.mark.parametrize("password,expected,reason", [
    # Partición válida
    ("MyP@ssw0rd", True, "Contraseña válida"),

    # Particiones inválidas
    ("Pass1!", False, "Muy corta"),
    ("MyVeryLongP@ssw0rd123456", False, "Muy larga"),
    ("myp@ssw0rd1", False, "Falta mayúscula"),
    ("MYP@SSW0RD1", False, "Falta minúscula"),
    ("MyP@ssword", False, "Falta número"),
    ("MyPassword1", False, "Falta caracter especial"),
    ("Password123!", False, "Palabra común"),
    ("", False, "Vacía"),
])
def test_password_validation(password, expected, reason):
    result = validate_password(password)
    assert result == expected, f"Falló: {reason}"

Errores Comunes

❌ Error 1: Particiones Superpuestas

Mal:
- Partición 1: Edad 0-50
- Partición 2: Edad 50-100

Problema: ¡La edad 50 está en ambas particiones!

Bien:
- Partición 1: Edad 0-49
- Partición 2: Edad 50-100

❌ Error 2: Particiones Inválidas Faltantes

Mal (solo probando válidas):
- Partición: Edad válida (18-65)
- Prueba: 30

Bien (probando válida + inválidas):
- Partición 1: Muy joven (< 18)
- Partición 2: Válida (18-65)
- Partición 3: Muy viejo (> 65)

Beneficios de EP

  1. Reduce Casos de Prueba: De miles a docenas
  2. Cobertura Sistemática: Asegura que todas las clases de entrada sean probadas
  3. Detección de Defectos: Una prueba por partición detecta fallas de partición completa
  4. Mantenible: Fácil de actualizar cuando los requisitos cambian
  5. Eficiente: Maximiza cobertura con esfuerzo mínimo

Conclusión

Partición de Equivalencia es una técnica fundamental de diseño de pruebas que:

  • Divide datos de entrada en grupos lógicos
  • Prueba un valor representativo por grupo
  • Reduce drásticamente casos de prueba manteniendo cobertura
  • Funciona mejor cuando se combina con Análisis de Valores Límite

Recuerda: Si pruebas un valor de una partición y funciona, toda la partición debería funcionar. Este principio te permite probar de manera más inteligente, no más dura.