コードレビューにおける肯定的なフィードバックはどれほど重要ですか?


48

コードレビュー中にコードの良い部分とそれが良い理由を指摘することは重要ですか?肯定的なフィードバックは、レビュー対象の開発者にとっても、レビューに参加する他の開発者にとっても同様に有用です。

オンラインツールを使用してレビューを行っているため、開発者はコミットしたコードのレビューを開き、他の人は特定の期間(1週間など)にコードをレビューできます。他の人は、コードまたは他のレビューアのコメントにコメントできます。

正のフィードバックと負のフィードバックのバランスをとるべきですか?


3
ねえ、それが合格した場合、それは正のフィードバックです。:)
エイドリアンJ.モレノ

1
大部分は、コードがレビューされている人に依存すると思います。批判を受けるだけで否定的に反応する場合、バランスを見つけることが重要です。そうでない場合、レビューの合格は本質的に肯定的であるため、肯定的なフィードバックは冗長です。彼らが何か新しくて素晴らしいことをするなら、あなたはそれを言及することができます、しかしあなたのチームのベストプラクティスにそれを組み込むことはまた肯定的なフィードバックです。
マット

SEにはアップ投票とダウン投票の両方が含まれているため、物事を適切に機能させるには正のフィードバックが重要になります。ここでのあなたの質問と回答が期待できる最高のものがゼロであるなら、どうなるでしょうか?これは男性と女性の典型的な違いです。男性にとっては、フィードバックは「大丈夫」という意味です。女性にとっては、「言うべきことは何もなかった」という意味です。これは、男性と女性にとってこの分野の相対的な魅力を説明するのに非常に長い道のりを行くかもしれません。

回答:


41

ピアコードレビューを使用した品質と士気の向上
http://www.slideshare.net/SmartBear_Software/improve-quality-and-morale-using-peer-code-reviews

誰もがすべきこと:コードレビュー
http://scientopia.org/blogs/goodmath/2011/07/06/things-everyone-should-do-code-review/

これらの記事は両方とも、コードレビューの目的の1つは、エラーを見つけるだけでなく、優れた開発手法に関する知識を共有することであると述べています。

だから、それは非常に重要だと思います。誰が会議に行って、ただ批判されることを望みますか?


26
私!私!皮肉な点は別として、私は実際に、コードの批評がないコードレビューに非常に悩まされています。私は完璧に物事をやらなかったので、批評を欠いているので、レビューを求めても時間を無駄にしているように感じます。だから私は批判以外は何も悪いことはないが、どれも同じではないことに同意する。
ジミー・ホッファ

3
私はジミー・ホファに同意する傾向があります。一般的に(コードレビューだけでなく)、多くの肯定的なフィードバックを行おうとする人々に対処することは非常に面倒です。肯定的なフィードバックは役立つはずです。コードの作成者が既に知っていることを言ってレビューを汚す必要はありません。個人的には、「あなたは素晴らしくて賢いですが、コードにはいくつかの小さな問題があります」という態度を好みます。
アルセニムルゼンコ

6
@MainMa:問題が見つからなければ、見栄えがいい」が機能します。特に有用なコードまたは適切に作成されたコードの場合:「これは役立つ可能性があります。いくつかのメモを使用してコード共有アーカイブに入れるか、日常のコーディング慣行に組み込みましょう。」
ロバートハーベイ

2
かつてコードレビューがどれほどひどいものだったので、私たちは誰かをやめさせました。その後、コードレビューをワークショップとして使用するように変更しました。深刻な問題に対するコード批判がありますが、ほとんどは教育に関するものです。辞めた男は、意見の違いのために、レビュー中に私たちのマネージャーと悲鳴を上げました。レビュー中に人々は本当に防御的になることができるので、緊張を和らげ、エゴを時々打つ以外の理由がない限り、レビュー対象者が対処しやすいように「これを変更する」瞬間を正のフィードバックで与えることを強くお勧めします
Brian

2
@ブライアン私が言わなければならないのは、誰かがちょっとした批判で悲鳴を上げる試合に参加した場合、彼らは会社の文化とオフィスの士気を完全に損なう可能性が高いということです。
ジミー・ホッファ

29

コードレビューを行うとき、実行中のモノローグを持っている傾向があるので、読んでいるものの意味を理解しているので、「わかりました、それが何をするかわかります。これに接続して呼び出します」それ、申し分なく..そしてその作品は、申し分なくそれらの両方に依存しています。」

このように「これはすごいすばらしい!」ではなく、まったくつまらない退屈なコードかもしれませんが、他の誰かが実際に解析して理解したことを聞くと、それ自体が肯定的なフィードバックの形であり、フィードバックは「このコードは理にかなっています」、理解できない部分に出会ったときは説明を求め、理解したら「ああ、わかった」と叫ぶ。

私たちは皆、コードを他者に理解してもらいたいと思っているので、理解の単純な転送は他のエンジニアに賞賛されると思います。

とはいえ、良いまたは肯定的な特性であるコードの部分を見た場合(それ自体の最小形式であれば、退屈な些細なコードでも良い場合があります)、私は間違いなくそれらの特性を述べる傾向があります。すばらしいです!" 「これは最小限の実装であると思う」または「わかりました、この複雑なアルゴリズムには多くのコメントがあります」というように、コードの属性に焦点を当てて、本来の良さや悪さではありません。

コードレビューのコードに「良さ」または「悪さ」を帰属させて、エンジニアがペデスタルを見下ろしたり、保持したりするのを避けるために、何かが良いか悪いかを言わず、むしろ彼らのコード。

「OKこの部分は理にかなっています。ああ、ここに魔法の数字があります。その値の意味は、これに触れる次のエンジニアによってよく理解されないかもしれません」

「ここにはDIコンテナがあります。そのため、そのリポジトリとの疎結合になります」

「ああ、静的な辞書があります。複数のスレッドがその辞書に触れていると、競合状態に陥ることがあります」

良いことも悪いことも言っているわけではありませんが、エンジニアがそれを変更すべきかどうかは、コードがレビューされているエンジニアによって理解されるでしょう。もちろん、コードレビューをイェイまたはネィで終わらせる必要がありますが、これらのステートメントをその過程で蓄積することで、「私は好きですこれをチェックインする前に修正されたマジックナンバー」。


4
以下のための+1「の簡単な転送理解が別のエンジニアに賞賛され...それは暗黙の検証の形を与える」
ロイ・ティンカー

これを2回+1したい。1つは@RoyTinkerと同じ理由で、もう1つは「何かが良いか悪いかを言ってはいけないが、原因と結果について話してください」。両方とも非常に良い点です!
ベン・リー

7

コードレビューで私が本当に気に入っていて、「十分な」コードを超えたものを見つけた場合は、肯定的なフィードバックを提供します。

一般的に、誰かが実際にあなたに「わあ、これは本当に素晴らしい!」と言うようにするピースコードを書くと思う。はい、肯定的なフィードバックは重要です-それは著者が彼らがしたことを他の人が楽しんでいたことを著者に知らせ、彼らはそれをもう一度試してみるべきです。ただし、ガイドラインと標準的なプラクティスに従うだけではありません。誰かがうまくインデントしたり、定型的なコメントを追加したために賞賛を与えると、バーがかなり低くなる可能性があります。


6

これはプログラミングの問題ではなく、一般的な管理と人間の相互作用の問題です。コードレビューの肯定的なフィードバックは、あらゆる種類のレビューの肯定的なフィードバックとまったく同じくらい重要です。

これが必要であるかどうか(およびそれが必要な程度)は、話し相手の気質と感情的な構成の関数です。一部の人々は、それが賞賛と結びついている場合、修正にはるかに効果的に反応します。他の人は、修正を加えた場合、賞賛を不誠実と見なします。

一般的な式は、「フィードバックサンドイッチ」と呼ばれることもあります。最初に良いもの、次に悪いもの、最後に良いもの。考えは、全体的なトーンを正に保ちながら、同時に負のフィードバックが受信されるようにすることです。これは、レビューを予測する際のストレスを防ぎ、その後自己吸収されたひなを防ぐのに役立ちます。両方とも生産性と品質に関して非常に重要です。これは単なる感触的な感情的なホグウォッシュではありません。それは人間の行動101です。

繰り返しますが、あなたが働いている人を知り、彼らが何に反応するかを理解する必要があります。人々に対処することが経営の目的であり、優れたマネージャーは人々に対応させる方法を知っています。


4

正のフィードバックは非常に重要だと思いますが、それは主に個人的で現実的なダイナミクスによるものです。私たちは皆、何時間も、何日も、何週間も、何ヶ月も座ってコードを書きます。コードレビューはそれを紹介するチャンスです。

コードレビューに行って、期待できる最良の結果が「コメントなし」(つまり、肯定的なフィードバックのバランスがない)である場合、会議は簡単に「悪い人があなたの吸うと思う方法を見つける」というタイトルになります。その結果、開発者はコードレビューに悩まされるか、恐ろしいコードレビューに悩まされるようになります。これは明らかにチームにとって不利益です。開発者は、コードをレビューすることを「忘れる」か、学習された無力感を開発し、これらの会議で爆発を避けるために、あらゆる小さなことについて何をすべきかを絶えず批評家に尋ねます。

理論的には、悪い人を直し、全員に感情をドアに残してもらうように依頼するのが最も論理的であると言うことはすべて良いことですが、それはまさに、担当者の開発者が対人関係の耳が聞こえないものとして受ける責任と同じような態度です。理論はさておき、私たちは人間です。それは重要です。


これは、解決すべき問題に焦点を当てるのではなく、すでに機能しているものを改善および拡張する方法を検討する「感謝の気持ち」という概念を思い起こさせます。

3

サイドバイサイドまたはチームレビューを行う場合はさらに重要です。書面によるレビューでは、良いニュースはありません。目標は、コードを実稼働に移行することです。それがあなたのコードであるとき、あなたはあなた自身について気分が良いはずです。

コードレビューは、チームの指導と管理に役立つ情報源として使用する必要があります。コードレビューデータベースを乱雑にすることなく、肯定的なフィードバックを提供する機会がたくさんあります。サンプルを引き出して、他のユーザーと共有できます。

開発者のレビューには、コード以外にも多くのことがあります。コードレビュー時間をハイジャックすると、アプリを公開するのに逆効果になる可能性があります。コードレビュー以外の開発者を支援するために固有の時間を設定しますが、コードレビューのフィードバックを除外する必要があるという意味ではありません。


2

「バックハンドの賛辞」を避けることに注意を払わない限り、コードに関する肯定的なフィードバックを提供することであなたを裏切る可能性があると私が考えることができる唯一の方法です。ほとんどの人はこれに精通しています...「素晴らしい仕事ですが...」などのフレーズで表されています

これがプログラマの個人的なレビューではなく、システム全体の品質のためにコーディングの実践を改善する努力であるという態度で全員が会議に参加する場合、すべてのフィードバックは「良い」フィードバックです。コーディングの実践を改善する方法を強調するフィードバックは、問題を処理するための有用な新しい方法を強調するフィードバックと同じくらい重要になります。

少なくとも、その長さに行かない場合、レビュープロセス内で「良いフィードバック、悪いフィードバック、良いフィードバック、悪いフィードバック」サイクルを実行しようと努力することは、同じバックハンドのliめ言葉。良いフィードバックを強要したり、努力を強化したり、知識の穴を埋めようとしないでください。

長年にわたって私が最も学んだフレーズ:

  • 「これは興味深いアプローチです。[その他のユースケース]に対応する必要がある場合はどうなりますか?」
  • 「いいね!すでにそれを行う方法があることをご存知ですか。どのアプローチがより効率的かを確認するためにベンチマークを行う必要があるかもしれません。」

2

コードレビューで最も気に入ったワークフローは次のとおりです。

  1. 開発者はメーリングリスト/オンラインツールでパッチを提出します。
  2. 気にする必要がある人は誰でもパッチを見て、改善を提案します。
  3. 開発者は#1に戻ります
  4. 改善が必要ない場合、人々は「お疲れ様でした」と言います。<-正のフィードバック。受け入れられるコードはすべて良好です。人々が物事を変えるようにあなたに言う必要が少なくなればなるほど、あなたはうまくやっています。
  5. 開発者がコミットし、次の項目に進みます。

通常、新しい開発者はコードベースに慣れるにつれて、より多くの「修正」フィードバックを得ることになります。

このアプローチの利点は次のとおりです。

  1. 誰もが何をしているかを知っています。独占やミステリーのコミットに関する知識はありません。
  2. 誰もが他者のフィードバックから学びます。これは重要。ペアリング中に対面の会話で2人の間でのみフィードバックが発生する場合、部屋の反対側の誰かがメーリングリストで発生した場合と同じように利益を得ることができません。
  3. 他の開発者は通常、バージョン管理の前にいくつかのバグを見つけることができます。

したがって、基本的には、フィードバックをまったく受け取らないことを望んでいます。なぜわざわざ仕事に行くのですか?あなたは家で目に見えないことができます。

1

私はこれにまったく同意できません。Good Development Techniquesと、素晴らしいが不可解なものから単なる人間のコードを書くことができる、いわゆるNinja Codersとの違いは何ですか?ソフトウェア開発(IMO)は、保守性と理解しやすさを優先して、センスとunningさを避けるための最も一般的な分母の分野です。リスクが高すぎます。

レビューでコードを見て、「ああ、それはクールだ」と思う時間は考えられません。このようなコードに出会った場合、Cool-Yet-Unacceptableのキャンプに入るだろうと推測できます。

また、積極的なフィードバックが得られない人にも問題があり、おそらく一生懸命に努力し、最終的に「Trust me、it!」と混乱させます。

コードレビューは、チームにコード品質の責任を分散させるためにあります。つまり、後で重大な問題が発生した場合、個々の開発者を責めることはできません。問題を見つけるために使用し、それを維持する必要が生じた場合に備えて、奇妙なものの元の開発者から説明を得るために使用します。個人的には、負のフィードバックを受け取ることに興味があります。顧客はコードのクールさを気にせず、自分の望むことをするだけです。

バックスラップはパブに任せます。


1
「顧客はコードのクールさを気にせず、自分の望むことをするだけです。」顧客はコードの読みやすさも気にしません。彼らは可能性がある、それは、バグを修正する機能を追加、またはいくつかの動作を変更するためにかかる時間を気に、彼らは確かに、それ自体のコードの可読性を気にしないでください。
CVn

1

それは私にとって重要でした。ポジティブのために、綿密なコメントやポジティブを望まない。私が書いたコードがすべて安っぽい場合は、その理由を教えて、修正して学習しましょう。しかし、私が正しいことをするなら、それを時々聞くのは良いことです。「正しかった」すべてのことを積極的に強化する必要はありませんが、「X、Y、Zを改善しましょうが、それ以外は良さそう」であっても重要です。


0

正直なフィードバックほど重要ではありません。私は大規模な金融会社で働いており、プログラマーが一生懸命努力しているのか、良い人であるのか、通常は良いコードを書くのか、顧客は気にしません!動作するソフトウェアが必要です。


私の経験では、一生懸命努力し、「善良な人」であり、支援チームに満足しているプログラマーは、機能するソフトウェアを作成する傾向があります。
c_maker

鶏と卵だと思います。しかし、問題はコードレビューについてでした...私はエゴを
打つ

コードレビューは、ソフトウェアのユーザーに見える部分が仕様に従って動作するかどうかを判断するときではありません。
CVn

0

完全に客観的であることが重要だと思います。肯定的なコメントをすることで士気を高めようとすることは、時間の無駄です。

これは、コードレビューが過度に重要であることを意味しますが、それがポイントではありません。また、自分自身を批判する必要があります。私が書いたコードはおそらく完全なゴミであり、間違いなく改善できるという仮定が、コードとスキルレベルを改善するように駆り立てることに気付きました。

コメントがない場合は、良い仕事をしたと考えることができます。


たぶんこれが、ほとんどのプログラマーが男性である理由です。

-1

Mantraはシンプルです。高品質のコード(実際にはそれほどではない)が必要な場合は、適切なレビュー方法を実践する必要があります。そうは言っても、肯定的なフィードバックは、開発者/プログラマーがアイデア/解決策/修正を考え、思い付くのに役立ちます。厳しすぎることはしないでください。Q&Aマネージャーは、チーム(またはメンバー)を正しい方向に導くことができるように、優れた方法論と実践を知っている必要があります。これにより品質が向上します。期間。


-3

コードがコンペティション用であるか、就職の面接のために提出された場合(言い換えると、書かれていて書き換えできないコード)、肯定的なコメントは必須です。実際、負のフィードバックだけでなく、正のフィードバック(可能な場合)があることを確認する必要があります。そのようにして、コーダーは自分の長所と短所がどこにあるかを知り、それを補うことができます。

ただし、コードを書き直すことができる職場環境で話しているようです。その場合、システムのバグを徹底的に排除しようとしています。したがって、そのような状況では、マイナスのバグのみが価値があります。

気に入らない場合は、毎週コードレビュー会議を開いて、全員が良いコードと悪いコードの両方について話し合うことができます。

編集:私は言うが、何かがあなたを十分に感動させるならば、あなたが直接あなたの賞賛を表現するのを止めるものは何もない。ただし、トラッカーは生産コードのレビュー専用です。


6
「だから、そのような状況では、負のバグだけが価値があります。」-私はまったく同意できません。誰かがバグを修正する/機能を実装する優れた方法を思いついたとしても、それは絶対に価値がありません。そして、モチベーションを維持することが重要です。失敗のみを強調すると、問題が発生します。
マット

私の側の悪い単語の選択。良いものは役に立たない(私の時間内に十分なドロスを書いた)が、バグは、おそらく、トラッカーが設定されたものです。OPは、彼が選択した場合、肯定的なコメントを残すことができます。しかし、個人的には、トラッカーが詰まるのを防ぐため、対面の会話にはそのままにしておきます。また、私はコメントを投票することができないのがとてもイライラしています。:)
KBKarma

1
@KBKarma-元の答えが表現されていなかったと感じた場合は、戻って戻ってあなたの考えを適切に反映するように答えを編集してください。答えの下にある編集ボタンを探します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.