馴染みのないコードベースを説明するのに役立つツールやテクニックは何ですか?[閉まっている]


9

見慣れないコードを手動で検査(確認または変更)するとき、3つのオプションがあるようです。

  • トップダウン読み取り、ファイル名はそうどのように基本的なことで、それぞれ次のソースファイルを選択し、コードの。 私は通常、ほぼすべてを読むことになります。一部のファイルは2回。
  • 幅優先読み取り、私が見つけ、最小限の理解した上で、呼び出すメソッドのすべてを読み、。次に、関数が呼び出したすべての関数を読み取ります。 私のメンタルスタックは、数回の呼び出しで深くすると、オーバーフローする傾向があります。
  • デバッガですべてのコードをステップ実行する深さ優先の読み取りでは、これに8分かかるのか8時間かかるのかわかりません。

コードの内容を十分に理解するのに十分なコードを読んだら、基本コードが20%以下である一方で、コードベースの80%以上を読んだことをよく反映します。私は多くの時間を無駄にしました。

なじみのないコードをすばやく把握するには、どのツールが役立ちますか?クリティカルコードパスの「全体像」を示し、特定の部分の詳細にドリルダウンできるツールはありますか?


2
20%が基本的な部分である理由の80%パーセントを把握せずに、あなたが理解できない
ラチェットフリーク

@ratchetfreak絶対的に言ってはいけません。たとえば、ツールは常に呼び出されるコードを分離できます。または、多くのスタックレベルのみを実行します。
Drew Dormann

回答:


8

もちろん、最良のことは、コードベースを知っている人がコードベースを説明することです。それが選択肢ではない場合、あなたを助けることができるいくつかのツールがあります。

  • VisualStudioは、コードベースのUMLクラス図を自動的に生成できます。少なくとも、クラス階層が表示されます。
  • Doxygenは非常に役立ちます。コードにdoxygenスタイルのコメントがなくても、doxygenは読みやすいドキュメント、クラス図、および呼び出しグラフを生成できます。これは、馴染みのないコードベースを回避する方法を見つけるのに非常に役立ちます。

一般に、フル機能のIDEを使用することもできます。このIDEでは、何でも右クリックして「定義に移動」できます。これにより、複雑なディレクトリ構造の多くのファイルでgrepを使用する場合と比較して、多くの時間を節約できます。

もう1つの重要なことは、コードを処理する時間の長さによって異なります。ユニットテストがある場合は、テストを確認します。テストがない場合は、書き始めます。特定のクラスまたは関数の機能について仮説を立て、それをテストするテストを記述します。これには多くの規律が必要ですが、コードで何が起こっているかについての回答を得るための優れた方法です。


2
@Dimaに感謝します。Doxygenは、その一部を処理するのに優れています。(私が知っている1つのツール名をドロップして回答を導きたくありませんでした)。レベルヘッドの「ヒューマンインタラクション」コンポーネントも同様に称賛。:)
Drew Dormann

3

これはより徹底的なアプローチです。この手法は、意味のある名前空間に編成されていない多くのクラスを持つプロジェクトに役立つ場合があります。

この演習の目的は、クラスの関係を発見することです。プロジェクトの使い捨てクローンを作成し、いくつかのクラスを名前空間に配置してみます。繰り返し試行する時間を節約するには、いくつかのRegexファイル処理ツールを使用して、この変更を自動化します。

これにより、多くのコンパイラエラーが発生します。これらのエラーを修正する過程で、これらのクラスが相互にどのように依存するかをよりよく理解し、同じ名前空間に入れることができるクラスを決定します。

この手法は、プロジェクトのコード編成をほとんど理解していなくても適用できるという点で役立ちます。これには、誤解のために、一部のクラスがこの手法によって誤った場所に配置される可能性があるというリスクが伴います。


それは賢いです。通常、それを多くのクラスで実行しますか、それとも、不明な特定のクラスに遭遇した場合のために保存しますか?
Drew Dormann

@DrewDormann私は、グループ化されていない数百のクラスに直面したときに、同僚の1人からこのテクニックを学びました。これは、リファクタリングが行われる前の、プロジェクトファイルの「ソート」に向けた非常に最初のステップです。つまり、すべてがまだ混乱しているときに使用されます。(恥ずかしいことに、混乱は私の以前の自己によって書かれました。)プロジェクトファイルを名前空間にソートすることにより、(名前空間ツリーを表示することにより)Doxygenクラスページの生成を容易にし、プログラマーの理解をスピードアップします。
rwong
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.