web-dev-qa-db-ja.com

コードレビューはどのように見えますか?

私はチームのコードレビュープロセスドキュメントを書いています。コードレビューは行いますが、正式なプロセスを実施したことはありません。

コードレビューがいかに重要であるかについて多くの記事を見つけましたが、特にWebで答えが見つからないという質問があります...コードレビューのプログラマーの部分ですか?言い換えると、コードレビューは2人で一緒に座ってコードの内容を確認する必要があるのか​​、それとも1人で他の人のコードを見ているのか。

ほとんどの場合、私たちのプロジェクトは2人のチームによって行われます。そのため、QAに送信する前に、これらの2人が一緒に座って、それぞれが書いた内容を含めてプロジェクト全体を確認する必要がありますか?または、両方がお互いのコードを見るだけですか?それぞれのメリットがわかります。

最後に、コードレビュー中に見つかった問題はどうなりますか?それらは記録され、プログラマーに送り返されますか?または、レビュアーがそれらをメモしてから修正するだけですか?または、変更を加えて、プログラマーに具体的に何を見つけたかを伝えなくても大丈夫ですか?

38
GendoIkari

正式なコードレビューは次のようになります。

  1. プログラマーがレビュー担当者に資料を送信
  2. レビュー担当者が資料を確認します
  3. プログラマーとレビュアーが座って資料を調べます。プログラマはメモを取る。デザインの議論は延期されます。
  4. プログラマーはレビューから出てきたものを修正します。

プログラマーは常にレビュアーと話をする必要があります。そうしないと、あまりにも多くの情報が失われます。

あなたはチームの2人にすぎないので、プログラマーの画面にあるコードのウォークスルーのように、非常に非公式なものでうまくいく可能性があることに注意してください。

また、ペアプログラミングはレビューに代わる優れた方法です。

40

あなたが話しているように見えるのは、人々が「ペアプログラミング」と呼んでいるもので、一緒に座って、コードに欠陥がないことを確認するために話し合っています。これは常に素晴らしいアイデアであり、通常は推奨されます。ただし、正式なレビューの必要性を排除するものではありません。正式なレビューにより、チームの全員がコードに慣れることができます。

公式レビューには常に、常に著者を含めて、必要に応じて明確なコメントを自由に行えるようにする必要があります。ただし、レビューの主導者になることはできません。これにより、プロセスを大幅に制御する必要がなくなり、コードの重要な側面がスキップされる可能性があります。

他の回答の多くは、コードレビュー中に発生した欠陥を追跡する方法をカバーしているため、ここではそれらを再列挙しませんが、これらの会議中にメモを取り、作成者に報告することは常に重要です。著者は、ほとんどの場合、最終的には、検査中に発見された変更を実装する責任があります。

私の学校では、コードインスペクションがどのように見えるべきか、そして主要な役割がどうあるべきかについて、教授がビデオを作成しました。私たちは皆、それが安っぽいのを見つけますが、それはいくつかの良い点をカバーしています。あなたはそれをここで見ることができます: http://www.se.rit.edu/~kurt/videotest/

8
Daniel Joseph

私の経験では、コードレビューを正式な物理的な会議にすることで、通常、レビューされるコードが少なすぎるか、レビューが標準以下になります。私は code collaboratorgerrit のようなツール、またはgithubやkilnのような一部のバージョン管理ホスティングの組み込みレビュー機能を好みます。これにより、必要な数または必要な数の人々に通知でき、彼らは自分の時間で確認できます(私は1日の最後の1時間を予約します)。次に、元の作成者が修正を行い、テストし、アップロードします。欠陥を見つけた人は誰でも修正を承認します。これにより、「終わり」での大きなイベントの1つではなく、より俊敏で反復的なレビューを行うことができます。

4
Karl Bielefeldt

私が働いている会社では、プロセスは非常に単純です。担当者が同僚に(非公式に)サポートを求めます。コラージュは、関連する機能を知っている人でなければなりません(ただし、これは必須ではありません)。

「概念的なソリューションのレビュー」と「実装」のレビューを行います。

「実装」レビューでは、担当者が問題(まだ知られていない場合)と解決策(まだ知られていない場合)を説明してから、コードと内部ドキュメントを調べます。これは、開発者のマシンで発生します(コードがコミットされる前)。このフェーズでは、レビュー担当者はコードやドキュメントを改善するための提案を行うことができます。責任者が特定の実装の問題についてフィードバックを求めることも一般的です(つまり、同じ機能の2つの実装を示し、どちらが「優れている」かについて話し合います)。

理想的には、責任者は新しいコードで実行されているいくつかのテストを示す必要があります(レビュー担当者は他のテストケースを提案することもできます)。

これは簡単なプロセスですが、小さな問題を見つけることがよくあります。

場合によっては2つのレビューリクエスト/レビューアが存在します(ただし、これは会社の組織によるものです。コードは専門チームによって分割され、他の人のコードを変更する必要がある場合があります)。

3
MyNameIsZero

@カールビーレフェルトが言ったことのほとんどすべてに同意しますが、私が重要だと思う点を1つ追加します。

コードレビューは非同期ペアプログラミングです(またはそうでなければなりません)。

非同期部分は、コーダーとレビュアーが同時に同じ部屋にいない場合にのみ当てはまります。私にとって、これはgithubのプルリクエストなどのツールで有効にするのが最善です。プロセスを自動化する方法は確かに他にもあり、医療機器からオープンソースまで、さまざまな方法がドメイン全体で機能するのを見てきました。ただし、それらを分けるのは、効率のばらつきが大きいことです。最近の関与の時間について心配していない人は誰も知りません。したがって、プロセスを最初から自動化するのが最善だと思います。

Githubのプルリクエストは、Webインターフェイスを介して初心者が見つけやすく、簡単にアクセスできるため、私の投票に合格しますが、コマンドラインを好む上級ユーザーにも対応します。

このシステムについて私が気に入っているもう1つの点は、レビューメタデータ(コードに関するコメント)をコード自体から適切に分離し、受け入れ率を高めるパッチの提供にレビュアーを集中させることです。

考えてみれば、コードレビューの経済性は次のようなものです。レビューから得られる品質は反復の関数です。レビュー担当者の態度と適性、およびコーダーのオープン性と応答性です。これらのレビューの反復が容易かつ迅速に行えるようにするためにできることは、チームの品質を向上させ、まとまりのあるエクスペリエンスをもたらします。

コードレビューはどのように実行する必要がありますか? も表示されます。

3
David Watson

私が精通しているレビュープロセスは次のとおりです。

  • ソースコードは、バージョン管理システム(SVNなど)を使用して管理されます。
  • ソフトウェアへの変更は、変更要求システム(Bugzillaなど)によって追跡されます。
  • 開発者がいくつかの変更をチェックインすると、これらは変更リクエストに添付されます。
  • 変更リクエストを閉じる前に、別の開発者が変更を確認する必要があります。これは、直接(1人の開発者が変更をレビュー担当者に説明する)、またはこれらが既にチェックインされた後にツール(例: http://www.reviewboard.org/ )を介して発生する可能性があります。どちらの場合も、レビュー担当者は変更を承認するか、さらに変更を提案できます。

どちらの場合でも(直接レビューまたはツールを使用)、レビュー担当者が変更を承認した場合、変更リクエストを「修正済み」に設定できます。レビュー担当者がさらに変更を必要とする場合、開発者がそれらを実装し、新しいレビューが必要です。これらの追加の変更を実装するのは元の開発者です。

より大きな変更(たとえば、新機能の実装)の場合、開発者は変更を細部まで説明しません。主なアイデアと実装手法がコードに示されています。小さな変更(バグ修正など)については、より詳細な議論を行う時間があります。

2
Giorgio

コードレビューを行う最も簡単な方法は、ツールを入手することです(私は codestriker を使用しました)。次に、プロセスは次のとおりです。

  • プログラマーがレビューとレビュアーのコードを選ぶ
  • レビュー担当者がコードにコメントする
  • プログラマーはコメントを読み、適切なものを受け入れます

このようにして、レビュー担当者は時間があるときにそれを行うことができます。また、プログラマはメモを取る必要はありません。


コードレビューの代替手段はペアプログラミングです。 ステロイドのコードレビューと呼ぶ人もいますが、それだけではありません。

2
BЈовић

あなたは本質的に2つの質問をしている:

  1. 調査中の作品の著者はレビューの一部である必要がありますか?
  2. フィードバックを追跡する必要がありますか?

私の経験では、著者を含むの作品必須です。

  • 著者は、発生するすべてのディスカッションに参加し、学ぶ機会があります。
  • 著者は、作品で見つかった欠陥に対処するのに最適です。レビューに参加せずにアクションアイテムリストのみを受け取った場合、ディスカッションのコンテキストを見逃します。
  • 作者は、アーティファクトが書かれた方法を擁護するように要求されるかもしれません。

レビューのフィードバックの追跡について:はい、それは追跡されるべきです。

  • 見つかったアイテムのうち、トレーニングの問題はどれですか。
  • 今後のすべての作業で従うべきベストプラクティスはどれですか。
  • コードが読みにくい、文書化が不十分などの理由で、どの欠陥が欠陥でしたか?
  • 検査への対応よりも多くの作業を必要とする大きな問題に関連する欠陥はどれですか。リソースが許可するように機能する個別のバグチケットとして追跡する方がよいでしょうか。

何らかのCMMIコンプライアンスを達成する計画はありますか?

  • 見つかったすべての欠陥と、それぞれが解決されたという事実を追跡する必要があります。

顧客または契約では、すべてのコードを確認する必要がありますか?

  • 問題と検査資料を追跡して、「はい」と答え、必要に応じてそれを示すことができます。
1
jsf

基本的なプロセスでは、開発者が仲間と一緒に座って、コードをある程度詳しく検討する必要があります。深さはプロジェクトのサイズ、重要性などに依存します。レビュー担当者は、コードを読むのではなく、欠陥を議論することに集中できるように、ミーティングの前にコードにアクセスできる必要があります。

各会議は長すぎないようにする必要があります-1時間程度なので、多くのコードがある場合は、より扱いやすいチャンクに分割してください。コードの割合を確認することも完全に許容されますが、これはコードの重要度などにも依存します。

コードはオンラインでもオフラインでも実行できますが、会議中に変更を加えることはできません。印刷上の注釈として、または別のファイルで、欠陥に注意してください。

その後、開発者は戻って欠陥を修正し、必要に応じてテストなどを再実行します。欠陥の数と重大度に応じて、別のレビューがある場合があります-これはコードのサンプルにすぎない場合があります。

1
ChrisF

コードレビュープロセスについての私の見解。

まず、2つの基本的なルールがあります。

  1. 誰もレビューされていないコードをコミットすることはできません
  2. 彼女が貢献した変更を誰もレビューできません

I.同僚が変更をコミットしようとしているとき、私たちは一緒に座って、

  • コンピュータですべてのテストケースが緑色であることを確認します
  • 彼女がテストケースを書いた/修正したことを確認する
  • 彼のコードが既存のコーディングガイドラインと一致することを確認してください
  • 彼の変更を確認し、Jeff Atwoodのトップ25に焦点を当ててください リスト
  • 私たちは彼女の変化を経験し、それについて話し合います

これはクイックチェックです。5分で完了します。これは、迅速なフィードバックを得て、新しい変更について学び、何も壊れないのに良い方法です

II。上級開発者/チームリーダーは、コミットを日常的に厳選し、徹底的にレビューして、チームの考えと調査結果をチームと共有する必要があります(担当者は、間違ったコードを書いた調査結果を実装する必要があります)。

III。振り返り中(もしあれば)学習のために互いのコードを確認する

herehere というトピックについてブログに投稿しました。

1
Zsolt