3

多くのソース コードとデータを共有する 3 つのレガシー アプリケーションがあります。これらの各アプリケーションの複数のインスタンスは、ユーザーによっていつでも実行できます。たとえば、一度に多数の混合アプリケーションを実行できます。これらのアプリケーションは現在、共通のカーソル位置などを維持できるように、共有メモリとメッセージング技術を介して通信します。アプリケーションは主に C++ で記述され、Qt を使用し、合計で約 500 万行のコードを実行します。既存のコードの一部のみがスレッドセーフです。

これら 3 つの実行可能ファイルを 1 つの実行可能ファイルに統合し、マルチスレッド機能を使用して、3 つの機能ブランチのそれぞれの複数のインスタンスを同時に実行できるようにしたいと考えています。共有ポインターなど、Boost が提供する機能のいくつかを調査し、OpenMP を使用して複数のスレッドの全体的な実行を調整することを提案されました。

進め方に関するコメント、特にこの種のリファクタリングの問題に取り組むための最良の方法に関する参考文献を歓迎します。

4

3 に答える 3

3

あなたへの私の提案は、最初に目的のソリューションを設計し (最初に要件が同じであると仮定して)、サードパーティの機能が導入する可能性のある要件に基づいて、既存のコード ベースから段階的な移行パスを構築することです。

リファクタリングは、一度に 1 つの小さなステップである必要があります。

レガシー コードを効果的に使用する (Robert C. Martin シリーズ)を読むことをお勧めします。

信頼してください (私は T シャツを持っています) 機能を証明する方法を知らない限り、リファクタリングを試みないでください。自動化された検証テストが救世主となります。

于 2009-08-13T22:33:07.037 に答える
2

まともな回答をしてくれる人はいないと思います。考慮すべき点が多すぎます。関連するプロセスとコード ビハインドを注意深く分析した後にのみ、誰でも (あなたを含めて) プロジェクト パスを提供できます。

とはいえ、考慮すべき点がいくつかあります。

  1. あなたのアプリケーションと、それらが互いに通信しているように見える方法は、私にはすでに健全なソリューションのようです. 現在のシステムをリファクタリングすることを選択した場合、500 万行のコードに取り組む必要があるため、これは特にそうです。これは強力な抑止力です。現在のアプリケーション メッセージングを最適化するためにスレッド サポートを提供する必要がある場合は、アプリケーションをマージする代わりに、共有メモリとメッセージング ルーチンに MT を導入する可能性を検討することをお勧めします。

  2. アプリケーションをマージする行為は、一見すると、現在のコードを接着し、メモリ共有とメッセージングを担当する現在のルーチンを削除し、それらを接着されたオブジェクトへの通常の関数呼び出しに置き換えるという「単純な」行為と見なすことができます。私の腸は、それはそれほど単純ではないだろうと私に言っています。現在のバックボーン コードが現在のメッセージング ソリューション用に設計されていることはほぼ確実であると考える必要があります。あなたの現在の抽象化は、これを念頭に置いて考えられました。ほぼ確実に、既存のバックボーン コードにも大幅な変更を加える必要があることがわかります。ここでも、500 万行の壁が大きな問題であることがわかります。変更はシステム全体に急速に伝播し、500 万行のコードを処理する必要があり、新しいバグがいくつあるかは神のみぞ知るからです。

  3. 上記の1をお勧めします。しかし、何らかの理由でアプリケーションを統合する必要がある場合があります。2.現在の 3 つのアプリケーションの起動、表示、および維持を担当するインターフェイス アプリケーションを作成します。これを正しく行えば、ユーザーはよくわかります。現在のシステムに 1 を適用し、実際には別のエンティティであるにもかかわらず、共通のインターフェイスでアプリケーションに参加することができます。

于 2009-08-14T00:33:44.420 に答える
0

「...約 500 万行のコード...」うーん...システムを知らずに確実に言うのは難しいですが、「レガシー」システムなので、コードの重複を取り除くことでおそらく多くのことを得ることができます。 . SimianCPDを確認してください。

500 万行は大量のコードです。もちろん、必要かもしれませんが、私の推測では必要ありません。

特に C++ では、そのようなコードベースの変更をマルチスレッドに変更するには、十分な理由が必要です。最初に完全にクリーンアップせずにそれを行うと、災害のレシピになります。

于 2009-08-22T11:47:26.403 に答える