大規模ソースコードの読み方

282
-1

Published on

大規模ソースコードを読むためのコツについて記載

Published in: Software
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
282
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

大規模ソースコードの読み方

  1. 1. 1 大規模ソースコードの読み方 V0.1.2 2016/2/7 Satoru Takeuchi <satoru.takeuchi@gmail.com>
  2. 2. 2 はじめに ● 大規模ソースコード(以下単にソースと記載) を、未経験者が知識を持たないまま読もうとす ると、ほぼ確実に挫折 ● 例えばLinux kernelの場合一千万行をゆうに超える ● 本スライドには大規模ソースを読む上でのコツ をいくつか記載 ● 想定読者は、これまで大規模ソースを見たこと が無い人/見たけれども挫折した人 ● Linux/UNIXユーザ向け
  3. 3. 3 目次 ● 設計思想の理解 ● 読むソースの絞り込み ● 実際に読む作業の効率化
  4. 4. 4 設計思想の理解 ● 闇雲にソースの字面を眺めるだけでは内容の理 解は困難 ● いきなりソースを見る前に、それが何のための 処理で、どういう方針で設計されているのかと いう意図がわかるドキュメントを(もしあれば) 見ておくとよい ● 例えばマニュアルやソースのコメント、およ びパッチのコミットログ ● 設計思想がわかれば、ソースを読む効率が飛躍 的に向上
  5. 5. 5 読むソースの絞り込み ● 「ソースを読むからには全て理解しなくては!」や「とりあ えずmain()から見てみよう」という考えかたは挫折のもと ● まずは、自分が何を理解したいのかを明確にして、ソース全 体のうち、どこを読めばいいのか、及び、どこを読まなくて よいのかを絞り込む ● 余計なところを「読まない」ことが重要 ● 大規模ソースは大抵複数、かつ階層上のモジュールに細分化 されている ● なるべく小さく、かつ、少ないモジュール(できれば1つ) のソースのみを読む対象にする ● ソースが巨大であるほど、各開発者は全てを完璧に把握 などしていない。それは別に恥ずかしいことではない
  6. 6. 6 絞り込みの例 ● 興味のある機能の実行中に出てくるメッセージ を使ってgrepをかける ● デバッガを使ってプログラム内の興味のある機 能を動かしてみることによって、当該機能の ソース上の位置を知る
  7. 7. 7 実際に読む作業の効率化 ● タグジャンプツールの使用 ● プログラムを動かしてみる
  8. 8. 8 タグジャンプツールの使用 ● いざソースを読むにあたって、テキストエディタと基本 コマンドだけを使ってソースを読むのは非常に面倒 ● 例 ● foo()という関数内でbar()という関数を呼んでいる。bar() が何をしている関数か知りたい ● foo()の引数の型であるstruct hogeの定義を知りたい ● grepコマンドなどでソースを全て検索し, マッチした ファイルを開いてカーソルを所定の場所に移動させる、 などの操作を毎回実行するのは面倒、かつ非効率 ● bar()やstruct hogeの調査後、foo()の調査を再開した いような場合はさらに面倒 ● これを解決するのがタグジャンプツール
  9. 9. 9 タグジャンプツールの仕組み ● タグジャンプツールは、ソースコードを走査して、ソー ス中のどこにどのような定義があるのかを記録したデー タベース(タグファイル)を作成可能 ● 開発者はそのデータベースを使って手軽に、そして高速 にソースコードを調査可能。毎回全ソースを調査したり しないので、マシンパワーも節約 ● エディタから文字列(さきほどの例でいうとfoo(), bar(), hogeなど)を指定すると、指定した文字列の定義場所に 自動的にジャンプ ● ジャンプ履歴を覚えているため、たとえば foo()から bar()へのジャンプ後に、元のfoo()に戻ることも可能
  10. 10. 10 タグの形式 ● タグの形式には色々種類があり、それぞれ一長 一短 ● cscope ● GNU Global ● ctags ● etags ● 他 ● eclipseなどのIDEでは、開発環境にタグジャン プに相当する機能を内蔵しているものもある ● 詳細はそれぞれのドキュメントを参照
  11. 11. 11 プログラムを動かしてみる ● ソースを読むときにプログラムを動かしてはい けないというルールは無い。むしろ極めて有用 ● デバッガを使ってプログラムを動かしてみて、関数 の呼び出し関係、引数、およびデータ構造の意味を 知る ● 興味のある箇所にprintf()などのデバッグメッセー ジを突っ込んで実行してみる ● ソースを少し変更した上で挙動の変化を見る ● ソースの読み/書き、実行を行き来することに よってソースの内容を理解
  12. 12. 12 まとめ ● 大規模ソースを読むためには、様々なコツが必要 ● 設計思想の理解 ● 既存ドキュメントを読む ● 読むソースの絞り込み ● 余計なところは読まない ● 読む作業の効率化 ● タグジャンプツールを活用 ● ソースの読み/書き、実行を行き来 ● 最終目標はただソースを読み切ることではなく、あら ゆる手段を使って必要箇所を効率良く理解すること
  13. 13. 13 Happy Hacking!
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×