My favourite type of horn, a Viking drinking horn from Horns of Odin.
Inspired by Seb Rose's tweet about 'Eviscerating the Testing Pyramid', which, although containing some reasonable thoughts, I cannot take seriously due to his bizarre choice of language.
"Hey, Rogue boy! You call that an Eviscerate?"
"But Kungen, I crit for over 10,000!"
Nubcake news, from the late TotalBiscuit
To set your mind at rest, no pyramids (or goats q.v. OED) will be disembowelled during the course of this discussion.
So, this article rests on the premise that despite being named by its inventor, Mike Cohn, as the 'testing pyramid', he drew it as a triangle, and afterwards everyone who writes on the topic does so also. Curiously enough if you Google test pyramid you get hundreds of images of triangles.
Don't get me wrong, I'm not criticising, drawing tools are for the most part rubbish and most of us aren't artistically gifted, so if it's easier to draw a triangle in Google Docs then that's what we do. Simplest possible thing that might work, right?
The downside is that when we have a diagram like Mike's original above, it makes it seem that perhaps we have one UI test to two service tests to three unit tests, or thereabouts. Before I go on I'd like to call them 'end-to-end' (E2E) tests, rather than UI tests, as we may not have a user interface in our system.
In other words the base of the triangle at any given height is proportional to the distance from the apex. This visual metaphor allows us to build a mental model that says that providing there are less E2E tests than service tests, and less service tests than unit tests, then we're matching the model. We'll call this two-dimensional model the linear model, because this is how the number of tests scales, where x is the number of tests at one level, and y is the number of tests at a level above and h represents the depth from the apex.
Linear model: x = hy
So if the height h goes from 1 to 2 to 3 we get 1 E2E test to 2 service tests to 3 unit tests.
Nothing could be further from the truth. With the three-dimensional 'pyramid' model we get a different relationship between the area at any given height and the distance to the apex. We'll call this the polynomial model:
polynomial model: x = h^2y
So if the height h goes from 1 to 2 to 3 we get 1 E2E test to 4 service tests to 9 unit tests.
This is somewhat closer, but doesn't really quite get to the crux of the matter. The actual model that more closely resembles what we need should have the bare minimum of E2E tests, quite a number of service tests and the vast majority should be unit tests.
Exponential model: x = 10^hy
So if the height h goes from 1 to 2 to 3 then we have 1 E2E test to 100 service tests to 10,000 unit tests.
There is a physical object which has these properties, it is called an exponential horn. The exponential horn has the property that the surface area at any depth of the horn is proportional to the exponent of the height from the apex. It also has some interesting acoustic properties (see above link), but I'll leave those for another day.
So, now you know. It is less the 'testing triangle' or 'testing pyramid' but rather the 'exponential horn of testing'. I wonder if the name will catch on?