CODE COMPLETE 第2版 下


CODE COMPLETE 第2版 下 完全なプログラミングを目指して


日経BP社


著者:Steve McConnell
訳者:(株)クイープ


「Code Complete」への賛辞
はじめに

第5部 コードの改良
第20章 ソフトウェアの品質
20.1 ソフトウェアの品質特性
20.2 ソフトウェアの品質改善技術
20.2.1 開発プロセス
20.2.2 目標の設定
20.3 ソフトウェアの品質改善技術の相対的な効果
20.3.1 欠陥の検出率
20.3.2 欠陥検出のコスト
20.3.3 欠陥修正のコスト
20.4 品質保証はいつ行うか
20.5 ソフトウェア品質の原則
20.6 参考資料
20.7 まとめ

第21章 コラボレーティブコンストラクション
21.1 コラボレーティブ開発プラクティスの概要
21.1.1 コラボレーティブコンストラクションによる 品質保証テクニックの補完
21.1.2 コラボレーティブコンストラクションによる 企業文化とプログラミング技術の指導
21.1.3 すべてのコラボレーティブコンストラクションに 適用される共同所有
21.2 ペアプログラミング
21.2.1 ペアプログラミングでの成功の鍵
21.2.2 ペアプログラミングの利点
21.3 公式なインスペクション
21.3.1 インスペクションから期待できる効果
21.3.2 インスペクションにおける役割
21.3.3 インスペクションの基本手順
21.3.4 インスペクションにおけるエゴ
21.3.5 本書におけるインスペクションの実例
21.3.6 インスペクションのまとめ
21.4 その他のコラボレーティブ開発プラクティス
21.4.1 ウォークスルー
21.4.2 コードリーディング
21.4.3 ドッグアンドポニーショー
21.5 コラボレーティブコンストラクションテクニックの比較
21.6 参考資料
21.7 まとめ

第22章 デベロッパーテスト
22.1 ソフトウェア品質におけるデベロッパーテストの役割
22.1.1 コンストラクション時のテスト
22.2 デベロッパーテストへの推奨アプローチ
22.2.1 テストは先か、それとも後か
22.2.2 デベロッパーテストの限界
22.3 テストの知恵袋
22.3.1 不完全なテスト
22.3.2 構造化された基礎テスト
22.3.3 データフローテスト
22.3.4 同値分割
22.3.5 エラーの推測
22.3.6 境界分析
22.3.7 悪いデータ
22.3.8 良いデータ
22.3.9 手元でチェックしやすいテストケースの使用
22.4 典型的なエラー
22.4.1 最もエラーを含んでいるクラスとは
22.4.2 エラーの分類
22.4.3 不完全なコンストラクションによるエラーの割合
22.4.4 検出が期待されるエラーの数
22.4.5 テスト自体のエラー
22.5 テストサポートツール
22.5.1 個々のクラスをテストするための足場固め
22.5.2 差分ツール
22.5.3 テストデータジェネレータ
22.5.4 カバレッジモニタ
22.5.5 データレコーダとログの記録
22.5.6 シンボリックデバッガ
22.5.7 システム混乱ツール
22.5.8 エラーデータベース
22.6 テストの改善
22.6.1 テスト計画
22.6.2 再テスト(回帰テスト)
22.6.3 自動テスト
22.7 テスト記録の保管
22.7.1 個人的なテスト記録
22.8 参考資料
22.9 まとめ

第23章 デバッグ
23.1 デバッグの概要
23.1.1 ソフトウェア品質におけるデバッグの役割
23.1.2 デバッグのパフォーマンス
23.1.3 機会としての欠陥
23.1.4 効果の低いアプローチ
23.2 欠陥の検出
23.2.1 科学的なデバッグ
23.2.2 欠陥を検出するためのヒント
23.2.3 構文エラー
23.3 欠陥の修正
23.4 デバッグの心理学的考察
23.4.1 「心理的構え」の影響
23.4.2 「心理的距離」の効果
23.5 デバッグツール
23.5.1 ソースコード比較ツール
23.5.2 コンパイラの警告メッセージ
23.5.3 構文とロジックの拡張チェック
23.5.4 実行プロファイラ
23.5.5 テストフレームワークと足場
23.5.6 デバッガ
23.6 参考資料
23.7 まとめ

第24章 リファクタリング
24.1 ソフトウェアの進化の種類
24.1.1 ソフトウェアの進化の哲学
24.2 リファクタリング概論
24.2.1 リファクタリングする理由
24.2.2 リファクタリングしない理由
24.3 リファクタリングの詳細
24.3.1 データレベルのリファクタリング
24.3.2 ステートメントレベルのリファクタリング
24.3.3 ルーチンレベルのリファクタリング
24.3.4 クラス実装のリファクタリング
24.3.5 クラスインターフェイスのリファクタリング
24.3.6 システムレベルのリファクタリング
24.4 安全なリファクタリング
24.4.1 リファクタリングに適さない状況
24.5 リファクタリング戦略
24.6 参考資料
24.7 まとめ

第25章 コードチューニング戦略
25.1 パフォーマンスの概要
25.1.1 品質特性とパフォーマンス
25.1.2 パフォーマンスとコードチューニング
25.2 コードチューニング入門
25.2.1 パレートの法則
25.2.2 過去の定説
25.2.3 いつチューニングするか
25.2.4 コンパイラによる最適化
25.3 脂肪や糖蜜の類
25.3.1 非効率の一般的な原因
25.3.2 一般的な処理の相対コスト
25.4 測定
25.4.1 測定は正確に
25.5 繰り返し
25.6 コードチューニング手法のまとめ
25.7 参考資料
25.8 まとめ

第26章 コードチューニングテクニック
26.1 ロジック
26.1.1 答えがわかったところで評価をやめる
26.1.2 頻度順の評価
26.1.3 同様の論理構造の比較
26.1.4 複雑な式をテーブル参照で置き換える
26.1.5 遅延評価の使用
26.2 ループ
26.2.1 ループ外分岐
26.2.2 ジャミング
26.2.3 展開
26.2.4 ループ内処理の最小化
26.2.5 sentinel値
26.2.6 最もビジーなループを内側に
26.2.7 強度の削減
26.3 データ変換
26.3.1 浮動小数点から整数への変更
26.3.2 配列の次元数の削減
26.3.3 配列参照の削減
26.3.4 補助的なインデックスの使用
26.3.5 キャッシュの使用
26.4 式
26.4.1 代数的な恒等式の活用
26.4.2 強度の削減の使用
26.4.3 コンパイル時の初期化
26.4.4 システムルーチンへの警戒
26.4.5 正しい型の定数の使用
26.4.6 計算済みの結果
26.4.7 共通の部分式の削除
26.5 ルーチン
26.5.1 ルーチンのインライン化
26.6 低水準言語への書き換え
26.7 物事は変わったように見えても、実は変わっていない
26.8 参考資料
26.9 まとめ

第6部 システムの考察
第27章 プログラムサイズが及ぼす影響
27.1 コミュニケーションとチームの人数
27.2 プロジェクトの規模の範囲
27.3 プロジェクトの規模がエラーに及ぼす影響
27.4 プロジェクトの規模が生産性に及ぼす影響
27.5 プロジェクトの規模が開発作業に及ぼす影響
27.5.1 アクティビティの割合と規模
27.5.2 プログラム、製品、システム、システム製品
27.5.3 方法論と規模
27.6 参考資料
27.7 まとめ

第28章 コンストラクションの管理
28.1 良いコーディングの奨励
28.1.1 標準を設定するときの検討事項
28.1.2 良いコーディングを奨励するテクニック
28.1.3 本書の役割
28.2 構成管理
28.2.1 構成管理とは
28.2.2 要求と設計の変更
28.2.3 ソフトウェアのコードの変更
28.2.4 ツールのバージョン
28.2.5 マシンの構成
28.2.6 バックアップ計画
28.2.7 構成管理の参考文献
28.3 コンストラクションスケジュールの見積もり
28.3.1 見積もりの方法
28.3.2 コンストラクションの作業量の見積もり
28.3.3 スケジュールへの影響
28.3.4 見積もりとコントロール
28.3.5 遅れたらどうするか
28.3.6 ソフトウェアの見積もりに関する参考文献
28.4 測定
28.4.1 ソフトウェアの測定に関する参考文献
28.5 プログラマは人間である
28.5.1 プログラマは時間をどのように使うか
28.5.2 パフォーマンスと品質のばらつき
28.5.3 信仰の問題
28.5.4 物理的な環境
28.5.5 プログラマが人間であることに関する参考文献
28.6 管理者の管理
28.7 参考資料
28.8 まとめ

第29章 統合
29.1 統合手法の重要性
29.2 統合の頻度― フェーズ型とインクリメンタル型
29.2.1 フェーズ型の統合
29.2.2 インクリメンタル型の統合
29.2.3 インクリメンタル型の統合の利点
29.3 インクリメンタル統合戦略
29.3.1 トップダウン統合
29.3.2 ボトムアップ統合
29.3.3 サンドイッチ統合
29.3.4 リスク指向統合
29.3.5 機能指向統合
29.3.6 T字型統合
29.3.7 インクリメンタル型の統合手法のまとめ
29.4 デイリービルドとスモークテスト
29.4.1 デイリービルドを使用できるプロジェクトの種類
29.4.2 連続的な統合
29.5 参考資料
29.6 まとめ

第30章 プログラミングツール
30.1 設計ツール
30.2 ソースコードのツール
30.2.1 編集
30.2.2 コード品質の分析
30.2.3 ソースコードのリファクタリング
30.2.4 バージョン管理
30.2.5 データディクショナリ
30.3 実行可能コードのツール
30.3.1 コードの作成
30.3.2 デバッグツール
30.3.3 テストツール
30.3.4 コードチューニング
30.4 ツール指向の環境
30.5 独自のプログラミングツールの作成
30.5.1 プロジェクト固有のツール
30.5.2 スクリプト
30.6 ツールの理想郷
30.7 参考資料
30.8 まとめ

第7部 ソフトウェア職人気質とは
第31章 レイアウトとスタイル
31.1 レイアウトの基本
31.1.1 極端なレイアウト
31.1.2 フォーマットの基本定理
31.1.3 人間によるプログラムの解釈とコンピュータによる解釈
31.1.4 良いレイアウトの価値
31.1.5 信仰としてのレイアウト
31.1.6 良いレイアウトの目標
31.1.7 レイアウト目標を適用する方法
31.2 レイアウトテクニック
31.2.1 空白
31.2.2 かっこ
31.3 レイアウトスタイル
31.3.1 純粋なブロック
31.3.2 純粋なブロックのエミュレート
31.3.3 begin-end(または中かっこ)の組によるブロック境界の指定
31.3.4 行末インデント
31.3.5 どのスタイルが最良か
31.4 制御構造のレイアウト
31.4.1 制御構造ブロックのフォーマットに関する細かな点
31.4.2 その他の注意点
31.5 ステートメントのレイアウト
31.5.1 ステートメントの長さ
31.5.2 スペースを使って明確に
31.5.3 継続行のフォーマット
31.5.4 ステートメントは1行につき1つ
31.5.5 データ宣言のレイアウト
31.6 コメントのレイアウト
31.7 ルーチンのレイアウト
31.8 クラスのレイアウト
31.8.1 クラスインターフェイスのレイアウト
31.8.2 クラス実装のレイアウト
31.8.3 ファイルとプログラムのレイアウト
31.9 参考資料
31.10 まとめ

第32章 読めばわかるコード
32.1 外部ドキュメント
32.2 ドキュメントとしてのプログラミングスタイル
32.3 コメントを入れるか入れないか
32.4 効果的なコメントのポイント
32.4.1 コメントの種類
32.4.2 効率的なコメントの作成
32.4.3 コメントの最適な数
32.5 コメントテクニック
32.5.1 行のコメント
32.5.2 コードの段落のコメント
32.5.3 データ宣言のコメント
32.5.4 制御構造のコメント
32.5.5 ルーチンのコメント
32.5.6 クラス、ファイル、プログラムのコメント
32.6 IEEE規格
32.6.1 ソフトウェア開発規格
32.6.2 ソフトウェア品質保証規格
32.6.3 ソフトウェア管理規格
32.6.4 規格の概要
32.7 参考資料
32.8 まとめ

第33章 個人の資質
33.1 個人の資質は話題からずれているか
33.2 知性と謙虚さ
33.3 好奇心
33.4 知的な誠実さ
33.5 コミュニケーションとコラボレーション
33.6 創造性と規律
33.7 怠惰
33.8 気にするほどのことはない資質
33.8.1 粘り強さ
33.8.2 経験
33.8.3 独断と偏見に満ちたプログラミング
33.9 習慣
33.10 参考資料
33.11 まとめ

第34章 ソフトウェア職人気質とは
34.1 複雑さの克服
34.2 プロセスの選択
34.3 人間が1番、コンピュータは2番
34.4 言語の中へのプログラミング
34.5 集中力を助ける規約
34.6 問題領域に立ったプログラム
34.6.1 抽象化レベルでのプログラムの分割
34.6.2 問題領域で作業するための下位レベルテクニック
34.7 落石注意
34.8 反復、その繰り返し
34.9 汝、ソフトウェアと信仰を結び付けることなかれ
34.9.1 ソフトウェアの神託
24.9.2 折衷主義
24.9.3 実験
34.10 まとめ

第35章 さらに情報を得るには
35.1 ソフトウェアコンストラクションに関する情報
35.2 コンストラクション以外のトピック
35.2.1 概要書
25.2.2 ソフトウェアエンジニアリングの概要
25.2.3 その他の参考文献
35.3 定期刊行物
35.3.1 プログラマ向け一般誌
35.3.2 プログラマ向け専門誌
35.3.3 専門出版物
35.4 ソフトウェア開発者の読書計画
35.4.1 「初級」レベル
35.4.2 「実践」レベル
35.4.3 「プロフェッショナル」レベル
35.5 専門団体への参加

参考文献
索引
著者紹介

書籍目次

Posted by shi-n