テストを上の層に寄せた構成は、検出率46.0%でした。単体だけの50.0%を下回ります。
実行時間は8.0秒から1260.8秒へ。約158倍かけて、見つかる欠陥は減っています。
上の層は1件あたりが重いので、本数を確保できません。件数が確保できないと、届く範囲も狭くなります。
ユニットテストをどれだけ置き、どの層に厚みを寄せるかで、検出率と実行時間の両方が変わります。実際に計算しました。
欠陥を300件用意しました。内訳は関数の中で完結する誤りが176件・繋ぎ目が85件・通しでしか出ないものが39件です。
1件あたりの実行時間は、単体0.02秒・結合1.5秒・E2E20秒として置きました。件数が増えるほど、その層の欠陥を捕まえやすくなる形にしています。
欠陥 300件。内訳は関数の中 176件・繋ぎ目 85件・通しでしか出ない 39件 構成 見つけた欠陥 検出率 一式の実行時間 1件あたりの時間 単体だけ 400件 150件 50.0% 8.0秒 0.02秒 ピラミッド 400/60/8 228件 76.0% 258.0秒 0.55秒 逆ピラミッド 40/40/60 138件 46.0% 1260.8秒 9.01秒 E2Eだけ 80件 34件 11.3% 1600.0秒 20.00秒
上の層に寄せた逆ピラミッドは、検出率46.0%でした。単体だけの50.0%を下回っています。
実行時間は1260.8秒で、単体だけの8.0秒の約158倍です。時間をかけて、見つかる欠陥が減っています。
理由は単純です。1件20秒かかると、60件で1200秒になります。それ以上は増やせません。
その60件では、欠陥の6割を占める関数の中の誤り176件に手が回りません。単体テストは40件しかありません。
出典もこの性質を要するに、画面を通して端から端まで走らせるテストは、壊れやすく、書くのに費用がかかり、走らせるのに時間がかかると述べています。
時間をかけたほうが見つかる、とは限らない。
In short, tests that run end-to-end through the UI are: brittle, expensive to write, and time consuming to run.原文Martin Fowler「TestPyramid」 この内容の有効期限2027-02-18
単体テストは関数の中しか見ません。繋ぎ目と通しは、上の層でなければ出てきません。
ユニットテストが届く範囲は、1つの関数の中です。この計測では欠陥の6割がここにありました。
1番目は単体テストで見つかります。2番目と3番目は、単体テストをいくら増やしても出てきません。
だから単体だけの構成は50.0%で頭打ちになります。残り半分は、構造として届かない範囲です。
件数の比は、この計測のピラミッド型で400対60対8です。下ほど多く置きます。
出典も要点をその本質は、画面を通して走る高水準の広域テストより、低水準の単体テストをはるかに多く持つべきだということであるとしています。
この比が成り立つのは、下ほど1件が安いからです。400件の単体テストが8.0秒で終わります。
同じ8.0秒では、E2Eは0.4件しか回せません。本数の比は、そのまま時間の比の裏返しです。
Its essential point is that you should have many more low-level UnitTests than high level BroadStackTests running through a GUI.原文Martin Fowler「TestPyramid」 この内容の有効期限2027-02-18
上の層を捨てる話ではありません。数で稼ぐ層と、通しを確かめる層は役割が違います。
ユニットテストを軸にしつつ上の層も置いたピラミッド型が、この計測では76.0%で最も高くなりました。単体だけでも、E2Eだけでもありません。
E2Eを8件足すだけで、単体だけの50.0%から26ポイント上がります。少数でも、そこにしかない欠陥に届くためです。
出典もこの位置づけを高水準のテストは、テストの二段目の防御としてそこにあるのだと、私はいつも主張していると述べています。
細かい条件の網羅は、上の層でやりません。1件20秒を条件の数だけ並べると、時間が持たないからです。
この計測の欠陥の内訳は置いた値です。自社の内訳は、直近の不具合を数えれば出ます。
繋ぎ目の不具合が多いなら、結合の層を厚くします。内訳と本数の比が合っているかを見ます。
上の層は不安定にもなりやすい層です。E2Eテストの記事では、たまに落ちるテストが判定をどう狂わせるかを測っています。
上の層は少数でよい。ただし0にすると届かない範囲が残る。
欠陥の内訳も、1件あたりの時間も置いた値です。捕まえる確率は、件数が増えるほど上限に近づく形にしています(単体120件・結合25件・E2E12件で約63%)。実際の比率は作っているものによって変わります。ここで見せているのは、上の層は1件が重いために本数を確保できず、その結果として検出率まで下がるという関係です。
I always argue that high-level tests are there as a second line of test defense.原文Martin Fowler「TestPyramid」 この内容の有効期限2027-02-18
同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。
出品の仕組みを見る