私はウィキペディアの要約にかなり偏っています:
レガシーシステムとは、新しいテクノロジーやより効率的なタスク実行方法が利用できるようになったとしても、通常はユーザーのニーズに応じて機能するためです。
他の人がその答えに記述しているものがたくさんあるの理由コードが「レガシー」になり、なぜ。しかし、本質的な質問自体は次のとおりです。
しかし、それはまだ実稼働システムで使用されています-それは本当にレガシーですか?そして、何がレガシーなのでしょうか?
それがまだ生産で使用されているという事実は、まさにそれをレガシーにするものです。コードが適切に機能しない場合、または本番環境で使用されなくなった場合、そのコードはそれぞれ「破損」または「廃止」されます。 レガシーとは、まだ使用されていて正常に動作することを意味しますが、もはや一般的に使用されていない設計や技術を取り入れています。
(a)アップグレード/更新したいができない、または(b)まだアップグレード中のコードまたはシステムは、レガシーシステムです。これは、リファクタリングや一般的なコードのクリーンアップを意味するものではなく、新しいフレームワークや新しいプラットフォームを使用する可能性のある、設計の大幅な変更を意味します。
システムまたはコードがレガシーになる理由はいくつかあります。
定期的なメンテナンスやソフトウェアの腐敗の欠如。明らかに、アプリケーションが定期的に保守されていないと、ソフトウェアの世界の大きな変化に対応できません。これは、単純な怠慢によるものかもしれませんし、ビジネスの優先順位や予算の制約に基づいた意図的な選択かもしれません。
テストの欠如。別の答えは、テストでカバーされないコードがレガシーコードであるという人気著者の双曲線的主張を参照しています。これは実際には正確な定義ではありませんが、根本的な原因である可能性があります。優れたテスト(自動または手動)がなければ、開発者は何かを壊すことを心配するため、大きな変更を行うことをti病に、恐れます。
Rev-lockingは、大規模なオープンソースのライブラリまたはフレームワークを使用するプロジェクトで特に潜行性のある見過ごされがちな要素です(商用ツールでも同様です)。多くの場合、フレームワーク/ライブラリに大規模なカスタマイズが行われ、アップグレードが非常に困難または高価になります。したがって、システムは古い(およびサポートされなくなった)プラットフォームで実行されるため、レガシーになります。
ソースコードは使用できなくなりました。つまり、システムを追加するだけで、変更することはできません。漸進的/反復的に修正するのではなく、これらのシステムをアップグレードするために書き直す必要があるため、多くの企業は気にしません。
コードベースの更新を遅くしたり停止したりすると、そのコードベースがレガシーになる可能性があります。
さて、個別の、明示されていないが暗示された質問は、レガシーコードの何が問題なのですか? 多くの場合、軽as的な用語として使用されるため、次の質問があります。
完全に機能するコードのこの不当なラベル付けを避けるべきでしょうか?
そして答えはノーです、すべきではありません。ラベリングが保証されており、用語自体が機能するコードを明確に暗示しています。ポイントは、それが機能しているということではなく、それがどのように機能しているのかということです。
場合によっては、レガシーコードに問題はありません。それは悪い言葉ではありません。レガシーコード/システムは悪ではありません。彼らはちょうどいくつかの塵を集めました-時々少し、時々たくさん。
システムがクライアントのニーズ(すべて)を処理できなくなると、レガシーは廃止されます。 このラベルは、注意する必要があるものです。それ以外の場合、それは単に費用/便益の方程式です。アップグレードのコストがそのメリットのコスト(将来の保守コストの削減を含む)よりも低い場合は、アップグレードします。それ以外の場合はそのままにしておきます。「税務監査」のために通常予約しているのと同じトーンで「レガシー」という言葉を吐き出す必要はありません。入るのはまったく問題ない状況です。