3

私は最近 PostSharp をいじっていて、数年前に直面した問題を思い出しました: クライアントの開発者が Web アプリケーションを作成しましたが、状態情報の管理方法についてあまり考えていませんでした。IIS のアプリケーション インスタンスで静的に(理由は聞かないでください) 。言うまでもなく、システムは拡張できず、深刻な欠陥があり、不安定でした。しかし、それは大規模で非常に複雑なシステムであったため、再開発のコストは法外なものでした。当時の私の要約は、コードベースをリファクタリングして、コンポーネント間の適切な分離を強制することでした。

当時、何らかの抽象化メカニズムを使用して、静的リソースへのすべての呼び出しをインターセプトし、状態データを適切に管理するコンポーネントにリダイレクトできるようにしようとしました。問題は、リダイレクトする複雑な参照が約 1000 あったことでした (そして、私にはそれを行う時間があまりありませんでした)。手動コーディング (R# を使用した場合でも) は時間がかかりすぎることが判明しました。コードベースを廃棄し、適当に書き直しました。書き直すのに1年以上かかりました。

私が今疑問に思っているのは、アセンブリ リライターやアスペクト指向プログラミング システム (PostSharp など) にアクセスできた場合、直接参照を見つけるリファクタリング プロセスを簡単に自動化し、それらをリダイレクト可能なインターフェイス参照に変換できたでしょうか。工場によって自動的に供給されます。

PostSharp または類似のシステムを使用して、病的なレガシー システムを修復した人はいますか? プロジェクトはどの程度成功しましたか? 後になって、その努力に見合うだけの価値があると思いましたか? もう一度やりますか?

更新: 詳細については、このブログ投稿を参照してください。

4

1 に答える 1

4

あなたが求めているのは AOP ではなく、AOP を一般化するプログラム変換システムです。これらにより、コードベースへの一連の自動変更を定義し、それらを確実に実行できます。1000 の複雑な参照を手動で変更することはありません。代わりに、すべてのケースを処理する変換を定義する方法を理解し、ツールがそれを確実に適用できるようにします。

あなたの Web アプリケーションについて話すことはできませんが、これをうまく適用した具体的な例が 2 つあります。

1) ボーイングは、最大 6,000 のコンポーネントを根本的に再構築する必要がありました。各コンポーネントは、連携する C++ クラスのセット (多くの場合、合計で 3 ~ 10K の SLOC) としてコード化され、従来の分散アーキテクチャから、各通信要素が CORBA ファセットの関数になるようになりました。自社の DMS ソフトウェア リエンジニアリング ツールキットの使用、C++を正確に変換できるプログラム変換システムである、これらの変更を実行するためのツールを実装しました。このツールは、平均で 3 行に 1 行を変更しましたが、約 5 分でコンポーネントを変換できました。結果として得られた変換は 98% 完了し、多少の修正が必要でしたが、各コンポーネントを手動で修正するために見積もられた 1 人月よりもはるかに効果的でした。これは、ツールによって実装されたソフトウェア構造の大規模な再設計と考えるのが最善です。これについては、技術論文で読むことができます。

Akers, R., Baxter, I., Mehlich, M., Ellis, B., Luecke, K., ケース スタディ: Re-engineering C++ Component Models Via Automatic Program Transformation, Information & Software Technology 49(3):275- 291 2007。出版社から入手可能。

2) USAF には、飛行するレガシー システムがあります。そのうちの 1 つは、1975 年に製造された世界最高のマイクロプロセッサを搭載した B-2 爆撃機です。これらで実行されているコードは JOVIAL であり、Ada が好まれる言語になる前の空軍の好まれた言語でした (誰もが弱体化する前で、今では軍がソフトウェア エンジニアリングのためにひどい言語しか考えていません)。コードは飛行機を動かします。OTOH、彼らは JOVIAL から抜け出す必要がありました。なぜなら、マイクロプロセッサのサポート (CPU の物理的な可用性、開発ツール、さらには JOVIAL を学ぼうとする人々でさえも) が急速に減少していたからです。同じ DMS を使用して JOVIAL から C へのトランスレータを構築し、元のコード (ブラック プログラム...) を見ることができずに 100% 変換を達成しました。B-2 爆撃機の変換を参照してください。いくつかの追加の詳細については。B-2 は、私たちが話しているように、変換されたソフトウェアでアップグレードされています。

現在、どちらの場合も、変換を構成するために手動で時間がかかりました。しかし、手動で作業を行うための推定コストと比較すると、構成の労力はごくわずかでした。

ですから、そのようなツールの使い方を理解していれば、そのようなツールは非常にうまく機能します。もちろん、私たちはそれらを再び使用するつもりです。

于 2009-10-09T04:05:24.373 に答える