ホスト移行の受け入れテストは、機能テストではなく現新比較(等価性検証)が主役です。旧(ゲン)と新(シン)を並走させ、出力が同じであることを証明する。ところが「正しく変換したはずなのに一致しない」が必ず起きます。その大半は不具合ではなく、プラットフォームが変わったことによる当然の差です。差の正体を知り、突合を設計しましょう。

01なぜ「一致しない」のか — 差は不具合とは限らない

完璧に変換できても出力が一致しないことがあります。理由は、メインフレームとAWS(Java等)で、文字の順序・数値の表現・端数の扱いが本質的に違うからです。これらを「不具合」として1件ずつ潰そうとすると、永遠に終わりません。「正当な差」と「本物の不具合」を最初に切り分ける設計が、現新比較の成否を分けます。

02罠① EBCDIC照合順序の逆転 — ソート結果が変わる

COBOLerが最初に唸るのがこれです。EBCDICとASCII/Unicodeでは文字コードの並び順が違います。EBCDICでは概ね「英小文字 → 英大文字 → 数字」の順ですが、ASCIIでは「数字 → 英大文字 → 英小文字」。つまり同じデータをソートしても、ゲンとシンで並び順が変わるのです。

英数字混在のキーでソートした帳票やファイルは、変換が正しくてもレコードの順序が食い違い、単純な行単位diffは全滅します。これは不具合ではなく、照合順序の仕様差です。

現場のコツ:対策は2つ。①比較の前にゲン・シン双方を同じ照合順序に正規化してから突合する。②あるいは、業務要件としてEBCDIC順を維持する必要があるなら、移行後もEBCDIC照合順を再現する(ソートキーの設計で吸収)。どちらを採るかは「その並び順自体が業務で意味を持つか」で決めます。帳票の並びが監査や後続処理の前提になっているケースは要注意です。

03罠② 数値・丸めの差 — 1円のズレは1円では済まない

COBOLの固定小数点演算と、移行先(JavaのBigDecimal等)の演算は、丸めや中間桁の扱いが完全一致するとは限りません。COBOLのROUNDED、切り捨て、COMPUTE文の中間結果の桁——これらの再現が甘いと、合計金額が1円ずれる。そして金額の1円は、監査上は「1円」では済まされません。

数値系は、変換ツール任せにせず、代表的な計算ロジックについてゲン・シンで意図的に境界値を通して一致を確認する専用テストを組むのが安全です。詳細はCOMP-3の記事で。

04罠③ 空白・LOW-VALUE・初期値・日付

05突合の設計 — 全件か、サンプルか

現新比較の設計判断は「どこまで突き合わせるか」です。

現場のコツ:現新比較は「並走環境をどう用意するか」から始まる大仕事です。ゲン(ホスト)側で同じ入力から出力を採取し、シン(AWS)側の出力と機械的に突合する基盤を、移行の早い段階で作ってください。この基盤の有無が、受け入れフェーズの長さを数倍変えます。差分の判定を人手の目視に頼ると、規模が大きいほど破綻します。

まとめ

現新比較は、ホスト移行で最も工数を過小評価される工程です。EBCDIC照合順序の逆転、数値の丸め差、空白と日付——「正しく変換したのに一致しない」の大半は正当な差で、それを不具合と切り分ける設計こそが本体です。変換ツールの選定より、この突合基盤の設計に時間を割いてください。COBOLerの方なら、ここで挙げた罠はどれも「あった、それ」だと思います。だからこそ、最初から織り込んで計画してください。

現新比較の設計(照合順序の正規化、数値等価の検証、突合基盤の構築)は、ホスト移行の受け入れ工数を左右します。EMWは「変換」ではなく「同じ結果が出ることの証明」まで含めて移行を設計します。

相談する
← ブログ一覧へ戻る