レガシーコードをリファクタリングすることがあるわけです。レガシーなので内部の挙動はよく把握されきっていません。部分的に把握できる特徴をプログラムでわかりやすく表現することが整理の方針となるわけですね。
よく見かけるのが、サブルーチンの引数が100個近い多数で、深いコールツリーの上から下まで多くの変数を連れ回すことです。昔はCOMMONブロックだったのだとしたら一応は改善なのかもしれませんが、サブルーチン毎に引数の順序・有無が微妙に違っていたり、呼び側とサブルーチンで変数名が違っていたりすると、もはやデータフローがひと目ではわからなくなってきます。
先日こんなやりかたをしてみたんですよね。
- 引数で連れ回されていた変数の定義場所をモジュールに移す
- 各サブルーチンでは、INTENT(IN) にできるものは引数渡しにして、値を変える変数はモジュールからの参照にする
もうちょっとスマートなやりかたがありそうなものだとは思うんですけどね。