Why code reviews matter (and actually save time!)

結論:アーキテクチャーに関する決定は適切であるべきで、「クリティカル パス」な開発者になりたくない、
と考えているならば、きっとコードレビューを気に入るはず!

Dan Radigan Dan Radigan

アジャイルチームは、全体的にスキルのある自律編成型のチームです。ある程度のコードレビューも行います。コードレビューをすることで、開発者はコードベース、新しいテクノロジー、新しいテクニックを学べるため、スキルを伸ばすことに繋がります。

では、コードレビューとは一体何?

ひとりの開発者が課題での作業を終えると、他の開発者はコードに目を通し、以下のような疑問を考察できます:

  • コードに明らかなロジックエラーがないか?
  • 要件の観点から、すべてのケースが完全に実装されているか?
  • 新しい自動化テストは新しいコードに対し十分か?既存の自動化テストをコードの変更に合わせて書き直す必要はないか?
  • 新しいコードは既存のスタイルガイドラインに則っているか?

コードレビューをチームの現在のプロセスと統合する必要があります。例えば、チームでタスクブランチング ワークフローを使用している場合、すべてのコードを書き終わり、自動化テストを実行した後にコードレビューを開始します。ただし、コードをアップストリームにマージする前に行います。これにより、レビュアーはマシンでは見つからなかったミスの確認に時間を割くことができ、貧弱なコードで開発のメインラインを汚染することも回避できます。 

アジャイルチームにとっての利点

Every team can benefit from code reviews regardless of development methodology. Agile teams, however, can realize huge benefits because work is decentralized across the team. No one is the only person who knows a specific part of the code base. Simply put, code reviews help facilitate knowledge sharing across the code base and across the team.

コードレビューでナレッジを共有

At the heart of all agile teams is unbeatable flexibility: an ability to take work off the backlog and begin execution by all team members. As a result, teams are better able to swarm around new work because no one is the "critical path." Full stack engineers can tackle front-end work as well as server-side work.

コードレビューがより的確な見積もりを可能にする

Remember the section on estimation? Estimation is a team exercise, and the team makes better estimates as product knowledge is spread across the team. As new features are added to the existing code, the original developer can provide good feedback and estimation. In addition, any code reviewer is also exposed to the complexity, known issues, and concerns of that area of the code base. The code reviewer, then, shares in the knowledge of the original developer of that part of the code base. This practice creates multiple, informed inputs which, when used for a final estimate always makes that estimate stronger and reliable.

コードレビューで休暇を取れる

Nobody likes to be the sole point of contact on a piece of code. Likewise, nobody wants to dive into a critical piece of code they didn’t write–especially during a production emergency. Code reviews share knowledge across the team so that any team member can take up the reins and continue steering the ship. (We love mixed metaphors at Atlassian!) But here's the point: with no single developer the critical path, it also means team members can take time off as needed. If you find yourself tied to a desk on the version control system, code review is an excellent way to find freedom. Freedom to take that needed vacation, or freedom to spend some time working on a different area of the product.

コードレビューは新人エンジニアの良き
アドバイザー

アジャイルの特殊な一面は、新しいメンバーがチームに加わったとき、より熟練したエンジニアが新しいメンバーにアドバイスする点です。コードレビューはコードベースについて説明する際の良い教材になります。チームは往々にして、コードレビュー中に表示されるコードの隠れたナレッジを開示しないでいます。新鮮な目線の新しいメンバーは、新しい見解が必要な、危険で時間のかかる部分をコードベースから発見するものです。つまり、コードベースは新しい洞察と既存のナレッジをうまく調和する役割を果たします。

ProTip:

Keep in mind, code review is not just a senior team member reviewing a junior team member’s code. Code review should happen across the team in every direction. Knowledge knows no bounds! Yes, code review can help newer engineers, but by no means should it be used solely as a mentoring exercise. 

だが、コードレビューには時間がかかる!

もちろん、時間はかかります。ですが、時間を無駄にしているわけではありません。

3 つのオプションを紹介します。 

負担を共有

Atlassian では、多くのチームがコードベースへ投入する前にすべてのコードを 2 回レビューしています。オーバーヘッドだと思いますか?そんなことはありません。ひとりの作成者がレビュアーを選択するとき、チーム全体から幅広く人選します。どのエンジニアでも、2 人をインプットできます。プロセスが分散されるため、誰もボトルネックになることなく、チーム全体でコードレビューを順調に処理することができます。

マージ前にレビュー

アップストリームへのマージ前にコードレビューを必要とすることで、レビューされていないコードがマージされてしまうことを防ぎます。つまり、 午前 2 時になされたアーキテクチャーの疑わしい決定と、見習いが不正に使用したファクトリパターンを、継続的(かつ残念な)影響をアプリケーションに与える前に防ぐことができます。

仲間同士のプレッシャーをうまく利用する

チームメートからレビューされるとなると、開発者は確実にテストをパスする、優れた設計によるコードを作成しようとさらに努力するため、レビューもスムーズに進みます。このような心意気がコーディングプロセスをよりスムーズにし、最終的に速くなる傾向へとつながります。

開発サイクルのもっと早い段階でフィードバックが必要な場合は、コードレビューを待つべきではありません。早い時期の頻繁なフィードバックはより優れたコードの作成に役立つものなので、いつ何時でも他のメンバーを巻き込むことを躊躇してはいけません。作業をより確実に行えるだけでなく、チームメートのコードレビューもより良好になります。そうすれば、好循環が続くわけです!