どの様な話?
「リファクタリング」とは、
リファクタリング (refactoring) とは、コンピュータプログラミングにおいて、プログラムの外部から見た動作を変えずにソースコードの内部構造を整理することである。
というプログラミングの技法ですが、これをやると命の危機になります。
口の中が乾き、食べる気力も失せ、手指が震えます。
何が起きたのか?
画面のプログラムで、要件に従って修正をしていたのですが、
- 同じはずの、選択肢表示(コンボボックス)を担当するプログラムの部分で、
- 2箇所有る表示が、修正前は同じ動作をしていたが、
- 修正をすると、どちらかがダメになり、別の修正をすると、べつの側がダメになる。
という事態になりました。指示を出す方はテストはになってくれますが、何をやってもダメになる件については「何とかしろ」という励ましw以上の事は提供されませんでした。自分の自由裁量でリファクタリングをするしか無いと思いました。
どちらかのプログラミングの部分を切り取り、別の側のプログラミングの部分をすげ替えようという話です。
何が困難だったのか?
修正対象のシステムの原理原則として、
- 画面1つ事にプログラムファイル1つ
- 関数呼び出しは有るが引数が無く、情報のやり取りはグローバル変数(セッション変数)のみ
- 名前の命名規約皆無、ただし、名前の先頭には$マークが必ず有り
- プログラムの部分の共通化完全不能(手立てが無い)
という物でした。
選択肢表示(コンボボックス)を担当するプログラムの部分2箇所に付いては容易に特定できましたが、
- どこから呼ばれていて、どこに影響があるのか?
全く分かりません。
何をしたのか?
そのプログラミング言語には「代入文」という文法が有り、
- 左辺 = 右辺 と書き、
- 右辺(複数の名前がある)の計算結果を、
- 左辺(1つの名前がある)に代入する
- このシステムの原理原則では、他のやり方で計算結果を代入するやり方は無い
ものですが、全てのプログラムファイルの、全ての「代入文」について、
- プログラムファイル名
- 関数名
- 左辺の名前
- 右辺の名前の内、1つ
の4つ組を作成し*1、
左辺の名前をキーに、並べ替えをして、データの流れの概略を把握し、ー(1)
選択肢表示(コンボボックス)を担当するプログラムの部分付近の名前がどう影響しているかを調べ、ー(2)
「選択肢表示(コンボボックス)を担当するプログラムの部分」とはどこからどこまでを切り出せば良いのか範囲を推定しました。ー(3)
どうなったのか?
範囲が判れば、生かす方のプログラミングの部分をコピーして、無くす方のプログラミングの部分に貼り付けて終わりです。ここまで来れば簡単です。
一応のテスト(動作が変わっていないか)をして、所定の修正をして、指示を出す方に納品しました。
命の危機とは?
通常の単純な修正の日程(+事情を汲んで2日程度)に差し込んで、(1)〜(3)の対応をしなければならず、
しかも、あやふやも良い所の作業でした。やってもやっても「前と違う」思いが出てきて、思考もキータッチも滑りまくりでした。
こんなにキツいリファクタリングを、進んでやりたいという人が居ると、はてぶなどで見ますが、本当に偉いと思います。
結論
これからも「自由裁量でリファクタリングをしないとならなくなる」事でプログラミングが嫌いになる人は存在し続けることでしょう。