web-dev-qa-db-ja.com

ピア/コードレビューのフラストレーション

私は自分自身をスーパースター開発者とは呼びませんが、比較的経験豊富な開発者です。私はコードの品質を高いレベルに保つよう努めており、常にコーディングスタイルの改善を目指しており、コードを効率的で読みやすく一貫したものにするとともに、パターンと方法論に従って一貫性を確保するようチームに奨励しています。品質とスピードの両立の必要性も理解しています。

これを達成するために、ピアレビューの概念をチームに導入しました。マージのためのgithubプルリクエストで2つのイマイチ。すごい-でも、私の意見ではしゃっくりがなければ。

私はよく同じ同僚からの査読コメントをよく目にします-

  • <INSERT SOMETHING HERE>の後にスペースを追加するとよいでしょう
  • メソッド間の不要な余分な線
  • Docblockのコメントの最後に完全停止を使用する必要があります。

今私の視点から-レビュー担当者は表面的にコードの美学を見ており、実際にコードレビューを行っていません。化粧品のコードレビューは傲慢/エリート主義の精神として私に行き渡ります。実質はありませんが、レビュアーが技術的に正しいであるため、あまり議論することはできません。上記の種類のレビューではなく、次のようなより多くのレビューを見たいと思います。

  • あなたはサイクロマティックの複雑さを減らすことができます...
  • 早期に終了し、if/elseを回避する
  • DBクエリをリポジトリに抽象化する
  • このロジックは実際にはここに属していません
  • 繰り返してはいけません-抽象化して再利用
  • XがメソッドYの引数として渡された場合はどうなりますか?
  • これの単体テストはどこにありますか?

私は、化粧品タイプのレビューを行うのは常に同じ種類の人々であり、私の意見では「品質と論理ベース」のピアレビューを与えるのと同じ種類の人々であることがわかりました。

ピアレビューへの適切なアプローチ(ある場合)は何ですか。そして、私は同じ人たちが基本的にコードをすくい取り、実際のコードの欠陥ではなく、スペルミスと審美的な欠陥を探すことに不満を抱いているのは正しいですか?

私が正しい場合-化粧品の修正を提案することとバランスをとって、コード内の障害を実際に探すよう同僚に奨励するにはどうすればよいですか?

私が間違っている場合-私を啓発してください。実際に良いコードレビューを構成するための経験則はありますか?コードレビューのポイントを逃したことがありますか?

私の観点から-コードレビューは、コードに対する責任の共有についてです。ロジック、可読性、機能性をアドレス指定/チェックせずに、コードに親指を立てるのは快適ではありません。また、誰かがdoc-blockの完全なストップを省略していることに気付いた場合でも、コードの固い部分のマージをブロックする必要はありません。

コードを確認するとき、500 Locsあたり15〜45分かかります。私がこれらの浅いレビューが実行するレビューの深さである場合、これまでに10分以上かかるとは思えません。さらに、浅いレビュアーからの評価はどのくらい価値がありますか?確かにこれは、すべての親指が同じ重さではなく、おそらく2パスのレビュープロセスが必要であることを意味します。深いレビューのための1つの親指と「研磨」のための2番目の親指ですか?

28
Gravy

レビューの種類

査読を行う真の方法はありません。コードの品質が十分かどうかを判断する方法はたくさんあります。バグがあるのか​​、それとも拡張できないソリューションや壊れやすいソリューションがあるのか​​という問題があります。地域の標準やガイドラインへの準拠の問題は、他の標準やガイドラインほど重要ではないかもしれませんが、高品質のコードに寄与する要素の一部でもあります。

レビューアの種類

ソフトウェアの判定基準が異なるのと同じように、判定を行う人も異なります。私たちは皆、独自のスキルと偏見を持っています。メモリ使用量やテストのコードカバレッジなどに関心があるように、ローカル標準に準拠することが非常に重要であると考える人もいます。全体として、より良いコードを書くのに役立つため、これらすべてのタイプのレビューが必要です。

ピアレビューはコラボレーションであり、タグゲームではありません

あなたが彼らに彼らの仕事をする方法を教える権利があるかどうか私にはわかりません。確実に別の方法でわかっている場合を除いて、この人が自分に合った方法で貢献しようとしていると想定してください。ただし、改善の余地がある場合、またはピアレビューで期待される内容が理解されていない可能性があると思われる場合は、それらに話しかけるを使用してください。

peerレビューのポイントは仲間を巻き込むです。関与とは、壁を越えてコードをスローすることではなく、応答がスローされるのを待っています。関与は、より良いコードを作るために協力しています。彼らとの会話に参加してください。

助言

あなたが書いた質問の終わりに向かって:

同僚に、目立った美的エラーと釣り合ったコードの欠陥を実際に探すように勧めるにはどうすればよいですか?

ここでも答えはコミュニケーションです。おそらくあなたはそれらに尋ねることができます。「ねえ、私はこれらの間違いを見つけてくれてありがとう。私が自分のコードを適切に構造化しているかどうかなど、いくつかのより深い問題に集中できれば非常に役立ちます。時間がかかることはわかっていますが、本当に助けて。"

より実用的なメモとして、私は個人的にコードレビューコメントを2つの陣営に分割し、適切に表現します。修正が必要なものと、より表面的なものです。ファイルの最後に空白行が多すぎると、確実に機能するコードがチェックインされないようにすることはできません。しかし、私はそれを指摘しますが、「私たちのガイドラインは最後に1行の空白行があると言っています、そしてあなたは20を持っています。それはショーストッパーではありませんが修正したいかもしれません。」.

ここで考慮すべきことは次のとおりです。彼らがあなたのコードのそのような浅いレビューをするのはあなたの悲しみかもしれません。 theirsのうんざりがあなた(または同様のレビューを受けた他のチームメイト)があなた自身についてずさんなことである可能性が非常に高いです組織のコーディング標準であり、これは彼らがあなたとそれを通信するために選択した方法です。

レビュー後の対応

そして最後に、レビュー後のちょっとしたアドバイス:レビュー後にコードをコミットするとき、1つのコミットですべての表面的な事柄を扱い、別のコミットで機能を変更することを検討する必要があるかもしれません。 2つを混在させると、重要な変更と重要でない変更を区別することが難しくなります。表面的な変更をすべて行ってから、「化粧品;機能上の変更はありません」のようなメッセージでコミットします。

23
Bryan Oakley

コードの書式設定やタイプミスについては、簡単に見分けられ、多くの労力を必要としないため、人々がコメントしています。

この部分は簡単に修正できます。ほとんどすべての言語にリンターまたはスタイルチェッカーツールがあります。ビルドプロセスにプラグインし、冗長なスペースがあるとビルドが失敗するようにします。その結果、コメントするスタイルの問題はありません。

彼らに実際の問題を見つけさせることは、かなり難しいかもしれません。これには、特別な探究心と詳細志向の考え方が必要なだけでなく、大きな動機も必要です。

そして、この動機は経験からきています。以前の開発者によって書かれたくだらないコードを操作しようとした経験。上級エンジニアはそれをたくさん持っています。たわごとの海で泳ぐと、二度とそこに行きたくないという強い願望があなたに与えられます。

コードレビュー中にチェックする主要なことを1つ選択する必要がある場合、それはコードの保守性です。常に、このコードをレビューする開発者はそれを理解し、コードを拡張および変更する準備ができている必要があります。ここで何が起こっているのか手掛かりがない場合は、すぐにそれを伝える必要があり、コードを書き直す必要があります。

8
alex

ここに実用的な答えがあります:

シナリオ1あなたは上級メンバーであり、練習を決定できる人です

会議を呼び出して、コードレビューのルールとガイドラインを説明します。私を信じて、明確なガイドラインは「名誉」システムやトレーニングよりもうまく機能します。コードのフォーマットの問題がまったく発生してはならないことを明確にしてください。一部のメンバーは反対します。それらに耳を傾け、最初の数か月間はガイドラインに沿って実験するように依頼してください。現在のガイドラインが機能しない場合は、変更する意思を示します。

シナリオ2あなたは練習を決める人ではないか、チームの比較的ジュニアメンバーです

シナリオ1に到達するまで、コードレビューの問題を解決するのが最善の策です。

5

「些細な」コードレビューコメントを防ぐための簡単な答えは、レビュー担当者がそれらを修正するのに必要であることを(効率のために)主張することです。したがって、レビュアーが、あなた(ホラー!)が全ストップを逃した、またはコメントのスペルを間違えたとわかった場合、それを修正して次に進む必要があります。

私の経験では、これは次のことを意味します。

  • レビュー担当者は、これらの比較的無意味なレビューコメントを作成し、修正するためにそれらを渡すのをやめます。
  • ほとんどのOCDレビュー担当者のみが修正します。つまり、ほとんどのレビューは合格します。これには、開発者がより実質的なレビューを実行するように要求するというノックオン効果があります。実際にコードをレビューしていないために雑学を報告するレビューは、すべてのレビューがコメントなしで合格する理由を正当化する必要があります。

いずれにせよ、これは利点です。レビューが失敗した場合のコストは、開発者が作業している作業をやめてコードを再検討させ、その後のフォローアップレビューを行うという点で高くなります。レビューで実際のコード品質またはアーキテクチャの問題が見つかった場合、このコストはすべてのペニーの価値がありますが、雑学のためにこのコストを支払うことは価値がありません。

3
gbjbaanb

レビュープロセスを確認する

コードレビューに加えて、定期的にレビュープロセスもレビューすることをお勧めします。ここでも人々が学べることは確かにたくさんあります。適切なコードレビューを与える方法。

通常、バイクシェダーの一部は経験が浅いだけで、何を探すべきかわからないだけです。彼らは、コードに関するだけでなく、役立つコードレビューを行うことに対しても、多少のガイダンスを必要としています。レビューについてのフィードバックを提供することは、(希望に満ちた)より良いレビューとより良いコードをもたらす学習プロセスにつながります。

次に、一連の値と基準、組織またはチームがGood Code™として認識しているもの、回避すべきアンチパターンを(大まかに)形式化することをお勧めします。 sthを設定することではありません。具体的には、最初からのコード品質についての共通の合意を得ることについて。

0
JensG

これの両側にいる人(他の人が書いたコードをレビューし、私が書いたコードをレビューした人)として、私は3つのカテゴリにフィードバックがあると思います。さて、4つ、「すべてが順調」の楽しいケースもあります。

「うまくいきますが、あなたをブロックすることはありません」(すべてのフィードバックがこのカテゴリに該当する場合は、「XX:XXでマージします。修正する必要があると私に伝えない限り、」というマージリクエストを送信できます。 、または「確かに、チェックインしてください。システムがスローするブロックはすべて無効になっています」):

  • (ドキュメント文字列またはコメント内の)文の終わりで完全な停止を忘れます。形や形(ここでも、ドキュメント文字列とコメント)でユーザーに出力されないものの不器用な文法
  • より洗練された方法を持つコードですが、理解可能で慣用的なものがあります(私はおそらく提案を入れますので、そのままにすることも修正することも簡単です)

「修正が必要なものですが、それを信頼します」(すべてがこのカテゴリまたは前のカテゴリに該当する場合は、「これらを修正してください。あなたが教えてくれればマージします」 re done "(そして、その時点でおそらくすぐにスキャンして、他に何もポップアップされていないことを確認します)):

  • マイナーな問題(「ブール値をtrueと比較しています。少し偏執狂です...」、...)
  • マイナーなスタイル違反(「スタイルガイドにはXと書かれていますが、あなたがやったことはその外側にあります。私はあなたが望む方法に応じてYまたはZを行います」)
  • いくつかの欠けているテストケース、書くのは難しくないはずです

そして最後に、「問題のあるもの、これらの問題を修正したら、もう一度コードを確認する必要があります」(このカテゴリに問題がある場合は、もう一度確認する必要があるため、「いくつかのマイナーなこともあります。最初の2つのカテゴリから何かが存在する場合は、それらの一部が修正されていることを確認できたら嬉しいでしょう)。

  • これは、「いいえ、それよりもはるかに優れた記述方法があります」、「ユニットテストでこれらのEdgeケースが見落とされているため、期待どおりの計算を行っていない」などの重大な問題です。
0
Vatine

一部の人々は最も重要な質問を忘れているようです:コードレビューで実際に達成したいことは何ですか?

コードレビューの目的は、バグのない保守可能なコードをより迅速に取得することです。コードレビューは、いくつかの方法でこれを実現します。開発者は、レビューされることを知っているため、最初により優れたコードを記述し、レビュープロセスの一部として知識が共有されます。することができます。

レビュープロセスを同僚を落ち着かせたり、彼らのために仕事を作成したりする機会と見なす場合、それは間違っています。

0
gnasher729