コードレビュー事始め

今までコードレビューというものをやった事が無い。コードの品質を上げる為には必要な事*1とはわかっているけど、スケジュール的な問題やそもそも自分が書いたコードをレビューできる人間がいないという事もあって、ほったらかしにしていた。

そんな折、自分以外の開発者がレビューするのにちょうどいい規模の開発案件をやっていたので、それの成果物を試しにレビューしようと思い立った。といってもコードレビューなんてやった事が無いのでやり方がさっぱりわからない。

とりあえず参考になりそうな本を買ってきたので、コードレビューのやり方をまとめてみる。

コードレビューの形態

コードレビューにはどのような形態があるか?

Code Craft P465 より

・自主的なレビュー
作者が、自分の成果物を体系的な方法で入念に調べて、成果物に問題がないと確認することを意味します。(中略)
・1対1のレビュー
ほかのプログラマーと一緒に自分のコードを実地検証することを意味します。そのプログラマーは、あなたの説明を追いながら、ロジックをチェックし、どこかに欠陥がないかどうかに目を配ります。(中略)
・公式のレビュー
さらに多くのプログラマーを巻き込んで、新たな専門知識、より多くの経験、より多くの目を投入し、さまざまな視点からレビューを実施することを意味します。(以下略)

どうして?

なぜコードレビューを行う必要があるのか?

プログラマー現役続行 P206 より

・正しく機能を作り込んだかを確認して、テスト中毒サイクル*2から脱却する
・読みやすく、保守性が高いコードを書いているかを確認して、デバッグ・保守・エンハンスのコストを抑える

誰が?

どんな人がコードレビューに参加する必要があるか?

作者
コードの作成者、コードの説明を行う
レビュー担当者
コードをレビューし、問題があれば指摘する
議長
レビューを指導し、議論の方向を決める
書記
議事録を取る

何を?

どのようなコードをレビューする必要があるのか?

Code Craft P468 より

・中心となるコンポーネントの中核のコードを選ぶ
・プロファイラを実行することで特にCPU時間を消費している部分を探し出し、その部分のコードをレビューする
・複雑度を分析するツールを実行し、一番気にかかるコードをレビューする
・すでにバグがかなり露見している箇所を対象にする
・信頼できないプログラマーの書いたコードを選ぶ(コードレビューで復讐だ!)

いつ?

開発のどの段階でレビューをするのがいいか?

どこで?

どのような場所でレビューを行うのがいいか?

  • 静かな場所。コーヒーを用意しておく。

どのように?

具体的にどんなことを調べればいいのか?

  • 正しく機能を作りこんだか?
  • エラー処理などを適切に行っているか?
  • コードが読みやすいか?
  • 変数名・メソッド名・クラス名などが適切か?
  • 同じような処理をコピー&ペーストで作っていないか?
  • 他の人のモジュールと同じような処理を書いていないか?

心構え

作者

Code Craft P472 より

自分の欠点が晒されることを恐れてコードレビューを敬遠する人が少なからずいますが、尻込みしてはいけません。コードをレビューしてもらうことで、新しい技術を学ぶ良い機会が得られます。自分が完璧でないことを謙虚に認め、他人の批判を積極的に受け入れることが大切です。

レビュー担当者

Code Craft P473 より

常に建設的な意見を提案し、非難の感情を込めないようにします。作者への個人攻撃をしないようにします。

コードレビューの準備

コードレビューを行う前に準備しておくことは?

クリーンなソースコードにしておく。クリーンなソースコードとは

完全なるコード

レビューで合格するコードとはどういうものなのか?

Code Craft P475 より

・バグがないこと
・正確であること
・完備であること
・構造化されていること
・予見可能であること
・堅牢であること
・データをチェックしていること
・保守可能であること

*1:Googleでは義務付けられているらしい

*2:ソフトウェアの品質を確保する手段として、人手によるテストだけに頼ると、より高い品質を得るためにはひたすら同じテストを繰り返す事になってしまう事