社内スクリプト言語を廃止するための移行戦略


8

社内で多くのことに使用するスクリプト言語があります。これは、動的ラベルがシステム全体に普及しているチューリング完全言語になるための単純な評価ステートメントとして始まりました。

問題は、このために設計されたことはなく、それが表示されることです。開発環境は貧弱であり、作成されたスクリプトはテスト可能ではなく、現在でも言語の正式な定義はありません。

言語のユーザーの間で高まる感情は、それが仕事を終え、手放す時が来たと感じていますが、既存のコードベースを新しいソリューションに考案することに移行するという困難な課題に直面しています。この議論は、移行の考えに反して使用されます。

同様の状況に直面したことがありますか?もしそうなら、古いものの使用を止めて新しいものを宣伝するためにどのような戦略を使いましたか?

最後に1つ(Moronsに感謝)、これらのスクリプトの多くは文書化されておらず、まだアクティブに使用されていますが、元の目的は失われています。スクリプトは顧客サイトでもシステムをカスタマイズするために使用されるため、文字通り数千のこれらのスクリプトがあり、その大部分はソース管理またはバージョン管理メカニズムの対象ではありません。


受け入れられた答え。

これは難しい選択です。モロンとオリバーのハイブリッドのいくらかが最良であると私は思うが、すべての答えは良いと健全なアドバイスでした。

私は結局オリバーズを受け入れることになりました。なぜなら、それがより高く受け入れられる最も良いチャンスである(ha!政治!)古いスクリプト環境を、新しい環境に統合できる呼び出し可能なステートメントにパッケージ化すると、迅速で簡単なアップグレードパスが得られます。

完了したら、警告を表示したり、古いスクリプトの編集や作成を禁止したりして、新しいスクリプトの作成を制御し、新しい言語に強制的に移行させることができます。

入力ありがとうございます!


4
「最後の一つ(モロンに感謝)」を読んだとき、あなたはオリジナルのデザイナーの知性についてコメントしていると思った。
カイルホジソン、2011

2
:-Dいいえ、私はそれを書いているのは変な気がして、しばらく躊躇しました。それから彼は名前を選んだので大丈夫だと思います!
ニュートピア、2011

1
大丈夫です!!......
モロン

回答:


5

別のアプローチは、スクリプトランタイムを選択した新しいスクリプト言語に移植し、新しい言語でレガシースクリプトを実行する方法を提供することです。

LegacyRuntime.execute(String script);

古いコードと新しいコードを混在させることができると、移行が容易になります。


11

カスタムスクリプト言語を扱っているという事実は関係ありません。スクリプトのセットをある言語から別の言語に移行します。

2つの基本的な戦略があります。

1)すべてのスクリプトを(プロジェクトとして)事前に変換するために多大な労力を費やす

2)特定のスクリプトに変更を加える必要があるので、新しい言語で書き直します。しばらくして、元の言語のスクリプトがほとんど残っていない場合は、プロジェクトに取り掛かってスクリプトを完成させます。*

どちらの方法でも、厳格な規則を設定する必要があります。新しいコードはレガシー言語で書かれていません。

*全体を書き直す前に、編集をどの程度許可するかについてルールを設定することもできますが、これはループホールとして悪用される可能性があります。


そこにあるスクリプトの多くは目的を持っているが、彼らが会社を辞めたとき、その知識は作成者とともに消えたことを忘れていたと思います。
ニュートピア、2011

1
これは何も変更しません...ある時点でコードを理解する必要があります。また、ある時点でコードの変更も必要になります。(もちろん、チームの誰もそれを回避する予定はありません:-)
Morons

1
非常に単純な戦略では、悪用される抜け穴ができる可能性は低くなります。Morons戦略への追加として、何かをする前にそれらすべてをバージョン管理にしようと思います。
refro

@refro同意しますが、残念ながらほぼ不可能です。これらのスクリプトにはおそらく12の異なるストレージ形式があり、SCMに非常に適したものはありません。スクリプトは多くの場合、互換性のあるエディターにロードする必要のあるベース64 blobとして提示されます。しかし、ほとんどの場合、スクリプトは顧客が直接編集でき、データベースにローカルに保存されるためです。存在さえ知られていない(疑わしい)大量のスクリプトがあります。それは、この言語を扱うのはとても難しいことだと私は思います。
ニュートピア

5

私はそのような経験をしました。

私のアプローチは、言語実装をリバースエンジニアリングして、その構文とセマンティクスの多かれ少なかれ正式な仕様を導出することでした(Fortran77の手書きパーサーから数 のキーワードを使用してBNFを分解することを想像してください)。次に、この言語用のコンパイラーを実装し、それを慣用的なLuaコードに変換します(ほとんどのコメントを保持しています)。

人気のある適切なスクリプト言語を選択するか、独自の優れた設計のDSLを実装できます。コンパイラーは、透過的な変換レイヤー(レガシースクリプトをそのまま維持する)として使用したり、スクリプトを書き直してメンテナンスを強化したりできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.