私はコードレビューについて、少し反対派です。
というのも、コードレビューができる人って限られていて、大抵の場合負荷がその人に集中してしまうからです。ボトルネックとなって責められるか?バグの責任を一身に背負わされるか?そんなの誰だってやりたくない。本当に重要なところならともかく、何でもかんでもレビューしていたら、身がもちません。むしろコードレビューなんてしなくていいルール・仕組みにしておいても、どうせ本当にヤバいところはダブルチェックでレビューしあうでしょ?そういうところのために余力を残しておきたい。あるいは、そういう相談ができる相手がいない人は、結局レビューはしてもらえないのだから、本気で全力でやるしかない。だから、コードレビューを(ソース管理の制約やリリース判断として)ルールに組み込むのは反対。程度問題なんですが、いいバランスでやれるイメージがなかなかもてない・・・
代わりに、自動ビルド・自動テスト・静的コード分析によってコードの品質を保証する方が推奨です。
そもそもコードレビューをしたくなるのはなぜか?もともとの目的は、ビルドができれば問題が無いとか、バグがなければ問題が無いとか、設計やアーキテクチャに問題が無いとか、あるいはそういった問題があることを見抜いて、早く安心したい。問題に気づいて直せればいいし、問題があると教えてもらえれば自分で勉強して直すことができる、今後問題があるコードを書かなくて済む。そうしたい。でもそれって人がコードを読んでレビューする必要ある?自分たちが書いたテストコードで問題が無いことが保証できればそれでOKだし、ビルド時にVisual Studio に表示されるコード分析の結果を見て、問題になりそうなコードを修正すればいい。でも、テストコード書かずに、コード分析も有効にしないで、人にレビューさせたくなる現場が多いんですよね。
単純にテストをコードで書けることを知らない。知らないから見積もりに含めていないしタスクとして作業させない。コード分析も知らない。知らないからプロジェクトで強制する仕組みを用意していない。
それで何か問題が起きたら何でもかんでも、「コードレビューでチェック」のルールを足していく。現場でいったいどれだけのコードが1日に生成・変更されているか?知らないからそれで現場が回ると思っている。でも、そりゃ無理だよ。無理を通せば、スケジュールか品質、どちらかが犠牲になる。あるいは、それを背負わされた人間の体力・精神・人生が・・・
それに「有識者がコードレビューしてくれる」と思うと、普通は自分でよく考えずにレビューに回すようになる。他にチェックしてくれる人がいるのだから、安心。「仕事は 80% の精度で完成させて次に進めた方がいい」と考える人も多く。本当に問題があれば指摘してもらえるのだから、そこそこで見切りをつけてレビューに出す方が仕事ができるっぽいでしょ。でもシステム開発では、絶対に問題を起こしてはいけないところがある。品質は掛け算だから、80% × 80% ×・・・と繰り返すと、ほとんどゴミしか出来上がらない。これは絶対に防がなければならない。そうやってコードレビュー担当者が一人で品質を引き上げ続けるそばで、レビューに回す人はどんどんコードレビューしてくれる人をまるで「Visual Studio のコード分析」と同じ様に使うようになる。ビルドしてエラーが出れば直せばいい。コードレビューで問題が指摘されれば直せばいい。しかし、Visual Studio と違って、コードレビューをする人は疲弊していく。
じゃぁ、本当に人の代わりに Visual Studio にコードレビューをしてもらえればいいんじゃない?
ひとつはコード分析を知らない人に、なんとしてもコード分析を知ってもらう。これだけでかなり多くの問題を防げる。そしてもう一つは、もし「コードレビューが必要」となったとき、その内容のコード分析を用意すること。もし標準のコード分析が存在しなけば、自分で作る。
自分がコードレビューをするときに、ソースコードを読んで、考え、判断する内容をそのまま、コード分析としてプログラムする。自分の代わりにコードレビューをやってくれるコード分析が作れれば、人がコードレビューする必要がなくなります。もちろん、コードレビューをしていないわけじゃない。自分が判断するのと同じ内容を、プログラムが判断してくれている。それも、いつでも何度でも、ほとんど一瞬のうちに。これなら、よく考えずにレビューに回してくれても、即座に差し戻すことができる。自分がレビューで指摘する点をそのまま、ビルドエラーとして返すことができる。
自分のプログラムコードを読むプログラムを作れる。
自動テストを始めて知ったとき「自分のプログラムコードをテストするプログラムコードを作れる」ことにちょっと感動しますが。自分で静的コード分析を作れるとわかると、それもまたちょっと感動しますね。そして、どんなコードレビューでもコード分析で実現できるとなれば、コード分析を使うのが当たり前な文化にすることも簡単かもしれません。
ということで、この連載では静的コード分析を作っていきたいと思います。まずは、自分のプログラムコードを読むプログラムを作るところから。次回は、C# コードを読んで LINQ to SQL を使用しているところを探してくれるプログラム ( CrudMatrixGenerator ) を作るお話です。