法則一覧

第103条保守性

小さな変更

レビューに出す変更が大きいほど、一行ずつは丁寧に読まれなくなる。欠陥はすり抜け、最初に見てもらうまでの待ちも長くなる。

Google

心得

一度に読み切れる大きさで変更を出す

どうするか

変更は一つで完結するものにする。100行くらいならたいてい妥当で、1000行はたいてい大きすぎる。ただし最後はレビュアーが決める。リファクタリングは振る舞いの変更と別に出し、依存し合う変更は一つにまとめず、順番に積んで出す。名前の変更や生成コードのような機械的な変更を、行数を合わせるためだけに割ることはしない。レビュアーが全体として何をするのか見えなくなるほど、設計を細かく切り分けることもしない。

なぜ起きるか

レビュアーの注意には限りがある。SmartBear が Cisco で 2,500件のレビューを調べた研究では、200行未満のレビューは比較的高い率で欠陥を見つけ、それを超えると結果は大きく落ちた。著者たちは、それより大きいとレビュアーは手に負えなくなり、欠陥は見つからないと結論している。Google のガイドは時間の取り方の面を挙げる。大きな変更一つのために30分のまとまった時間を空けるより、小さな変更のために5分を何度か見つけるほうがレビュアーには楽だ。Google では変更の行数の中央値は24行で、最初のフィードバックまでの待ち時間の中央値は、小さな変更で1時間未満、とても大きな変更で約5時間だった。

当てはまらなくなるとき

変更ごとの固定費:変更には大きさに関係なくかかる固定費がある(レビューの往復、CI の実行、レビュアーの頭の切り替え)。細かく割るほどその費用と待ちが増える。レビューが遅い場では、依存し合う小さな変更を順に通すほうが、まとまった一つの変更より取り込みまでずっと時間がかかることがある。

出典

Google「Small CLs」『Google Engineering Practices Documentation』。"100 lines is usually a reasonable size for a CL, and 1000 lines is usually too large, but it’s up to the judgment of your reviewer." SmartBear Software「Code Review at Cisco Systems」、『Best Kept Secrets of Peer Code Review』(Smart Bear, 2006) 所収。2,500件のレビューを扱ったベンダー自身の事例研究で、"LOC under review should be under 200, not to exceed 400." と勧めている。変更の大きさとレビュー待ちの数字は Caitlin Sadowski, Emma Söderberg, Luke Church, Michal Sipko & Alberto Bacchelli『Modern Code Review: A Case Study at Google』(ICSE-SEIP, 2018) による。変更ごとの固定費というカウンターは DORA「Working in small batches」(dora.dev) による。"One reason work is done in large batches is because of the large fixed cost of handing off changes."

原典を読む

引用するとき

Hammurabi『第103条 小さな変更』 https://kanywst.github.io/hammurabi/ja/laws/small-changes/

BibTeX
@misc{hammurabi-small-changes,
  title  = {小さな変更},
  author = {{Hammurabi contributors}},
  note   = {Hammurabi, § 103},
  url    = {https://kanywst.github.io/hammurabi/ja/laws/small-changes/}
}

本文は CC BY-SA 4.0 です。Hammurabi の名前と記事へのリンクを添えてください。

XBlueskyはてブLinkedIn

コラムで読む

関連する法則

GitHub で誤りを指摘する