5

私は数万行のかなり大きなプロジェクトを継承しましたが、以前の開発者はそれらを 6 つのファイルにまとめただけでした (OMG!)...

したがって、読みやすくするために、すべてのクラスを自動的に独自の cpp/h ファイルに分割したいと思います。

そのようなことができるツールはありますか?

4

3 に答える 3

1

C++ コード ベースをリファクタリングするために必要なのは、C++ を解析し、ヘッダー ファイルを保持しながら、#include に従ってそれらを処理できるツールです。依存アイテムのペアごとに「a-depends-on-b」マッピングを構築し、それらをクラスター化する必要があります。最後に、クラスタリングに従ってソース コードを再生成できる必要があります。

そして、1 つのコンパイル ユニットだけでなく、完全なコード ベースに対してこれを行う必要があります。

これは見つけるのがかなり難しいツールです:-} 既製のものを見つけることはできないと思います。

DMS Software Reengineering Toolkit には、その多くが含まれています。これは一般的なプログラム分析および変換システムであり、完全な C++ フロント エンドを備え、制御可能なプリプロセッサを備えているため、必要に応じて #includes を展開/展開しないことができます。a-depends-on-b の関係を捉えることができ (2600 万行のコードの C システムでこれを実行しました)、プリプロセッサの状態をシンボリックに推論する能力が証明されています。「a-depends-on-b if」をキャプチャする可能性があります。

その情報を使用して、クラスタリングが必要です。これを行うには、ある種の汎用クラスタリングアルゴリズムと、それをオーバーライドするためのユーザー入力が必要だと思います(「この#includeファイルをそのままにしておくと、これら2つの明らかに無関係なものが一緒になります」)。次に、DMS のプログラム変換部分を使用して、コードを機械的に分割し、ファイルをグループ化された依存宣言に含めることができます。

DMS は複雑なツールです。結局のところ、C++ のような厄介なものを処理する必要があります。上記のタスクを実行するように構成することは簡単ではありませんが、技術的には手の届く範囲にあると思います。

ただし、これは、今日の問題を解決するのに役立つツールを取得するという差し迫った問題には役立ちません。

于 2012-12-17T21:56:40.740 に答える
0

そのタスクを自動的に実行するツールはないと確信しています。これは今でも活発な研究分野です。たとえば、「Betweenness Clustering を使用したクラス分割の自動化に向けて」を参照してください。いくつかの支援を提供する Java 用のツール ( JDeodorantext-c ) をいくつか知っていますが、これらは完全に自動化されているわけではありません。C++ ツールについては知りません。

于 2012-12-17T20:47:10.680 に答える
-5

使用しているエディターやプラットフォームについては言及していないため、大きなファイルが問題になる理由が明確ではありません。

私の推測では、これがあなたの解決策です:

  • 大きなファイルを処理できる優れたエディターを入手してください。

優れたエディターは、名前でクラスを検索でき、任意のクラス、メンバー、関数、またはその他の定義の定義にジャンプできるクラス ブラウザーを備え、右クリックまたはキーボードから任意のシンボルの使用箇所を見つけることができる必要があります。ショートカットであり、一般に、ファイルのサイズが関係ないほど簡単に道を見つけることができます。

一方で、おそらくあなたは優れたエディターを持っていて、その中でそれらのことを行う方法を学ぶ必要があるだけかもしれません.

于 2012-12-17T10:48:07.783 に答える