すべてのコードをレビューする必要がありますか?


18

私たちは現在、開発プロセスを修正しており、コミットの100%をピアレビュー済みにしておくべきかどうか疑問に思っています。

コードレビューに関するあなたの経験は何ですか?

  • あなたはそれらに「多くの」時間を費やす傾向がありますか(1日あたり1/2時間と言ってください)、それとも最大5/10分のスキムオーバーですか?
  • 1日/週/スプリント/プロジェクトごとに費やす時間は決まっていますか?
  • 最も重要なことは、コードの100%がピアレビューされることを目標とすべきか、または100%が必要ではないと思いますか?

コードの80%を20%の努力で触ってみてください。お金で買える最高の自動化ツールに投資してください。
仕事

2
自動化されたツールは優れていますが、すべてのテストを最新の状態に維持する時間とリソースがない限り、役に立ちません。
キーレンジョンストン

回答:


19

各ストーリーには「コードレビュー」タスクがあります。理想的には、そのストーリーの開発に関与していない人が、そのストーリーに関連するすべてのコード変更をレビューします。うまくいきます。

多くの時間?大したことではなく、コードの量に依存します-明らかなエラー、タイプミス、基本的なロジックの健全性チェック、キャッチされていない例外などを探しています。

これはバグを見つけるための質の高いステップであるため、ある程度の価値があります。時間の割り当てはそれを行う最善の方法ではないかもしれません-何かがかなり複雑な場合は、コードレビューする必要がありますか?

ところで、他の誰かがコードのレビューを行うことが重要です。


3
「ところで、他の誰かがコードレビューを行うことは重要です。」質問は、コードを書いた同じ人がレビューする必要があることを暗示していますか?どこでしたら?私はそれを修正したいと思います:)
シメオン

4
いいえ、そうではありません。私は包括的であり、それが重要だと言っていました
キーレンジョンストン

5
@Simeonは、実際には所有者が自分のコードをレビューできるという恐ろしく一般的な誤解です。運用全体を損なう
トムスクワイアズ

5
@TomSquires:そのとおりです。長い間コードを操作していると、明らかな欠陥を「盲目にする」ことがあります。それは、それが本来あるべきものではなく、本来あるべきものだと考えるからです。これらの問題は、これまでにコードを見たことがない人にとって見つけやすくなります。作家にも同じ問題があり、本が校正なしにリリースされないように、コードはレビューなしにリリースされるべきではありません。また、コードレビューを行うことには他の利点もあります。たとえば、チームのメンバー間で知識を伝達するのに役立ちます。
ハマー

@hammar -彼らは親切にそれを確認することができ、それを持つように密接に慣れるための時間を持って、コードを書いていない人を見つけようとして当然のことながら、課題となっている
ピーターAjtai

12

コードがどれだけレビューでカバーされているかというより重要な問題は、レビューの効果です。レビューで問題がほとんどまたはまったく発見されない場合、完全なカバレッジに到達しても役に立たないでしょう。

レビューをより効果的にするための最初の作業を行ってから、カバレッジを決定します。

レビューは、コード上だけでなく、設計上でも実行する必要があります。



また、レビューはテストとツールの代わりにはなりません。

  • レビューでコードを実行できない
  • レビューにはコード分析を含めることができます
  • 再利用と読みやすさを検討するレビュー
  • レビューは効率のいくつかの側面を調べることができますが、これは実行時間の実際の測定とボトルネックの発見に代わるものではありません
  • 静的コード分析のためのツールがあります
  • コーディング規約をテストするためのツールがありますが、レビュー時間を無駄にしないでください
  • ユニット、システム、および統合テストのウェットランコード
  • ユニット、システム、および統合テストのテストは自動的に繰り返すことができ、コードレビューは通常1回限りです
  • 単体テストは、高いコードカバレッジを持ち、主要な成功シナリオと終了条件の両方をテストする必要があります。コードレビューではこれを部分的にしか実行できません
  • 統合テストでは、ユニットまたはシステムが連携して機能するかどうかをテストします。コードレビューではこれを置き換えることはできません
  • システムテストはシステム全体の機能をテストします。コードレビューはこれを置き換えることはできません



レビューのために、1か月(またはスプリントごと)に事前に設定した時間を割り当ててみてください。次のようなヒューリスティックを使用して、次の専用スロットでレビューするコードを選択します。

  • 報告された未確認のバグを含む可能性のあるコード
  • 最近のコードにはバグが特定されています
  • パフォーマンスの問題があるコード(ボトルネック)
  • 新しい開発者によって書かれたコード
  • 以前に慣れていない人によって最近更新されたレガシーコード
  • 新しい領域のコード
  • 新しい開発者に学習してほしい既存のコード
  • 複雑な問題を解決するコード
  • 分析ツールによって複雑であると識別されたコード

また、作成者ではなくコード(または設計やテスト)をレビューしていることに注意してください。



次の資料をお勧めします。

選択的ホームワークレスレビュー
ピアコードレビューのベストキープシークレット


5

場合によります。

それはあなたのソフトウェアが何をしているかに依存します:

  • それが電子ペースメーカーまたはスペースシャトルを制御する場合、間違いなくはい。

  • それが使い捨てのプロトタイプである場合、おそらくそうではありません。

それはまた、あなたがどれだけリソースを持っているか、開発者がどれだけ経験があるか、そしてコードレビューで何を探しているかにも依存します。(他の人のコードをレビューする平均的な開発者は、おそらくスタイルの問題に気付き、微妙なアルゴリズムのバグを見逃すことになることを覚えておいてください...特にコードのレビューが面倒なことを考えると)

私のアドバイスは、正確性が重要であり、検出されないエラーのコストが高いコードのコードレビュー作業を節約することです。


5

まず、この質問に答える必要があります。 なぜコードをレビューするのですか?

その答えを手にすれば、どのコードをレビューする必要があるかがわかります。

一部のコードレビューは、テストが行​​うこと、または行うことを正確に達成します。それがレビューの目標である場合、テストが少ない場合は100%に近づけることをお勧めします。ただし、テストツールにこれを行わせると、すべてのコードをレビューする必要が減ります。

優れたレビューのほとんどは、知識を共有し、レビューの開発者(コードを作成した人またはコードをレビューする人)の能力を高めることに焦点を当てているようです。これがレビューの主な理由であるため、コードの100%をレビューすることはおそらくやり過ぎです。


3

完全な世界では、要件仕様からユーザーマニュアル、テストケースまで、少なくとも1人の他の人によってレビューされた著者とピアによってすべてが明示的に読み取られます。しかし、レビュー、さらには単純なデスクチェックでも、時間と費用がかかります。これは、レビューする対象とレビューする時期を選択する必要があることを意味します。

レビューするものに優先順位を付け、レビュー方法を選択し、適切な詳細レベルでできる限りレビューすることをお勧めします。優先順位付けは、要件のレビュー、設計および生産コードのレビュー、テストケースのレビューなど、成果物の種類に基づいて行うことができます。その中で、高リスクまたは高価値のコンポーネントをレビューの優先順位、またはおそらくより正式なレビューを受けるように指定することもできます。

時間に関しては、すべてコンポーネントの優先度に戻ります。レビューに10〜15分を費やしたり、複数の人が個別にコードを読んだり、部屋に行って30〜45分続くより正式な検査プロセスを行ったりすることがありました(サイズによって異なります)モジュール)。

最終的には、時間、コスト、範囲、品質のバランスです。すべてを使用することはできないため、できる限り最適化する必要があります。


3

提案として、レビューを行う予定がある場合は、レビューがチームメンバー間で不必要な摩擦を引き起こさないように、レビューの範囲と目標に関するガイドラインを共有してください。

首尾一貫したチームはより良いプロジェクトを構築します。人々は、ナンセンスまたは完璧な要求に対して関係を失う可能性があります。こういうことで文句を言ったり、他の人にバグを起こしたりする人は、いつもそのような人です...


2

ピアレビューを行うために1日1時間予約しますが、必ずしも必要ではありません。コードベースは、数十の製品で共有されています。私たちのポリシーでは、ある製品に固有のコードの些細な変更は、レビューなしでチェックインしても問題ありません。より複雑な単一製品の変更にはレビューが必要ですが、同僚に電話をかけてもう一度やり直すのと同じくらい非公式かもしれません。共有コードの変更には、他の製品の開発者を含む、より正式なレビューが必要です。私たちのポリシーは、私が働いてきた他の会社と比較して、かなり良いバランスを取っていると思います。

私は、中心的な役割が少ない同僚の何人かよりも1日あたりレビューに多くの時間を費やしていますが、レビューポリシーの前に、開発者がバグを追跡するよりも多くの時間を簡単に無駄にする可能性があるため、不当な時間とは考えていません導入された別の製品に。


それは平均ですか?複雑なレビューを1時間に制限するのは奇妙に思えますが、レビューする量がそれほど多くない場合は、1日1時間がどのように機能するかわかりませんか?
キーレンジョンストン

それは制限ではありません。私はそれがかかった時間に基づいて時間を設定しました。通常、1時間で2つのレビューを完了できます。それよりも時間がかかる場合、チェックインが大きすぎる、事前に十分なデザインレビューを受けていない、またはコードレビューツールが面倒です。コードレビューはチェックであり、再設計ではありません。
カールビーレフェルト

2

コードのレビューは100%完了しました。テスト、特に100%コードカバレッジテストよりもはるかに安価です。私たちはそれらにあまり時間を費やさないので、1日1時間以上のレビューは生産性が低下します。(30分はそれほど多くありません)。

プロセスをゼロ化するときは、メモを残してください。あなたは何を見つけましたか?QAは後で何を見つけましたか?顧客は何を見つけましたか?なぜこれらのバグがあなたを逃れたのですか?


7
レビューは自動テストよりも安価ですか?テストを1回作成し、テストを1回レビューし、安定したテストスイートがあると仮定すると、(プロジェクトの全期間にわたって)あらゆる種類のレビューを実行するよりもはるかに少ない時間と費用でテストを実行できます。また、100%のコードカバレッジを目標とするのはリソースの無駄遣いであり、これがテストの時間とコストの増加の原因になる可能性があります。また、レビューの30分についても質問します。モジュールを30分間レビューするかもしれませんが、最初にコードを読み、システムでのその役割を理解し、コメントする準備時間があります。
トーマスオーエンズ

@MSaltersの主張は前代未聞ではありませんが、私も30分しかかからないことに懐疑的です。自動ユニットテストよりも検査のほうが費用効果が高く、NASAであるという事例を1つだけ読んだことがあります。その場合、コードを手動で検査する方が安価だったため、最終的にユニットテストを完全に削除しました。彼らは...あまりにも他の多くのテストをしていたので、開発者の比率:1テスター:もちろん、NASAはまだ12を持っていた
マイケル・

2
@Thomas Owens:単体テストは単純なバグを見つけます。高価なバグは、複数のユニットが予期しない方法で組み合わされるバグです。別の種類のバグは、見逃されているコーナーケースです。ケースを見逃した開発者は、ユニットテストも作成しませんが、2つ目の目でそれを見つけます。
-MSalters

@MSaltersそのため、自動化された統合テストとシステムテスト、および単体テストを作成します。実際、手動で実行する必要があるかもしれないテストは受け入れテストだけです。そして、作成時にテストをレビューすることにより、最も重要なケースがテストされることを保証するのに役立ちます。
トーマスオーエンズ

2

実装に関するアイデアをチームで構築して共有するために、主に定期的なコードレビューを行います。この方法で同僚から多くを学ぶことができます。


これは、いくつかの利点のみを示しています。エラーを見つけることは重要だと思いますか?もしそうなら、いくらですか?
-JeffO

もちろん、エラーを見つけることは重要ですが、より大きな利点は、コードレビューから得られる長期的な知識です。おそらく、将来防止できる悪いアプローチによってバグが作成された
コーダー

2

チェックインごとにピアコードのレビューが必要です。ピアがいない場合、チェックイン後のレビューを手配します。レビューアは、ソース管理チェックインコメントに記載されています。

これらは多くの時間を要しません、そして、彼らは仲間の間で行われるので、彼らに有毒な大人子の側面がありません。


2

IMOでは、コードレビューが必要です。あなたは99.999 ...%の確率で常に正しいとは限らないため、正しいことを確認する必要があります。時間が設定されていますか?いいえ。しかし、時間をかけてコードを確認します。通常、同僚に同じことをさせます。


1

コードレビューは困難に思えるかもしれませんが、適切に行われた場合、貴重なツールです。これらは、設計および実装のミスに対する最初の防御線になります。配置したすべての機能のコードレビューを実施していない場合は、できるだけ早く開始する必要があります。

ピアレビューに費やす時間については、コードレビューの実施と対応のために、推定開発時間全体の5〜10%を残すことをお勧めします。

効果的なコードレビューを実施するためのホワイトペーパーがあります。順を追ったガイドであり、直面する可能性のある一般的な落とし穴とその解決方法について説明します。当社のウェブサイトからダウンロードできます

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