ソース管理リポジトリで「レビュー」されたソースコードを持つためのベストプラクティスは何ですか?


12

ソース管理リポジトリでレビュー済みのソースコードを管理する最良の方法は何ですか?ソースコードはチェックインされる前にレビュープロセスを経るべきですか、それともコードがコミットされた後にコードレビューが行われるべきですか?コードがリポジトリにチェックインされた後にレビューが発生した場合、どのように追跡する必要がありますか?

回答:


4

Googleには、これまで見たどの場所よりも優れたコードレビュープラクティスがあります。そこで出会ったすべての人は、コードレビューの方法について完全に合意しています。マントラは「早期かつ頻繁にレビューする」ことです。

グラハムリーが提案したようなプロセスを使用するとします。(これは私が以前自分で使用したプロセスです。)問題は、レビュー担当者が大きなコードの塊を調べるように求められていることです。それはより多くの努力であり、レビュアーにそれをさせるのは難しいです。そして、彼らがそれをするとき、彼らにそれを徹底的にさせることはより困難です。さらに、設計上の問題に気付くと、開発者が戻って作業コードをすべてやり直して改善することは難しくなります。あなたはまだ物をキャッチし、それはまだ価値がありますが、あなたはあなたが利益の90%以上を逃していることに気付かないでしょう。

対照的に、Googleはソース管理に入る前にすべてのコミットについてコードレビューを行います。単純に多くの人は、これは重いプロセスだと考えています。しかし、実際にはそのようには機能しません。コードの小さな断片を単独でレビューするのが非常に簡単になりました。問題が見つかった場合、そのデザインの周りにまだ大量のコードを記述していないため、デザインを変更する作業ははるかに少なくなります。その結果、徹底的なコードレビューがはるかに簡単になり、変更された問題を修正するのがはるかに簡単になります。

Googleのようにコードレビューを行いたい場合(本当にお勧めします)、そのためのソフトウェアがあります。Googleは、Subversionと統合されたツールをRietveldとしてリリースしました。Go(言語)は、Mercurialで使用するために修正されたRietveldのバージョンで開発されています。Gerritという名前のgitを使用する人々のための書き直しがあります。また、これに推奨される2つの商用ツールCrucibleReview Boardを見てきました

私が使用したのはGoogleの内部バージョンのRietveldだけで、非常に満足しています。


4

複数のチームで使用した手法は次のとおりです。

  • 開発者は、レビューなしで独自のブランチまたはローカルリポジトリにソースを統合できます。
  • 開発者はレビューなしでトランク/マスターと統合できます
  • トランク/マスターからリリース候補ブランチにコードを統合する前に、コードをレビューし、レビューのコメントに対処する必要があります

レビューを求めるのはコード作成者の責任であり、リリースされたブランチのメンテナーは、レビューされたコードのみがマージされるようにする責任があります。

コードレビューをサポートするツールはありますが、私はそれらを使用したことがありません。レポジトリ内で、マージのレビューを行った人を追跡できます。誰が何をレビューしたかを示すために、コミットにアタッチされたsvnプロパティとperforceジョブを使用しました。


2
+1:「レビューを求めるのはコード作成者の責任です」を除く。経営者がレビューの完了を要求しない限り、それらは無関係に陥ります。何らかの報酬システム(カジュアルまたはインフォーマルでも)が必要です。そうでないと完了しません。ブランチメンテナーは誰かに答え、コードレビューのチェックで規律を守られたことに対する何らかの報酬を受け取ります。このパズルのピースも重要です。なぜ人々がこれを行うのに懲戒されるのか説明してもらえますか?
S.Lott

@ S.Lottは私が取り組んできたチームで、プロの誇りです。また、レビューが得られない場合、コードは統合されません(上記を参照)。したがって、あなたのコードは製品に入りませんし、その日/週/イテレーションの仕事をしていません。開発者が作業を行う意欲がない場合、ソース管理リポジトリを整理するよりも問題が大きくなります。

@グラハム・リー:「プロのプライド」?「デベロッパーは自分の仕事をやる気がありません」が問題です。多くのマネージャーは、スケジュールより前にリリースを要求するか、追加機能を組み込むことを要求することにより、適切なプロセスを破壊します。プロセスの破壊を防ぐための動機付け要因は何ですか マネージャーが「明日これが必要なのに、コードレビューの時間がない」と言うのを妨げるものは何ですか?
S.Lott

@ S.Lott私はあなたのことは知らないが、マネージャーが私の仕事がどのように行われているのかをよく知っていると思っても、たわごとのバギーヒープをリリースしない。

@Graham Lee:バグのあるコードをリリースしないようにしています。私の質問は、「経営陣がプロセスを覆すことを避けるためにあなたのチームを動機付けるものは何ですか」です。それは良いプロセスです。もっと知りたいです。
S.Lott

1

レビュー用のコードをコミット/非コミット基準で分けたことはありません-遭遇した唯一の基準は、単体テストと統合テストが緑色であることです。

追跡に関しては、お気に入りの課題追跡システムでフローを更新することをお勧めします。代わりに例えば:

  • 製品所有者->アナリスト->開発者-> QA->リリースエンジニア

もう1つのステージを紹介することもできます(レビュー)。

  • 製品所有者->アナリスト->開発者->レビューア-> QA->リリースエンジニア

したがって、Implemented状態のすべてのチケットにレビューアを割り当てることができ、レビュー済みのチケットのみがQAに進みます。


1

私はコードレビューの経験が1つしかないので、どれほど良いかは言えません。

私は小規模(〜10-15)のコーダーのグループと仕事をしていたので、VS Team Foundation Studioを使用していました。約1日1回コードをコミットするように求められ、その前に各コミットコードがグループの他の誰かによって(できればプロジェクトに関係する誰かによって)レビューされるようになりました。コミット時に、人の名前もフィールドに含まれていました。


1日に1回しかコミットしないと、私は危険を感じます。ごめんなさい。
btilly

多分。私も最初は少し驚きました。ただし、これは厳密なルールではなく、必要に応じてローカルの変更を「棚上げ」できます。
apoorv020

0

私は、週に数回のレビューの間に、変更ごとにチェックインされたすべてをコードレビューするチームで働きました。これは、コードレビューが常に最新であるとは限らないことを意味しますが、目標を達成しました。

最初に、コードを確認して何を達成したいかを尋ねます。私たちの場合、それはばか開発者を捕まえることではなく、無能の仮定ではなく能力の仮定がありました。これにより、チームはシステムの他の領域の概要を把握することができ、いくつかの疑わしい設計決定が修正される前に修正することができました。疑わしいのは、猫の皮を剥ぐ方法は常に複数あるということです。いわば、ツールボックスに猫の皮をむくナイフがあることを誰もが知っているわけではありません。


0

コードレビューに取り組んだ方法は、プロジェクト追跡ソフトウェアのすべてのタスクがレビューされることでした。当時は、MantisとSVNを使用していました。プロジェクトのコミットは両方のシステムに結び付けられていました。すべてのコミットは、カマキリのタスクに結び付けられなければなりませんでした。タスクが完了すると、「レビューの準備完了」のステータスが割り当てられました。

次に、RFRアイテムは、レビューのために空き時間がある人がピックアップしたか、レビューのために特定の人に割り当てられました。金曜日には、すべてのRFRアイテムを翌日までにレビューする必要があったため、翌週まで持ち越されませんでした。

このプロセスで遭遇した唯一の問題は、大量のファイルを持つ大きなアイテムでした。これを処理するために、コーダーとレビュアーは集まり、レビュアーがそれらを理解するまでコーダーは変更を実行します。彼らは一緒にコードレビューを行います。

このプロセスは、管理者がピアプログラミングを行った場合、別のコードレビューは不要であると指示したときに故障しました。開発者はこのプロセスを怠り、小さな愚かなバグが導入され始めました。最終的に、元のプロセスに戻り、物事は一緒に戻りました。


0

私のチームでは、過去1年ほど練習を使用してきましたが、非常にうまく機能しているようです。

私たちの組織では、バージョン管理にPerforceを使用しています。Perforce(1年前)には、シェルビングと呼ばれる機能が含まれています。棚を使用すると、特定の問題に対する変更を「棚上げ」できます。それらはバージョン管理システムに保存されますが、チェックインされません。その後、チームの別の開発者にコードを確認するよう依頼します。

他の開発者は自分のコンピューターからPerforceの保留中の変更を表示し、変更を最新のリビジョンと比較できます。また、私の変更を試してみたい場合は、ローカルマシンに「シェルブ解除」できます。彼がレビューを完了したら、彼は私に知らせます。次に、コメントの最後に「Reviewed by Bob」とコードをチェックインします。

これは私たちにとって本当にうまくいきました。まず第一に、一般的なコードレビューは非常に役立つことが証明されています。さらに、Perforceのシェルフ機能を使用すると、チームが地理的に広範囲に広がっていても、チェックインや大きな困難を伴うことなくレビューを行うことができます。これは非常に重要です。そしてそれは素晴らしく機能します。

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