コードレビュー


注:このコンテンツはもともと私のブログ、Beyond The Loopに掲載されました.
閉じるこの動画はお気に入りから削除されています.

This is a very long post, but it's worth reading! If you're in a hurry, I'll leave the condensed version of the list at the end.


コードレビューは、技術者のための基本的なスキルです.
変化のセットを読んで、有用な洞察力と建設的なフィードバックを引き出すことができることは、同僚として非常に貴重になります.さらに、それはより良いコードになります!
しかし、それは最初に非常に威圧的でありえます.それはあなたの最初のプルの要求を参照してくださいにも、どこから始めればわからない正常です.
私が最初に始めたとき、私はこの問題を抱えていました.
私はシニアの同僚に彼らの思考プロセスについて尋ねました.どのように、彼らはコードレビューに接近しますか?何を探すのですか.彼らはどんな質問をしますか.
すべてのそれらの答えを考慮して、私自身のチェックリストを編集しました.私はレビュー中に自分の考えをガイドするために使用できる質問のシリーズ.
定義された、繰り返し可能なプロセスを持つことで、私は小さなチャンクにレビューのプロセスを打破することができます.
このリストは長年にわたって私にとって非常に貴重でした.私は、それがあなたにも貴重であることを望みます.

ステップ1:説明を読む


Reviewing code is the act of finding out how well it solves a problem.


任意のコードにすべてのジャンプする前に、いくつかの質問に回答をする必要があります.コードを読む前にこれをすることは重要です、コードスタイルとマイクロ最適化のnitty grittyで迷子になるのが本当に簡単であるので、これらの変化が大きい絵に影響を及ぼす方法を考えるのを忘れてしまうので.
実際、コードレビューの価値のほとんどは、コードを読むことからでなく、これらの質問に答えることから来ます!
どのような問題が解決しようとしている変更ですか?
これは重要な質問です.すべてのPRは1つだけ問題を解決すべきです.
問題は「我々はこの機能を必要とします、そして、それは行方不明です」、あるいは、「バグがあります、そして、我々はそれを修正する必要があります」.
PRを検討することは、それがどれくらいよく問題を解決するかについて調べることです.したがって、問題の深い理解は重要な第一歩です.
あなたが問題を理解し、どのように、それがどのようにユーザーに影響を与えるかを確認してください.
私は多くの単語“問題”を使用しているが、それはそれが重要だからです!
どうやってこの問題を解決しますか.
著者が問題を解決する方法を学ぶ前に、あなたがそれを解決する方法について考えるために、ちょっと時間をとってください.
それは完全な解決策である必要はありません、ちょうどそれがどのように見えるかの一般的な考え.あなたはどのように迅速にあなたのための一般的な構造を思い付くことが驚くことでしょう!
これは2つの理由で役に立ちます.
  • それはあなたが本当に問題を理解しているかどうかを教えてくれます.あなたが解決の考えを考え出すことができないならば、あなたは若干の前後関係を逃していて、変化にかかわるコードベースの部分についてより多くを見つけるべきです.
  • 問題に新鮮なセットのアイデアを持つ
  • は完全に異なる、より良い解決につながることができます!この場合は、それは素晴らしいです!著者と話をし、新しい解決策を議論する.
  • 解決策がどのように見えるかについてのあなたの考えがあるとき、次の質問は以下の通りです:
    作者はこの変化にどのような解決をしましたか.
    これはタイトルと説明から明らかです.覚えておいて、まだコードを見ていません.あなたが解決(そして、同意する)とすべてのその部分を確認してください.
    この質問をすることはしばしば私たちを理解させます.
  • 我々は解決策のいくつかの部分を理解していない:これが発生した場合、あなたは正確にあなたが理解していないものを理解する必要があり、あなたがするまで、既存のコードとドキュメントを読んでください!
  • 私たちは解決策に同意しません:これがケースであるならば、レビューを止めて、著者とこれについて議論することに集中してください.あなたの懸念を提示、いくつかの選択肢を追加し、あなたと著者の両方を満たした解決策を見つける!
  • あなたは解決の効果に同意しますか?
    大部分のエンジニアリング問題では、トレードオフがあります.より複雑なソリューションが速く実行される可能性がありますが、行を維持するのは難しい.それはより遅い解決より多くの記憶を必要とするかもしれません.一方、より簡単な解決策は遅くなるかもしれませんが、維持するのはずっと簡単かもしれません.
    コードにジャンプする前に、我々はトレードオフが何であるかを理解していることを確認する必要があります.

    あなたが作った!


    あなたがこれまでそれを作ったならば、それはあなたが現在問題の深い理解を持っているということを意味して、解決が正しいものであることに同意します.
    すごい!
    この思考プロセスだけで信じられないほど衝撃的になるので、最初に大きな問題を識別され、minutiaで迷子になることはありません.
    さて、この深い理解で、我々はコードに飛び込む準備ができています.
    深呼吸をし、nitty grittyを取得しましょう!

    ステップ2:コードを読む…。数回


    ... we're going to go through the changes multiple times, answering a different question each time.


    コードにジャンプしましょう!
    現在どこから始めますか.
    それだけでレビューページにジャンプし、読書を開始する非常に威圧を感じることができます.それは圧倒的だ!どこにあなたも見ますか?
    ここでの主な問題は、我々はすぐにすべてを考えようとしているということです.私はあなたのことを知らないが、それはできない.
    コードを見直しているときには、探すべきことがたくさんあります.
  • コードは実際に記述で説明された解決を実装しますか?
  • は、どんなパフォーマンス懸念ですか?
  • コードはよくテストされていますか?
  • コードはフォーマットとスタイルの標準に準拠していますか?
  • それは考えることがたくさんある!だから、これらのすべての回答を最初に我々は最初の時間を変更しようとするのではなく、我々は変更を複数回を通過するつもりだ、毎回別の質問に答える.
    これは、我々がちょうど1つの質問について考えているものの範囲を減らします.
    例えば、次の質問にどのように答えるか見てみましょう
    さて、明確なパスがある:我々はテストを開始する必要があります知っているし、カバーする必要がありますすべてのケースをカバーするかどうかを参照してください.それは確かに威圧的ではない!
    トリックは、各質問に同じことを行うことです:
  • は1つの質問を選ぶ.
  • コードの変更を行ってその質問を検証します.
  • コメントを残す.
  • は1に進みます.
  • パフォーマンスをチェックしたいですか?我々が関与する部分を理解するならば、我々はどれが遅いかについて敏感であるという良い考えがなければなりません.我々はそれらの最初に焦点を当てる必要があります.
    書式設定と命名をチェックしたいですか?私たちは、コードが何をするかを忘れることができます.
    コードを尋ねるために質問の独自のリストを構築する必要がありますが、ここでは私のです:
  • コードは記述された解決を実装しますか?
  • それは意識的なパフォーマンストレードオフを持っていますか?
  • それは無意識のパフォーマンスの非効率性を持っていますか?
  • それはネーミングとスタイルガイドラインに適合しますか?
  • それはよくテストされていますか?
  • は、理解しにくい部分がありますか?彼らはそこにいなければなりませんか.もしそうならば、彼らは適切に孤立して、文書化されますか?
  • トップからもう1回


    私は凝縮チェックリストを約束したので、ここにある!私はこれを印刷することができる自由なインフォグラフィックに作ることを計画しています.
    **Before Reading Code**
    These should be checked by reading the description and existing code, not the changes themselves!
    - [ ] I understand the problem this change is trying to solve.
      - [ ] I understand and agree with why we need this feature or bug solved.
      - [ ] I understand all the pieces involved in causing the problem.
    - [ ] I have a general idea of how I'd solve the problem.
    - [ ] I agree with the solution proposed.
      - [ ] I agree with the performance tradeoffs presented in the solution (if the change is perf-sensitive).
      - [ ] If not, I have talked with the author until we've reached consensus.
    
    **When Reading the Code**
    We should make one pass for each of these questions.
    - [ ] The code implements what's actually described as the solution.
    - [ ] The code doesn't have unintentional inefficiencies.
    - [ ] The code conforms to naming and code style guidelines.
    - [ ] There are no unnecessary hard-to-understand parts.
      - [ ] The ones that are there are properly isolated and document.
    - [ ] The code is well-tested.
    
    これらのすべてのものを見るレビューは、より良いコードを生成する際に非常に貴重になります!

    終わり


    それだ!
    コードレビューチェックリスト:完了!
    確かに、これは非常に時間がかかるプロセスです.しかし、念頭に置いてあなたの最初の5つのレビューが正しく確認する学習についてされます.コードレビューはスキル、人々は学ぶためにいくつかの時間がかかると予想されます!
    そして良いニュースは、一度それのハングアップを取得すると、それははるかに速く取得します.
    それらのレビューの後、あなたは無意識に質問をし始めます、そして、あなたは始まるところの直観を開発します.
    レビューの数十回の後、私はめったにチェックリストで一歩一歩行くが、私はそれらのトリッキーなレビューのためにそれを持ってうれしいです!
    あなたのチェックリストは何ですか?私は、さえずり、またはemailを通してどちらかを知っていたいです.
    注:このコンテンツはもともと私のブログ、Beyond The Loopに掲載されました.
    閉じるこの動画はお気に入りから削除されています.