私は実際に、キャリアの中でかなり重要なリファクタリングを3回経験しています。コードは減衰する傾向があるため、コードベースが十分に長い場合、大きなリファクタリングはほとんど避けられません。私の例はすべてプライベートコードベースにあり、パブリックサンプルが見つからない理由を説明している可能性があります。
信じられないかもしれませんが、ドットマトリックスプリンターでのみ機能する基本的なアーキテクチャを備えたアプリケーションが初めてありました。私の会社がリボンを供給するベンダーを見つけることができなくなったとき、彼らは私にそれをレーザープリンターで動作させるように割り当てました。
2回目は、CからJavaへの数百の自動テストスクリプトの移行でした。これは、クロスプラットフォーム機能を改善する必要があったためと、新しいC開発者を雇うことが困難になったためです。
3回目はまだ途方に暮れています。巨大なモノリシックアプリケーションをモジュール化して、結合を減らすことでユニットテストを可能にし、クロスプラットフォームを目的としています。
山に登る努力を比較します。あなたはあなたの前にこの大きな目標を持っていますが、マクロレベルでそれに取り組むことはありません。あなたはそれを一度に一つずつ握り、常に近いフォールバック位置を持ち、次の安全装置が設置されるまで前の安全装置を決して切り離さない。少しずつ改善を始めて、しばらくして振り返ると、突然この美しい景色が見えてきます。
たとえば、高度に結合されたコードのファイルが60,000あるとします。単体テストを開始したいのですが、依存関係によって不可能になっています。どのように修正しますか?1つのファイルを分離します。自動テストを追加します。次に進む前に、安定した地面に戻ります。59,999回繰り返します。
それが単純に聞こえるなら、それはそれが単純だからです。簡単ではありませんが、簡単です。最初はどんな進歩にも気づきにくいです。不可能なリファクタリングのように見えて2年になりますが、完了するまでに何年も先を行く可能性がありますが、振り返ってみると、コードがすでにどれほど改善されているかを突然理解し、新しい機能を提供し続けることができましたその間、お客様に。
他の2回は同じように動作しました。安全な最小ステップを見つけ、それを実行して、アプリケーションを常に動作状態に保ちます。全体像について心配するだけで、正しい方向に進んでいることを確認できます。すべてのアクションは小さく、安定しており、増分的です。