Akira's Blog

神奈川在住のITエンジニアの雑記です。主にプログラミング(Perl, Java など)やネットワーク技術についての小ネタを、ちょっとずつ書いていきます。

ソースコードを解析する時のコツ

仕事柄、大規模なJavaプログラムのソース解析をすることが多い。自分が書いた部分なら少しソースを見れば思い出すが、他人が書いた部分で、かつドキュメントもないとなると、なかなか辛いこともある。そんな時に解析対象の部分のソースを理解するために自分が意識していることを書いていく。

 

最初から細部には拘らない

最初に概要を抑えるとその後のソース解析がスムーズに進むので、まずはメソッドの中身にはあまり踏み込まず、メソッド名から何をするものなのかを推測して、ソースを浅く読み進めていく。その後、必要に応じて、メソッドの内容をちゃんと見ていく。

 

クラスの役割を意識する

Javaのようなオブジェクト指向の言語では、クラスAがクラスBのメソッドを呼び出して、さらにクラスBがクラスCのメソッドを呼び出して・・・といった感じで、どんどん見るべきソースファイルが切り替わっていく。この流れをただ漫然と追っていると、全体の構造が頭に入らず、一通り読んでも何だかしっくりこないことがある。そんな時は各クラスの役割と関係性を意識すると良い。例えば、クラスのフィールド変数や、publicメソッドなど外部に公開しているメソッドに着目すると、そのクラスの役割が分かることがある。

 

まずは正常処理を中心に追う

例外処理のためのコード (catch節) がソースの多くの部分を占めていることがある。概要を把握するには、そういった例外処理は一旦気にしないことにして、正常系の処理の内容把握に集中する。そうすると、最初に見る範囲が減って精神的にも楽になる。例外系の処理は、その後に必要に応じて追えば良い。

 

処理の起点を把握する

解析対象のソースの箇所が何を起点として実行されるものなのかを把握しておくと、全体の理解が進むことがある。逆にこれを押さえていないと、解析対象のソースがプログラム全体のどこ辺に位置するのか分からず、もっと上位まで追わないと機能理解に見落としがありそうでモヤモヤする。(精神的に良くない。) ちなみに、処理の起点としては、例えば、Mainから実行される、プログラム内のタイマーから実行される、ユーザ操作に起因して実行される、(監視キューにタスクが到着した等を契機に)コールバックとして実行される、などがある。

 

ソース中のコメントやログ出力の内容に着目

コメントを参考にするのは常套手段だが、ソース中に書かれているログ出力用のコードも参考になることが多い。人間なので、プログラムのコードよりは自然言語の方が理解が速いので、こういったものも有効活用したい。

 

メモを取る

ソース解析した内容はメモに残しておくと、あとあと見直した時の理解がだいぶ速い。解析した時はその内容を鮮明に覚えているが、しばらくすると忘れてしまうことも多いし、メモに残すとちゃんとやっている感(?)も出る。あと、メモを書くと、自分の頭の中が整理できるという利点もある。

 

 

この他、普段からやっておくこととして、Javaデザインパターンやイディオムに慣れておく、自分に合ったエディタや統合開発環境を探して慣れておく、といったことも重要である。特に、イディオムに慣れておくと、ちょっとソースを見ただけで、「ここでDBからxxxテーブルの情報を取ってきているな」とか「ここで外部プロセスと通信しているな」とかがすぐに分かるようになるので、解析スピードがだいぶ上がる。