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 Z と Red Hat Ansible Lightspeed で利用可能になるとのことだ。
COBOL コードのリライトには多数の開発者と手間のかかる手作業が必要であり、何年もの年月と数百万ドルの費用をかけても近代化できるのはごく一部にとどまる。IBM watsonx Code Assistant では巨大でモノリシックなアプリケーションのリファクタリング・変換・検証を自動化し、ビジネスサービスごとに分離して近代化できるという。
変換の過程では COBOL コードを Java コードに変換するほか、COBOL コードのままで最適化を実行することも可能だ。IBM では COBOL から変換した Java コードが Java 開発者から見て自然なものとなることを目指しているそうだ。データソースやアプリケーションサーバーはそのままでよく、移行のための処理は不要とのこと。
IBM watsonx Code Assistant は IBM Z と Red Hat Ansible Lightspeed で利用可能になるとのことだ。
またゴミが増えるだけ (スコア:3, すばらしい洞察)
COBOLを自動的にJavaやなんかの新しい言語に変換するプロジェクトは延々と行われている。
だが一度も成功したことがない。
人間に設計出来ない事が、AIなら出来るというのは幻想でしかなく、今度も失敗する。
仕様書を自動的にコードに変換するとかと同じ、見果てぬ夢。
Excelで書いた仕様書をコードに変換するツールに関わったことがあるが、
Excelではシンタックスエラーの一つも検出出来ないので、Eclipseで手書きした方が100倍速いというオチに。
さらにJavaソースのメンテは中国にいる部隊にやらせてるから、変数名の誤記を直すのに1週間かかる。
Re: (スコア:0)
確かにCOBOLを自動的にJavaやなんかの新しい言語に変換するプロジェクトは屍の山。
挑まねば成功は無い、とはいえ相当成功率は低かろう。
コードを近代化してもCOBOLを巡る問題点は (スコア:2)
コードそのものより、元々の要求仕様や設計が失われている・残された資料と現実のシステムやプログラムとの間にとんでもない乖離がある等々の方がデカイと思う。
Re: (スコア:0)
そんなものは、作り直したほうが早い。
COBOLの処理を (スコア:1)
直接AI化してメンテナンス性を下げてはどうだろうか
Re: (スコア:0)
直接AI化してメンテナンス性を下げてはどうだろうか
メンテナンスす性を今より悪化させるのですね
Gnu COBOLじゃだめなん? (スコア:1)
Re:Gnu COBOLじゃだめなん? (スコア:1)
メンテナンスできる状態で変換できるかどうかどうかじゃないでしょうか。
PythonなどでもCに変換できますが、変換後のコードを人間が読むのは無理。
>変換した Java コードが Java 開発者から見て自然なものとなることを目指している
というのが特徴かと。できるかどうかは分かりませんが。
Re:Gnu COBOLじゃだめなん? (スコア:1)
読めないのは言語の構文が異なるからじゃないよ。
そんなのは覚えれば良いだけだし。
グローバル変数まみれのスパゲッティが当たり前の文化があった時代のコードだから、変換したところで読み解けないことに変わりはない。
必要なのはリファクタリングして、丁寧に構造化しなおす作業。
Re: (スコア:0)
AIでできそうだし、AI以前のIDEの機能でもできそう… 今まで無かったのか
Re: (スコア:0)
別枝でも触れられているが、今のAIの方向性・性能だと、特別にチューニングしないと無理かも。
だって絶妙なタイミングでグローバル変数を使いまわししているから。
こういった問題をAIは苦手とする。
Re: (スコア:0)
Rustの借用チェッカーみたいなやつで、スコープを切って良い箇所を特定して、グローバル変数を撲滅できないかな?
Re: (スコア:0)
Cへ変換だと近代化では無いということでは
Re: (スコア:0)
まあCが古いのは否定しないけど、ならJavaなら近代化なのかと言われると…
まあCもJavaも最新の規格だとそれなりに近代化の影響を受けてるけどね。
Re: (スコア:0)
Java語の方が話す人が多いんじゃない?
Re: (スコア:0)
Javanese ?
Re: (スコア:0)
Sorry Javanese only.
コボラーは死なんよ。何度でも甦る。 (スコア:1)
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/
・人間のエンジニアが検証する前に本番環境にデプロイしないことを推奨しています。
希少なエンジニアを検証に専念させられるのは良い事かもしれませんが
そもそも絶対数的に足りるのだろうか?
#ワトソンと名付けられた時点で問題解決は・・・
いいと思います (スコア:0)
人海戦術でアホみたいに時間かければ人の手でできるけど、コストに見合わないので楽な方法を模索するというスタンス。
Re:いいと思います (スコア:1)
人員追加すると余計現場が混乱する現象がAIでより手軽に再現可能に
HDLみたいに (スコア:0)
HDL みたいにシミュレーションで期待値チェックっていう開発手法をソフトウェアがとりずらいのはよくわかるが、COBOL時代のソフトでも入出力さえ一致すればいいとかではないのかな。
(相手がある)通信とか人間の入力待ちとかもCOBOLで書いてある?
Re:HDLみたいに (スコア:1)
ソフトウェアテストでカバレッジ100%は目指すなとか何処かに書いてあったことは、門外漢の俺でも知っている
HDLだって、組み合わせ論理しかないなら楽だろうが、ステートが複雑ならテストも大変じゃねーのかねえ。CPUとか
まあそう言うことを言いたいのかもイマイチワカランけれど
Re: (スコア:0)
期待値チェックはやりますが、(ユニット)テスト自動化でしかない。
ソフトと同じ。なにがやりにくいのか? ユニットテスト自動化とかしないの?
(HDL開発でもユニットテスト手動化という手法はありますw)
HDLは内部状態の波形とか見たりダンプして比較したりするツールは充実してますけどね。
それはふつうデバッグ用途で検証用には使わんでしょ。
データ量が無駄に大きすぎるし、微妙な修正でも期待値が一気に変わってめんどくさすぎる。
けっきょくHDLで書くハードウェアロジックは、ソフトより比較的複雑じゃないんです。
がんばって1週間以上かけて書いたHDLのモジュールと、ちゃちゃって書いたソフトの関数の
複雑度が同じくらいだから、HDLはユニットテストが比較的広範囲に適用できているように
見えるんです。
入力端子に人間がくっついたりしないというのが大きいと思う。
Re: (スコア:0)
横だが、HDLで開発する際には、タイミングとは別に論理だけのチェックはやるよ。テストベンチとか書く
Re: (スコア:0)
それはソフトと同じでしょう?
ソフトでもなにもやりにくくないし、じっさいやられている。
Re: (スコア:0)
いや波形とか見たりダンプして比較したりするだけじゃないよね、と言うコメントを返しただけだが
ハルシネーション (スコア:0)
読めるものが誰もいないコードに生成AIを使うのは危険では?
Re:ハルシネーション (スコア:1)
相矛盾するコードが書かれていて、その解決の為に乗組員を殺していく様になればフィクションのAIに追いついたと言えるでしょう。
#乗組員って誰?
Re: (スコア:0)
相矛盾するコードが書かれていて、その解決の為に乗組員を殺していく様になればフィクションのAIに追いついたと言えるでしょう。
#乗組員って誰?
デバッグ要員やらPMを間接的にならありそう。
Re: (スコア:0)
オリジナルのCOBOLで今処理しているデータを、AIが作ったJAVAにINPUTして、オリジナルとまったく同じOUTPUTが出れば、AIは成功。
一致しないなら、失敗。
もちろんデータが変われば、COBOLとJAVAで違う可能性はあるけど、実際のINPUT/OUTPUTで検証した後のJAVAなら、バグ(COBOL版にある/なしにかかわらず)が見つかったら、メンテのしやすいJAVA版でバグFIXすればいい。
Re: (スコア:0)
ブラックボックス化しているのに、バグっぽい挙動含めて再現出来しないと
まずいのでは?
Re: (スコア:0)
COBOL版とJAVA版でINPUT/OUTPUTが一致するということは、バグも含めて再現している。
Re: (スコア:0)
しかし、比較する内容が足りないと、特定値がすり抜ける [srad.jp]。
Re: (スコア:0)
どこかのグローバル変数の値が変わると出力が変わるみたいなのをもれなく追跡できるかどうか大変疑問
Re: (スコア:0)
「バグ(COBOL版にある/なしにかかわらず)」じゃないのか?
Re: (スコア:0)
INPUT/OUTPUTで見つけられないハグはあっても検出できないからな。
Re: (スコア:0)
「バグっぽい挙動含めて再現」と完全に矛盾してるよな
結局テストケースにヘンペルの黒カラス全部用意しとく必要がある
Re: (スコア:0)
既にいないようなもんだからヘーキヘーキ
比較対象がおかしい (スコア:0)
コボルトとジャヴァウォックじゃあっと的すぎるじゃないですかー(違
AI素人だが (スコア:0)
AIが生成できるのは先駆者が作り出したことのあるコードですよね
近代化したコードを生成した勇者が居たことがないCOBOLに対して
近代化したコードをAIが生成できるのかしら
それとも現代的なAIはPython3ぽいオブジェクト指向のCOBOLを書き出してくれるの?
それすごいな
Re: (スコア:0)
将棋AIが新しい定跡を作っているみたいだから、新しいアルゴリズムを作っても不思議ではない
Re: (スコア:0)
まさか。少なくとも同次元の話ではない。
囲碁や将棋については「勝敗」が定義できる。言い換えると、
手の優劣を客観的に知ることができる。
ランダムに生成した手の中で、統計的により優れている手を
選び出すことで、新たな定石を「発見」することくらいはできた。。
しかしながらアルゴリズムの優劣や、そもそも「何が正しい
動作なのか」をAIは理解できない。この時点で統計的なアプローチは
無意味になる.
まして新しいアルゴリズムを「発明」するとなると望み薄。
それを実現するには、新たなブレイクスルーを待たねばなるまい。
Re:AI素人だが (スコア:1)
結果がわかっている場合は、計算速度で客観的に性能評価できるんじゃないですかね
ディープマインドがAIで高速アルゴリズムを発見、C++に採用
https://developers.srad.jp/story/23/06/25/1539236/ [developers.srad.jp]
Re: (スコア:0)
将棋AIでそれができるのは生成AIの技術(Transformer、将棋AIならDNN)が由来ではないよ。
自己対局による強化学習ができることが新しい定石を生み出せる理由。
コード生成でもできることはできる。例えばこういうの。
https://developers.srad.jp/story/23/06/25/1539236/ [developers.srad.jp]
でもまだ強化学習によるコード改良は一般的ではないです。
なぜかというと「何が良いコードなのか」という定義が難しく、作った後のコードが良いか悪いか判定も難しいから。
将棋の勝敗とか上のソートアルゴリズムは分かりやすい「良さ」が定義できるしテストも簡単だからいいのだけど、ソフトウェア全体でそれをやるのは難しい。
Re: (スコア:0)
素人に素人が答えて、わけのわからない話が展開されている。
流行りの話題で恥をかきたくなければ、ニューラルネットワークや生成AIについて勉強してみてはどうか。
Re: (スコア:0)
COBOLインタプリタを呼び出して丸投げするコードを生成してくれたりして
Re: (スコア:0)
例えば学習データにCを使えば学習結果をCからCOBOLに変換して近代化COBOLの学習データにできる(かもしれない)
IBMユーザーの集まりで昔ガイドシェアというのが在った (スコア:0)
こういった需要は銀行などの勘定系で必要だったのだろう。JavaのパフォーマンスをIBMは当時から代替可能と評価していたを。
C#のバージョン移転 (スコア:0)
COLBOLでこけてもC#のバージョン変換やフレームワークの破壊的な変更に半自動で対処できれば、それでよし
ついでに人間が何もしなくても期待通りのテストを書いてくれると助かる
順番としては・・・ (スコア:0)
対象のすべての業務をAIがすべて理解出来るようになってから、
COBOLとか処理系のAIによる最適化ですよね(走召糸色木亥火暴)
"castigat ridendo mores" "Saxum volutum non obducitur musco"