最近コードレビュー実施上の課題を色々認識するようになりました。今回はそうした経験の整理のために、コードレビューをやる際に心に留めておいた方が良いと感じた注意点をいくつか列挙してみます。
基本方針
まずレビュー全般で重要な、普遍的な要点を以下に示します。
目的を明確化する
レビューは人手、工数のかかる作業のため、何のためにレビューをするのかを明確化し、それに沿ってリソース割り当てや進め方を最適化する必要があります。目的明確化はその基礎になります。
またレビューの副次的な効果を活かしたいという場面が度々あります。例えばレビューを通して、チームの意識(スタイル、危ない所の認識合わせ)を合わせたい、チーム間でノウハウを共有したい、といったものです。こうしたものも目的として明確化すると、副次的な恩恵の確保も安定します。
目的達成のためにレビューを含めた様々な品質確認手段を連携させる
動的テスト、静的テスト(レビュー含む)といった品質確認手段は様々なものがあり、それぞれ違った強み・弱みがあります。それら強みを活かし、弱みを補完しあうことで、全体として高い有効性・効率性を確保できます。例えば、静的に自動チェックできるルールやスタイルは静的解析ツールで確認し、レビューはツールがカバーできない箇所に注力する、といったアプローチは、全体の効率を高めます。
目的達成のためにレビューのアプローチを工夫する
目的に合わせてレビューの進め方を工夫するのも有効です。例えばレビューの網羅性を確保したいならば、テスト観点を事前に整理して、テスト観点ごとにレビューを進めるアプローチが有効になります。
またレビューは人手や工数がかかるので、目的に基づいた優先付けで、投入するリソースを調整するアプローチも欠かせません。
レビューの改善フィードバックサイクルを回す
レビューは工場の自動化された製造ラインと違って、属人的な要素が強く、効果のブレもあります。そのため品質確保手段としてレビューに頼る場合は、レビューがきちんと目的達成できているか確認し、問題があれば改善する改善サイクルを回す必要性があります。例えばバグ分析をして、レビューから漏れた欠陥流出を評価し、欠陥流出を削減するようにレビューのやり方を改善する、といったものです。
コードレビューの留意点
次に、チームでコードの品質を確認するウォークスルーレビューにおける、具体的な留意点を以下にまとめます。
レビュー観点を具体化し、チームに展開する
レビューの用途は多種多様なため、実施したいレビュー観点を具体化し、事前にチームで共有しておくと、レビューの効果を確保しやすくなります。「コーディング規約の順守を確認したい」「エラー処理の漏れを見つけたい」といったものです。
また事前のレビュー観点の具体化は、プログラマがプログラミングする際の留意点にも使えますので、レビュー前の事前の欠陥予防にも貢献します。
レビューの効果を引き出せるチーム文化を醸成する
有効なレビュー指摘を引き出し、またそれをレビュー対象作成者が前向きに受け止められるようにするためには、チームの雰囲気をうまく醸成する必要があります。パワハラをやらないといった当たり前のことから、熟練者でも率先してレビューされるのを歓迎する、といった姿勢づくりの形です。チーム文化の醸成には、コミュニケーション方針を作るといった直接的なもののほか、よいコミュニケーションを促進するように採用や人事評価を行うといった基礎作りも有効です。一朝一夕にできるものではないので、継続してより良くしていく必要があります。
自動化する
コーディングスタイルの順守チェックといったものは自動化可能です。レビューは人手がかかるので、自動化できるものは自動化して、レビューリソースの割り当てを最適化するのが重要です。
プログラマの能力向上を目指す
レビューは繰り返しコストがかかるので、なるべく指摘の繰り返しは無くすべきです。その対策として有効なのが、レビュー対象作成者の能力を高め、次から指摘された欠陥を再現しないようにするアプローチです。能力向上を実現するためには、欠陥を指摘するだけでなく、なぜ指摘対応が必要なのかという背景となるノウハウ・知見を対象作成者に納得させるコミュニケーションが必要になります。