19

私は、c および c++ にある既存のコードのリファクタリングと変更を含むプロジェクトに取り組み始めようとしています。コードは肥大化したものであり、膨大な量です。もちろん、コードを変更する必要があるため、コードの理解を開発する必要があり、非常に短い期間で開発する必要があります。上記を達成するのに役立つオープンソースツールを提案してください。要するに、私が探しているのは、次のことができるツールです。

  1. 設計の理解に役立つリバース エンジニアリング ツール。
  2. 実行時にシーケンスを描画するのに役立つシーケンス生成ツール (ほとんどの場合、コードを実行できますが、少なくとも初期段階では実行できません) またはコード検査を通じて。
  3. 既存のコード ベースを調査するための優れたコード ブラウジング ツール。
  4. 最小限の労力でコードを自動リファクタリングできる適切なツール。

注目すべき経験、好み、またはお気に入りについて教えてください。

[編集]上記で役立つツールのリストを思いつきました。リストは次のとおりです。

  1. Graphviz & doxygen
    既存のコードベースから UML クラス図を生成

  2. UMLStudio
    OO レガシー コードのオブジェクト モデルを作成することは、それを分析、理解、維持するための最良の方法です。UMLStudio は、C++、Java、CORBA IDL、PHP 5、および Ada 95 コードを、他のどの CASE ツールよりも高速に OOA&D 表記に自動的に変換できます。

  3. C++ 用
    の CodeDrawer CodeDrawer は、ソース コードをビジュアル ベースの図に変換します。クラス、構造体、およびソース コードの任意の要素を図で表示できます。また、関数とメソッドのロジックも示します。CodeDrawer は、プロジェクトのソース コードを理解するのに役立ちます

  4. Imagix
    リバース エンジニアリングとソース コードの視覚化により、プログラムの理解が向上します。速度: なじみのないコードの学習 変更の影響分析 オープン ソース コードの統合 コードの再利用 ソフトウェア メンテナンス

  5. AgileJ AgileJ StructureViews は、産業規模で高度にカスタマイズ可能な UML クラス図を生成する Eclipse Java IDE 用のプラグインであり、アジャイル開発や既存の Java コードベースの調査に最適です。

  6. MaintainJ コード ベースを実行できる場合、MaintainJ は、特定のユース ケースを実行すると、実行時に UML シーケンス図とクラス図を生成します。

  7. Java リバース エンジニアリング ツール Java ソース コードからクラス図とクラス間の関係を生成します。

  8. Source Insight 優れ たソース閲覧ソフトウェア

もう一度、Steve Townsend
Klocworkに感謝します

4

6 に答える 6

10

コードは肥大化したものであり、膨大な量です。もちろん、コードを変更する必要があるため、コードの理解を開発する必要があり、非常に短い期間で開発する必要があります。

次に、管理上の問題があります。多くのコードを理解する時間がほとんどないことをすでに知っている場合は、運命にあります。このコードを理解するには、実行して確認する必要があり、時間がかかります。ツールは物事の大きな地図を提供するだけで、実際の道筋を示してはくれません。

最小限の労力でコードを自動リファクタリングできる適切なツール。

あなたは不思議の国に住んでいます。

アプリケーションの構造アーキテクチャを提供するツールがありますが、各モジュールを 1 つずつ調べてコードを読まなければ、実際には役に立ちません。最初にモジュールを使用するコード、次にモジュール内のコードです。

それが C と C++ であるという事実は、それらの言語についてのあなたの知識やアプリを書いた人々の知識のレベルにも関連するため、かかる時間を定義することをさらに困難にします.

于 2010-09-23T09:49:40.990 に答える
4

最初に尋ねるべき質問は、「変更によってシステムが壊れないようにするにはどうすればよいですか?」です。しかし、あなたの質問はテストについてまったく言及していません。それは私にとって危険信号です。

ツールは解決策ではないという他の意見に同意します (希望する形で現れる可能性は低く、単独で 100% 信頼できる可能性は低いです)。

あなたの目標は、変更する領域をすばやく特定することです。これは、コードを検査して実行することで行います (できれば既存のテストで - それらはありますか?)。ユニットとシステムのテストを包括的にカバーしていることを確認してください。単一の行に触れる前にそれらに。その基盤がなければ、盲目的に飛行することになり、締め切りははるかに危険にさらされます.

少なくとも、良いテストがない場合は、この懸念を前もってラインに伝えてください。

このようなものを見ることができます-私自身は使用しませんでした: Klokwork Architect

于 2010-09-23T11:21:54.457 に答える
2

CおよびC++コードを解析および変換できるツールはほとんどありません。最初のステップとして、これらの言語の解析はそれ自体が難しいと考えられています。もう1つの重要な問題は、プリプロセッサです。これは、Cプログラムでかなり乱暴に使用され(たとえば、構造化された方法ではなく)、パーサーがプログラム構造を確認するのを困難にし、その結果、アナライザー(リファクタリングがいつ行われるかを決定する必要がある)を困難にします。合法)その分析を正しく行うため。

これらのグリッチをモジュロして、DMS Software Reengineering Toolkitは、CおよびC++コードでリファクタリングを実行するように構成できます。DMSには、CおよびC ++用の工業用強度パーサーがあり、内部コード構造の一部としてほとんどのプリプロセッサーの使用を独自にキャプチャできます(通常、C / C ++を解析しようとする人々は、プリプロセッサーディレクティブを拡張しますが、これはリファクタリングのオプションではありません)。

これを使用して、C ++コードで大規模なコード再編成を実行しました(C ++にはコードを構成する他のさまざまな方法があるため、プリプロセッサーの乱用は最小限に抑えられます)。また、Cシステムの自動リエンジニアリングも行いましたが、プリプロセッサの乱用を処理するために多少の努力が必要でした。

それがインタラクティブではないのです。リファクタリング変換を計画し、パターンマッチング言語で指定する必要があります。しかし、それは信頼できます。

于 2010-10-04T15:38:34.227 に答える
1

CTAGS/ECTAGSは、未知のコードベースを調査/リファクタリングする場合、特に Emacs/ CEDETのようなツールを使用する場合に非常に役立つというメモを追加したいと思いました。

于 2011-02-01T21:34:34.350 に答える
1
  1. ソースがあれば、技術的にはリバース エンジニアリングではありません。非常に優れた Doxygen を使用してドキュメントを生成できます (図を含む - GraphViz もインストールしてください!):リンク
  2. わからない、存在するかどうかわからない。
  3. ソース コードの参照を有効にしている場合は、Web ブラウザーと Doxygen。Visual Studio、定義にジャンプするための右クリック、およびコードをステップ実行してその動作を理解するためのデバッガー (ステップ アウト コマンドを使用および悪用)。
  4. リファクタリングを行うためのツールはありますが、最小限の労力と「自動リファクタリング」を実現するのは非常に困難です。そのためのツールは見つからないと思います。
于 2010-09-23T09:54:05.910 に答える
0

5 agilej ( http://www.agilej.com/ ) AgileJ StructureViews は、産業規模で高度にカスタマイズ可能な UML クラス図を生成する Eclipse Java IDE 用のプラグインであり、アジャイル開発や既存の Java コードベースの調査に最適です。

AgileJ は、ポイント 1 (設計の理解に役立つリバース エンジニアリング) と 3 (既存のコード ベースを調査するための優れたコード ブラウジング ツール) に適用されます。急速にまとめられた肥大化したコードは、通常、次のように表示されます。

  • 土壇場で機能する各ビットのゴミ捨て場として機能する 1 つまたは 2 つの大きなクラス (ブロブ アンチ パターン)
  • 最初に共通部分を基本クラスに分解するのではなく、新しい目的のためにクラス全体をコピーして微調整したコードをカット アンド ペーストする
  • get メソッドと set メソッドしか持たない多くのクラスによって証明される OO の欠如
  • 依存関係はマットであり、プロジェクト全体ですべてが他のすべてに依存しており、アーキテクチャ内に階層化はありません

このリストに追加できる特性は他にもたくさんありますが、上記はクラス図でより明確になります。

于 2013-03-08T09:46:47.640 に答える