Code Reading―オープンソースから学ぶソフトウェア開発技法
- 毎日コミュニケーションズ (2004年6月1日発売)
- Amazon.co.jp ・本 (523ページ)
- / ISBN・EAN: 9784839912659
作品紹介・あらすじ
本書は、生の知識を得る最良の方法である、ソースコードを読む技術を解説しています。ソースコードこそソフトウェアのすべての知識の源です。効率よくソースコードを読むことは、効率よく自分の能力を向上させることにつながります。
感想・レビュー・書評
-
# 書評☆3 Code Reading | 大量のOSSの実コードを引用した学術的要素高めのC言語ベースのコーディング技法解説
## 概要
- 書名: Code Reading
- 副題: オープンソースから学ぶソフトウェア開発技法
- 著者: トップスタジオ and まつもと ゆきひろ and 平林 俊一 and 鵜飼 文敏
- 出版日: 2004-06-10
- 読了日: 2019-11-05 Tue
- 評価: ☆3
- URL: https://book.senooken.jp/post/2019/12/13/
## 評価
新しい仕事に取り掛かる際に,既存ソフトのソースコードを眺めて作りを理解する必要に迫られた。今までも似たような作業があり,コードリーディングの能力を高める必要があると思い,本書を読んだ。
内容としては,既存のOSS (Open Source Software) のソースコードを使って,実際にどのような手法が使われているかを解説したものだった。
既存OSSがC言語のものが多かったということで,C言語をベースとしたコーディング技法を解説していた。
流れとしては,目次通り以下の流れで解説されていた。
1. 序論
2. ループやifなどの制御構造
3. Cのデータ型
4. Cのデータ構造
5. 制御フロー (上級編): 再帰,例外,並列,シグナル,マクロ
6. プロジェクト
7. コーディング規約
8. ドキュメント
9. アーキテクチャ
10. コードリーディングのツール
11. 総合的な例
個人的には,1-4章と10章が特に有益だった。Cのデータ型やデータ構造が実コードでどのように使われているのか解説されていた。
用途が不明だった,unionも多態の実現にstruct内で使われていることを知れた。また,コードリーディングでは,変数や関数 (シンボル) の定義元,関数の呼び出し元を探すことがよくある。ここの作業に時間がかかっていて,どうにかしたいなと日頃から感じていた。今まで知らなかったソフトを多数を知れてよかった。
ただ,その他の6-9章は内容がやや高度であったので,自分ではあまり理解できなかった。
本書の最大の特徴は,大量のOSSで実際に使われているコーディング技法を大量に引用しているところだろう。ここまで細かくコード片を引用し,その出所も行数まで掲載されているのには驚いた。かなり労力のかかっている本だと思った。
## 引用
> ### p. 13: 1.2.2 ダイアグラム
> デザインダイアグラムには、事実上の業界標準となっているUML (Unified Modeling Language) を採用しました。本書を準備する段階で、UMLダイアグラムを生成するオープンソースの宣言型言語 <[注5] (https://www.spinellis.gr/umlgraph/)> を開発すると都合が良いことがわかり、それに伴いGraphVizツールのコードベースにも少し改良を加えました。
UMLの生成言語としてはPlantUMLを知っていたが,この他にもUMLGraphというものを知れた。
> ### p. 66: 3.1 ポインタ
> Cプログラムのポインタには次の用法があります。
> - リンクデータ構造を作る
> - 動的に割り当てられたデータ構造を参照する
> - 参照呼び出しを実装する
> - 一連のデータ要素にアクセスする
> - 配列を引数として渡す
> - 関数を参照する
> - 別名で参照する
> - 文字列を表現する
> - システムメモリに直接アクセスする
C言語のポインタの用法がまとまっていた。
> ### p. 69: 3.1.4 データ要素へのアクセス
> 表3.1 T型の要素を持つ配列をインデックスまたはポインタで操作する
> - 配列インデックスによるコード | ポインタによるコード
> - int i; | T *p;
> - i = 0 | p = aまたはp = &a[0]
> - a[i] | *p
> - a[i].f | p->f
> - i++ | p++
> - i += K | p += K
> - i == N | p == &a[N]またはp == a + N
Cのポインタと配列は混同しやすいので対応が整理されていてよかった。
> ### p. 102: 4.1 ベクタ
> 配列の要素は、Cライブラリ関数のfwriteでファイルに保存されることがよくあります。
>
> ```
> if (fwrite(buf, sizeof(char), n, fp) != n) {
> message("write() failed, don't know how", 0);
> }
> ```
>
> ファイルに保存された要素をメインメモリに読み込むときは、fread関数を使用します。
>
> ```
> if (fread(buf, sizeof(char), n, fp) != n) {
> clean_up("read() failed, don't know why");
> }
> ```
変数内のデータを簡易的に出力・入力する方法が書かれていた。内部表現をファイルに出力する都合,同一アーキテクチャのマシンでしか機能しないが,手っ取り早い方法として悪くない。
> ### p. 389: 10.7 コードブラウザと美化ツール
> 次に、よく知られているオープンソースブラウザをいくつか取り上げ、簡単に紹介しておきます。
> - cscope <[注21](http://cscope.sourceforge.net/)>。Unixベースで、テキストインターフェイスを持つソースコードブラウザ。Cの解析用に設計されているが、パーサの柔軟性が高く、C++やJavaでも有用である。cscopeは、Emacs、nvi、vimなどのエディタと統合できる
> - cbrowser <[注22](http://cbrowser.sourceforge.net/)>。C/C++ソースコードの検索と閲覧のためのグラフィカルツールで、関数呼び出しの階層表示もできる。cscopeを土台とし、その上に組み立てられている
> - Source-Navigator <[注23](http://sources.redhat.com/sourcenav/)>。C、C++、Tcl、FORTRAN、COBOLを始め、その他いくつかの言語を扱えるブラウザ
> - LXRブラウザ <[注24](http://lxr.linux.no/)>。Webベースのブラウザで、大量のコードコレクションの相互参照ができる。
コードリーディングのためのツールをいろいろ紹介していた。ctagsやcscopeは知っていて,特にcscopeはたいへん便利で重宝していた。ここでさらに,cbrowserというツールやその他のコードブラウザの存在を知れてとても良かった。
cscopeは関数ツリーをたどることはできないのが惜しいなと思っていたのだが,cbrowserでは関数ツリーをたどることができるとのことで,これは是非試したいと思った。
## 結論
学術的な要素があり,やや難易度の高い部分があり,中級者向け以上の本となっている。また,C言語のコードをベースにしているので,最低限のC言語の知識を前提としていることに注意が必要だ。
学術的な要素があり,2004年とやや古い出版であるが,多数のOSSのベースとなっているC言語をベースに,データ型や制御構造など実際のコード片を引用しながらコードリーディングの技術を解説していて,よかった。
個人的には,コードリーディングのツールをいろいろ知れたのがとても良かった。このあたりのツールは作業効率に影響出るのだが,あまりネット上にも情報が出ていない。cscopeは知っていたが,cbrowserは知らなかった。
ただし,労力がかかっているのは分かるが,プレミアムブックスは値段が高すぎる。図書館でどうにか借りて済ませるのがよいだろう。 -
積読していましたが読了。ただ、中身を見た感じから流し&拾い読みにとどめています。
前半は C 言語のテクニックがほとんど。
中盤は make やコーディング規約など。
後半はコードを読むためのツールや実践など。
それなりに古い本ですが、組み込み系や低レイヤ系の人にはまだまだ得るものがある気はします。 -
コードリーディングのテクニック本かと思って購入したが、少し違ったのでざっーっと読んでしまった。(ので評価はつけていません)
ソフトウェア開発技法を学ぼうと思ったときにまた読んでみようと思う。(副題は、オープンソースから学ぶソフトウェア開発技法)
内容はOSSのコードを例にした解説書という感じ。ほぼC言語なのでCをちゃんと知らないときつい。
コードの解説なので、本の半分くらいはプログラミングテクニックについての解説となっている。(データ構造やアルゴリズムなどについても触れられている)
11章の総合的な例では、”hsqldbに月相を計算する関数を追加する”という課題を解決するまでのプロセスが作業日記のような形で記載されている。
他の人がどのようなプロセスで作業をしている(コードを読んで変更を加える)かというのを知る機会はなかなか無いので、この章はコードリーディングの参考になった。 -
けっこう勿体無いことをした。
Cがあまり読めないのにも関わらず、Cのコードが多く乗っているこの本を取ったことに。
あまり頭に入らなかったかな。
grepとかちゃんと使ってこう -
難しい。
思っていたよりC言語わかってなかった。
あと、単純に経験が圧倒的に足りない。
ゆっくりでいいから演習も含めてちゃんと理解していきたい。
が、厳しい。結構時間かかりそう。 -
オープンソースのコードを読むことで技術力を高めようという趣旨の本。
内容はコードの読み方、オープンソースでよく見られるイディオムの解説など。
とにかくソースコードはいっぱい読もう。 -
各言語の入門書など色々見てきたが、コードの読解法を詳細した本に初めてであった。内容が”実践的”でそこがよい。教科書と銘打つなりに各節末に問題が出される。問題内容は、付属のCDに保存されているコードを実際に読解し、その部分の機能や役割を解説せよなどというものや、コード保守をしろというものなどである。この本は、文章を読んで実践的なコードの読解法を学び、そして節末問題で学んだ方法を実際に試してみるというインプット・アウトプット学習法を主軸に読み進める本のように感じる。従って、この本は唯の解説書であり、主役はCDなのだろうと思う。しかし、CDを使用しなくとも読む価値は十分にある。
-
ソースコードをどう読んでいくか。
あまりこの手の解説している本は少ない。(方法論が少ないのも事実だが。)
そういう点では貴重な本の一冊である。
きょうは、快晴です。
体に気を付けていい日にしたいと思います。
やま
きょうは、快晴です。
体に気を付けていい日にしたいと思います。
やま