- コーディングルールに従っているか?
- 可読性の高いコードになっているか?
- 識別子名の命名は適切か?
- レビュアーの経験に基づくベストな設計に十分近いか? 各クラスの役割が明確であるか、クラスの粒度、関数の粒度が適当か、クラスが正しいレイヤーに置かれているか。
- 問題に対し本質的な解決を選択しているか?(=アドホックではないか?) あるいは、本質的でないにせよ、現実的に選択可能な解決法の中で最も良いものか?
- コメントは十分に書かれているか?
- 似たようなコードが複数回登場していないか? ボイラープレートコードはないか?
- 拡張性・保守性の高い設計になっているか? 「将来、ある場所を書き換えたら、他の場所も書き換えないといけない」という状況になっていないか?
- ヌルチェックなどのフェイルセーフは十分か?
- 想定外の状況をいち早く察知するためのassertionは十分か?
- ローカル変数のスコープは最小か?
- 意図せずカットしてしまっているコードはないか?
- 自分の経験したアンチパターンにマッチするコードはないか?例:
- 他に修正しなければならない場所はないか?実装者はそこも修正しただろうか?
- 「自分がこのタスクの担当者なら、どういうテストをするだろうか?」というのを考えながらコードを読む。
- もし「仕様充足性の検証」という視点からテスト項目を作成するだけでは見落としそうなテスト項目を思いついたら、「この部分が修正されているので、〇〇のようなテストも行っておきましょう」と指摘しておく。