4

重複の可能性:
C++ コードの依存関係 / コールグラフ「ビューアー」?

私は巨大な C++ コード ベースに取り組んでおり、現在、コードのモジュール化の問題に悩まされています。コードを個別の独立したモジュールに分割する必要があります。

私が考えることができる 1 つのアプローチは、依存関係グラフを生成してから、より高いレベルの分類を行うことです。他のアプローチは、エントリ ポイント (関数abc()) から開始し、各ノードにその関数が存在するファイルの名前が含まれる関数呼び出しツリーを生成することです。その後、いくつかのスクリプトを使用して、これらの関数を個別のモジュールに抽出できます。

私の質問は、このタスクを実行するのに役立つツールはありますか? 以前にそのような問題に直面した人はいますか。または、同じことを達成するためのアプローチを提案できますか?

4

5 に答える 5

5

モジュール化の第 1 レベル (既に完了していることを願っています) は、コードをクラスで構造化することです。あなたのコードが単に関数の集まり (つまり、C 言語に構文糖衣を加えたもの) である場合は、コードを書き直す時期です。

クラスがある場合、モジュール化は、緊密に連携するクラス ( CustomerOrderおよび などInvoice) を見つけ、疎結合のみのクラス (Employerまたは などFacility) からそれらを分離することです。それからそこからそれを取ります。

コードのモジュール化には、何よりもまず思考が必要です。それに代わる自動手順はありません。実際、あなたが書いたことからすると、自動化されたプロセスが事態を悪化させるのではないかと心配しています。つまり、モジュール化について考えずに 100 万行のコードを書き、実際にはモジュール化について考えずにモジュール化を実行したいとします。あなたは壮大な失敗に向かっています。

于 2012-06-04T11:19:24.490 に答える
4

概要を把握するには、doxygenが役立つ場合があります。ただし、doxyfile 設定をいじって依存関係グラフを生成する必要があります。コード ベースが巨大な場合は、生成されたメソッドから動的なものを無効にする必要があります。Doxygen は、 graphvizを使用して、インクルード、継承、呼び出し、および呼び出し元のグラフを作成できます。

以下は簡単な例ですが、より大きな例でも機能します。しかし、doxygen は概要のみを提供し、リファクタリング機能は提供しません。

于 2012-06-04T13:12:19.420 に答える
1

リファクタリングツールを探しているようです。この質問に対する答えを見てみてください: Is there a working C++ refactoring tool?

于 2012-06-04T12:26:43.240 に答える
1

私は定期的に「Understand for C/C++」を使用して、この種の依存関係を調査しています。

コード ベースが非常に大きく、モジュール化をゼロから開始する場合は、次のような他のツールを検討することをお勧めします。

  • Cytoscape (「Understand for C/C++」の出力を取得して依存関係を視覚化できます)
  • ラテックス
于 2012-06-04T11:25:26.233 に答える
0

One method will be a bit long but what you can do is to remove a method and compile to find dependencies and than group the decadencies into one component. Although this does not resolve your issue fully but it is an approach to start off with.

于 2012-06-04T14:02:00.057 に答える