俺のコードのどこが悪い? ――コードレビューを攻略する40のルール

概 要

コードレビューを活用して、よりよいコードを書き、プログラマーとして成長する方法を具体的にわかりやすく解説したガイドブックです。コードレビューはコードを書いたプログラマーとは異なる第三者の観点から問題を検出し、品質を確保するのが目的ですが、プログラマーのなかにはレビューを受けるのが憂鬱だったり、レビューでの失敗をどう活かせばいいのかわからない、レビューで何を指摘すればいいのかわからないという人もいます。そこで本書では、レビューまでにプログラマーがやっておくべき基本的な確認項目や、心構えなどを紹介します。また、レビューから得られた反省点を次に活かすための方法や、レビューチェックシートも掲載しています。

著者 藤原克則
価格 本体2000円(税別)
ISBN 978-4-7980-2918-4
発売日 2011/3/15
判型 B5変
色数 1色
ページ数 296
CD/DVD
対象読者 中級
シリーズ
表紙イメージ
購入 アマゾンで購入する
楽天で購入する

※リンク先によっては、販売ページが用意されていないことがあります。あらかじめご了承ください。

新しいウィンドウで開く 書籍購入のご案内

サポート

サポート情報は以下からご参照下さい。

サポート情報へのリンク

目次

★レビュー準備編

●1 レビューを効率良く進めるために

1.1 全体像を素早く掴むための準備

1.2 コードの参照性を高めるための準備

●2 レビューでの指摘を活かすために

2.1 「失敗学」とは?

2.2 失敗の分類

2.3 原因の究明

2.4 失敗への対策

2.5 添付チェックシートについて

●3 レビューでの指摘を恐れないために

3.1 「評価」と「技能」

3.2 「責任の共有」と考える

3.3 「指摘がない」のは良いことか?

3.4 「間違える」のは「難しい」から

★レビュー実践編

■機能充足性

●01 if/else文での判定条件は適切ですか?

01.01 判定条件に漏れはありませんか?

01.02 判定順序は適切ですか?

01.03 判定方法は最適化されていますか?

●02 データ型は適切ですか?

02.01 変数型の値域は十分ですか?

02.02 比較対象の型は一致していますか?

●03 ループの終了判定は妥当ですか?

03.01 必要な変数がすべて初期化されていますか?

03.02 終了判定の対象は適切な変数ですか?

03.03 終了条件は適切ですか?

03.04 更新処理に漏れはありませんか?

03.05 構文選択は妥当ですか?

●04 switch文のcaseラベル列挙は十分ですか?

04.01 caseラベルの列挙に漏れはありませんか?

04.02 default節は明記してありますか?

●05 引数チェックは十分ですか?

05.01 前提条件の確認を実装していますか?

05.02 前提条件を明記していますか?

●06 戻り値チェックは十分ですか?

06.01 戻り値の仕様は確認済みですか?

06.02 獲得したリソースの解放は適切ですか?

■リソース消費

●07 引数チェックが多過ぎませんか?

07.01 引数チェックは十分軽量ですか?

07.02 関数の呼び出し関係を把握していますか?

●08 戻り値チェックが多過ぎませんか?

08.01 戻り値チェックは十分軽量ですか?

08.02 関数の仕様は確認済みですか?

●09 関数の局所変数が多過ぎませんか?

09.01 未使用変数はないですか?

09.02 通用範囲は妥当ですか?

●10 各行の負荷を把握していますか?

10.01 引数による負荷の変動を把握していますか?

10.02 ループ内での関数呼び出しは軽いですか?

10.03 排他獲得状態は把握していますか?

●11 似たような処理があちこちにありませんか?

11.01 その処理は本当に必要ですか?

11.02 その処理は集約できませんか?

11.03 処理を似せる工夫はしていますか?

●12 不要な条件判定をしていませんか?

12.01 引数/戻り値チェックとの重複はありませんか?

12.02 その条件は成立し得ますか?

●13 構造体渡しは必要ですか?

13.01 構造体のサイズは妥当ですか?

13.02 他から参照されていませんか?

13.03 コンストラクタ/デストラクタは妥当ですか?

●14 不要な関数呼び出しをしていませんか?

14.01 関数の戻り値を処理に使っていますか?

14.02 その関数には副作用がありますか?

●15 関数呼び出しのコストを把握していますか?

15.01 引数の数は妥当ですか?

15.02 ライブラリ形式は妥当ですか?

●16 例外に頼り過ぎていませんか?

16.01 条件判定で済みませんか?

●17 スレッド間同期の方法は適切ですか?

17.01 同期の必要性は認識していますか?

17.02 同期手順は適切ですか?

17.03 同期方法は適切ですか?

17.04 同期対象は明確ですか?

●18 アルゴリズムやデータ構造の選択は適切ですか?

18.01 最大データ量の見積もりはどの程度ですか?

18.02 改変頻度の見積もりはどの程度ですか?

18.03 どんなアクセス方式を想定していますか?

●19 コンパイラの最適化に期待し過ぎていませんか?

19.01 関数横断での最適化を期待していませんか?

19.02 メモリ配置での最適化を期待していませんか?

●20 ファイルアクセスは妥当ですか?

20.01 ファイルアクセスは最小限ですか?

20.02 mmap()の使用は検討済みですか?

20.03 ディレクトリ構成は妥当ですか?

20.04 システムの制限は把握していますか?

■実行安全性

●21 入力データは検証済みですか?

21.01 どこまで信用できるデータですか?

21.02 サイズの妥当性は検証済みですか?

21.03 内容の妥当性は検証済みですか?

●22 スタック消費量は妥当ですか?

22.01 局所変数は最小限ですか?

22.02 関数呼び出しの深さは妥当ですか?

●23 ヒープ消費量は妥当ですか?

23.01 総データ量の見積もりは済んでいますか?

23.02 未使用領域を解放していますか?

●24 スレッド数は十分ですか?

24.01 スレッド数は十分ですか?

24.02 スレッド数が過剰ではないですか?

●25 ファイル操作は妥当ですか?

25.01 ファイル更新手順は妥当ですか?

25.02 ファイルシステム境界は意識していますか?

25.03 時間当たりの転送量の見積もりは済んでいますか?

●26 ネットワークアクセスは妥当ですか?

26.01 連携先との接続障害に備えていますか?

26.02 連携タイミングに関する前提は妥当ですか?

26.03 時間当たりの転送量の見積もりは済んでいますか?

●27 異常が検出された際の挙動は適切ですか?

27.01 継続可能な異常ですか?

27.02 不要なリソースは解放していますか?

27.03 異常への対応位置は妥当ですか?

■保守性

●28 横に長いコードになっていませんか?

28.01 ループや条件判定の入れ子が多過ぎませんか?

28.02 関数引数が多過ぎませんか

28.03 式が複雑過ぎませんか?

●29 空行を適切に挿入していますか?

29.01 関連する処理はどれですか?

29.02 関連するデータはどれですか?

●30 プロジェクトのコーディング規約に従っていますか?

30.01 プロジェクトにコーディング規約はありますか?

30.02 規約チェック用のツールはありますか?

●31 自分のコーディングスタイルは一貫していますか?

31.01 各行の体裁が一貫していますか?

31.02 関数宣言の体裁が一貫していますか?

31.03 関数定義の体裁が一貫していますか?

●32 機能を詰め込み過ぎていませんか?

32.01 引数による条件判定が多過ぎませんか?

32.02 関数の行数が多過ぎませんか?

●33 変更をどこまで想定していますか?

33.01 その値は変更されませんか?

33.02 その処理は変更されませんか?

●34 名前付けは適切ですか?

34.01 具体性はありますか?

34.02 対称性/相似性はありますか?

34.03 データ型が変わっても通じますか?

■拡張性

●35 無駄な拡張性にこだわっていませんか?

35.01 どの程度の拡張性を想定していますか?

35.02 安全性は考慮されていますか?

●36 十分な情報を受け渡していますか?

36.01 実現される機能範囲は想定済みですか?

36.02 情報の受け渡し方法は妥当ですか?

■テスト容易性

●37 環境に依存する箇所は把握していますか?

37.01 別のホスト上でもテストできますか?

37.02 別のシステム構成でもテストできますか?

37.03 別のOS/CPUアーキテクチャ上でもテストできますか?

●38 テスト環境の構築は簡単ですか?

38.01 必要なソフトウェアの入手は簡単ですか?

38.02 必要なハードウェアの入手は簡単ですか?

38.03 事前状態の作成は簡単ですか?

●39 日付と時刻の扱いを考えていますか?

39.01 テストデータの準備はどうしていますか?

39.02 「今日」「今」を扱いますか?

●40 どこまで細分化したテストを行えますか?

40.01 テスト対象関数は呼び出せますか?

40.02 組み合わせバリエーションは把握済みですか?

40.03 エラー系のテストはできますか?

40.04 タイミング依存の処理はテストできますか?

あとがき

レビューチェックシート

分類先決定のためのフローチャート

PR

秀和システム