COBOLシステムのメンテナンス性能

性能だと思うんですよ、メンテナンス性ってのは。

国防総省の給与システムはCOBOLで、700万行に及ぶコードの大半は1960年代に書かれたものだという。コードは数十年前から更新されておらず、エラーも多発するが、古くなるにつれて維持が困難になっているそうだ。さらに、ドキュメントはかなり前に失われており、実質的に更新は不可能とのこと。

COBOLで書かれた米国防総省の給与システム700万行、実質的に更新不可能 | スラド

ブクマには結構「COBOLのせいじゃない」というコメントがありますね。確かに、COBOLであることが最も重要な問題ではない。でも、COBOLってメンテナンス性が悪いんだよね。特に昔書かれたものであれば。基本的に変数はグローバルなものを先頭で定義して使うし、それが複数のソースに分かれる。どこから参照しているかわからない。コピー句っていうテクを編み出してメンテ性を良くしてみたもののI/Fじゃない部分(ようは内部変数ね)については有効ではない。
まあCOBOL使いじゃない僕が言っているので間違っているかもしれないけど。

じゃあ新しい言語を使っていればメンテできる?そういうわけでもありませんね。やっぱり重要なのはドキュメントがちゃんと無いこと。「コードが仕様」といってもコードには意図が書けないんです。バグが仕様ですという訳にはいかない。だから、なんでこうなっているというのがわからないと直せないし、巨大なコードだと、「ここを直すと100万ステップ後の処理に影響がある」なんてことになりかねないw
比較的新しい言語であれば、I/Fの部分と内部の処理を明確に切り離しているから起きづらい問題ではあるけど、やっぱりそのI/F(データと言い換えてもいい)が何故その値を設定しているのかがはっきりしていないと「100万ステップ後以下略」になりますよね。

メンテナンス性が高いシステムっていうのは比較的小さい分割単位の処理において、「なぜなに」がはっきりしているものなんじゃないでしょうかね。