コードリーディング

メモ

コードリーディングの目的

  • チーム開発内で他の人が書いたコードを読む
  • ライブラリの動作の仕組みや設計などのテクニックを勉強する為
  • コーディングに困ったときに類似のプロジェクトを参考にする
  • ドキュメントが無いのでコードを読む
  • オープンソースのコードを読む

メリット

  • 優れたコードからテクニックやベストプラクティスを学べる
  • 良いコードと悪いコードの違いを見分けられるようになる

予備知識

Java, PHP, C言語はそれぞれ、オブジェクト指向言語スクリプト言語、構造化言語であるが、「ある処理から別の処理を呼び出し、その結果を受け取る」という階層構造と「基本的に上から下に動作し、数種類の繰り返し構文や文紀行文で処理順序を変える」という動作をみれば、同じ手続き型言語

手続き型言語ソースコードを理解するポイントは

  • モジュールの構成と役割
  • アルゴリズムとその意図
  • データ構造と意味

解析方法

  • 静的解析:プログラムを動作させずにコードその物を読む。大局的な視点からモジュールの構造を把握するのに役立つ。
  • 動的解析 :プログラムを実行させながら読んで行く。特定箇所を掘り下げるのに役立つ。
  • ボトムアップアプローチ:枝葉のコンポーネントの機能から把握して行く。
  • トップダウンアプローチ:まず全体を把握し、詳細なコンポーネントを把握していく。

心得と道具

メモを取り続けていく。コードリーディングを進めて行く途中で、「今何を調査中か」を書いておく。分かった事をどんどんメモって残す、不要になったメモは捨てる。付箋紙が便利。ソースコードは 1 と l(エル) 、0(ゼロ) と o(オー)が判別できるフォントで行番号付で印刷する。

実践

  1. 全体構造を把握する
    • システムやプロダクトの全体を説明している文書
    • README ファイル
    • ディレクトリ構成
    • 実際にビルドしたり動かしてみる
  2. 静的解析
  3. 動的解析
    • IDE を使っているなら、ブレークポイントを付けて動かしてみる。
    • コールスタックを確認する
    • ステップ実行して動作を観察する
  4. 実装の意図を汲む
    • クラスや関数の名前に着目。>自分が実装する時も注意したい点。
    • 単体テスト用のコードがヒントになるかも

参考:プログラミングの光景 第五回 コードリーディングについて 高林哲さん

WEB+DB Press Vol.34, 37?