magazine.gifCode Reading - オープンソースから学ぶソフトウェア開発技法

序文
はじめに
まえがき
付録CD-ROMについて

第1章 序論

  • 1.1 コードを読む理由と方法論
    • 1.1.1 文芸作品としてのコード
    • 1.1.2 手本としてのコード
    • 1.1.3 保守
    • 1.1.4 進化
    • 1.1.5 再利用
    • 1.1.6 インスペクション
  • 1.2 本書の読み方
    • 1.2.1 表記上の規則
    • 1.2.2 ダイアグラム
    • 1.2.3 練習問題
    • 1.2.4 副教材
    • 1.2.5 ツール
    • 1.2.6 本書の大要
    • 1.2.7 大いなる「言語論争」

第2章 プログラミングの基本要素

  • 2.1 最初に取り上げる完全なプログラム
  • 2.2 関数とグローバル変数
  • 2.3 whileループ、条件、ブロック
  • 2.4 switchステートメント
  • 2.5 forループ
  • 2.6 breakとcontinueステートメント
  • 2.7 文字式とブール式
  • 2.8 gotoステートメント
  • 2.9 小規模なリファクタリング
  • 2.10 doループと性数式
  • 2.11 制御構造再考

第3章 Cのデータ型(上級編)

  • 3.1 ポインタ
    • 3.1.1 リンクデータ構造
    • 3.1.2 データ構造の動的割り当て
    • 3.1.3 参照呼び出し
    • 3.1.4 データ要素へのアクセス
    • 3.1.5 配列による引数と戻り値
    • 3.1.6 関数のポインタ
    • 3.1.7 ポインタによる別名参照
    • 3.1.8 ポインタと文字列
    • 3.1.9 ダイレクトメモリアクセス
  • 3.2 構造体
    • 3.2.1 データ要素のグループ化
    • 3.2.2 関数から複数のデータ要素を返すケース
    • 3.2.3 データ構造のマッピング
    • 3.2.4 オブジェクト指向プログラミング
  • 3.3 共用体
    • 3.3.1 記憶域の効率的な使用
    • 3.3.2 多態の実装
    • 3.3.3 さまざまな内部表現による操作
  • 3.4 動的メモリ割り当て
    • 3.4.1 空きメモリの管理
    • 3.4.2 動的に割り当てられる配列を持つ構造体
  • 3.5 typedef宣言

第4章 Cのデータ構造

  • 4.1 ベクタ
  • 4.2 行列とテーブル
  • 4.3 スタック
  • 4.4 キュー
  • 4.5 マップ
    • 4.5.1 ハッシュテーブル
  • 4.6 集合
  • 4.7 連結リスト
  • 4.8 ツリー
  • 4.9 グラフ
    • 4.9.1 ノード記憶
    • 4.9.2 エッジ表現
    • 4.9.3 エッジ記憶
    • 4.9.4 グラフの性質
    • 4.9.5 隠れた構造
    • 4.9.6 その他の表現

第5章 制御フロー(上級編)

  • 5.1 再帰
  • 5.2 例外
  • 5.3 並列性
    • 5.3.1 ハードウェアとソフトウェアの並列性
    • 5.3.2 制御モデル
    • 5.3.3 スレッドの実装
  • 5.4 シグナル
  • 5.5 非ローカルジャンプ
  • 5.6 マクロ置換

第6章 大きなプロジェクトへの取り組み

  • 6.1 設計と実装のテクニック
  • 6.2 プロジェクトの編成
  • 6.3 ビルドプロセスとMakefile
  • 6.4 設定
  • 6.5 リビジョン管理
  • 6.6 プロジェクト固有のツール
  • 6.7 テスト

第7章 コーディング標準と規約

  • 7.1 ファイルの名前と編成
  • 7.2 インデント
  • 7.3 書式
  • 7.4 名前付け規則
  • 7.5 プログラミング作法
  • 7.6 プロセス標準

第8章 ドキュメント

  • 8.1 ドキュメントの種類
  • 8.2 ドキュメントを読む
  • 8.3 ドキュメントの問題点
  • 8.4 いろいろなドキュメントソース
  • 8.5 オープンソースにおける一般的なドキュメント形式

第9章 アーキテクチャ

  • 9.1 システム構造
    • 9.1.1 中央リポジトリと分散型の手法
    • 9.1.2 データフローアーキテクチャ
    • 9.1.3 オブジェクト指向構造
    • 9.1.4 階層型アーキテクチャ
    • 9.1.5 ヒエラルキー
    • 9.1.6 スライシング
  • 9.2 制御モデル
    • 9.2.1 イベントトリブンシステム
    • 9.2.2 システムマネージャ
    • 9.2.3 状態遷移
  • 9.3 要素のパッケージ化
    • 9.3.1 モジュール
    • 9.3.2 名前空間
    • 9.3.3 オブジェクト
    • 9.3.4 ジェネリックインプリメンテーション
    • 9.3.5 抽象データ型
    • 9.3.6 ライブラリ
    • 9.3.7 プロセスとフィルタ
    • 9.3.8 コンポーネント
    • 9.3.9 データリポジトリ
  • 9.4 アーキテクチャの再利用
    • 9.4.1 フレームワーク
    • 9.4.2 コードウィザード
    • 9.4.3 デザインパターン
    • 9.4.4 分野固有のアーキテクチャ

第10章 コードを読むためのツール

  • 10.1 正規表現
  • 10.2 コード閲覧ツールとしてのエディタ
  • 10.3 grepによるコード検索
  • 10.4 ファイル間の差異の検索
  • 10.5 ツールの自作
  • 10.6 コードを読むツールとしてのコンパイラ
  • 10.7 コードブラウザと美化ツール
  • 10.8 ランタイムツール
  • 10.9 ソフトウェア以外のツールや手法

第11章 総合的な例

  • 11.1 下準備
  • 11.2 進め方の作戦
  • 11.3 コードの再利用
  • 11.4 テストおよびデバッグ
  • 11.5 ドキュメント
  • 11.6 講評

付録A 本書に収録したコードの概要
付録B ソースコードの著作者
付録C 参照ソースコード一覧
付録D ソースコードのライセンス

  • D.1 ACE
  • D.2 Apache
  • D.3 ArgoUML
  • D.4 DemoGL
  • D.5 hsqldb
  • D.6 NetBSD
  • D.7 OpenCL
  • D.8 Perl
  • D.9 qtchat
  • D.10 socket
  • D.11 vcf
  • D.12 X Window System
  • D.13 Ruby
  • D.14 WideStudio

付録E コードリーディングのための名言

  • E.1 第1章 序論
  • E.2 第2章 プログラミングの基本要素
  • E.3 第3章 Cのデータ型(上級編)
  • E.4 第4章 Cのデータ構造
  • E.5 第5章 制御フロー(上級編)
  • E.6 第6章 大きなプロジェクトへの取り組み
  • E.7 第7章 コーディング標準と規約
  • E.8 第8章 ドキュメント
  • E.9 第9章 アーキテクチャ
  • E.10 第10章 コードを読むためのツール
  • E.11 第11章 総合的な例

参考文献
索引
題辞
あとがき
著者紹介/監訳者紹介