redaccion-casos-manuales · git:20261030.edd8482 · 2026-10-30 · sha256 ac1e0f5fba778697
redaccion-casos-manuales git:20261030.edd8482A
Immutable. This exact content never changes and is served at /api/v1/blob/ac1e0f5fba778697.
---
name: redaccion-casos-manuales
description: Referencia del generador-casos-manuales — columnas de la planilla, esquema del JSON para scripts/generar_casos.py, reglas de cada campo y el informe de cobertura.
---
# Casos de prueba manuales — referencia
Material de consulta del agente `generador-casos-manuales`. El proceso y las reglas están en el agente.
## 1. Salidas (en `output/casos-de-prueba/manuales/`)
1. **La planilla** `casos-HU-XXX.xlsx` y **los casos en Markdown** `casos-HU-XXX.md`: los genera `scripts/generar_casos.py` en un solo paso, desde el mismo JSON. El `.md` tiene una tabla **Resumen** (ID, Título, Resultado esperado, Prioridad, Tiempo y, si hay, Falta info; ordenada por prioridad) y la **tabla de casos**, una fila por caso; no incluye Estado, Evidencia, Fecha de Ejecución ni Comentarios (sí están en el `.xlsx`, la grilla completa con las 14 columnas). Con varias columnas la tabla del `.md` queda ancha y puede pedir scroll horizontal.
2. **El informe de cobertura** `casos-HU-XXX-cobertura.md` (cobertura + ambigüedades + preguntas para el PO), escrito a mano siguiendo `plantillas/plantilla-cobertura.md`.
Referencias de formato en `plantillas/`: `plantilla-casos-prueba.xlsx` / `plantilla-casos-prueba.md` y `plantilla-cobertura.md`.
## 2. Columnas de los casos (en este orden)
`ID #` · `Título` · `Descripción` · `Precondiciones` · `Datos de Prueba` · `Pasos` · `Resultado Esperado` · `Estado` · `Prioridad` · `Tiempo estimado (min)` · `#Etiquetas` · `Evidencia` · `Fecha de Ejecución` · `Comentarios`
## 3. Esquema del JSON (`output/casos-de-prueba/manuales/_casos-HU-XXX.json`)
```json
{
"proyecto": "NOMBRE DEL PROYECTO",
"modulo": "HU-001 — Inicio de sesión",
"casos": [
{
"id": "CP-001", "titulo": "...", "descripcion": "... (ej. CA1)",
"precondiciones": "...", "datos": "Email: ...\nContraseña: ...",
"pasos": "1. ...\n2. ...", "resultado": "...",
"estado": "Pendiente", "prioridad": "Alta",
"etiquetas": "@HU-001 @modulo-login @alta @smoke @regresion @positivo @CA1",
"evidencia": "", "fecha_ejecucion": "", "comentarios": "",
"falta_info": ["FI-01"]
}
],
"falta_informacion": [
{"id": "FI-01", "que_falta": "Texto del mensaje al bloquearse la cuenta",
"donde_se_busco": "Historia, comentarios, épica y documentación", "impacto": "CA3",
"pregunta": "¿Cuál es el mensaje exacto?", "estado": "Abierto"}
]
}
```
- En `datos` y `pasos`, separá las líneas con `\n`: el script las acomoda dentro de la celda.
- `falta_info` (por caso) y `falta_informacion` (lista) son opcionales: van solo si hay datos que faltan. Copiá los ítems de la ficha de contexto con el mismo ID. El script resalta esos casos, les suma la etiqueta `@falta-info` y arma la hoja **Falta información**.
- `tiempo_min` (opcional, por caso): manda sobre la fórmula de `scripts/estimacion.py` (`plantillas/estimacion-tiempos.md`) cuando sabés que un caso lleva más (por ejemplo, esperar un proceso de 10 minutos).
- Versión en inglés: un bloque `"en"` por caso (`titulo`, `descripcion`, `precondiciones`, `datos`, `pasos`, `resultado`) y uno general (`modulo`, `falta_informacion`). El script escribe `casos-HU-XXX.en.json` y el HTML bilingüe.
## 4. El script
```bash
python scripts/generar_casos.py output/casos-de-prueba/manuales/_casos-HU-XXX.json output/casos-de-prueba/manuales/casos-HU-XXX.xlsx --limpiar
```
Crea `casos-HU-XXX.xlsx` **y** `casos-HU-XXX.md` (misma ruta, extensión `.md`), con el **tiempo estimado de ejecución manual** de cada caso y el total al pie; reordena los casos por prioridad (Crítica → Alta → Media → Baja); con `--limpiar` borra el JSON temporal; y al terminar arma el informe HTML (español e inglés). Usá `python` o `python3` según el sistema; instala `openpyxl`/`tabulate` solo si faltan (si no puede, pide `pip install -r requirements.txt`). Sin Python no se generan ni el `.xlsx` ni el `.md`: avisalo.
## 5. Reglas de campos
- `id`: `CP-001`, `CP-002`, …
- `estado`: siempre **Pendiente** al generar. Valores: N/A · Pendiente · En ejecución · Aprobado · Fallido · Bloqueado.
- `prioridad`: `Crítica` para flujos críticos de seguridad, `Alta` para flujos principales, `Media`/`Baja` para el resto. Valores: Crítica · Alta · Media · Baja.
- `evidencia` y `fecha_ejecucion` vacíos al generar.
- `comentarios`: notas o supuestos del caso (vacío si no hay).
- `etiquetas`, en este orden: la historia (`@HU-001`), el módulo (`@modulo-<nombre>`: `@modulo-login`, `@modulo-registro`; el de la app, no el título de la historia), la prioridad (`@critica`/`@alta`/`@media`/`@baja`, la misma de la columna), `@smoke` si es un caso de humo (los críticos siempre) y `@regresion` si entra en la regresión (todos, salvo `@falta-info` y `@bloqueado`), y después el tipo (`@positivo`/`@negativo`/`@borde`) y el criterio (`@CA1`). En minúscula, salvo las keys. `scripts/generar_casos.py` completa las que falten (scripts/_etiquetas.py): sin `@modulo-x`, usa `modulo` del JSON.
## 6. Informe de cobertura (`casos-HU-XXX-cobertura.md`)
Prosa en Markdown (no la tabla de casos), siguiendo `plantillas/plantilla-cobertura.md`:
- **Resumen:** historia, cantidad de casos, criterios cubiertos, tipos de prueba.
- **Cobertura por criterio de aceptación:** tabla que mapea cada criterio (CA1, CA2, …) a los casos que lo cubren y su estado, como **tabla Markdown normal** (columnas: `Criterio` · `Descripción` · `Casos que lo cubren` · `Cobertura`), sin alinear a mano y **sin emojis** en las celdas. Un criterio que depende de un `FI-XX` va como `Parcial (falta información)`.
- **Cobertura por tipo de prueba:** qué casos son positivos, negativos, de borde y de validación, y **qué técnica** derivó cada grupo con sus valores (ej.: "Valores límite, contraseña 8–16: CP-004 (7), CP-005 (8), CP-006 (16), CP-007 (17)").
- **Fuera de alcance / no cubierto:** lo que la historia no pide o queda explícitamente afuera.
- **Falta información:** tabla con los `FI-XX` (ID · Qué falta · Dónde se buscó · Casos afectados · Pregunta para el PO · Estado).
- **Ambigüedades detectadas:** puntos poco claros o incompletos de la historia, incluido cada supuesto que hubo que hacer (los mismos de `Comentarios`).
- **Preguntas para el PO:** preguntas concretas y accionables para resolver esas ambigüedades.
Al terminar: `python scripts/formatear_tablas.py output/casos-de-prueba/manuales/casos-HU-XXX-cobertura.md`.