ビープラウド社長のブログ

株式会社ビープラウドの社長が、日々の思いなどを綴っていきます。

ソースコード読解の地図

先日、あるJavaのプログラムに機能を加えるという仕事がありました。

ソースコードの修正ポイントを特定するために、そのプログラムをEclipseに落とし、順にソースを解析していきました。それほど難しくないプログラムと予想したのですが、はじめのうちプログラムの全体像があまり頭に定着せず、苦戦しました。

その主な理由は、Eclipseでソースを追っていくと、Abstractメソッドや、インターフェースなどにぶつかって具体的な処理内容が記述されていないことがあるため、そこで理解が途切れがちになっていたためでした。

そんなとき「ソースコードリーデングから学ぶJavaの設計と実装(佐藤匡剛著) 」の第10章「ソースコード読解の手法」に記載されている以下の内容を思い出しました。


「オブジェクト指向では、データと振る舞いを1つにしたクラスによってプログラムを分割します。機能的分割との最大の違いは、クラスによる分割が「情報隠蔽」という考え方に基づくことです」

〜中略

「オブジェクト指向のプログラムは、クラス間で互いに情報を隠すように設計されます。そのため、トップダウン式に作られたプログラムを読むように、メソッド呼び出しの流れだけを順に追っていくと、なにをやっているのかわからずに迷子になります

「優れたオブジェクト指向のソースコードは、メソッド単位では処理の内容が判然としなくても、クラス単位で眺めると整然とした構成(概念モデル)を発見できます。」

そして、起点となるコントローラクラスを出発として、シーケンス図をまず作成し、それと並行してクラス図も作成したところ、さくさくとプログラムの全体像に対する理解が進み、変更ポイントも明確になっていきました。


図を作成すると時間がかかるようですが、これこそまさに「急がば回れ」の典型です。

また、1度でも図を作成してしまえば、何度でも自分の思考・理解を確認できますし、他の人にその内容を確認・共有する際にも伝わりやすくなります。

既に稼動しているプログラムに機能を追加する際は、その全体像を掴んでから修正ポイントをみつけるというスキルが必要です。今回の仕事で改めて、Javaなどのオブジェクト指向で開発されたプログラムに機能を追加する際は、クラス図、シーケンス図が、地図としての役割を果たし、とても有効であるということを実感しました。

ソースコードリーディングから学ぶ Javaの設計と実装

ソースコードリーディングから学ぶ Javaの設計と実装

今年の目標:100エントリーまであと85。残り330日、47週と1日。