費用と便益の観点からほとんどすべてを分析できます。これはここで当てはまると思います。
最初のオプションの明らかな利点は、短期的には作業を最小限に抑え、作業コードを書き換えて何かを壊す可能性を最小限に抑えることです。明らかなコストは、コードベースに不整合が生じることです。オペレーションXを実行しているとき、コードの一部で1つの方法が実行され、コードの別の部分で別の方法が実行されます。
2番目のアプローチについては、一貫性という明白な利点に既に注意しました。明らかなコストは、何年も前に見捨てられた方法で作業するために心を曲げなければならず、コードが一貫して読めないままであることです。
3番目のアプローチの場合、明らかなコストは単にもっと多くの作業をしなければならないことです。それほど明白ではないコストは、動作していたものを壊す可能性があることです。(多くの場合そうであるように)古いコードが正しく動作し続けることを保証するためのテストが不十分な場合、これは特に起こりそうです。明らかな利点は、(あなたがうまくやったと仮定して)あなたが素晴らしい、光沢のある新しいコードを持つことです。新しい言語コンストラクトの使用に加えて、コードベースをリファクタリングする機会があります。これは、記述されたときとまったく同じ言語を使用した場合でも、ほぼ常にそれ自体が改善されます-新しいコンストラクトに追加すると、仕事が楽になり、大きな勝利になるかもしれません。
ただし、もう1つの重要なポイント:現在、このモジュールは長期間にわたって最小限のメンテナンスしか行われていないようです(プロジェクト全体がメンテナンスされている場合でも)。それは、それがかなりよく書かれていて、比較的バグがないことを示す傾向があります-そうでなければ、おそらく、その間にもっとメンテナンスを受けていただろう。
それは別の質問につながります:現在行っている変更の原因は何ですか?全体的に要件を十分に満たすモジュールの小さなバグを修正する場合、モジュール全体のリファクタリングにかかる時間と労力は、多くの場合無駄になる可能性が高いことを示す傾向があります。繰り返しますが、彼らは現在とほぼ同じ位置にいる可能性があり、「現代の」期待を満たしていないコードを維持しています。
ただし、要件が変更された可能性もあり、それらの新しい要件を満たすためにコードに取り組んでいます。この場合、最初の試行が実際に現在の要件を満たしていない可能性があります。また、要件が再び安定する前に、要件が数回改訂される可能性が大幅に高くなります。つまり、あなたはこのモジュールで(比較的)短期的に重要な仕事をする可能性が非常に高く、正しいことを知っている1つの領域だけでなく、モジュールの残りの部分全体で変更を行う可能性が非常に高いことを意味します今。この場合、モジュール全体をリファクタリングすると、追加の作業を正当化する具体的で短期的なメリットが得られる可能性が高くなります。
要件が変更された場合、どのような変更が関係しており、その変更を推進している要因も調べる必要があります。たとえば、Gitを変更して、SHA-1の使用をSHA-256に置き換えると仮定します。これは要件の変更ですが、範囲は明確に定義されており、かなり狭いものです。SHA-256を正しく保存して使用すると、他のコードベースに影響を与える他の変更に遭遇する可能性は低くなります。
反対に、小さく個別に開始した場合でも、ユーザーインターフェイスの変更は膨らむ傾向があるため、「この画面に1つの新しいチェックボックスを追加」として開始されたものは、「この固定UIを変更する」ユーザー定義のテンプレート、カスタムフィールド、カスタマイズされた配色などをサポートします。」
前者の例では、おそらく、変更を最小限に抑え、一貫性を損なうことが最も理にかなっています。後者の場合、完全なリファクタリングのほうがはるかに効果があります。