Assurance qualité manuelleIngénieur QA manuel senior - Modernisation du mainframe

Lorsque vous validez manuellement une passerelle de traitement de transactions en ligne **CICS** (Customer Information Control System) qui expose des programmes **COBOL** hérités en tant que services web **RESTful** via **z/OS Connect**, quelle méthodologie de test systématique utiliseriez-vous pour détecter les violations de limites du tampon **COMMAREA**, vérifier l'intégrité du rollback **EXEC CICS SYNCPOINT** lors de la récupération de ressources réparties, et valider le traitement des déclencheurs **TDQ** (Transient Data Queue) lorsque plusieurs régions **CICS** partagent des clusters **VSAM** en mode d'accès **RLS** (Record Level Sharing) ?

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse à la question

Historique de la question

Cette question provient d'initiatives de modernisation d'entreprise où des transactions CICS anciennes de plusieurs décennies alimentant des systèmes bancaires ou d'assurance centraux sont exposées en tant que REST APIs modernes via z/OS Connect ou un middleware similaire. La complexité réside dans le décalage d'impédance entre les protocoles HTTP sans état et les contextes transactionnels CICS avec état, en particulier concernant le marshalling de données entre JSON et les copybooks COBOL. Historiquement, les approches de QA manuelles conçues pour soit des tests de terminal vert pures sur mainframe, soit des microservices modernes se révèlent inadéquates pour cette frontière hybride, conduisant à des défauts de production qui ne se manifestent que sous des conditions de charge spécifiques ou des cas de données extrêmes.

Le problème

La QA manuelle fait face à des défis uniques dans cet environnement, car les défauts se manifestent à l'intersection du comportement des systèmes distribués et des contraintes de mainframe héritées. Les tampons COMMAREA ont des longueurs fixes définies dans les copybooks COBOL, mais les charges utiles JSON sont de longueur variable, provoquant une tronçonnage silencieuse plutôt que des erreurs explicites lorsque z/OS Connect effectue le mapping des données. De plus, les transactions CICS utilisant EXEC CICS SYNCPOINT pour la cohérence de la base de données peuvent laisser des enregistrements orphelins si le client REST expire avant que le mainframe ne s'engage, cependant, la réponse HTTP peut trompeusement indiquer le succès. Enfin, les déclencheurs TDQ pour le traitement asynchrone peuvent se déclencher plusieurs fois lors de contentions de verrouillage RLS entre les régions CICS, causant des initiations de flux de travail en doublon que les tests automatisés de l'API ne peuvent détecter.

La solution

Une méthodologie systématique nécessite trois couches de validation.

D'abord, Boundary Analysis Testing utilise la partition d'équivalence dérivée des copybooks pour injecter des charges à des longueurs exactes de COMMAREA, vérifiant que EIBCALEN (Execute Interface Block Communication Area Length) correspond aux valeurs attendues dans le programme COBOL.

Deuxièmement, Transactional Integrity Verification implique la configuration de proxies réseau pour introduire délibérément des expirations pendant les opérations SYNCPOINT en cours, puis en utilisant les commandes CEMT (Master Terminal) pour inspecter les états de région CICS et le System Logger z/OS pour auditer les résultats de UR (Unit of Recovery).

Troisièmement, Concurrency Stress Testing utilise plusieurs clients REST pour simuler des contentions RLS, vérifiant l'idempotence TDQ par inspection de la file d'attente CEBR (Browse Transaction) et des utilitaires EXAMINE VSAM pour la validation de l'intégrité des fichiers.

Situation de la vie

Une grande compagnie d'assurance a migré leur transaction de demande de police CICS vers une application mobile orientée client via REST API. Après le déploiement, des corruptions de données intermittentes sont apparues où les adresses des assurés étaient tronquées au milieu du nom de rue, et des lettres d'approbation de police en double étaient envoyées à des clients de haute valeur, créant des risques de conformité réglementaire et des dommages à la réputation.

Description du problème

Le copybook COBOL définissait le champ d'adresse comme PIC X(30), mais l'application mobile a envoyé des caractères Unicode UTF-8 comprenant des caractères accentués multi-octets. Lorsque z/OS Connect a associé cela à EBCDIC, le nombre d'octets a dépassé le tampon sans soulever d'exceptions en raison de la logique de tronçonnage silencieuse. Pendant ce temps, sous charge de production, les déclencheurs TDQ se sont déclenchés deux fois lorsque les verrous RLS ont retardé la première reconnaissance de déclencheur, faisant que le travail par lot de correspondance a traité des demandes identiques deux fois.

Solutions envisagées

Solution 1 : Test API automatisé avec simulateur de mainframe

L'équipe a envisagé d'utiliser WireMock pour simuler les réponses CICS sans toucher au véritable mainframe, permettant des tests de régression rapides.

Avantages : Cycles d'exécution rapides, aucune consommation de coûteux MIPS sur mainframe, et capacité à s'exécuter dans des pipelines CI/CD sans connectivité au mainframe.

Inconvénients : Ne peut pas détecter le comportement de tronçonnage COMMAREA, la contention de verrouillage VSAM, ou les erreurs réelles de conversion d'encodage EBCDIC, procurant une fausse confiance dans la couverture des tests.

**Solution 2 : Débogage direct de la région CICS

Attacher CEDX (Execution Diagnostic Facility) pour tracer chaque appel EXEC CICS et inspecter le contenu des COMMAREA en temps réel.

Avantages : Identifier des échecs de commande exacts et voir les mises en page mémoire brutes des structures COBOL.

Inconvénients : Nécessite une expertise en mainframe spécialisée dont l'équipe QA manquait, impacte considérablement les performances de la région CICS, et ne peut pas simuler une latence réseau réaliste entre les clients REST distribués et le mainframe.

**Solution 3 : Test manuel systématique des limites avec inspection CEBR

Créer manuellement des demandes REST avec des longueurs de charge à 29, 30, et 31 caractères en utilisant Postman ou cURL, puis utiliser CEBR pour inspecter le contenu TDQ et CEMT INQUIRE FILE pour vérifier les états de verrouillage VSAM RLS.

Avantages : Valide le chemin de code de production réel, y compris la conversion d'encodage des caractères, l'application des limites du COMMAREA, et le comportement de verrouillage RLS à travers plusieurs régions CICS.

Inconvénients : Processus manuel long nécessitant des informations d'identification d'accès TSO sur le mainframe et des compétences d'interaction avec le terminal CICS.

Solution choisie

La solution 3 a été choisie car seule une validation directe pouvait révéler le débordement silencieux de COMMAREA et la condition de déclenchement en double du TDQ sous contention RLS. L'équipe a créé une matrice de test complète variant les longueurs de charge (valeurs limites), les ensembles de caractères (ASCII vs EBCDIC vs UTF-8), et les charges utilisateur simultanées (5, 10 et 20 requêtes simultanées).

Ils ont utilisé CEDF pour passer à travers l'exécution du programme COBOL et vérifier les valeurs EIBCALEN, confirmant que la logique du programme n'avait pas valider les longueurs de tampon entrantes avant le traitement. Pour le problème du TDQ, ils ont utilisé CEMT INQUIRE TDQUEUE pour surveiller les comptes de déclencheurs pendant les scénarios d'accès concurrentiels.

Résultat

Les tests ont révélé que les caractères UTF-8 dépassant 30 octets (pas de caractères) provoquaient un tronçonnage, en particulier lorsque les clients saisissaient des adresses avec plusieurs caractères accentués. Le programme COBOL a été modifié pour vérifier EIBCALEN par rapport aux longueurs attendues de COMMAREA et rejeter les charges utiles surdimensionnées avec des codes d'erreur HTTP 400 spécifiques.

Pour le problème du TDQ, les tests ont découvert que lorsque l'attente de verrou RLS dépassait 2 secondes, la logique de tentative de nouveau du REST gateway créait des entrées TDQ en double. L'architecture a été modifiée pour mettre en œuvre un traitement idempotent utilisant des identifiants de corrélation uniques passés par le DFHCOMMAREA, garantissant que les déclencheurs en double étaient détectés et rejetés par le processeur par lot. Le suivi post-déploiement a montré zéro erreur de tronçonnage et a éliminé la correspondance en double.

Ce que les candidats manquent souvent


Comment vérifiez-vous le comportement de rollback des transactions CICS lorsque le client REST se déconnecte après avoir envoyé la demande mais avant de recevoir la réponse ?

La plupart des candidats suggèrent simplement de vérifier l'état de la base de données après la déconnexion. Cependant, l'approche correcte consiste à utiliser CEMT INQUIRE TASK pour vérifier que la transaction a été purgée de la région CICS, puis à examiner les logs System Logger z/OS LOGSTREAM pour confirmer que le UR (Unit of Recovery) a été annulé. De plus, il faut vérifier la cohérence des VSAM RBA (Relative Byte Address) en utilisant IDCAMS VERIFY pour s'assurer qu'aucun enregistrement orphelin n'existe. Le point subtil que les candidats oublient est que CICS peut avoir engagé localement, mais le REST gateway peut ne pas avoir envoyé l'accusé de réception, nécessitant d'inspecter les journaux d'erreur z/OS Connect pour les timeouts HCON (HTTP Connection) par rapport aux codes abend CICS comme AEXZ (timeout).


Lors du test du traitement TDQ, comment distinguez-vous entre les déclencheurs TDQ intra-partition traités au sein de la même région CICS et les déclencheurs TDQ extra-partition écrits dans des ensembles de données z/OS et traités par des travaux par lot ?

Les candidats manquent souvent que le comportement TDQ change fondamentalement en fonction des définitions DESTID dans la DCT (Destination Control Table). Pour les TDQ intra-partition (basés sur la mémoire), utilisez CEBR pour inspecter les profondeurs de la file d'attente et CEMT SET TDQUEUE pour déclencher le traitement manuellement, vérifiant l'initiation immédiate de la transaction CICS. Pour les TDQ extra-partition, il faut surveiller l'ensemble de données physique z/OS en utilisant ISPF 3.4 ou SDSF pour observer l'apparition des enregistrements de déclenchement, puis vérifier l'exécution de la classe de travail JOB initiateur. La distinction critique est que les TDQ intra-partition maintiennent l'intégrité des transactions CICS via SYNCPOINT, tandis que les TDQ extra-partition nécessitent des stratégies de verrouillage VSAM RLS séparées pour prévenir les conditions de course lors de la suppression d'enregistrements entre CICS et les travaux par lot accédant au même DESTID.


Comment validez-vous le mapping de JSON à un copybook COBOL lorsque le copybook contient des clauses OCCURS DEPENDING ON (ODO) avec des tableaux de longueur variable ?

De nombreux testeurs vérifient uniquement des structures de longueur fixe et manquent la complexité ODO. Pour les clauses ODO, vous devez vérifier que z/OS Connect remplit correctement le champ de compteur de dépendance avant les données du tableau dans le COMMAREA. Les cas de test devraient inclure : (1) Zéro occurrences (tableau vide), (2) Une occurrence, (3) Occurrences maximales définies, et (4) Dépasser les occurrences maximales pour valider la gestion des rejets. Utilisez CEBR ou CEDF pour inspecter la mise en page du COMMAREA en hexadécimal, vérifiant que les champs COMP binaires maintiennent le bon ordre d'octets Big-Endian après la conversion numérique JSON. La complexité survient car les tableaux JSON n'ont pas d'indicateur de longueur explicite, nécessitant que le mapper calcule les valeurs ODO à partir des comptes d'éléments, ce qui peut mal compter si des valeurs null sont présentes dans la charge utile JSON, provoquant un débordement ou un tronçonnage de la table COBOL.