法則一覧

第87条保守性

ビヨンセ・ルール

共有コードベースでは、どのテストも確かめていない挙動こそが予告なく変わる。

Google

心得

頼っている挙動には、テストを置く

どうするか

共有ライブラリや依存先に頼っている挙動には、すべてテストを書く。そのテストが、他人の変更を止める CI の中で走るようにする。テストで捕まえられずに何かが壊れたら、障害を閉じる前にそのテストを足す。共有コードを持つ側なら、テストが契約だと前もって宣言する。ただし、自分の変更で利用者側のテストを実際に走らせていないなら、このルールを持ち出さない。

なぜ起きるか

コードベース全体が使う基盤を変えるチームは、呼び出し側をすべて読むことはできない。この規模で確かめられる契約は、テストスイートしかない。スイートが確かめていない挙動は変更する側から見えず、予告なく変わる。不注意のせいではなく、それが大事だと知らせるものが何もないからだ。このルールは、その死角を責任の分担に置き換える。無関係な変更が自分たちのテストを全部通ったのに製品に問題が出たなら、修正も、足りなかったテストも自分たちの仕事になる。このルールが公平なのは、誰の変更に対しても全員のテストを走らせる CI が行き渡っている場合に限られる。

当てはまらなくなるとき

チャーンルール:テストの形をした契約は、変更する側に何を壊したかを教えるだけで、壊してよかったことにはならない。変更するチームは、利用者の移行作業をそれでも負う。

出典

Adam Bender「Testing Overview」、Winters, Manshreck & Wright『Software Engineering at Google』(O'Reilly, 2020) 第 11 章。"If you liked it, then you shoulda put a test on it" と、コードベース全体に変更をかける基盤チームがこのルールを使うことの出典。

原典を読む

ロゴ:Public domain · Wikimedia Commons

引用するとき

Hammurabi『第87条 ビヨンセ・ルール』 https://kanywst.github.io/hammurabi/ja/laws/beyonce-rule/

BibTeX
@misc{hammurabi-beyonce-rule,
  title  = {ビヨンセ・ルール},
  author = {{Hammurabi contributors}},
  note   = {Hammurabi, § 87},
  url    = {https://kanywst.github.io/hammurabi/ja/laws/beyonce-rule/}
}

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

XBlueskyはてブLinkedIn

コラムで読む

関連する法則

GitHub で誤りを指摘する