Code Reading―オープンソースから学ぶソフトウェア開発技法 (1)

「Code Reading―オープンソースから学ぶソフトウェア開発技法」の本を読んでお勉強です。この本はいかにすでにあるコードを読むか、というところに焦点を当てた本です。ソフトウェア工学の中でも「コードの読み方」というちょっと変わったところに目をつけた本になっています。


Code Reading―オープンソースから学ぶソフトウェア開発技法

Code Reading―オープンソースから学ぶソフトウェア開発技法
トップスタジオ (著)
まつもと ゆきひろ (著)
平林 俊一 (著)
鵜飼 文敏 (著)
¥ 5,460 (税込)


第1章 : 序論

まず、最初に「なぜコードを読む必要があるのか」という部分を掘り下げています。

  • 文芸作品的な意味合いで読む
  • コードを保守するために読む
  • コードに新しい機能を追加するために読む
  • ほかのソフトウェアで再利用するために読む
  • コードレビュー等で読む

などがあるわけですが、特に保守・追加のために読むことが多いのではないかと思います。それぞれの動機によって多少コードの読み方が変わることもあるため、この「コードを読む目的」をはっきりさせておくことも重要になります。

第10章 : ツール

順番が変わりますが、まず10章のコードを読むためのツールを先に読みます。
まずはソースコードの語句を処理するツール「正規表現です。正規表現はほぼどんなエディタでも使うことができ、コードを効率よく読むためには欠かせないともいえるツールです。厳密に前後関係や文脈から探すというのは難しいのですが、自分の欲しい箇所を絞り込むためには非常に役に立ちます。
一流ハッカーでも正規表現を多用しているようですので、この正規表現を効率よく使えることが一流ハッカーになるためには必須といえます。

続いてはエディタの機能を使ってコードを効率よく読むための方法です。
Emacsやviなんかはインデックスファイル(tags)と合わせることによって、ソースコードを読む上で便利な機能を提供してくれます。たとえば、ある関数が出てきたら、コマンド一発でその定義地点に飛んでくれるなどという機能です。これ以外にもアウトラインモードなんかをうまく使えば、さらに読みやすくなります。
ここで面白かったのは、「Microsoft Wordを使った方法」というものです。それは、ソースコードをWordに貼り付けて、全体表示で見るという方法です。このとき文字を読める必要はありません。ただ、丁寧に書かれたコードの場合、これだけでもある程度の構造(どこがインポートでどこが関数でなど)がよくわかります。
要はそれぞれのツールの使い方を知ることが、コードを書く上でも便利になるよということ。

個々のファイルを別々に読んでいく場合はこれでいいのですが、まとめてたくさんのファイルの中から探したいなどという場合に便利なのが「grep」です。実際に正規表現が最も役に立つのがこの使い方でしょう。ある名前の関数が出てくる場所を知りたい、なんて時に有用です。
CVSsubversionなどのようなバージョン管理システムを使った環境でその変更点(差分)を調べたり、環境の違いによる実装の違いを調べたりする上で、有用なのが「diff」です。CVSなんかではそれ用に最適化されたフォーマットもあるらしいです。グラフィカルに差異を表示してくれるプログラムなんかを使えばさらに◎。

また面白い内容で、「今のツールでうまくできないならば、そのツールを作ってしまえ」という内容です。特に自分(達)だけで使うツールなら、細かい処理などを規定する必要もないため、比較的簡単に作れるはずです。

コードを分析するツールといえば「コンパイラ」です。むしろコンパイラは「マシンがソースコードを読んでいる」ともいえると思います。たとえばコンパイラの出す警告です。この本ではたとえば、関数定義を削除してコンパイルすると、その関数箇所のにすべてに警告が出されるため、その使用箇所がわかる、なんていう使い方が紹介されています。ある意味逆転の発想的な使い方ですね。
ソースコード閲覧用のツールは、やはりそのために作られているだけあって、コードを読む上では非常に重要です。多くのIDEにも似たような機能が付いているはずです。また、細かいインデントやカッコなんかを成形してくれるツールもあります。
プログラムを動かして、その動作を観察することも、プログラムを理解する上では重要です。そんな時に使うツールがトレースプログラムです。プログラムをトレースすることによって、プログラムが使ったファイル・入出力・システムへのアクセスなんかがわかります。「プロファイラ」を使えばプログラムの実際の動きがわかります。

それ以外の方法としては、「紙に印刷」などという方法も紹介されています。目にもやさしいですし、気軽にマーカーで線を引いたりできるので、コードを理解する上では十分役に立ちます。個人的にはPCが使えない場所(電車の中とか)でも読めるというのがいいなと思ったり。
他にももちろんUMLを書いてみたりすることも、コードを理解する上では役に立ちます。

次回は

2章からかな。コードの基本要素の読み方です。