インドリ流ソースコードリーディング
私がソースコードリーディングで一番大事だと思う事は、早期に全体像を把握する事です。いわゆるトップダウン的な考え方です。理由は読むコード量を減らすのが早道だからです。また、注意力を高める為にターゲットを定めるという理由もあります。
既存システム/ソフトウェアはコードが膨大なケースが大半です。しかし、時間は限られていますので、なるべく早く理解する事が求められています。その場合、ちょっとずるいかもしれませんが、一番早く読む方法は読まない事です。どれだけ早く読もうとも0秒にはかないません。一度に全てを読む必要はないケースが大半です。読まなくてもよいソースを読むと貴重な時間が浪費されてしまいます。読むべき状況で、読むべきソースを集中的に読むのが一番です。
トップダウンに全体像を把握する方法は図示するです。図はUMLやマインドマップなど、何でもよいのでシステム/ソフトウェア全体を鳥瞰すると読むべきソースコードが分かりますし変更にも強くなります。元からあるソフトウェアで一番の問題はバージョンアップです。細かい単位でソースコードを読んでいると、バージョンアップした際に混乱してしまうでしょう。全体を鳥瞰しておくと、バージョンアップされても理解できますし、その優れたアーキテクチャ(設計思想)を理解して、自分の技術力を磨く事が出来ます。鳥瞰した後はボトムアップ的な考え方をします。
全体像を把握し、読むべきソースコードが分かったら、もしくは初めから目的が定まっていたのならば、次はソースコード単位で読解します。ボトムアップ的なソースコードリーディングの方法は、コードを読んで動かすのが基本です。コードを動かして理解する具体的方法としては、テストを書く、解析用コードを埋め込む(所謂printデバッグ)の2つあります。
テストを書くには、目的の関数/手続きをよく理解し、オブジェクトの初期化方法を知らねばなりません。自分の理解度を確かめる事が出来ます。ソースコードリーディングで大事なのは、自分が正しく理解しているかどうかです。それを確かめる一番の方法がテストです。テストが書けるのであれば、高い水準で目的のコードを理解している事の証明になります。また、安全にソースコードを修正する事が可能となります。
解析用コードは軽視されがちですが、ソースコードを理解する上で大変有効な手段です。データの変化を見れば、コードの動きを詳細に理解する事が出来ます。ソースコードがあるのですから、積極的に自分が理解しやすいように改変しましょう。改選すると正常な動きをしなくなるかもしれませんので、念のためにソースコード管理ツールを用意すると万全です。
その他の方法としてリファクタリングも有効です。自分好みにソースコードを変えると理解度が飛躍的にアップします。また長いコードを短くする事により読みやすくなります。応用技として、自分が興味のない処理をしているコードをばっさり切ってしまうのも良いでしょう。そうすればさらに意識を集中する事が出来ます。
最後にソースコードリーディングを行う前に大切な事を述べます。問題領域の知識を得ておく事が大事です。ソースコードリーディングは準備も大事なのです。分かっていない事を理解する事は不可能です。問題領域の知識があれば、もしくはリーディングと並行的に行わないと処理内容が理解できません。問題領域の関する知識を学習する事を怠ってはなりません。情報処理技術は「情報命」です。
駆け足でしたがソースコードリーディングの基本が分かったと思います。後は実践あるのみ!です。ソースコードリーディングを活用し、仕事と学習の効果を高めましょう。そうすれば、貴方への評価と、貴方の技術力は飛躍的にアップします。