がるの健忘録

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

ソースコードレビューとペアプログラミング

ふと昔を振り返ってみて思うのですが。
昔って、先輩からの(こわ〜い)ソースコードチェックとか、場合によっては(もはや晒し者としか思えないレベルでの)「たくさんの人に見られるソースコードレビュー」とかがあったと思うです。
# 括弧の中は冗談ですともええもちろんw


んでまぁ。どこぞの道徳チックなコメンテータの発言ではありませんが「よそ様にお出しできるソース」とか「こんな恥知らずなコードを書くな」とかそーゆー感覚っつか感性っつかが鍛えられていたように思うです。
よしんば批判の方向性が間違っているにしても。とりあえずプログラムってのは「うごきゃいい」ってものではなくて、何かその次にある、もう一歩深い世界があることくらいは大抵の人が理解できていたように思うです。
もちろん。コーディングの前の設計の段階でもありましたしってか関所とか関門とかの類が随所にあったと思うです。


翻って最近を見るに。
なんていうか…「最終的にWebブラウザ上でなんとなく正常系が動いているように見える」あたりが検収ラインで、中にあるソースのチェックだの何だのってのが、そりゃもう楽しいくらいに遠くのほうに置き去りにされているように思えてしまうことが少なからずあるです。
で。そゆコードの「保守」とか「修正」とかを依頼されて拝見すると…なんといいましょうか…ええどこか遠くの世界に旅立ちたくなるような心境になることも少なからず。
http://blog.livedoor.jp/lisper/archives/16051685.html
こちらでいうところの

品質レベル「最悪」
見る気がしないプログラム。見ると気分が悪くなるプログラム。
見ると、どんな楽しみも怒りに自動変換するプログラム。
このようなプログラムに対するコメントは以下のようになります。

1. 個別のコメントは全くなく、全体的なコメントだけになる
2. 仔細なアドバイスは与えられず、情報のポインタを示すだけになる
3. 教え諭す口調になる
4. なるべく関わりになるのを避ける口調になる
5. 儀礼的になる

が決して業務的に稀だったりレアだったりするわけではないことは、少なからぬ御仁から賛同を頂戴できるように思うのですがいかがでしょうか?
# 口調変だよ。


いや割とまぢめな話として。
最低限

  • ある程度保守しやすい

ソースコードを、業務では求められてるんじゃないかと思うですよ。
で。なにを持って保守しやすいかってのは、ハイレベルなところに行くと議論も色々と分かれようとは思うのですが。
少なくとも「これはさすがにまずいだろう」という部分があるのではないかと思いまして。それくらいはどうにかしたいなぁとか思うわけですよ。


具体的に「勘弁してくれ orz」と思うコードは、とりあえず初期段階として

  • コメントがほとんど存在しないか、あっても無意味なものばかり
  • コピペしたんだか頑張って書いたんだか。とりあえず共通化してくれ orz

というのが短視野的には見つかりやすくて。次に出てくるのが

  • 関数化 or クラス化はされてるんだけど密結合で修正しにく

というのが見ているうちに出てくることが多いように思うです。
でまぁこのあたりは結局のところ

  • あとで何らかの修正だのを行うさいに見通しやら保守性やらが劇悪になる

につながると思うです。


んでもって。このあたりって、多分に「ソースが人の目に晒されていない」部分が一因としてあるんじゃないかなぁとか思うわけですよ。
wikiにも
http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%BC%E3%83%89%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC

コードレビューを実施することにより以下のような効果が期待できる。
-中略-

  • レビューを行うことへの意識により、人に見せるコードを書くようになるため可読性が向上する。

とかありますし。


んで。
そうはいっても「レビューしてる暇なんてないよ?」というご家庭(職場だってばさ)は少なくないと思うのです。
で。ンな時にこそ「ペアプログラミング」がお勧めなんじゃないかなぁと。
結局のところ「他人の目に晒されて人目を意識する」ことが目的なら、その部分においてはレビューもペアプロも同じような効果が出せるんじゃないかなぁとか思うんですが。


とりあえず。「ある程度人目を意識したコード書こうよ orz」という悲鳴と、その経過で得られたちょいと面白いURIを貼り付けてメモにしたいと思います。


http://blog.livedoor.jp/lisper/archives/16051685.html
http://peace-pipe.blogspot.com/2006/10/memo_20.html
http://blog.livedoor.jp/lisper/archives/50958110.html
http://blog.livedoor.jp/lisper/archives/50211588.html