Control de Calidad Manual (QA)Ingeniero de QA Manual Senior - Modernización de Mainframe

Al validar manualmente un **CICS** (Sistema de Control de Información del Cliente) para procesamiento de transacciones en línea que expone programas **COBOL** heredados como servicios web **RESTful** a través de **z/OS Connect**, ¿qué metodología de prueba manual sistemática emplearías para detectar violaciones de límites de buffer **COMMAREA**, verificar la integridad de reversión de **EXEC CICS SYNCPOINT** durante la recuperación de recursos distribuidos y validar el procesamiento de activación de **TDQ** (Cola de Datos Transitorios) cuando múltiples regiones **CICS** comparten clústeres **VSAM** en modo de acceso **RLS** (Compartición de Nivel de Registro)?

Supere entrevistas con el asistente de IA Hintsage

Respuesta a la Pregunta

Historia de la Pregunta

Esta pregunta se origina en iniciativas de modernización empresarial donde las transacciones CICS de décadas que alimentan sistemas centrales de banca o seguros se exponen como modernas APIs REST a través de z/OS Connect o middleware similar. La complejidad surge de la desajuste de impedancia entre protocolos HTTP sin estado y contextos transaccionales CICS con estado, particularmente en lo que respecta al mapeo de datos entre JSON y copias COBOL. Históricamente, los enfoques de QA manual diseñados para pruebas de pantallas verdes puras en mainframe o microservicios modernos resultan inadecuados para esta frontera híbrida, lo que lleva a defectos de producción que se manifiestan solo bajo condiciones de carga específicas o casos límite de datos.

El Problema

QA manual enfrenta desafíos únicos en este entorno porque los defectos se manifiestan en la intersección del comportamiento de sistemas distribuidos y las limitaciones del mainframe heredado. Los buffers COMMAREA tienen longitudes fijas definidas en copias COBOL, pero las cargas útiles JSON son de longitud variable, lo que provoca truncamiento silencioso en lugar de errores explícitos cuando z/OS Connect realiza el mapeo de datos. Además, las transacciones CICS que utilizan EXEC CICS SYNCPOINT para la consistencia de la base de datos pueden dejar registros huérfanos si el cliente REST se agota antes de que el mainframe confirme, sin embargo, la respuesta HTTP podría indicar engañosamente el éxito. Finalmente, los disparadores de TDQ para procesamiento asíncrono pueden activarse múltiples veces durante las contenciones de bloqueo de registros RLS a través de regiones CICS, causando inicios de flujo de trabajo duplicados que las pruebas automatizadas de API no pueden detectar.

La Solución

Una metodología sistemática requiere tres capas de validación.

Primero, las Pruebas de Análisis de Límite utilizan particionamiento de equivalencias derivadas de copias para inyectar cargas útiles en los límites exactos de longitud de COMMAREA, verificando que EIBCALEN (Longitud del Área de Comunicación del Bloque de Interfaz Ejecutar) coincida con los valores esperados en el programa COBOL.

En segundo lugar, la Verificación de Integridad Transaccional implica configurar proxies de red para introducir tiempos de espera deliberados durante las operaciones de SYNCPOINT en vuelo, y luego utilizar comandos CEMT (Terminal Maestro) para inspeccionar los estados de la región CICS y el Registro del Sistema de z/OS para auditar los resultados de UR (Unidad de Recuperación).

Por último, las Pruebas de Estrés de Concurrencia utilizan múltiples clientes REST para simular contenciones de RLS, verificando la idempotencia de TDQ a través de la inspección de la cola CEBR (Transacción de Navegación) y utilidades EXAMINE de VSAM para la validación de la integridad del archivo.

Situación de la Vida Real

Una importante compañía de seguros migró su transacción de consulta de pólizas CICS a una aplicación móvil orientada al cliente a través de API REST. Después del despliegue, apareció una corrupción de datos intermitente donde las direcciones de los titulares de pólizas se truncaban a mitad de nombre de calle, y se enviaban cartas de respaldo de pólizas duplicadas a clientes de alto valor, creando riesgos de cumplimiento regulatorio y daños a la reputación.

Descripción del Problema

La copia COBOL definía el campo de dirección como PIC X(30), pero la aplicación móvil envió caracteres Unicode UTF-8 que incluían caracteres acentuados de múltiples bytes. Cuando z/OS Connect mapeó esto a EBCDIC, el conteo de bytes superó el buffer sin levantar excepciones debido a la lógica de truncamiento silencioso. Mientras tanto, bajo carga de producción, los disparadores de TDQ se activaron dos veces cuando los bloqueos RLS retrasaron el primer reconocimiento del disparador, haciendo que la tarea por lotes de correspondencia procesara las mismas solicitudes dos veces.

Soluciones Consideradas

Solución 1: Pruebas Automatizadas de API con Mainframe Simulado

El equipo consideró utilizar WireMock para simular respuestas CICS sin contactar al mainframe real, permitiendo pruebas de regresión rápidas.

Pros: Ciclos de ejecución rápidos, sin consumo de costosos MIPS de mainframe, y capacidad para ejecutarse en pipelines de CI/CD sin conectividad con el mainframe.

Contras: No puede detectar el comportamiento de truncamiento de COMMAREA, contenciones de bloqueo VSAM, o errores reales de conversión de codificación EBCDIC, proporcionando falsa confianza en la cobertura de prueba.

**Solución 2: Depuración Directa de la Región CICS

Conectar CEDX (Facilidad de Diagnóstico de Ejecución) para rastrear cada llamada EXEC CICS e inspeccionar el contenido de COMMAREA en tiempo real.

Pros: Localizar fallas exactas de comando y ver disposiciones de memoria en bruto de estructuras COBOL.

Contras: Requiere experiencia especializada en mainframe de la cual carecía el equipo de QA, impacta significativamente el rendimiento de la región CICS, y no puede simular latencia de red realista entre clientes REST distribuidos y el mainframe.

**Solución 3: Pruebas Manuales de Límite Sistemáticas con Inspección de CEBR

Crear manualmente solicitudes REST con longitudes de carga útil de 29, 30 y 31 caracteres utilizando Postman o cURL, y luego usar CEBR para inspeccionar los contenidos de TDQ y CEMT INQUIRE FILE para verificar los estados de bloqueo RLS de VSAM.

Pros: Valida la ruta de código de producción real, incluida la conversión de codificación de caracteres, la aplicación de límites de COMMAREA, y el comportamiento de bloqueo de RLS a través de múltiples regiones CICS.

Contras: Proceso manual que consume tiempo requiriendo credenciales de acceso TSO en mainframe y habilidades de interacción con terminal CICS.

Solución Elegida

Se seleccionó la Solución 3 porque solo la validación directa podría exponer el desbordamiento de COMMAREA silencioso y la condición de activación duplicada de TDQ bajo contención de RLS. El equipo creó una matriz de prueba integral variando las longitudes de carga útil (valores límite), conjuntos de caracteres (ASCII vs EBCDIC vs UTF-8), y cargas de usuarios concurrentes (5, 10 y 20 solicitudes simultáneas).

Utilizaron CEDF para seguir la ejecución del programa COBOL y verificar los valores de EIBCALEN, confirmando que la lógica del programa no validaba las longitudes de buffer entrantes antes de procesar. Para el problema de TDQ, usaron CEMT INQUIRE TDQUEUE para monitorear los conteos de disparadores durante escenarios de acceso concurrente.

Resultado

Las pruebas revelaron que los caracteres UTF-8 que excedían los 30 bytes (no caracteres) causaron truncamiento, específicamente cuando los clientes ingresaron direcciones con múltiples caracteres acentuados. Se modificó el programa COBOL para verificar que EIBCALEN coincidiera con las longitudes esperadas de COMMAREA y rechazar cargas útiles sobredimensionadas con códigos de error HTTP específicos 400.

Para el problema de TDQ, las pruebas descubrieron que cuando la espera del bloqueo RLS excedía 2 segundos, la lógica de reintento de la puerta de enlace REST creó entradas TDQ duplicadas. La arquitectura se modificó para implementar un procesamiento idempotente usando identificaciones de correlación únicas pasadas a través de DFHCOMMAREA, asegurando que los disparadores duplicados fueran detectados y descartados por el procesador por lotes. El monitoreo posterior al despliegue mostró cero errores de truncamiento y eliminó la correspondencia duplicada.

Lo que los candidatos a menudo pasan por alto


¿Cómo verificas el comportamiento de reversión de la transacción CICS cuando el cliente REST se desconecta después de enviar la solicitud pero antes de recibir la respuesta?

La mayoría de los candidatos sugieren simplemente verificar el estado de la base de datos después de la desconexión. Sin embargo, el enfoque correcto implica usar CEMT INQUIRE TASK para verificar que la transacción esté purgada de la región CICS, luego examinar el Registro del Sistema de z/OS LOGSTREAM para confirmar que la UR (Unidad de Recuperación) fue revertida. Además, se debe verificar la consistencia de RBA (Dirección de Byte Relativa) de VSAM utilizando IDCAMS VERIFY para asegurarse de que no existan registros huérfanos. El punto sutil que los candidatos pasan por alto es que CICS puede haber confirmado localmente, pero la puerta de enlace REST podría no haber enviado la confirmación, lo que requiere la inspección de los registros de errores z/OS Connect para HCON (Conexión HTTP) vencida frente a códigos de error de CICS como AEXZ (tiempo de espera).


¿Cuando pruebas el procesamiento de TDQ, cómo distingues entre disparadores de TDQ intra-partición procesados dentro de la misma región CICS frente a disparadores de TDQ extra-partición escritos en conjuntos de datos de z/OS y procesados por trabajos por lotes?

Los candidatos a menudo pasan por alto que el comportamiento de TDQ cambia fundamentalmente según las definiciones de DESTID en la DCT (Tabla de Control de Destinos). Para los TDQ intra-partición (basados en memoria), utiliza CEBR para inspeccionar las profundidades de las colas y CEMT SET TDQUEUE para activar el procesamiento manualmente, verificando la iniciación inmediata de transacciones CICS. Para los TDQ extra-partición, debes monitorear el conjunto de datos físico z/OS utilizando ISPF 3.4 o SDSF para observar los registros de disparadores que aparecen, y luego verificar la ejecución de la clase de trabajo iniciador. La distinción crítica es que los TDQ intra-partición mantienen la integridad de las transacciones CICS a través de SYNCPOINT, mientras que los TDQ extra-partición requieren estrategias de bloqueo VSAM RLS separadas para prevenir condiciones de carrera de eliminación de registros entre CICS y trabajos por lotes que acceden al mismo DESTID.


¿Cómo validas el mapeo de JSON a la copia COBOL cuando la copia contiene cláusulas OCCURS DEPENDING ON (ODO) con arreglos de longitud variable?

Muchos testers solo verifican estructuras de longitud fija y pasan por alto la complejidad de ODO. Para las cláusulas ODO, debes verificar que z/OS Connect complete correctamente el campo de contador de dependencia antes de los datos del arreglo en el COMMAREA. Los casos de prueba deben incluir: (1) Cero ocurrencias (arreglo vacío), (2) Una sola ocurrencia, (3) Máximas ocurrencias definidas, y (4) Excediendo máximas ocurrencias para validar el manejo de rechazo. Utiliza CEBR o CEDF para inspeccionar la disposición del COMMAREA en hexadecimal, verificando que los campos binarios COMP mantengan el correcto orden de bytes Big-Endian después de la conversión numérica JSON. La complejidad surge porque los arreglos JSON no tienen un indicador de longitud explícito, lo que requiere que el mapeador calcule los valores ODO a partir de los conteos de elementos, que pueden contarse incorrectamente si los valores null están presentes en la carga útil de JSON, causando un desbordamiento o truncamiento en la tabla COBOL.