how-it-works · agentic-qa · test-documentation

El Arte de Documentar Test Cases

Scopes, nomenclatura perfecta, técnicas de diseño, parametrización y el arte de priorizar con ROI — el puente entre la QA manual y la automatización, con o sin Xray.

Analiza → Prioriza → Documentala disciplina que convierte comportamiento validado en regresión confiable
Encuadre: este skill toma comportamiento YA validado (US aprobada, bug cerrado, sesión exploratoria terminada) y lo formaliza en el TMS con trazabilidad, prioridad y un veredicto de automatización. NO es herramienta de exploración.

la forma sana

80 → 12 → 8

Analizas 80 escenarios, documentas 12, automatizas 8. La mayoría debe terminar Deferred. Documentar todo es el anti-patrón: un test entra al repositorio porque se va a re-ejecutar, nunca para llegar a un número de cobertura.

Tesis del deck: derivar es gratis, persistir es caro. Tres capas, tres conteos: derivar (1:N por técnica) → documentar (solo lo repetible) → automatizar (los pocos). Si más del 50% queda Candidate/Manual, re-aplica el filtro más duro.

qué cubriremos

Cinco Disciplinas del Test Case

01Scopes — elige por el input: módulo, historia, bug, exploratorioqué documentar
02Nomenclatura — el título perfecto e identidad del TCcómo nombrar
03Cuerpo — Gherkin vs Tradicional, técnicas de diseño, parametrizacióncómo escribir
04Priorización — el ROI y el arte de Valor/Costo/Riesgoqué automatizar
05TMS — Xray vs Jira-native, estados y trazabilidaddónde vive

4 quizzes interactivos a lo largo del recorrido — haz clic en las respuestas.

Cinco partes mapean al pipeline real del skill: Analyze (scopes) → naming/writing (documentar bien) → Prioritize (ROI) → Document (TMS modalidad).

qué es este skill

El Puente entre QA Manual y Automatización

1

Analyze

Identifica escenarios reales (flujos de usuario), separa lo transversal (XSS, perf, a11y se validan DENTRO de otros TCs, no son TCs).

2

Prioritize (ROI)

Cada escenario pasa 3 filtros + fórmula ROI → un veredicto: Candidate, Manual o Deferred. Nunca se salta.

3

Document

Crea TC/ATP/ATR en el TMS con trazabilidad completa, según la modalidad (Xray o Jira-native).

Prerrequisito duro

Solo se documenta comportamiento ya validado (US QA Approved, bug cerrado, sesión exploratoria terminada). El TMS es herramienta de documentación y protección de regresión — no de exploración.

El orden Analyze→Prioritize→Document es inviolable. Si no puedes describir con confianza el comportamiento esperado, la feature no está lista para documentarse.

PARTE 01

Los Scopes
Elige por el Input, no por el Output

Cuatro scopes comparten el mismo pipeline Analyze→Prioritize→Document. Solo cambian la fuente de entrada y los defaults. El input decide el scope.

Module / Ticket / Bug / Ad-hoc. Si te dan un story ID → ticket. Bug ID → bug. Nombre de módulo o salida de sesión → module o ad-hoc.

los cuatro scopes

Módulo · Historia · Bug · Exploratorio

ScopeInputVolumenCuándo
Module-drivenUn módulo explorado end-to-end20-100+Batch bajo el Epic de Regresión. La mayoría será Deferred.
Ticket-drivenUna US QA Approved de sprint3-8Salida de una sesión sprint-testing. ATP/ATR por US.
Bug-drivenUn bug cerrado con fix verificado0-2Corre la decisión bug-driven. ROI sesgado arriba: "falló una vez, puede fallar de nuevo".
Ad-hoc / ExploratorioEscenarios nuevos de testing exploratorio1-10Aplica los 3 filtros con dureza — suelen ser validaciones de una sola vez.

Mismo pipeline, distinto punto de entrada

El scope NO cambia el método (Analyze→Prioritize→Document); cambia de dónde sacas los escenarios y qué labels por defecto aplicas.

Module = exhaustivo (exploración de módulo). Ticket = una historia aprobada. Bug = regresión de un bug. Ad-hoc = hallazgos sueltos. El usuario pidió explícitamente enseñar estos scopes.

los dos scopes de volumen

Module-driven vs Ticket-driven

Module-driven (Macro)

Exploras un módulo completo. 20-100+ escenarios. Batch bajo el Epic de Regresión, agrupado por un Test Set (1:1 con el Epic/feature). La mayoría termina Deferred — derivas amplio, persistes poco.

regressione2eintegration

Ticket-driven (Medium)

Una US aprobada en sprint. 3-8 escenarios. ATP/ATR creados por historia. Es la salida natural de una sesión de /sprint-testing que pasa a documentarse.

regression+ test type

Source-code validation (obligatorio)

El ATP se escribió ANTES del código. Antes de crear cualquier TC: grep data-testid=, rutas, formatos de texto. Corrige divergencias en una sección Refinement Notes. Saltarlo = la causa #1 de tests automatizados inválidos después.

Module es exhaustivo; ticket es acotado a una US. Ambos validan contra el código real antes de documentar.

la regla de oro

Bug-driven — "Donde Hay un Bug Importante, Debe Haber un Test"

No todo bug se vuelve TC de regresión. Pero si ES regression-worthy, debe terminar con un Test — en ambas modalidades.

decisión bug-driven
# 1. ¿Es candidato de regresión? (filtros Phase-0 + ROI; la regla de bug previo sesga arriba)
   NO   Sin Test nuevo. Trátalo como test fallido (fix ya verificado)  Deferred.
   YES  paso 2.

# 2. ¿El bug salió de un Test ya ejecutado que falló?
   YES  REUSA ese Test para retest + regresión. Ya existe; enlázalo (tests / is tested by). NO dupliques.
   NO   CREA + diseña el Test correspondiente. Enlázalo al bug (tests / is tested by).

Ad-hoc / Exploratorio

Escenarios sueltos de exploración. Aplica los 3 filtros con dureza — son a menudo validaciones de una sola vez → casi siempre Deferred.

GOLDEN RULE: un bug cerrado es evidencia empírica fuerte de que el área regresa, así que la mayoría califican y van Candidate. Pero un typo de una sola vez en área estable se trata como test fallido → Deferred. La regla "vale oro".

quiz · parte 1

¿Qué Scope Aplica?

Q1Te dan un bug cerrado con fix verificado: un error de cálculo en el carrito que ya ocurrió dos veces antes.
ABug-driven — regression-worthy (bug previo), debe terminar con un Test
BAd-hoc — es un hallazgo suelto
CModule-driven — toca el módulo de carrito
Bug-driven. El input es un bug cerrado → scope bug-driven. Con bugs previos en el área, el ROI se sesga arriba ("falló, puede fallar de nuevo") → Candidate, y por la regla de oro DEBE existir un Test (reusa o crea).
Q2QA terminó de explorar end-to-end el módulo de pagos y tiene ~60 escenarios validados sin ticket asociado.
ATicket-driven — hay que crear ATP/ATR por cada uno
BModule-driven — batch bajo el Epic de Regresión, la mayoría Deferred
CBug-driven — son fallos potenciales
Module-driven. El input es un módulo explorado completo (20-100+) → batch agrupado en un Test Set bajo el Epic de Regresión. Deriva amplio, persiste poco: la mayoría de los 60 será Deferred.
El scope se elige por el INPUT, no por el output. Bug cerrado→bug-driven; módulo→module-driven; US aprobada→ticket-driven; hallazgo suelto→ad-hoc.

PARTE 02

Nomenclatura
El Título Perfecto

Una sola regla de nombrado, una sola regla de identidad. Un nombre mal puesto es un test que nadie encuentra, nadie entiende y nadie mantiene.

El usuario marcó nomenclatura como "importante". Es la regla que más importa según el propio skill. Dos reglas: el formato del título y la identidad del TC (un precondition+action = un TC).

la regla que más importa

El Formato Canónico del Título

GX-101US_ID — siempre la Story
:
TC1TC# secuencial
:
shouldverbo literal (BDD)
log in successfullyBEHAVIOR — qué hace
when credentials are validCONDITION — when/if · opcional

BEHAVIOR — el comportamiento

qué hace el sistema: log in successfully, show an authentication error, create the order.

CONDITION — la condición que distingue

when credentials are valid, when password is incorrect, when exceeding 5 failed attempts.

Reglas estructurales

Separador literal : (dos puntos + espacio). El verbo should abre el comportamiento; el conector when (o if) introduce la condición — opcional, igual que un given <precondición> al final. TC# = TC + número, sin guion ni ceros (TC1, no TC-01). El prefijo es SIEMPRE el US_ID de la Story, en toda modalidad; la membresía a un Test Set es un link, nunca el prefijo.

Formato: {US_ID}: TC#: should [when/if ] [given ]. El prefijo es SIEMPRE el US_ID de la Story en toda modalidad — la membresía a un Test Set es un link, nunca el prefijo. El verbo del TC es should (BDD); Validate se reserva para el Set/Suite (slide siguiente). El vocabulario sale del domain-glossary — términos canónicos.

anti-patrones a rechazar

Títulos: Mal → Bien

❌ Mal✓ BienPor qué
Login testGX-101: TC1: should log in successfully when credentials are validFalta ID, TC#, behavior, condition
Login - errorGX-101: TC2: should show an authentication error when password is incorrectDemasiado vago
TC1: Test formGX-101: TC1: should submit the form when all fields are validFalta ID; behavior no específico
should workGX-101: TC1: should log in successfully when credentials are validshould sin behavior ni condición concretos

Ejemplos por tipo de test

Positivo: should log in successfully when credentials are valid · Negativo: should show an authentication error when password is incorrect · Boundary: should enforce the limit when entering exactly 50 chars · Edge: should merge quantities when the cart has multiple same items.

El behavior debe ser específico (qué hace el sistema), la condition (when…) distingue. "should work" es malo no por el verbo sino por vago — should necesita un behavior + condition concretos. Rechaza "Login test", "Login - error", "TC1: Test form".

la segunda regla de oro

Un TC = Una (Precondición + Acción)

Todos los resultados esperados del mismo par (precondición, acción) pertenecen al mismo TC — no a TCs separados.

✓ Mismo TC, múltiples assertions

  • Precond: credenciales válidas + cuenta activa
  • Acción: submit login
  • Esperado: redirect + token + perfil vía /auth/me + cookie + saludo
vs

TCs distintos — precondición cambia

  • TC-A: credenciales válidas → success
  • TC-B: cuenta bloqueada → 423
  • TC-C: credenciales inválidas → 401

El anti-patrón #1 en reviews

Partir un (precondición, acción) en "TC1: check panel A", "TC2: check panel B"… es el error más diagnosticado. Es un TC con múltiples assertions, no tres TCs.

Identidad = Precondición + Acción + outcome verificable. Las assertions múltiples NO se parten. Las precondiciones distintas SÍ generan TCs distintos.

el sistema completo de nombrado

No Solo el TC — Todo el TMS

ArtefactoFormatoEjemplo
User Story{KEY}-{n}PROJ-123
ATP — Story Test PlanATP: {STORY-KEY}: {story title}ATP: PROJ-123: Apply discount at checkout
ATR — Story Test ExecutionATR: {STORY-KEY}: Story TestingATR: PROJ-123: Story Testing
STP/STR — SprintSTP/STR: Sprint#{N}: Regression[ Testing]STR: Sprint#30: Regression Testing
Test Set (agrupa)TS: {EPIC-KEY|module}: Validate <feature>TS: GX-101: Validate credit card payment
Test Case (asevera){US_ID}: TC#: should <BEHAVIOR> when <COND>GX-101: TC1: should log in successfully when…
ReTesting (bug)ReTest: {BUG-KEY}: {summary}ReTest: GX-202: wrong error on bad password
PreconditionPRC: {COMPONENT}: {required state}PRC: Payment: Authenticated user with a saved card

Dos niveles: Validate agrupa, should asevera

El Set nombra la feature — TS: GX-101: Validate login — y bajo él cada TC asevera un comportamiento: should redirect to dashboard when credentials are valid, should show an error when password is incorrect. El prefijo acrónimo (ATP/ATR/STP/STR/TS/PRC) revela altitud y plan-vs-run en el primer token; el verbo te dice el nivel: Validate = suite, should = caso.

El nombrado embebe la trazabilidad: cada Plan/Run lleva un prefijo acrónimo de 3 letras (ATP/ATR/STP/STR/FTP/FTR) + el key de la cosa bajo prueba; el Set agrupa por feature (TS: {EPIC|module}: Validate ); el TC asevera con should…when y lleva SIEMPRE el prefijo US_ID del Story — la membresía al Set es un link. Validate=nivel suite, should=nivel caso — el verbo señala el nivel.

trazabilidad end-to-end

El Mismo Key — y la Misma Voz

En el TMS (título)

GX-101: TC1: should log in successfully when credentials are valid

Voz BDD: should <behavior> when <condition>.

En el código (KATA)

@atc('GX-101')
test('GX-101: should log in when credentials valid', …)

Voz BDD: should <behavior> when <condition>.

Mismo key y misma voz, del requisito al código

El título del TC y el nombre del test() hablan ambos should…when y llevan el mismo key del TMS. No solo coincide el identificador — coincide la frase. Eso es trazabilidad sin costuras: el outline, el TC y el código dicen lo mismo.

Una sola voz (should…when) en TMS y código, con el mismo key. Antes había dos voces (Validate vs should); ahora outline→TC→código son 1:1. Validate queda para el Set. La automatización busca por outcome:Candidate + label automation-candidate.

quiz · parte 2

Nomenclatura & Identidad

Q1¿Cuál título cumple la convención para un caso negativo de login con contraseña incorrecta?
ALogin - error
BGX-101: TC2: should show an authentication error when password is incorrect
CValidate login fails
B. Tiene los segmentos: ID (GX-101) + TC# (TC2) + should + BEHAVIOR (show an authentication error) + CONDITION (when password is incorrect). A es vago y sin ID; C usa Validate (verbo de Set, no de TC) y le falta todo. El TC habla should; Validate se reserva para el Set.
Q2Login exitoso debe: redirigir al dashboard, devolver token, setear cookie y mostrar saludo. ¿Cuántos TCs?
AUn TC con 4 assertions — misma precondición + acción
BCuatro TCs, uno por cada validación
CDos TCs: uno de UI y uno de API
Un TC. Misma (precondición + acción) = mismo TC, sin importar cuántos resultados esperados verifique. Partirlo en 4 "check X" es el anti-patrón más diagnosticado en reviews.
Dos reglas de la parte 2: el formato de título de 4 segmentos, y la identidad (un precondition+action = un TC con múltiples assertions).

PARTE 03

El Cuerpo
Técnicas, Gherkin y Parametrización

Cómo se escribe un TC: Gherkin para candidatos, tablas para manual; técnicas de diseño que deciden el SET de TCs; parametrización con variables, nunca datos hardcodeados.

Aquí van: dos formatos, las 5 técnicas con sus disparadores, y la parametrización (Scenario Outline + Examples vs Variables table).

cómo escribir el cuerpo

Gherkin vs Tradicional

CriterioGherkinTradicional
Candidato a automatizaciónNo
Pasos deterministasPueden variar
Resultados esperados exactosSubjetivos
Requiere juicio humanoNo

La tabla tradicional (manual)

Columnas fijas: Step | Action | Test Data | Expected Result. Dato vacío = -. Úsala para verificación visual/subjetiva, elementos exploratorios o TCs marcados manual-only.

Gherkin → candidatos (determinista, automatizable). Tradicional → manual (juicio humano, visual). La selección la decide la naturaleza del TC, no la preferencia.

el patrón de alta calidad

Anatomía de un Gherkin de Candidato

Scenario Outline
@critical @regression @automation-candidate @{US_ID}
Scenario Outline: should <behavior> when <condition>
  """ Bugs covered: BUG-1, BUG-2 · Related Story: {US_ID} · ROI: 5.2 """
  # === PRECONDITIONS (tester / script las construye) ===
  Given a <entity> exists with <identifier> where <quantity> <condition>
  # === ACTION ===
  When the user navigates to "<route>" and <main_action>
  # === VALIDATIONS ===
  Then <ui_element> is displayed with format "<expected_format>"
  # === EQUIVALENT PARTITIONS ===
  Examples: Happy path  |  Edge case  |  Singular vs plural

Siempre lleva

Tags (priority + @regression + @automation-candidate + @{US_ID}) · docstring con metadata · banners # === … === · variables, nunca datos hardcodeados · un Examples por partición de equivalencia.

La estructura visual (PRECONDITIONS→ACTION→VALIDATIONS→PARTITIONS) + docstring + multi-tag es obligatoria. Background cuando varios escenarios comparten precondiciones.

1 AC → N TCs (deriva por técnica)

Técnicas de Diseño — por Disparador

Disparador en el ACTécnicaTCs que produce
Cualquier input (siempre)Equivalence Partitioningmismo output → 1 TC parametrizado; distinto output → TCs separados
Rango / límite / longitud / fechaBoundary Value Analysismin-1·min·min+1 … max-1·max·max+1 + zero/empty/null/overflow
Un estado / ciclo de vidaState-Transition1 TC por transición válida + 1 por inválida
2+ condiciones que interactúanDecision Tableenumera combos, colapsa equivalentes, 1 TC por regla
3+ factores combinablesPairwiseset all-pairs (registra la reducción)

Derivar es gratis, persistir es ROI-gated

Estas son candidatas derivadas por técnica — aún no work items del TMS. La técnica gobierna la forma de lo que documentas, no el cuánto. EP siempre; BVA donde haya rango; el resto por disparador.

El usuario pidió las técnicas. EP siempre; BVA donde hay límite (atrapa off-by-one que EP solo no ve); State para entidades con estado; Decision Table con condiciones que interactúan; Pairwise con 3+ factores.

técnica 1/5 · teoría

Equivalence Partitioning

Particiona el dominio de entrada en clases donde todos los miembros se comportan igual. Prueba UN representante por clase — reduce infinitas entradas a pocos casos.

Disparador

Cualquier input (siempre aplica). Es el piso de todo diseño de TC.

Regla de colapso

Mismo output → 1 TC parametrizado. Distinto output → TCs separados. Cubre clases válidas E inválidas.

El error común

Probar 5 emails válidos distintos es desperdiciar 4 TCs: todos viven en la misma clase. Un representante basta. El valor está en cubrir todas las clases, no en repetir dentro de una.

EP es la técnica base. La clave: representante por clase, y separar por OUTPUT no por input. Conecta con la regla de identidad del TC y la parametrización.

técnica 1/5 · en la práctica

EP — Login por Clases de Salida

Clase válida → 200

credenciales correctas

1 TC representante

Clase inválida → 401

password mala · user inexistente · formato roto

1 TC parametrizado (mismo 401)

Clase bloqueada → 423

cuenta con 5 intentos fallidos

TC separado (distinto output)

El veredicto de diseño

Las 3 razones de fallo "credencial inválida" comparten salida (401) → un Scenario Outline con 3 filas de Examples. Pero 423 es otra clase de salida → su propio TC. EP decidió el SET: 3 TCs, no 5.

Ejemplo verbatim del skill: todas las credenciales inválidas → 401 = un TC parametrizado loginWithInvalidCredentials; cuenta bloqueada → 423 = TC separado. El output, no el input, define el corte.

técnica 2/5 · teoría

Boundary Value Analysis

Los defectos se concentran en los bordes de las clases de equivalencia. EP elige el representante; BVA ataca justo donde el código suele equivocarse: el límite.

Disparador

Rango · límite · longitud · ventana de fecha · cuota · paginación. Donde haya un número que marque una frontera.

Los valores a probar

min-1 · min · min+1
max-1 · max · max+1
+ zero / empty / null / overflow

Por qué EP sola no basta

EP probaría "un valor válido y uno inválido" y se perdería el clásico off-by-one (< vs <=). BVA es obligatoria siempre que un AC nombre un rango o límite.

BVA complementa EP en los bordes. El off-by-one (< vs <=) es el bug clásico que solo BVA atrapa. Obligatoria en cualquier rango/límite.

técnica 2/5 · en la práctica

BVA — Password de 8 a 20 Caracteres

LongitudPosiciónEsperado
0 / vacíozero / emptyreject "campo requerido"
7min − 1reject "mínimo 8"
8minaccept
9min + 1accept
19max − 1accept
20maxaccept
21max + 1reject "máximo 20"

El foco está en 7-8 y 20-21

Esos cuatro valores prueban que la comparación usa >=8 y <=20 exactos. Como comparten salida por lado, van como filas de un Examples dentro de uno o dos TCs — no siete TCs sueltos.

El ejemplo concreto del límite 8-20. Los pares min-1/min y max/max+1 son los que cazan el off-by-one. Se parametrizan, no se explotan en N TCs.

técnica 3/5 · teoría

State-Transition

Para entidades con estado, modela los estados y las transiciones entre ellos. Cada movimiento permitido y cada movimiento prohibido es un caso de prueba.

Disparador

Un campo de estado o ciclo de vida: orden, suscripción, ticket, cuenta, documento.

La regla

1 TC por transición válida + 1 por transición inválida. Intentar lo prohibido debe ser rechazado limpiamente.

Dónde viven los defectos

En las transiciones inválidas. El happy path (avanzar de estado) casi siempre funciona; lo que rompe es cuando alguien intenta saltar o retroceder un estado que el negocio no permite.

State-transition: la cobertura de transiciones inválidas es donde se concentran los bugs. Conecta con el lifecycle de los propios TCs/bugs vistos antes.

técnica 3/5 · en la práctica

State — Ciclo de Vida de una Orden

Pending Paid Shipped Delivered ✓

Transiciones válidas → 1 TC c/u

  • Pending → Paid (pagar)
  • Paid → Shipped (despachar)
  • Pending → Cancelled (cancelar permitido)

Transiciones inválidas → 1 TC c/u

  • Shipped → Cancelled (rechazar 409)
  • Delivered → Paid (rechazar)
  • Pending → Shipped (saltar Paid → rechazar)
Orden: Pending→Paid→Shipped→Delivered. Cancel solo desde Pending/Paid. Los TCs inválidos (cancelar un Shipped, saltar Paid) son los que cazan los bugs de máquina de estados.

técnica 4/5 · teoría

Decision Table

Cuando 2+ condiciones interactúan para decidir una acción, enumera todas las combinaciones de condiciones → su resultado. Colapsa las imposibles o equivalentes. 1 TC por regla sobreviviente.

Disparador

2+ condiciones que se combinan: reglas de negocio con AND/OR, permisos, pricing, elegibilidad.

El método

2 condiciones → 2² = 4 combos. 3 → 8. Enumera, colapsa reglas equivalentes, queda un set mínimo que cubre toda la lógica.

Por qué gana a probar "casos sueltos"

Garantiza que ninguna combinación de condiciones queda sin probar — el hueco típico cuando se diseñan TCs a ojo.

Decision table: enumera combinaciones de condiciones, colapsa equivalentes, 1 TC por regla. Evita el hueco de combinaciones no probadas.

técnica 4/5 · en la práctica

Decision Table — Envío Gratis

Regla: envío gratis si es miembro O el carrito > $50.

Regla¿Miembro?¿Carrito > $50?AcciónTC
R1Envío gratiscolapsan → 1 TC
R2NoEnvío gratis
R3NoEnvío gratisTC propio
R4NoNoCobra envíoTC propio

El colapso

R1 y R2 dan el mismo resultado porque ser miembro ya basta — el carrito es irrelevante ahí. Colapsan en 1 TC ("miembro → gratis sin importar carrito"). 4 combos → 3 TCs que cubren toda la lógica.

Regla OR: miembro O carrito>50. R1+R2 colapsan (miembro siempre gratis). Resultado: 3 TCs cubren las 4 combinaciones. Enseña el colapso de equivalentes.

técnica 5/5 · teoría

Pairwise (All-Pairs)

Con 3+ factores combinables, la combinación completa explota. Pairwise cubre cada par de valores con muchísimos menos casos — porque la mayoría de defectos surgen de la interacción de dos factores, no de cinco a la vez.

Disparador

3+ factores que se combinan: browser × OS × plan, rol × permiso × feature flag, idioma × moneda × región.

La regla

Genera el set all-pairs y registra la reducción — que se vea "apliqué pairwise: 72 → 9", nunca un recorte silencioso.

El supuesto que la habilita

Pairwise asume que los bugs por interacción de 3+ factores simultáneos son raros. Si tu dominio sí los tiene (ej. seguridad), complementa con casos dirigidos.

Pairwise: cubre todos los pares con un set mínimo. Asume que las interacciones de 2 factores cubren la mayoría de defectos. Siempre logear la reducción (no es cap silencioso).

técnica 5/5 · en la práctica

Pairwise — Compatibilidad de Plataforma

Browser

Chrome · Firefox · Safari

OS

Windows · macOS · Linux

Plan

Free · Pro

18
combinación completa
3 × 3 × 2 = todas las combinaciones
9
set pairwise
cada par (browser-OS, browser-plan, OS-plan) cubierto
−50%
casos ahorrados
misma cobertura de pares, mitad del esfuerzo

Lo que se documenta

Un solo TC parametrizado: Scenario Outline con 9 filas de Examples (browser, os, plan) + la nota "pairwise: 18→9" para que la reducción sea auditable.

Browser(3)×OS(3)×Plan(2)=18 → ~9 pairwise. Se documenta como un Scenario Outline parametrizado con la reducción logeada. Cada par de valores aparece al menos una vez.

las 5 técnicas en una mirada

Técnica → Disparador → Ejemplo

TécnicaDisparador en el ACProduceEjemplo del deck
Equivalence PartitioningCualquier input (siempre)1 TC por clase de salidalogin: inválidas→401 (1 TC) vs bloqueada→423 (1 TC)
Boundary Value AnalysisRango · límite · longitud · fechamin±1, max±1 + zero/nullpassword 8-20: prueba 7·8·9 y 19·20·21
State-TransitionUn campo de estado / ciclo de vida1 TC por transición válida + inválidaorden: cancelar un Shipped → rechazo
Decision Table2+ condiciones que interactúan1 TC por regla (colapsa equivalentes)envío gratis: 4 combos → 3 TCs
Pairwise3+ factores combinablesset all-pairs (log de la reducción)browser×OS×plan: 18 → 9

El mapa mental

EP es el piso (siempre aplica); las demás se gatillan por la forma del AC. Derivas amplio por técnica (1:N), persistes por ROI. La técnica gobierna la forma de lo que documentas, no el cuánto.

Recap visual antes del quiz: una sola mirada al disparador→técnica→ejemplo. EP es el piso; el resto se dispara por la forma del AC. Conecta con la tabla de disparadores (slide overview) cerrando la sección de técnicas.

quiz · las 5 técnicas (1/2)

¿Qué Técnica Aplica?

Q1El AC dice "el cupón acepta entre 5 y 100 caracteres". ¿Técnica obligatoria?
AEquivalence Partitioning — un válido, un inválido
BBoundary Value Analysis — 4·5·6 … 99·100·101 + vacío
CPairwise — combinar longitudes
BVA. Hay un rango (5-100) → obligatoria. Prueba los bordes (min-1/min/min+1 y max-1/max/max+1) + vacío/null. EP elige el representante; BVA caza el off-by-one en la frontera.
Q2El precio depende de DOS condiciones: ¿es miembro? y ¿pago anual? Quieres cubrir todas las combinaciones sin huecos.
ADecision Table — enumera las 4 combinaciones, colapsa equivalentes, 1 TC por regla
BBoundary Value Analysis — están en los bordes
CEquivalence Partitioning — una clase por condición
Decision Table. 2+ condiciones que interactúan → tabla de decisión. Garantiza que ninguna combinación queda sin probar (el hueco típico al diseñar a ojo), y colapsa las reglas que dan el mismo resultado.
Parte 1 de 2: BVA (rango) y Decision Table (2 condiciones). EP aparece como distractor en ambas.

quiz · las 5 técnicas (2/2)

¿Qué Técnica Aplica?

Q3Validar la app en Browser (3) × OS (3) × Plan (2) sin correr las 18 combinaciones completas.
AState-Transition — hay configuraciones
BEquivalence Partitioning — agrupa por clase
CPairwise — cubre cada par con ~9 casos, log de la reducción 18→9
Pairwise. 3+ factores combinables → all-pairs. Cubre cada par (browser-OS, browser-plan, OS-plan) en ~9 casos en vez de 18. Asume que las interacciones de 2 factores cazan la mayoría de defectos.
Q4Una orden no debe poder cancelarse una vez está "Shipped". ¿Qué técnica modela esto?
AState-Transition — 1 TC por transición inválida (Shipped → Cancelled rechazada)
BBoundary Value Analysis — está en el borde del flujo
CDecision Table — combina estado y acción
State-Transition. Es una entidad con estado; "cancelar un Shipped" es una transición inválida → su propio TC que verifica el rechazo. Ahí viven los bugs de máquina de estados.
Parte 2 de 2: Pairwise (3 factores) y State-Transition (transición inválida). Junto con la 1/2 cubre las 5 técnicas: BVA, Decision, Pairwise, State directos + EP como distractor recurrente.

data-driven sin hardcodear

Dos Tablas que NO se Confunden

Examples: — qué cambia

Los valores que varían por corrida, una tabla por partición de equivalencia. Un valor que cambia el caso → columna de Examples.

Variables — cómo obtener

En la Description: explica cómo obtener cada variable en runtime (la query SQL). No varía por corrida. Un valor que buscas para correr → fila de Variables.

variables, nunca hardcode
# MAL — hardcoded
Given a mentor exists with user_id "550e8400-e29b-41d4-a716-446655440000"
# BIEN — patrón variable + tabla Variables que dice cómo obtenerlo
Given a verified mentor exists with {mentor_id} in the database
  # {mentor_id} → SELECT id FROM profiles WHERE role='mentor' AND is_verified=true LIMIT 1

Único caso donde el literal SÍ va

Cuando el AC mismo define el valor: Then the field must accept maximum 500 characters o Then the rating is displayed in "X.X/5.0" format. Beneficios: durabilidad, portabilidad, claridad, automatización.

Distinción clave: Examples (qué varía, una por partición) vs Variables (cómo se obtiene, query). Un TC parametrizado típicamente tiene AMBAS. Sin Xray es el mismo texto Gherkin en la Description del Test issue.

quiz · parametrización

Parametrización

Q1En un Scenario Outline, ¿qué va en la tabla Examples y qué en la tabla Variables?
AExamples = los valores que cambian el caso (por partición); Variables = cómo obtener cada dato en runtime (la query)
BExamples = las queries SQL; Variables = los valores de prueba
CSon lo mismo, se usa cualquiera de las dos
A. Regla: un valor que cambia el caso → columna de Examples (uno por partición de equivalencia). Un valor que buscas para poder correr → fila de Variables con su query. Un TC parametrizado típicamente tiene ambas.
Q2En el Gherkin necesitas el UUID de un mentor verificado. ¿Dónde va y cómo?
AHardcodeado en el Given para que sea reproducible
B{mentor_id} + fila en la tabla Variables con la query SQL para obtenerlo
CComo columna en Examples
B. Nunca hardcodees UUIDs/emails. Variable {mentor_id} + tabla Variables que dice cómo obtenerlo en runtime (no varía el caso → no es Examples). Durabilidad y portabilidad.
BVA obligatoria en rangos; variables nunca hardcodeadas (la tabla Variables explica cómo obtenerlas). Examples = lo que varía; Variables = cómo se obtiene.

PARTE 04

Priorización
El Arte del ROI

La mayoría de los escenarios deben terminar Deferred. El ROI decide cuáles valen el costo de mantener: Valor sobre Costo, sesgado por Riesgo.

El usuario pidió "el arte de priorizar con todos los factores, Valor-Costo-Riesgo". Aquí: los 3 filtros Phase-0, la fórmula ROI, la tabla de factores 1-5, y los 3 veredictos.

deriva amplio, persiste poco

Tres Capas, Tres Conteos

1

Derivar (Diseño)

Considera muchos casos por técnica (1:N). Vive en el análisis de priorización, no aún en el TMS. Gratis.

2

Documentar (este skill)

Crea un TC persistente solo para lo que vale re-ejecutar: Candidate + Manual. Deferred va al reporte, no al TMS.

3

Automatizar

Los Candidates fluyen a /test-automation. Los pocos.

La forma sana: "80 → 12 → 8"

Analizaste 80, documentaste 12, automatizaste 8 — nunca "documenta los 80". Un test entra al repositorio porque se va a re-ejecutar, jamás para llegar a un conteo. Si >50% queda Candidate/Manual, re-aplica el filtro más duro.

Tres capas, tres conteos. La regla rectora: persistir es ROI-gated. La mayoría debe ser Deferred (no se crea TC en el TMS).

el gate antes del ROI

Tres Preguntas Filtro — Falla una → Deferred

1

¿Protege contra regresiones FUTURAS?

Si fue un typo de una sola vez en área estable, la respuesta es no → Defer.

2

¿Hay bugs PREVIOS en esta área?

Sí → prioriza aun con ROI moderado ("falló una vez, puede fallar de nuevo"). La regla de bug previo sobreescribe los umbrales.

3

¿Es concern de APP o de FEATURE?

XSS / a11y / performance / responsive son suites a nivel app, no TCs por feature → Defer de este scope (handoff explícito, no drop silencioso).

Lo transversal no es un TC

"Mobile responsive", "XSS", "Performance" se validan dentro de otros TCs o en una suite a nivel app — nunca como TC propio.

Los 3 filtros corren ANTES del ROI. Fallar cualquiera = Deferred. La regla de bug previo (Q2) es la que sobreescribe los umbrales de ROI hacia arriba.

valor sobre costo

ROI = (F × I × S) / (E × D)

Frequency × Impact × Stability — el valor/riesgo (multiplican) — dividido por Effort × Dependencies — el costo (dividen). Un "flujo crítico" con Effort=5 y Dependencies=5 tiene ROI bajo por diseño. Eso es correcto, no un bug de la fórmula.

La fórmula es Valor-Costo-Riesgo hecho concreto: numerador = valor+riesgo (frecuencia, impacto, estabilidad), denominador = costo (esfuerzo, dependencias). Effort y Dependencies son DIVISORES: más alto = peor.

cada factor, escala 1-5

Los Cinco Factores

Factor12345
Frequency (cuán seguido corre)AnualPor releasePor sprintDiarioPor PR/commit
Impact (si falla)CosméticoMolestia menorDegrada UXBloquea featureRevenue / core
Stability (del flujo)Muy volátilInestableModeradoEstableSin cambios meses
Effort ÷ (automatizar)TrivialBajo (horas)Medio (1-2 días)Alto (varios días)Muy alto (semana+)
Dependencies ÷Ninguna1-2 simples3-45+Externos complejos

Bonus de valor por componente

Si un TC se reutiliza en N flujos E2E: Component Value = Base ROI × (1 + 0.2 × N). Un átomo de ROI bajo como authenticateSuccessfully se vuelve automatizable puro por reutilización.

Effort y Dependencies van en el denominador (más alto = peor). Los otros 3 multiplican. El bonus de componente premia la reutilización.

cada escenario termina en uno

Candidate · Manual · Deferred

VeredictoLo disparaA dónde va
CandidateROI > 3.0, O (ROI 1.5-3.0 Y bug previo), O happy path críticoAlimenta /test-automation. Draft→In Design→Ready→In Review→Candidate
ManualROI 0.5-1.5 Y no automatizable (juicio humano, inspección visual)Terminal: suite de regresión manual. No es callejón sin salida — puede volver a In Review si el ROI cambia
DeferredROI < 0.5, O falla un filtro Phase-0, O validación de una sola vezTerminal: NO entra a regresión. jira-native: no se crea TC, va al reporte. jira-xray: el Test de sprint queda sin promover

La modalidad cambia el verbo, no el veredicto

El veredicto ROI es idéntico en ambas modalidades. jira-native: Phase 3 crea Tests para Candidate+Manual. jira-xray: los Tests ya existen del sprint; Phase 3 los promueve al Test Plan de regresión y los enriquece.

Tres buckets, no hay cuarto. Regla de oro: si >50% queda Candidate/Manual, el filtro Phase-0 se aplicó flojo. La mayoría debe ser Deferred.

scoreando un escenario real

ROI en Acción

Checkout — pago con tarjeta (happy path)

Frequency = 5 (por PR)
Impact = 5 (revenue/core)
Stability = 4 (estable)
Effort = 3 (1-2 días) ÷
Dependencies = 4 (gateway pago) ÷

ROI = (5×5×4)/(3×4) = 100/12 ≈ 8.3

> 3.0 + happy path crítico → Candidate

Typo de tooltip en pantalla de ajustes

Frequency = 1 (rara vez)
Impact = 1 (cosmético)
Stability = 5 (no cambia)
Effort = 2 ÷
Dependencies = 1 ÷

ROI = (1×1×5)/(2×1) = 5/2 = 2.5

Sin bug previo + validación de una vez → falla Phase-0 → Deferred

El happy path crítico va Candidate aunque tenga dependencias. El typo, aun con ROI 2.5, falla el filtro Phase-0 (validación de una sola vez) → Deferred. El gate Phase-0 corre ANTES de mirar el número.

quiz · parte 4

Priorización & ROI

Q1Un flujo crítico tiene Effort=5 y Dependencies=5, dando ROI bajo. ¿Qué significa?
AEs correcto por diseño — Effort y Dependencies son divisores; automatizarlo cuesta mucho
BEs un bug de la fórmula — un flujo crítico siempre debe ser Candidate
CHay que ignorar el ROI y automatizarlo igual
A. Effort y Dependencies van en el denominador: más alto = peor ROI. Un flujo crítico carísimo de automatizar con muchas dependencias tiene ROI bajo a propósito — quizás Manual hasta que baje el costo.
Q2Un escenario tiene ROI 2.2, pero hay un bug cerrado previo justo en esa área. ¿Veredicto?
ADeferred — ROI debajo de 3.0
BCandidate — la regla de bug previo sobreescribe (ROI 1.5-3.0 + bug previo)
CManual — ROI intermedio siempre es manual
Candidate. "Falló una vez, puede fallar de nuevo": un bug previo en el área promueve a Candidate aun con ROI 1.5-3.0. La regla de bug previo sobreescribe los umbrales.
Effort/Dependencies son divisores (caro = ROI bajo, correcto). La regla de bug previo es la sobreescritura clave: prioriza incluso con ROI moderado.

PARTE 05

El TMS
Xray o Jira-native

Los mismos conceptos (ATP, ATR, TC) viven en contenedores distintos según la modalidad. Resuélvela en Phase 0, antes de documentar.

El usuario pidió "con Xray o sin Xray, como sea". Aquí: el mapeo de entidades, los dos campos de estado, el state machine y la trazabilidad por modalidad.

mismos conceptos, distinto contenedor

Xray vs Jira-native — el Mapeo

ArtefactoModality jira-xrayModality jira-native
ATPIssue Test Plan, enlazado al StoryCampo {{acceptance_test_plan}} del Story (o comment fallback). Sin issue.
ATRIssue Test Execution con Test Runs por TC, Environment, fechasCampo {{acceptance_test_results}} del Story. Sin issue.
TCIssue Test (Manual / Cucumber / Generic)Issue type Test nativo; Description lleva el template completo
Test Set / PreconditionIssue types de primera clase de XrayNo existen — labels + agrupación por Epic
Sync de resultadosCI importa JUnit/Cucumber → Test Runs auto-actualizanScript custom actualiza el campo Test Status por TC

Resuélvela primero (Phase 0)

¿El proyecto tiene Xray instalado y licenciado? Auto-resuelve por {{TMS_CLI}}, luego master-test-plan.md, luego listando issue types. Solo pregunta si los 3 fallan. Sticky — no la re-resuelvas a mitad de sesión.

Una decisión por proyecto, nunca se mezcla (anti-patrón D5). En jira-native ATP/ATR son campos del Story; en xray son issues reales, queryables por JQL y target del import de CI.

la distinción que arregla los dashboards

Test Status (Workflow) ≠ Execution Status (Run)

Test Status — el ciclo de vida

"¿Dónde está el TC en su vida de documentación/automatización?" Persiste entre corridas.

DraftIn DesignReadyIn ReviewCandidateIn AutomationPull RequestAutomatedManualDeprecated

Execution Status — el resultado de la corrida

"¿Pasó la última vez que se corrió?" Resetea cada ejecución.

TODOEXECUTINGPASSFAILBLOCKEDABORTED

Son dos campos independientes

Automated (workflow) + FAIL (última corrida) es una combinación válida y común: el TC está vivo en CI, pero hoy falló. El rollup PASSED/FAILED del ATR viene del Execution Status, no del Test Status. Confundirlos es la causa #1 de dashboards y JQL malos.

La distinción load-bearing. Test Status = vida larga (planning/ROI/intake de automatización). Execution Status = por corrida (reporting de regresión, GO/NO-GO, salud de CI).

el state machine del TC

Del Draft al Automated — Sin Saltos

Draft In Design Ready In Review Candidate In Automation Pull Request Automated ✓
ramas terminales: Ready → Manual cualquiera → Deprecated

No saltar

Draft no salta a Automated.

Back limitado

Solo "back to In Design" y "→ Deprecated".

Manual no es final

Manual puede volver a In Review si el ROI cambia.

Automated es la meta

Mueve cuantos razonables a Automated.

El veredicto ROI mapea a estados: Candidate→In Review→Candidate; Manual→for_manual. Mismo state machine en ambas modalidades. Nunca saltes estados; rework usa back_from_*.

cómo cuelgan los artefactos

La Cadena US → ATP → ATR → TC

modelo de trazabilidad (jira-xray)
User Story (PROJ-123)
   ├── is tested by ──→ ATP (ATP: PROJ-123: Apply discount at checkout)
   └── is tested by ──→ ATR (ATR: PROJ-123: Story Testing)
            ATP designs          ATR executes
                  ╲              ╱
                   ▼            ▼
                  [ TC-1, TC-2, … TC-N ]   # cada uno cubre un AC
# El Story enlaza SOLO a ATP y ATR. Los TCs agregan vía ATP/ATR — nunca directo.

jira-xray — indirecto

El TC nunca se enlaza al Story directo. ATP designs TC, ATR executes TC. Evita ruido de links. Crea ATP y ATR antes del primer TC.

jira-native — directo

Sin issues ATP/ATR, el TC se enlaza al Story vía is tested by — es la única arista de trazabilidad disponible.

Orden de linking inviolable: ATP→Story, ATR→Story, ATP↔ATR, luego cada TC→ATP(designs)+ATR(executes). Crear TCs antes deja referencias huérfanas. Todo TC cuelga de un Epic de Regresión (repositorio único).

Deriva Amplio. Documenta lo Repetible. Automatiza los Pocos.

Scope por el input → título de 4 segmentos + un (precond, acción) por TC → Gherkin con técnicas y variables → ROI = Valor/Costo sesgado por Riesgo → el TMS correcto, con o sin Xray.

← → navegar · S notas del orador · O resumen · T tema

Cierra atando las 5 disciplinas. El TMS es protección de regresión, no un almacén de conteos: cada TC existe porque se va a re-ejecutar.
⭐ 0/12
← → navegar · O resumen · S presentador · N notas · F pantalla