一般的なコードレビュープロセスとは何ですか?


16

私の会社は最近、正式なコードレビューを開始しました。プロセスは次のようになります:githubに送信し、プルリクエストを要求し、約3人がコードをレビューし、すべてのパスが完了したらコードを入力します。

このプロセスは公平に思えますが、コードレビューを行う3人は公平ではないようです。レビューのためにコードを挿入すると、100〜200のコメントが表示されます。私にとって一番の数は一度300コメントでした。もちろん大きな変更だと思うでしょうが、これは50行未満のコード(ユニットテストを含む)でも非常に小さな変更になる可能性があります。すべてのコメントは「やらなければならない」と見なされ、議論はありません。

それを念頭に置いて、ここでの私の主な問題は、それが少し過剰に見えることです。私はグループと話をしましたが、彼らは基本的に、PHPで長年開発してきたからといって、「開発者」であるという意味ではないと言っていました。もちろん、これはそうでないことよりも痛いようです。また、グループ内ではあまりコメントを生成していないようであり、ほとんどの場合、他のコメントや提案を無視したり、無視したりします。

私の質問は、これが公平かどうかです。それとも普通ですか?


3
どんなコメントがありますか?たくさんのようです。コメントをフォーマットしていますか?コーディング?コメントの性質(およびコード内のコメントの正確な原因)について詳しく知ることなく答えることは困難です。
MetalMikester

1
ちょっと-それが正しい用語かどうかはわかりませんが、変数の名前変更、関数の移動、関数の名前変更を3〜5回以上行うなど、一般的な「ベストプラクティス」コメントです。
user1207047

また、このチケットで言及するのを忘れて、私は実際にこの会社のレベル3開発者です。私はPHP認定を取得しており、ここ8年間採用されて以来、順調に進んでいます。これは、これが起こり始めたのはごく最近のことです。だから、8年後、あなたは何か正しいことを知っていると思うと思うのですか?
user1207047

1
「だから、8年後、あなたは何か正しいことを知っているだろうと思うことを意味するのですか?」-さて、あなたは驚かれることと思います...私が見るものを仕事で時々 ...
MetalMikester

回答:


15

すべてのコメントは「やらなければならない」と見なされ、議論はありません。

それに優先順位がないので、それは本当の問題です私見。あなたは100から300件のコメントを取得すると、そこにする必要があり、それらのいくつかは、優先度A(実際のバグ)を有すること、それらのいくつかPRIO B(おそらく後にバグにつながる)およびそれらのいくつかは、C(他のすべてを)PRIO。すべての希望を尊重するが、変更を効果的にするために、そして時間を制限するために、優先順位付けを主張することを同僚に伝えてください。次に、prio Aのコメントを修正することから始めます。その後、本当に時間があれば、Bから始めることができます(運が良ければ、上司はprio BとCの修正はそれほど重要ではないことを理解し、時間を無駄にする代わりに、いくつかの重要なタスクを行います)。


私は何度もコメントの優先順位を尋ねようとしました。「欲しい」「必要」などのようなものを取り戻します。それらの大部分は「必須」であることが判明しました。
user1207047

2
特定の開発者が、プログラムの他の領域でコードを台無しにすることを防ぐために、レビューから多くのアクションアイテムを与えられることが起こるのを見てきました。しかし、それはプロジェクトに「強制」されている非常に貧しい開発者のためであり、リードは管理上の決定のためにそれらを取り除くことができません。
ダンク

2
あなたは@Dunkを知っています、あなたはここにいると思います。あなたのコメントは本当に当たり前で、コメントを受け入れることができないと思うので、この答えを受け入れました。私はこのグループの「アウトサイダー」であり、なぜ内側のサークルがより良く、より迅速にレビューを行っているのか、そして外側のサークルはそうではないのかを理解しています。私は経営陣からこのチームに「強制」されました。はい、私たちは一緒に働くことを「強制」されています。したがって、これは非常に合理的で、なぜそれが厳しいのかについての論理的な説明に聞こえます。それとも私はコーディングに本当に悪臭を放ちます。それを理解する唯一の方法は、別のグループ/会社に行って自分で確かめることです。
user1207047

4
@ user1207047:サイトの標準と目的に反するコメントが好きなので、答えを受け入れないでください(パターンをここで感知していると思います)。そのための賛成コメント機能があります。
webbiedave

10

コードレビューは分裂的なプロセスになる可能性があります。

しかし、あなたは重要な交差点にいます。レビューについて思慮深い分析を行います。彼らは、つまらない選択の問題を特定していますか、それともあなたのスタイルとロジックの重大な欠陥を強調していますか?

前者の場合、解決に向けて作業することをお勧めします(新しい仕事、または新しいコードレビュープロセス)。

後者の場合は、コードを専門的な品質に引き上げるために、多くのコード読み取りと調査を行うことをお勧めします。


ねえ、良い考え。私がそれらのいくつかを集めることができるのは、確かに思慮深い分析ですが、それらのほとんどは、機能の移動や機能の名前の変更など、一見しただけのように見えます。問題は、彼らが彼らの思考プロセスを説明するとき、それは確かに理にかなっているが、彼ら自身の中で彼らは私と同じことをして同じエラーを犯していないことです。
user1207047

さらに、コードレビューは非常に深いので、自分がやっていたことを忘れてしまい、100を超えるコメントが原因でアプリを修正するバグが増えました。たとえば、コードの大部分を書き換えるように言われたことがあります。それ以前は、コードは正しく機能していました。コードのレビューと150近くのコメントの後、元の機能と正確さが失われ、大量のバグが挿入されました。これに気付いて修正したとき、基本的には「コードレビュープロセスは素晴らしいプログラマーになります。今は修正をやり直しているので、簡単だからです」と言われました。
user1207047

8
メソッド/関数の@user:namingは重要です。必ずしもピッキングではありません。ネーミングが不十分な場合、チームにとっては面倒です。明確な名前が思いつかない場合は、おそらく良い機能ではありません。あなたは「新しい」人であるように見え、他の人たちはおそらく以前に何度も議論したことのある彼らの狂気への方法を持っているようです。したがって、コメントが少なくなる理由。私はあなたが彼らが何を望んでいるかを学び、突合せ頭ではなく順応しようとすることを勧めます。敬意を払うと、オープンな心で満たされる代替アイデアを提供することができます。
ダンク

1
@user:コーディング/設計標準が必要なようですね。
ダンク

2
@user:できることは、システム内で作業し、自分がチームプレーヤーであることを示すことです。それをやったら。それからあなたの認識が正しくないか、不合理な人々を扱っているか、彼らはあなたの態度が論争的であると感じているか、それは単なる厄介なオフィス政治です。あなたがコントロールできるのはあなたの態度/知覚だけです。あなたが何らかの形で問題を扇動していないと確信しているなら、なぜあなたが滞在するのか分かりません。人々が仲良くなるので、働くのが楽しい場所を見つけてください。同じ問題が他の場所で発生した場合は、ミラーを調べてください。
ダンク

5

あなたのコメントから、同僚がコードレビュープロセスを使用して方法論に同意するか、コードを洗練しているようです。私はあなたのようなコードレビューを始めたばかりで、時々実装アプローチや改善である事柄について多くのことを議論していることに気づきました。これは合理的な範囲ではまったく悪くありません(300件のコメントが多すぎるように見えますが、これはredditスレッドのように見えます)。

コードの実装を開始する前に、コードに関するアーキテクチャ上の決定に同意する必要がある場合もあれば、命名規則、パターン、およびグッドプラクティスについて同意しているだけで、「良いコード」と見なされるものをすべて知っている場合もあります。

あなたが言うようにコード標準に準拠しており、コードが意図したとおりに機能する場合、コメントはそれほど多くないはずなので、彼らはあなたのコードをフォーラムとして使っているか、あなたが指しているようにあなたをトローリングしています。

私は自分自身に批評をしようとし、会話に参加して、このコメントすべての理由を確認し、建設的な方法でそれについて話し、彼らがあなたのコードにどうしてそんなに不満なのか、そしてできるなら誰もが幸せになるような方法でコードを作成し、コードレビューで作業が滞らないようにします。

私はあなたの最後のコメントを読んでいます。時には、コードに同意しない場合は、100回それを超えて、あなたが幸せにならないあらゆる場所で変更を提案することができます。本当の理由は、あなたが別のアーキテクチャ上の決定をしたからですそして、あなたはそれを何度リファクタリングしても、そのコードが好きではないだけです。上記で述べたように、コードへのアプローチを事前に同意する必要があります。そうすれば、コードを記述するときに、コードから何を期待しているかがわかり、コードがより合理的になります。


1
最後の段落に100%同意:実装する前に、意図した設計について話し合う必要があります。少なくとも、あなたはおそらく容認できるフレームワークから始めています。次に、実装後、最終的な設計(コードではない)について議論するために、もう一度試す価値があります。次に、最終設計の議論の結果に合わせてコードを変更します。それを数回試しても改善されない場合は、位置がちょうど悪いフィットであることが明らかになり、他の場所を探し始める必要があります。
ダンク

4

あなたが言っていることから、彼らはPHP開発者に対してバイアスを持っているかもしれないので、彼らは彼らのポイントを証明するためにあなたのコードで間違っているものをすべて見つけようとしています。¹

コードレビュー自体については、すでに述べたように、このような膨大な量のマイナーなコメントは、いくつかの良い有効な批判よりも役に立たないと思います。また、コードレビューに関する経験は限られていますが、過去に働いていたチームにとって次の手法はうまく機能しました。

  • まず、コードレビューを行う前に、静的コードアナライザーを使用してほとんどの問題を特定する必要があります。たとえば、Sonar、Lint、または他の優れたコードアナライザーを使用してコードを実行すると、ほとんどの小さな問題を取り除くことができます。特に、レビュー担当者がカスタムプロファイルを定義して、ブラケットの配置、空白、コメント、適切な変数の命名など、すべてを保証できるため...
  • 第二に、コメントをさまざまなカテゴリに分ければうまくいくようです。たとえば、1つのグループに2つのカテゴリが含まれている場合、それらに注意し、将来適用する必要がある小さなものが含まれます。また、別のコミットとその後のレビューを必要とするコードの即時変更を必要とするコメントの2番目のグループ。もちろん、後者のグループのコメントの数は少なくする必要があります。

さらに、最初の実際のコードレビューには、当初予想していたよりも多くのコメントが含まれていたと言わざるを得ません。しかし、私はこれを悪いことだとは思っていませんでした。彼らのコメント²から学び続け、それらの新たに学んだテクニック/ベストプラクティスを将来のコード提出に喜んで適用するなら、コメントは少なくなるはずです。確かにそうだった;-)

¹ 私の経験では、多くのプログラマーがphpが最も邪悪なプログラミング言語であり、最も経験の浅いプログラマーがそれを使用していると主張しているため、これは頻繁に起こります。素晴らしいソフトウェアはどんな言語でも書けると信じているので、私はこの声明から距離を置いています!

² コメントは過剰ではあるが、ある程度の価値があると仮定する


私はあなたの言ったことに心から同意します。それは学習体験であり、学ぶべきものです。しかし、これは、そうではないように思えるほど長い間続いています。ぼんやりしているか、何か他のことが起こっています。各プルリクエストが何百ものコメントを生成している場合、あなたは常に非常に間違っているか、彼らがやろうとしていると主張していることと一致しない何かがここに含まれていると思います。彼らは「さあ、やめましょう」と言うか、要点を突き止めなければなりません。少なくともそれは私がそれを見ている方法です。
user1207047

1
@ user1207047他の回答への回答を読んだ後、あなた自身の質問への回答を既に知っているように思えます。たぶん、上司と話をしたり、別のチームへの異動を要求したりする時ですか?
ジェローム

3

コードレビューで定期的に100件以上のコメントを取得するのは一般的ですか?私は言わないと思います。コード品質が「多くのことを望まれている」人々が絶対に多くのコメントを得るのは一般的ですか?

ただし、コードレビュープロセスの「ルール」にも依存します。誰もが何かをする方法について独自のアイデアを持っています。コードレビュープロセスで「その方法ではなく、この方法で行うべき」という形式のコメントを許可している場合、適切なコードであってもコメントを大量に取得する可能性があります。プロセスが「欠陥」を見つけることを目的としている場合、コメントの数ははるかに少なくする必要があります。

私の経験では、代替方法の「提案」を許可するレビューは時間の浪費です。それらの「提案」は、レビュープロセスの外で1対1で処理する必要があります。欠陥レビューは、人々が「なぜ私がやったのと同じようにやらなかったのか」ではなく、バグに集中できるので、より便利です。誰かがバグを見つけたとしてもバグを否定することはないので、これはより便利です。したがって、傷ついた感情はありませんが、代わりに感謝の気持ちがあります。

更新:すべてのことを言っても、一部のコードは、欠陥がない場合でも、単純に悪いだけです。その場合、レビューのコメントは次のような単一のコメントでなければなりません。「このコードはクリーンアップする必要があります。コードが[あなたの名前]と話し合うまで、レビューを延期してください。」その場合、コメントが修正されるまでコードのさらなるレビューを停止する必要があります。

UPDATE2:@User:開発中にコード/デザインについて話し合って、自分のやり方でやり遂げる前に彼らが探しているものを実装できるようにしますか?提案に基づいてコードを開発する方法について何か変更したり、自分のやり方は問題ないと思っていますか?彼らのコメントから何か学んでいますか?

私がプロジェクトのswリードであるとき、すべての作業成果物を担当することは私の仕事です。作業成果物を承認すると、その成果物は受け入れられると主張します。高品質の製品を構築することで評判を得たいです。したがって、私は期待を抱いており、満足のいくものを受け入れません。同時に、自分の好みの理由を教えて説明しようとしています。これらの好みは常に理想的であるとは限りません(特に他の人の目には)が、それらの好みのほとんどは経験から来ています。通常、悪いものを繰り返すことを避けるための反応。したがって、プッシュバックに関係なく、私の承認を得るために必要な私の個人的な「スティックラー」がいくつかあります。

一方、作業成果物を承認するために必要な期待を学ぶ必要があります。あなたは反対することができますが、あなたは支配する権限を持っているようには見えないので、期待されることを学びます。チームがあなたを失敗させようとしているとは思わない。そのため、それらも見た目が悪くなります。その点で、あなたが(そうでないとしても)学びたいと熱望していることを示すだけで、彼らの言うことを聞き、彼らの好みに適応するために最善を尽くします。少なくとも許容できるものを見つけて、彼らがあなたのやり方を教えるために少し手をつないでくれるかどうかを確認するかもしれません。誰が知っているか、その過程であなたは本当にあなたのスキルを次のレベルに引き上げることができる何かを学ぶかもしれません。


同意しました、そして、あなたはそれらの理由で私から議論を聞かないでしょう。ただし、プロセスはそのようなものではありません。彼らはそうであり、ほとんどの場合、これらの3つのグループ以外の人だけが自分よりも厳しい監視下にあるようです。彼らは他の人は悪い開発者であると主張しますが、彼らはチームの唯一の「開発者」です。
user1207047

ただし、コードを理解できない場合、または開発者が既存のメソッドを使用する代わりにホイールを再発明した場合、またはメソッドの循環的複雑度が50である場合、それは間違いなくコメントの場合ですバグはありません。コードや複製読みにくいこと、たとえそれがバグではないとしても、責任です。そのため、変数の名前が不適切であることや、ソリューションがコードの理解を難しくする一時的な結合を導入することをpointすることは決してありません。技術的負債を管理する必要があります。
ローランブルゴーロイ

1
@Laurent:あなたが言っていることは知っていますが、多くの点で同意しています。しかし、それは雪だるまになりやすいワームの缶を開きます。あなたの会社が、コードレビューが労力の大部分を占めることができる資金とスケジュールを持っているなら、それは問題ありません(医療機器/航空機プロジェクトのように)。しかし、ほとんどのプロジェクトには豪華さがありません。したがって、レビューコメントの範囲を制限することは非常に役立ちます。あなたの懸念を相殺するために、それは開発者と彼らの仕事を監督するswリードの仕事です。彼らは、誰が最も綿密に監視し、コードレビューの前にそれらの問題を修正するかを知っている必要があります。
ダンク

ここで同意しないことに同意する必要があります:)。技術的負債は、遅かれ早かれ支払わなければならないものです(そして、あなたが待つほど、あなたはより多くの利息を支払います)。クリーンアップを遅らせるペニーを保存しません。今すぐクリーンアップに時間をかけなければ、コードを理解するのに苦労するため、次の変更では時間が2倍かかる可能性があります。私は8年前のコードベースを使用しており、品質の問題のために開発が途切れてしまいました。現在、公式の「内部品質は譲渡不可」ルールがあります。私はそれが私たちを救ったことを証明できます!
ローランブルゴーロイ

私はあなたのコメントを読み直し、私たちの方法論のために多分私たちは異なる見通しを持っていることに気付きます。私はリードのないアジャイルチームで働いています。私たちは全員平等であり、すべてがコード品質に責任があるため、お互いを監視する必要があります。また、各レビューの3〜4時間前にコードレビューが行われます。したがって、非常にナチスであるか、ソフトウェアの古くて残酷な部分に影響を与えるリファクタリングを行った場合、大きなプルリクエストのクリーニングは数時間です。したがって、なぜコード品質のコメントが「大したことはない」と思うのでしょうか。
ローランブルゴー=ロイ

2

チームの検査プロセスとの重要な違い:

  • 検査の基礎は、チーム全体がまとめたチェックリストです。
  • 焦点は欠陥(現在と未来)であり、スタイルのためのスタイルではありません。
  • 3人の検査官(著者を含む)が一緒に座ってコメントを実行します。多数決のコメントのみが残ります。

2

50 LOC 300のコメントについては少し過剰なようです-プルリクエストごとに3人のレビュアーがいますか?会社には多くのリソースが必要です。

有用なコードレビュープロセスに関する私の経験から、いくつかのルールやガイドラインが必要です。

  • コメントの優先度
  • コメントの分類(バグ、コードスタイルなど)
  • 合意されたアーキテクチャ/従うべき設計
  • 合意されたコードスタイル

レビュアーから優先順位が得られない場合は、担当のプロジェクトマネージャー/チームリーダーに問い合わせてください。コストの責任者は、優先順位について意見を持つ必要があります。

定義済みのアーキテクチャ、プロジェクトで使用するデザインパターンの共通理解、および合意されたコードスタイルがある場合、レビューコメントは、セキュリティ問題、意図しないバグ、指定されていないコーナーケースなどの「実際の問題」についてのみである必要があります建築など

開発チームが「味の問題」に同意していない場合(たとえば、メンバー変数が「m_」で始まる場合)、すべてのレビュアーは自分のスタイルに従うように強制します。これは時間とお金の無駄です。


1

これはコミュニケーションの問題のように思えます。あなたのコードは300コメントに値するほど悪くないという期待があります。レビュー担当者は、多くのフィードバックが必要だと考えているようです。非同期の方法で行ったり来たりすることは、多くの時間を無駄にします。ヘック、300件のコメントを書くのは時間の無駄です。これらがすべて欠陥ではない場合、新しいチームメンバーとして、チームのスタイルがまだわからない可能性があります。それは正常なことであり、チーム全体を加速するために学ぶべきことです。

私の提案は時間を節約することです。フィードバックを加速します。私は...するだろう:

  • 同じ間違いをして同じコメントを50回生成しないように、中間レビューをさらに行う
  • レビュアーがコードをレビューするときに座って、問題が発生したときに話し合うことができるため、次のコミットで消去される300の「問題」を文書化する必要がなくなります。
  • これらの「本物の」開発者の1人としばらくの間コードを書いて、彼らがどう違うかを見てみましょう

「時間がかかる」ため、ペアリングに反対する人もいますが、ここでは明らかに問題ではありません。

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