コードレビューのチェックリスト
一般
-
コードは動作するか?
-
全てのコードは理解しやすいか?
-
同意されているコード規約に従っているか?
-
カッコの位置、変数名や関数名、行の長さ、インデントの数、フォーマット、コメント
-
冗長あるいは重複したコードはないか?
-
可能な限りモジュール化されているか?
-
置き換え可能なグローバル変数はないか?
-
コメントアウトされたままのコードはないか?
-
ループは回数が決まっているか?あるいは終了条件は正しいか?
-
ライブラリ関数で置き換え可能なコードはないか?
-
ロギングあるいはデバッグ用のコードは削除されているか?
-
マジックナンバーは存在しないか
セキュリティ
-
全てのデータ入力はチェックされ(型、長さ、フォーマット、範囲が正しいかどうか)、エンコードされているか?
-
サードパーティ製のユーティリティを使っている部分では、返されるエラーを拾っているか?
-
出力値はチェックされ、エンコードされているか?
-
不正なパラメータ値の扱いが書かれているか?
ドキュメント
-
コメントは存在していて、かつコードの意図が記述されているか?
-
全ての関数にコメントが付いているか?
-
通常と違う振る舞いや、特殊な場合の扱いについて説明されているか?
-
サードパーティ製ライブラリを使っている事やその関数についてドキュメントに書かれているか?
-
データ構造や数値の単位は説明されているか?
-
中途半端になっているコードはないか?
-
その場合、その部分は削除されるべきか?
-
あるいは'TODO'のような適切な目印でフラグを立てておくべきか?
テスト
-
コードはテスト可能か?
-
依存性が強すぎたり隠されていたりしないか
-
オブジェクトが初期化できなくないか
-
テストフレームワークがメソッドを使えるか
-
テストが存在しており、かつ理解できるものか?
-
ユニットテストは、コードが意図した機能を実現するよう動作しているかどうかをテストしているか?
-
配列の「out-of-bound(範囲外のアクセス)」エラーはチェックされているか?
-
テストコードは既にあるAPIで置き換え可能ではないか?
言語固有