コードレビューの目的は何ですか


76

私はコードレビューの価値で組織を売ろうとしています。私は彼らが雇われたいくつかの場所で働いてきました。私はそれらがスタイル選択の選択と機能的な決定を選択するのに使用されるのを見ました。私の直感では、最も効果的な目的は2つのオプションの間のどこかにあるということです。

それでは、コードレビューの目的は何ですか?


16
(スタックオーバーフロー上)関連:コードの目的は、レビュー
ヤニス

16
-読みやすく、保守が容易なコードを作成したかどうかをどのように知りますか?-あなたの同僚は、コードをレビューした後にあなたに伝えます。 '理由:コードがそれ自体で言うよりも著者として多くを知っているので、あなた自身でこれを決定することはできません。絵が芸術かどうかを判断できないのと同じ理由で、コンピューターはあなたに伝えることができません。したがって、あなたが書いたものを見て、彼または彼女の意見を述べるには、ソフトウェアを維持できる別の人間が必要です。このプロセスの正式名称は「ピアレビュー」です。
gnat 14

3
「コードレビューの目的は何ですか?」開発者がterribadコードを記述できないようにし、正しい方向に誘導します。
zzzzBov 14

7
思われるコードレビューは、単にコードレビューの目的は、かなり明白に:)となり、そこに質問と回答で閲覧..この質問への間接的な答えを持っているかもしれない
マチューGuindon

3
レビュー中にコードを説明する簡単なプロセスだけで、プログラマが自分のコードのバグを何回発見したのだろうか?
hatch非アクティブ14

回答:


75

コードレビューを実施する理由はいくつかあります。

  • 他の開発者の教育。ソフトウェアの残りの部分を理解できるように、すべてのユーザーが欠陥の修正または機能強化に関連する変更を確認できるようにします。これは、統合する必要のあるコンポーネントや、特定のモジュールを見ずに1人で長時間作業する複雑なシステムで作業する場合に特に役立ちます。
  • 欠陥や改善の機会を見つける。成果物のコードとテストコードおよびデータの両方を調べて、弱点を見つけることができます。これにより、テストコードが堅牢で有効であり、設計と実装がアプリケーション全体で一貫していることが保証されます。追加の変更が必要な場合は、エントリポイントにより近い機会を捉えます。

レビューを実施するためのいくつかのビジネスケースがあります。

  • 注入の近くで手直しが必要な欠陥や問題を見つけます。これは安いです。
  • システムとクロストレーニングの共通の理解。開発者が変更を行うためにスピードアップする時間を短縮します。
  • システムの可能な拡張の識別。
  • テスターが適切なカバレッジを提供できるように実装を公開します。テストの観点から、ブラックボックスをグレーボックスまたはホワイトボックスに変える。

ピアレビューの利点と実装戦略に関する包括的な議論を探しているなら、ソフトウェアのピアレビューを読むことをお勧めします:Karl Wiegersによる実践ガイド


7
+1、あなたは正しい優先順位で主要なポイントをうまく見つけたと思います。非常に創造的な「WTF」ソリューションを絶えず見つけている同僚に対処するときに、設計の一貫性を保つことは、通常のコードレビューによってのみ達成できます。
Doc Brown 14

JavaScriptコードでコードレビューを行います。主に、開発者がモジュールを設計するときに設定されたパターンを使用し、提供されたコンポーネントを使用し、既に解決策がある問題について忍者コーディングを開始しないように、概説された標準に固執するようにしますために。また、誰かが誤ってthisコンテキストを上書きし.hasOwnProperty、本来あるべき場所などで使用していないなどを見つけるのにも最適です。C#のようなマネージ言語では、もちろん動的言語の場合よりもいくつかの理由が少なくなります。
いいえ、14

1
これまでのところ、あなたの答えはコードの正確性の改善を暗示しているだけです。開発中の開発者によって正確に定量化されることはめったにないため、コードの可読性/保守性に対処できません。
ArT 14

51

コードレビューは知識移転のためのツールです。

  • 開発者が互いのコードを確認するとき、システムのすべての領域に精通しています。これにより、プロジェクトのバスファクターが削減され、開発者が作成しなかったシステムの一部でメンテナンスを行う必要がある場合に、開発者の効率が向上します。

  • ジュニアプログラマーがシニアのコードをレビューするとき、ジュニアプログラマーは、経験を経て初めて学んだトリックを拾うことができます。これは、過度に複雑なコードに対する修正としても機能します。

    徹底的なコードレビューには、さまざまなドキュメントに対する頻繁なチェックが必要です。言語やAPIを学ぶのに最適な方法です。

  • 上級プログラマーが後輩のコードをレビューするとき、これは問題を技術的負債に変換するに解決する機会です。コードレビューは、ジュニアプログラマーを指導するのに適した設定です。

コードレビューは次のものではありません:

  • …バグを見つける。それがテストの目的です。コードレビューで何らかの問題が見つかることはまだ頻繁に起こります。

  • …スタイルの問題を厳選します– 1つのスタイルで解決し、自動フォーマッターを使用して強制します。しかし、自動化ツールではチェックできないことがたくさんあります。コードレビューは、コードが十分に文書化または自己文書化されていることを確認するのに適した場所です。


2
スタイルの問題をピッキングする最後のポイント-私はまったく同意しません-ジュニア開発者のコ​​ードをレビューする悲惨な経験があり、最も目立った苦情は実際にはスタイルに関するものでしたが、プログラムで簡単にできる種類の問題ではありませんでした実施....エッジケースなどのifステートメントが多すぎます。はい、場合によってはコンピューターに検出させることができますが、ほとんどはスクリプトで一般的に検出する価値のある問題ではありません。表示を開始するには30秒かかります。開発者に説明して問題を修正するには30秒かかります。それでもショックを受けています:/
平和主義者14

7
@pacifist回答者が説明しているスタイルではありません。スタイルは、ブレース、インデントなどの場所に関するものです。ジュニア開発者がif文をあまりにも多く使用している場合、スタイルとはまったく異なる問題が発生します。STYLEコーディングの一般的な属性は、パフォーマンスに影響を与えないことです。そして、大量のif文がパフォーマンスに影響すると思います。
Pimgd 14

12
レビューを行うとき、私はよく「これはバグのように見える」と思うものを見つけ、それがバグであることを証明するために特定のテストケースを書きます。したがって、コードレビューの多くの目標の1つは、バグを見つけることです。だからこそ、「コードレビューまたはテスト」という観点は、あまりにも単刀直入すぎると思います。
Doc Brown 14

2
@DocBrownに加えて、簡単にテストできない場合があります-データの競合、ある種のデッドロック、ライブロック、未定義の動作/値(ほとんどがC / C ++ですが、ハッシュテーブルの要素の順序も未定義)またはリソースリーク(ファイルをループで開くことは、GCを使用する場合でも悪い考えかもしれません)。それらのいくつかは、十分にスマートな-コンパイラ-静的分析によって検出できます。
マチェイピエチョトカ14

2
@pacifistは、コードレビューで特定の例を完全に非難します。また、静的コードアナライザーのレッドフラグになります(Cyclomatic complex 17!)。コードレビューにより、この関数はセマンティックスタイル(またはアルゴリズム)の問題としてすぐに識別されます。しかしながら。この種の問題は、単なる「スタイル」の問題ではありません。それをそのように扱うと、リポジトリに本当に厄介なコードがすぐに現れるでしょう。結局のところ、それは単なる「スタイル」です。
Pimgd 14

12

コードレビューから私が個人的に得た最も価値のあることは、コードが他の人に明らかであるという自信です。変数には明確な名前が付けられていますか?コードの各チャンクの目的は合理的に明らかですか?コメントで曖昧な点は明確にされていますか?エッジケースとパラメーターの有効な値はコメントで概説され、コードでチェックされていますか?


2
これは前4件の回答を超える大幅な何かを提供していないようだ
ブヨ

2
@gnat:他の答えは、知識の伝達とバグの発見です。これらは重要ですが、コードレビューにはさらに多くのことがあります。

1
私の知る限り、この答えにはさらに多くの部分が合理的に対処されています:「ピアレビューの利点と実装戦略に関する包括的な議論を探しているなら、ソフトウェアのピアレビューをチェックすることをお勧めします。カールウィーガーズによる実用ガイド。」この答えは、また、それをカバーして、「過度に複雑なコードに対して是正を」
ブヨ

2
@gnat他の回答で指摘されたポイントの異なる側面を強調します。半年前に書いた独自のコードに困惑したことがありますか?コードレビューにより、そのプロセスを加速できます。あなたの同僚があなたのコードに困惑している場合、あなたはまだ問題があなたの記憶に新しいうちにそれを明確にすることができます。
200_success 14

1
たぶん@ 200_success。しかし、この点は、もしそれが実際にあるとすれば、本当に不十分に見えます。あなたのコメントでさえ、この「答え」よりもうまく伝えることができます。それだけで指摘されたものを繰り返していることは言うまでもありません前にコメント関連する質問でこれを説明する標準的な答えを指し
ブヨ

7

私は、他の素晴らしい答えでカバーされていない2つの領域を追加したいと思います。

コードレビューの大きな理由の1つは、ホーソン効果です。これは、この場合、次のように変換されます。

もう1つの大きな理由は、開発プラクティスの安全性を高めるためです。安全な開発ライフサイクルにおける適切なコードレビューの重要性を理解するには、Appleのgoto失敗(偶発的なコードの重複行)またはHeartbleedバグ(入力検証の基本的な失敗)を調べるだけです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.