パスワードを忘れた? アカウント作成
112650 story
ニュース

コードレビューって意味あるの ? 89

ストーリー by reo
どうなんでしょ 部門より

pinbou 曰く、

本家 /. の記事 ``Are Code Reviews Worth It ?'' より。悩めるマネージャからのご相談。

私は開発マネージャです。先日、上司と私はコードレビューの価値について議論しました。私の部署ではプログラマ主導でコードレビューとデザインレビューをやっています。やってみてわかったことは、コードレビューはやたら時間がかかる割に、良質な UI レベルでのテストよりも分かることが少ないということです。一方、デザインレビューの効用は絶大です。そもそも私たちの書いているコードはデスクトップ向けの、非クリティカルな用途のものなので、私は上司に、コードを精査するのはあまり意味がないのではないかと尋ねてみたのです。Slashdot の皆さんはどう思われますか。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by okky (2487) on 2009年06月25日 17時31分 (#1593853) ホームページ 日記

    「こういうコードが恥ずかしいコードである」
    という価値観について、上級技術者間で意識統一がなされていればね。

    ようするにコードレビューと言うのは、大学の研究室で言う輪講とかと同じなんです。
    コードをよりよいものにする、と言うのも目的の一つですが、コードを組んだ人のレベルアップを図る、という目的もある。

    十分な人数の、良く判っているプログラマがいるならばペアプログラミングも良いでしょう。でもペアを組んで回れるほどレベルの高い人がいなかったら?
    「教授と助教授と助手の目の前で発表させる」
    しかないじゃないですか。

    もちろん、この作業は「教授や助教授や助手」の時間を食います。もしあまりにも多くの時間を食うのであれば可能性は次の3つのどれか。

    1. 初心者が多すぎる。そのため、「教授や助教授や助手」の時間をフルに使っても、全部など到底見切れない。コードの品質は悪いままである。
    2. 初心者が少なすぎる。コードの品質は最初から高く、いくら見ても時間の無駄である
    3. 「教授や助教授や助手」のレベルに到達した技術者が実はいない。なので見当違いな所を見ていたり、全員が同じ間違いを犯していていくらレビューしても品質は向上しない

    UIレベルのテストで問題がたくさん出てくるのですから 2 である可能性は低いですね。

    1 かどうかは、レビューを受ける人とレビューをする人の人口比率を調査する必要があります。
    基本的に初心者と判りきっている人に、全コードレビューに参加させるのは得策ではありません。もちろん、良いコードを読むのは重要ですが、自分が組んでいる部分と全く関係の無いコードの、しかも最初のバージョンのレビューに参加しても得られるものは少ないでしょう。それよりも「直せ」と言われた部分を直す事に時間をかけるべきです。
    逆に全てのレビューに「教授・助教授・助手」レベルの人たちは参加する必要があります。実質的にコードの質を向上させているのはこの人たちですから。この人たちの時間がレビューに取られる、というならば、この人たちはコーディングをするべきではないのです。それでも足りないなら、プロジェクト全体の人数が多すぎる、と言う事です。

    3 … えー、3かどうかは NDA を結んだ外部のプログラマを何人か雇って、彼らのコードレビューを受けるべきだと思います。それまで発見された問題とかなり違う問題点がいくつも発見されるようならば、 3 の状態である可能性は非常に高いです。

    --
    fjの教祖様
    • > 1. 初心者が多すぎる。そのため、「教授や助教授や助手」の時間をフルに使っても、全部など到底見切れない。コードの品質は悪いままである。
      > 2. 初心者が少なすぎる。コードの品質は最初から高く、いくら見ても時間の無駄である
      > 3. 「教授や助教授や助手」のレベルに到達した技術者が実はいない。なので見当違いな所を見ていたり、全員が同じ間違いを犯していていくらレビューしても品質は向上しない

      結論:ほとんどの日本のIT企業においては、コードレビューは時間の無駄である。

      通常は1&3。運が良ければ1だけのこともある。

      親コメント
  • by Anonymous Coward on 2009年06月25日 11時45分 (#1593530)
    個人的な位置付けとしては単なる一つの手法。
    そして、コードレビュー単体として用いるのはあまり効果が無くて、
    開発手法の中のその他の手法と組み合わせることで有用なこともある、といった感じ。
    ただし時間が結構要るのは否めなく、その時間を取れないことが流行らない理由だとも思う。

    まあコードレビューというより、コード座談会みたいなのが現代にマッチする手法かもね。
    その時点でのコード・手法を皆でざっくばらんに話し合い、良い点悪い点、悩みどころなどを
    気軽にぶつけあえる場を持てるような環境。どうしても個に閉じてそれっきり、ってな
    雰囲気で進んでしまい、それだと進歩や改善というのが得られ難いから。
  • by SorabeAlto (35110) on 2009年06月25日 20時47分 (#1593954)
    命名編:
    「このgetData()って何してるの?え、データの取得?データの何?HogeHoge?
    だったらgetHogeHoge()って名づけようよ。んでこっちのgetData2()ってのは?」

    手段編:
    「転送する文字列作るのにいろいろ苦労してるみたいだね。分割したり連結したり
    数値変換して、malloc()してrealloc()で伸張してまたmalloc()して(あ、メモリリーク)
    ……ねぇ、これってsprintf()で済むんじゃない?え、sprintf()知らない?
    君、専門学校でC言語習ったって言ってたよね?」

    効率編:
    「このforループの中でiniファイルから値取る関数呼んでるけど、
    仮に1,000回ループしたら、同じ値を取得するファイルアクセス処理を
    1,000回実行することになるよ。え、サーバで動かすから速い?
    そういう問題じゃねぇ!forループの直前で呼べば1回で済むだろうが!」

    今日もまた、仕事のヤリ逃げを阻止する仕事が始まるお
    --
    ----------科学は思考の柔軟剤
  • 回路は他人が設計してもある程度分かりますが、
    他人の作ったコードは本当に理解できないと思う。

    回路でもそれぞれの好みや設計思想があるけど、
    コードは変数の名前の付け方一つで全く理解できなくなってしまう。

    • by Anonymous Coward on 2009年06月25日 12時16分 (#1593559)
      >回路でもそれぞれの好みや設計思想があるけど、
      >コードは変数の名前の付け方一つで全く理解できなくなってしまう。

      どんなに優秀な人材だけで構成されたチームでも、個々人の個性が違うから、デザインレビューによるすり合わせは必要。

      しかし、意味のある規約とそれを理解し遵守できるメンバーだけならコードレビューなんて無意味で不要。
      ちゃんとした規約がなかったり、理解できなかったりしなかったりで勝手なコード書く奴がいるなら必須。

      ま、そんなところかねぇ。
      親コメント
      • by Anonymous Coward on 2009年06月25日 13時16分 (#1593630)
        >意味のある規約とそれを理解し遵守できるメンバーだけならコードレビューなんて無意味で不要。

        とは言い切れないのでは?
        ・なかなか個人で(自分の目で)気づかない/見逃しやすい潜在的バグの元になるコード
        ・書いたコードに対するさらに見通しやすくて効率の良いコードの提案(もちろん、規約に則った記述で)
        など規約の遵守外の事について、他人の目を通して分かることも多い。
        また、理解し遵守できるメンバーからは外れるが新人(6月末だし、前線に出てくることもあるのでは?)も交えてやることで、知識の幅を広げさせる場としても使える。というかそう位置づけて使ってる。
        親コメント
    • by Anonymous Coward on 2009年06月25日 13時39分 (#1593659)
      > 他人の作ったコードは本当に理解できないと思う。
      これは、「だからこそコードレビューは必要なのだ」という意見ですか?

      趣味で作るプログラムならともかく、仕事でプログラムするなら「他人のコードは理解できない」という(ふざけた)意見を言うほうも、それを言わせるようなプログラムを作るほうもしっかり矯正しないと駄目だよね。
      親コメント
    • by Anonymous Coward on 2009年06月25日 14時15分 (#1593696)

      業務でやってるなら、他人が読めないコードはその時点でアウト。保守できなくなる。

      親コメント
    • その判らないコードを(少しでも)判るようにするための方便がコードレビューでは?

      他人の目が入る可能性が高い、と言うだけでも「判りやすく(綺麗に)書こう」とか「不正コードが書き難い」と言った効用はあると思うよ。

      --
      親コメント
    • うーん、わかりづらい回路って、結構あると思うよ。
      ただ、ほとんどの場合、CDテクニックなんで歓迎されてるだけで。
      私の回路はわかりづらいと評判ですし(反省しろ

      --
      みんな幸せになればいいのに
      散歩師:漫画居士柴岡秀一
      http://www.toheart.to/%7Emanga
      親コメント
    • by Anonymous Coward
      日本語で変数名付ければどれだけわかりやすいか。
  • 身も蓋もない話 (スコア:2, すばらしい洞察)

    by Anonymous Coward on 2009年06月25日 12時04分 (#1593546)

    世の中には意味のあるコードレビューと、意味のないコードレビューがあって
    それぞれを行っている人達が議論しても絶対にかみ合わない。

  • コードレビューの効果 (スコア:2, おもしろおかしい)

    by Anonymous Coward on 2009年06月26日 0時44分 (#1594086)
    当社ではコードレビューを導入してから、いろいろなメリットがありました!
    • 研修も兼ねて新人の女性プログラマーをレビュー担当にしたところ、プログラマーが美しくてわかりやすいコードを率先して書くようになりました。
    • 社外のIPアドレスからシステムにアクセスすると、何故かウェブUIにアフィリエイトバナーが表示されるような不可解な不具合が激減しました。
    • プログラム中の無駄な空白行やコメントが減り、生産性が向上しました。
    • ソースコードから、クライアントや上司への悪口が無くなりました。
    • プログラマーがレビュー会議中に睡眠時間を確保できるようになりました。
  • 何人かの方が書いているように、コードレビューは全体のレベルアップ
    に非常に役立ちます。

    もし、コード品質があまりよくないのにコードレビューが役に立っていない
    と感じるならば、外部からレビュアーをつれてくるのが大変役立つと思います。
    その「外部からのレビュアー」を誰がどう選ぶのか、という問題はありますが。

    が、みんなが優秀なら不要、という趣旨の論にはちょっと違和感あります。

    商業的な文章は、たとえどんなプロが書いたものであってもかならず
    編集者のチェックがはいりますよね。それと同じようなもので、商業的
    なコードはコードのチェックをすべきで、その一手段としてコード
    レビューがあると思います。なんならペアプログラミングでもよいです。
  • 意味はあります。 (スコア:1, すばらしい洞察)

    by Anonymous Coward on 2009年06月25日 11時47分 (#1593531)

    あなたが気にしてるのは、その意味を得ることが、その作業を行うためのコストに見合う価値を
    持っているかって話でしょう?そんなのは状況次第で、状況設定なしに回答できるもんじゃない。

     とりあえず言えることは、「コードレビューをやらなかったらどうなるのか」を試すとき、
    コードレビューを日常的に受けてきてる人らのコードに対してそれをやってもあまり意味がない
    ことには最低限気づくべき、ということくらいです。

  • by backyarD (36899) on 2009年06月25日 12時30分 (#1593575) 日記

    VB.NETで文字数をカウントする処理を書かせたら、

    1.配列に1文字ずつ文字を切り出して入れて
    2.配列の内容をFor文で1文字ずつ読み出してループ回数を取得
    3.ループ回数を結果として返す

    みたいなのを書いてくるような組織(実話)に対しては、最初にガツンと釘を刺すという意味で有効だとおもいました。
    あぁ、あと、同じくVB.NETでフラグ的な位置づけの変数をStringで宣言して「"True"」とか突っ込むようなチームとか。

    #いずれも実話

    • 時間は掛かりますが、将来のことを考えるとレベルアップの一手段として有効だと思います

      具体例がいろいろ挙がっていますが、
      一般常識不足(いわゆるお約束、定石から外れている)
      もっと簡単に記述できる(ライブラリにあるのに、等)
      ラッパを何重にもかぶせていて実体に到達しない(不要だし、却ってわからない)
      無駄に計算資源、メモリ資源を使いすぎ(それでもできるけど、意味ないし)
      アルゴリズム的にダメ(経験・知識不足か、考えるのを放棄しているのか)
      コンパイラで最適化が掛からない(神様がよろしくやってくれる訳ではない)
      CPUの特性上遅い(キャッシュだとかレジスタの本数だとかを考えると無理がある)
      読みにくい(美的センス?頭の構造がそうなのかも)

      とかには効くのではないでしょうか?

      親コメント
    • Re:程度による (スコア:2, 参考になる)

      by tarosuke (2403) <webmaster@tarosuke.net> on 2009年06月25日 13時22分 (#1593640) 日記

      >「"True"」
      Cのソースでそゆの見た事ある。「condition == "true"」みたいに文字列へのポインタで比較してるの。
      これ、ネットワーク界隈では結構名が売れてるブツな。
      # 同じ文字列はリンカなりコンパイラなりがまとめてくれるけどさー。

      親コメント
    • 自分も似たような状況でコードレビューしてて、とあるショートカットキーを押すと
      例外吐いて落ちるイースターエッグが仕込まれているのを見つけたことがありますね。

      親コメント
    • by Anonymous Coward

      説明が足らないんじゃない?

      文字のエンコード,OS,記述方向(左から右)に依存せず、制御コードを考慮した文字数カウント処理なら、1週間あっても足りないよ。

      • by feenal (37359) on 2009年06月26日 16時51分 (#1594500)

        そこはライブラリを使うとこじゃね?
        UNIX系ならwide characterとmultibyte characterの変換を知ってればいいだけだし、1分でかける。
        むしろ0からそのコードを書こうとしたら止めるべきでしょ。

        Windowsはしらないや。

        親コメント
      • by Anonymous Coward
        きょうびOSなりフレームワークなりが用意した文字列クラスのlengthメソッド呼べばそれで終わりだろ。
        十分に優秀なプログラマーが1週間以上(かどうか知らんが)かけてそゆのをちゃんと考慮して実装してくれてんだし。
    • で、問題あったの!?
      基本的なスペック(要求時間や実行サイズ・動作確認)を満たしていれば、問題無いと思うけど。
      要件として、上記のような手法はとらないと明記されていなければ、受け入れる側に
      問題あり。<イチャモンや受け入れ側のスキル不足

      上記の例では、もっとスマートに書けるのはわかるし、そうするべきであるのも分かるが、
      やってはイケナイ手法とまでは思えない。(環境によってはそうするのがベターな場合もある<ループ)

      コードレビューの意義って、本当は作成者の思い込みによるバグ混入(たまたま動いてた)って
      ケースを見つけるためにあると思う。
      <見る(指摘する)側が余程スキルが高くないと、ほとんどの場合見つからないのが問題。
      <大概重箱の隅をつついて終了。(変数名がおかしいとか、マクロの宣言名が変とか)

    • by Anonymous Coward

      今ひとつわかりにくいので質問です。

      VB.NETだったら文字列の長さは自分で処理書かなくても取得できますよね?
      それも知らずに自分で処理を書いているような馬鹿ども、って意味でしょうか?

  • 拡張子をチェックするのに、
      if(strExt == "abc" || strExt == "ABC")
    という風に書いてあるコードを見た。
    "Abc" は来ないと思ってるのか~?!

    new や alloc の後に、メモリが確保できたかどうかチェックしてなかったり、
    try catch に挟まってたらいいけど、そうではなく..
    開発PCからメモリ抜くぞ!

  • プログラマのによりソースコードの品質がばらつくなら、
    コードレビューはいいかもしれません。
    それより、ペアプログラミングの方がその目的を達成しやすい様な気がします。

    レビューまで待たずにその場で修正させた方が良いですからね。
    しかも、その場で問題点と解決方法が出てくるのでより効果的だと思います。

  • 書き方のルールがかっちり決まってて、それに合わせなくちゃというモラルもあるなら、ミスが発生しやすいポイントなどのノウハウの蓄積にはなるのではないかと。

    --
    ◆IZUMI162i6 [mailto]
  • 次は形式手法を流行らせよう。

  • by Anonymous Coward on 2009年06月25日 12時35分 (#1593581)
    ダブルポインタとかポインタの演算とか理解してないのが、コード書いてるんだからさ。
  • by Anonymous Coward on 2009年06月25日 13時28分 (#1593648)

    「〜さんのコードは見やすい」
    「〜さんのコードは訳が分からない」
    ということがあったりしますが、

    コードの見やすさをレビューにより修正することは可能だと思います。
    レビューで見てもらう訳で、何をしているか分かる/説明できるコードを
    書くようになるでしょうね。ちゃんと成長する人ならば。
    もちろん、ロジック的に怪しいコードを矯正する目的もありますが。

    # もっとするべきだとは思いつつ、時間が・・・

  • by Anonymous Coward on 2009年06月25日 14時33分 (#1593712)

    コードに限らず、syntaxの段階で不安の散在する成果物には、手間暇かけてレビューをしないといけません。
    semanticsが理解できている・定義できている優秀な集団の場合は、レビューにさほど手間はかからないでしょう。
    レビューはこの辺の立ち位置によって、価値やコストが激しく変動します。

    相互監視によってはたらく抑止力は、なかなかバカにできません。
    形骸化しない程度に締めつけつつ、みんなが気持ち悪くなる半歩手前くらいに加減して、習慣化するのが良いようです。
    この辺を上手に運用するのは、綺麗なコードを書くのと同じくらい、センスやスキルが要りますね。

typodupeerror

弘法筆を選ばず、アレゲはキーボードを選ぶ -- アレゲ研究家

読み込み中...