まず第一に、幸運を祈ります。あなたはそれを必要とするでしょう。これは潜在的にあなたが遭遇した巨大な仕事です。それは私にはとてもなじみ深いように聞こえます。私は過去に同様のことに取り組んできました。
考えるべきことが1つあります。リファクタリングを開始する前に、広範なテストフレームワークを導入することを強く検討したいと思います。その理由は次のとおりです。優れた単体テストと回帰テストを使用すると、既存の機能を壊すことについてあまり心配することなく、変更を加えることができます。(とはいえ、常に懸念がありますが...)
つまり、機能の個別の「垂直」スライスを切り取って、それらの個別のユニットテストと統合テストを作成できるかどうかを確認します。それが終わったら、私は飛び込んでリファクタリングの作業を開始します。最初は非常に小さいかもしれませんが、機能の垂直スライスを分離してから、統合と単体テストコードを作成するプロセスだけで、既存のコードベースで多くの経験を積むことができます。そして、あなたが最初にそれを少し良くすることに成功したなら、あなたはそれだけ進んでいます。
それが終わったら、リファクタリングする機能の潜在的に大きなブロックを調べ始めます。リファクタリングする機能のクリーンなブロックを取得できない場合は、小さなチャンクを調べ始めます。抽出、単体テスト、リファクタリングを行うための小さな(場合によっては非常に小さな)コードのチャンクを見つけることができれば、前進しています。これは時々非常に非常に遅い進行のように見えるかもしれません、そしてあなたが本当に大きなプロジェクトを持っているなら、それはそうなるでしょう、しかしあなたはへこみを作るでしょう。
ただし、一般的には、最初にテストを実施して、期待される機能を確認することを検討してください。これらのテストが実施されると、物事を壊していないという自信を持って(完全な自信ではありませんが、何もないよりはましです)リファクタリングできます。小さなことから始めて、既存のコードベースから自分自身を明らかにする技術に基づいて構築します。長いスローグですが、最終的にはそこに到達し、コードベースの方が適しています。