パスワードを忘れた? アカウント作成
16741300 story
IBM

IBM、生成AIでCOBOLコード近代化計画 72

ストーリー by headless
近代 部門より
IBM が同社の AI・データプラットフォーム watsonx の生成 AI で COBOL コードの近代化を加速すべく、IBM watsonx Code Assistant を開発しているそうだ (IBM Z and LinuxONE Community のブログ記事Ars Technica の記事The Register の記事紹介動画)。

COBOL コードのリライトには多数の開発者と手間のかかる手作業が必要であり、何年もの年月と数百万ドルの費用をかけても近代化できるのはごく一部にとどまる。IBM watsonx Code Assistant では巨大でモノリシックなアプリケーションのリファクタリング・変換・検証を自動化し、ビジネスサービスごとに分離して近代化できるという。

変換の過程では COBOL コードを Java コードに変換するほか、COBOL コードのままで最適化を実行することも可能だ。IBM では COBOL から変換した Java コードが Java 開発者から見て自然なものとなることを目指しているそうだ。データソースやアプリケーションサーバーはそのままでよく、移行のための処理は不要とのこと。

IBM watsonx Code Assistant は IBM ZRed Hat Ansible Lightspeed で利用可能になるとのことだ。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • またゴミが増えるだけ (スコア:3, すばらしい洞察)

    by Anonymous Coward on 2023年08月27日 17時29分 (#4518085)

    COBOLを自動的にJavaやなんかの新しい言語に変換するプロジェクトは延々と行われている。
    だが一度も成功したことがない。
    人間に設計出来ない事が、AIなら出来るというのは幻想でしかなく、今度も失敗する。

    仕様書を自動的にコードに変換するとかと同じ、見果てぬ夢。
    Excelで書いた仕様書をコードに変換するツールに関わったことがあるが、
    Excelではシンタックスエラーの一つも検出出来ないので、Eclipseで手書きした方が100倍速いというオチに。
    さらにJavaソースのメンテは中国にいる部隊にやらせてるから、変数名の誤記を直すのに1週間かかる。

    • by Anonymous Coward

      確かにCOBOLを自動的にJavaやなんかの新しい言語に変換するプロジェクトは屍の山。
      挑まねば成功は無い、とはいえ相当成功率は低かろう。

  • コードそのものより、元々の要求仕様や設計が失われている・残された資料と現実のシステムやプログラムとの間にとんでもない乖離がある等々の方がデカイと思う。

    • by Anonymous Coward

      そんなものは、作り直したほうが早い。

  • by Anonymous Coward on 2023年08月27日 15時04分 (#4518032)

    直接AI化してメンテナンス性を下げてはどうだろうか

    • by Anonymous Coward

      直接AI化してメンテナンス性を下げてはどうだろうか

      メンテナンスす性を今より悪化させるのですね

  • 試したことないけど、Cに変換できるんでしょ?
    • by Anonymous Coward on 2023年08月27日 17時30分 (#4518087)

      メンテナンスできる状態で変換できるかどうかどうかじゃないでしょうか。
      PythonなどでもCに変換できますが、変換後のコードを人間が読むのは無理。

      >変換した Java コードが Java 開発者から見て自然なものとなることを目指している
      というのが特徴かと。できるかどうかは分かりませんが。

      親コメント
    • by Anonymous Coward on 2023年08月27日 17時59分 (#4518096)

      読めないのは言語の構文が異なるからじゃないよ。
      そんなのは覚えれば良いだけだし。
      グローバル変数まみれのスパゲッティが当たり前の文化があった時代のコードだから、変換したところで読み解けないことに変わりはない。
      必要なのはリファクタリングして、丁寧に構造化しなおす作業。

      親コメント
      • by Anonymous Coward

        AIでできそうだし、AI以前のIDEの機能でもできそう… 今まで無かったのか

        • by Anonymous Coward

          別枝でも触れられているが、今のAIの方向性・性能だと、特別にチューニングしないと無理かも。
          だって絶妙なタイミングでグローバル変数を使いまわししているから。
          こういった問題をAIは苦手とする。

          • by Anonymous Coward

            Rustの借用チェッカーみたいなやつで、スコープを切って良い箇所を特定して、グローバル変数を撲滅できないかな?

    • by Anonymous Coward

      Cへ変換だと近代化では無いということでは

      • by Anonymous Coward

        まあCが古いのは否定しないけど、ならJavaなら近代化なのかと言われると…
        まあCもJavaも最新の規格だとそれなりに近代化の影響を受けてるけどね。

  • 日本語記事
    https://www.itmedia.co.jp/news/articles/2308/24/news103.html
    https://it.impress.co.jp/articles/-/25259
    https://gigazine.net/news/20230823-ibm-cobol-java-code/

    ・人間のエンジニアが検証する前に本番環境にデプロイしないことを推奨しています。

    希少なエンジニアを検証に専念させられるのは良い事かもしれませんが
    そもそも絶対数的に足りるのだろうか?

    #ワトソンと名付けられた時点で問題解決は・・・
  • by Anonymous Coward on 2023年08月27日 15時23分 (#4518036)

    人海戦術でアホみたいに時間かければ人の手でできるけど、コストに見合わないので楽な方法を模索するというスタンス。

  • by Anonymous Coward on 2023年08月27日 15時38分 (#4518038)

    HDL みたいにシミュレーションで期待値チェックっていう開発手法をソフトウェアがとりずらいのはよくわかるが、COBOL時代のソフトでも入出力さえ一致すればいいとかではないのかな。
    (相手がある)通信とか人間の入力待ちとかもCOBOLで書いてある?

    • by Anonymous Coward on 2023年08月27日 16時49分 (#4518066)

      ソフトウェアテストでカバレッジ100%は目指すなとか何処かに書いてあったことは、門外漢の俺でも知っている

      HDLだって、組み合わせ論理しかないなら楽だろうが、ステートが複雑ならテストも大変じゃねーのかねえ。CPUとか

      まあそう言うことを言いたいのかもイマイチワカランけれど

      親コメント
    • by Anonymous Coward

      期待値チェックはやりますが、(ユニット)テスト自動化でしかない。
      ソフトと同じ。なにがやりにくいのか? ユニットテスト自動化とかしないの?
      (HDL開発でもユニットテスト手動化という手法はありますw)

      HDLは内部状態の波形とか見たりダンプして比較したりするツールは充実してますけどね。
      それはふつうデバッグ用途で検証用には使わんでしょ。
      データ量が無駄に大きすぎるし、微妙な修正でも期待値が一気に変わってめんどくさすぎる。

      けっきょくHDLで書くハードウェアロジックは、ソフトより比較的複雑じゃないんです。
      がんばって1週間以上かけて書いたHDLのモジュールと、ちゃちゃって書いたソフトの関数の
      複雑度が同じくらいだから、HDLはユニットテストが比較的広範囲に適用できているように
      見えるんです。
      入力端子に人間がくっついたりしないというのが大きいと思う。

      • by Anonymous Coward

        横だが、HDLで開発する際には、タイミングとは別に論理だけのチェックはやるよ。テストベンチとか書く

        • by Anonymous Coward

          それはソフトと同じでしょう?
          ソフトでもなにもやりにくくないし、じっさいやられている。

          • by Anonymous Coward

            いや波形とか見たりダンプして比較したりするだけじゃないよね、と言うコメントを返しただけだが

  • by Anonymous Coward on 2023年08月27日 15時57分 (#4518043)

    読めるものが誰もいないコードに生成AIを使うのは危険では?

    • by Anonymous Coward on 2023年08月27日 19時01分 (#4518114)

      相矛盾するコードが書かれていて、その解決の為に乗組員を殺していく様になればフィクションのAIに追いついたと言えるでしょう。

      #乗組員って誰?

      親コメント
      • by Anonymous Coward

        相矛盾するコードが書かれていて、その解決の為に乗組員を殺していく様になればフィクションのAIに追いついたと言えるでしょう。

        #乗組員って誰?

        デバッグ要員やらPMを間接的にならありそう。

    • by Anonymous Coward

      オリジナルのCOBOLで今処理しているデータを、AIが作ったJAVAにINPUTして、オリジナルとまったく同じOUTPUTが出れば、AIは成功。
      一致しないなら、失敗。

      もちろんデータが変われば、COBOLとJAVAで違う可能性はあるけど、実際のINPUT/OUTPUTで検証した後のJAVAなら、バグ(COBOL版にある/なしにかかわらず)が見つかったら、メンテのしやすいJAVA版でバグFIXすればいい。

      • by Anonymous Coward

        ブラックボックス化しているのに、バグっぽい挙動含めて再現出来しないと
        まずいのでは?

        • by Anonymous Coward

          COBOL版とJAVA版でINPUT/OUTPUTが一致するということは、バグも含めて再現している。

          • by Anonymous Coward

            しかし、比較する内容が足りないと、特定値がすり抜ける [srad.jp]。

            • by Anonymous Coward

              どこかのグローバル変数の値が変わると出力が変わるみたいなのをもれなく追跡できるかどうか大変疑問

          • by Anonymous Coward

            「バグ(COBOL版にある/なしにかかわらず)」じゃないのか?

            • by Anonymous Coward

              INPUT/OUTPUTで見つけられないハグはあっても検出できないからな。

            • by Anonymous Coward

              「バグっぽい挙動含めて再現」と完全に矛盾してるよな
              結局テストケースにヘンペルの黒カラス全部用意しとく必要がある

    • by Anonymous Coward

      既にいないようなもんだからヘーキヘーキ

  • by Anonymous Coward on 2023年08月27日 16時04分 (#4518048)

    コボルトとジャヴァウォックじゃあっと的すぎるじゃないですかー(違

  • by Anonymous Coward on 2023年08月27日 17時00分 (#4518071)

    AIが生成できるのは先駆者が作り出したことのあるコードですよね

    近代化したコードを生成した勇者が居たことがないCOBOLに対して
    近代化したコードをAIが生成できるのかしら

    それとも現代的なAIはPython3ぽいオブジェクト指向のCOBOLを書き出してくれるの?
    それすごいな

    • by Anonymous Coward

      将棋AIが新しい定跡を作っているみたいだから、新しいアルゴリズムを作っても不思議ではない

      • by Anonymous Coward

        まさか。少なくとも同次元の話ではない。

        囲碁や将棋については「勝敗」が定義できる。言い換えると、
        手の優劣を客観的に知ることができる。
        ランダムに生成した手の中で、統計的により優れている手を
        選び出すことで、新たな定石を「発見」することくらいはできた。。

        しかしながらアルゴリズムの優劣や、そもそも「何が正しい
        動作なのか」をAIは理解できない。この時点で統計的なアプローチは
        無意味になる.

        まして新しいアルゴリズムを「発明」するとなると望み薄。
        それを実現するには、新たなブレイクスルーを待たねばなるまい。

      • by Anonymous Coward

        将棋AIでそれができるのは生成AIの技術(Transformer、将棋AIならDNN)が由来ではないよ。
        自己対局による強化学習ができることが新しい定石を生み出せる理由。

        コード生成でもできることはできる。例えばこういうの。
        https://developers.srad.jp/story/23/06/25/1539236/ [developers.srad.jp]

        でもまだ強化学習によるコード改良は一般的ではないです。
        なぜかというと「何が良いコードなのか」という定義が難しく、作った後のコードが良いか悪いか判定も難しいから。
        将棋の勝敗とか上のソートアルゴリズムは分かりやすい「良さ」が定義できるしテストも簡単だからいいのだけど、ソフトウェア全体でそれをやるのは難しい。

      • by Anonymous Coward

        素人に素人が答えて、わけのわからない話が展開されている。
        流行りの話題で恥をかきたくなければ、ニューラルネットワークや生成AIについて勉強してみてはどうか。

    • by Anonymous Coward

      COBOLインタプリタを呼び出して丸投げするコードを生成してくれたりして

    • by Anonymous Coward

      例えば学習データにCを使えば学習結果をCからCOBOLに変換して近代化COBOLの学習データにできる(かもしれない)

  • こういった需要は銀行などの勘定系で必要だったのだろう。JavaのパフォーマンスをIBMは当時から代替可能と評価していたを。

  • by Anonymous Coward on 2023年08月27日 18時43分 (#4518108)

    COLBOLでこけてもC#のバージョン変換やフレームワークの破壊的な変更に半自動で対処できれば、それでよし
    ついでに人間が何もしなくても期待通りのテストを書いてくれると助かる

  • by Seth (1176) on 2023年08月27日 19時55分 (#4518138) 日記

    対象のすべての業務をAIがすべて理解出来るようになってから、
    COBOLとか処理系のAIによる最適化ですよね(走召糸色木亥火暴)

    --
    "castigat ridendo mores" "Saxum volutum non obducitur musco"
typodupeerror

開いた括弧は必ず閉じる -- あるプログラマー

読み込み中...