知識ベース

レガシーコード

レガシーコードは、サポートされなくなった、または製造されたオペレーティングシステムまたはその他のコンピューターテクノロジーに関連するソースコードです。この用語は、古いまたは以前にサポートされていた機能を維持するために最新のソフトウェアに挿入されたコードを意味することもあります。たとえば、多くの最新システムにシリアルポートがない場合でもシリアルインターフェースをサポートしますEBCDICなどの非ASCII文字でエンコードされている可能性のある古いファイル形式をサポートする形式でもあります。

実際には、ほとんどのソースコードは、設計対象のプラットフォームにある程度依存しています。プログラマがJavaのようなプラットフォームに依存しないプログラミング言語を使用している場合でも、環境から完全に独立した大規模で有用なプログラムを作成することは困難です。メーカーがプラットフォームをアップグレードする(またはプラットフォームが置き換えられる)と、コードは変更なしでは機能しなくなり、レガシーコードになります。ソフトウェアエンジニアのタスクの大部分は、これを防ぐためにコードを継続的に変更することです。そうしないと、貧弱なアプリアーキテクチャ、複雑なナビゲーション、廃止されたU​​I、リファクタリングの必要性などの問題に直面する可能性があります。

通常、この用語はソースコードを指しますが、システムの新しいバージョンで実行されなくなった実行可能コード、または実行するために互換性レイヤーを必要とする実行可能コードにも適用できます。例としては、Mac OS Xではネイティブに実行されないが、Classic環境内で実行されるクラシックMacintoshアプリケーション、またはXPのWindows on Windows機能を使用してWindows XPで実行されるWin16アプリケーションがあります。

現代の解釈

最近では、ソフトウェアエンジニアリングコミュニティがレガシーコードという用語の別の解釈を開発しました。最も一般的なのは、 他の誰か から継承されたソースコードと、ソフトウェアの古いバージョンから継承されたソースコードです 。 TypemockのCEOであるEli Lopianは、「開発者が変更を恐れるコード」と定義しています。 Michael Feathersは、 テストのない コードとしてレガシーコードの定義を導入しました。これは、自動化されたリグレッションテストが不足しているために作業が難しいレガシーコードの観点を反映しています。また、特性化テストを定義して、 レガシーコードのテストを開始しました。

Ginny Hendryは、「私たちの生活の他の遺産のように、古くから愛され、世代から世代へと受け継がれている物語など、コードを作成するための現在のコーダーに対する挑戦として、コードの作成を特徴づけました。コードは私たちが誇りに思っていたものですか?」