I have a really hard time getting behind the names of many of the open source test tools that are out there. Here I want to talk about that just a little bit and what I’ve been doing to combat that. I do realize that I am probably in the vast minority of people who are concerned about this issue.
Speaking here in an obviously heavily opinionated way, if you look at many of the open source test solutions out there, people either opt for tool names that are attempting to be descriptive of how they work (page-object) or clever in terms of “branding” (site_prism) or an attempt to just be cryptically ‘clever’ (Kookaburra). The latter apparently being a conflation of Cucumber and Capybara. Or something.
You have others that name themselves within the odd ecosystem that is the Ruby world of gems (Cucumber, Capybara, Steak, Turnip, etc). I’m sure everyone feels they are being terribly clever and witty but once you get past that, those names leave a bad taste for me. I believe that Cucumber is a very important tool in that it promoted some exciting things in the industry. However, it’s also one of the most stupidly named tools I’ve come across. To me that disparity between its function and its name is all the more apparent because I do think it’s a good tool.
Contrast that name with, say, SpecFlow in the .NET world, which I do think is a much better name, or JBehave in the Java world, even though I get a little tired of Java developers feeling they have to preface each of their tools with a “J”.
Rather than complain, lead by example …
So what have I been doing to combat this issue? Well, perhaps not much originally. I had worked on a tool I called Symbiont. I “cleverly” described it as “an endosymbiotic facultative library for web application testing.” I even took time to explain what the heck that even meant on the GitHub page for it.
That should have been my first clue.
Now, I will say that there was at least some thought here: Symbiont sort of “attaches to” whatever test library you wanted it to and then attached itself to certain page or activity definitions. But still. Symbiont? Really?
But Symbiont was the “toy”, if you will. Symbiont was the thing that allowed me to realize I had a good solution. And it was time to professionalize it once I had settled around what I actually wanted the tool to provide.
I had, at one point, changed that to a tool called Fluent. I named it that because that was indicative of what it provided, without getting into how. Fluent was predicated upon the notion of a fluent interface, which I believe all good test solutions should be providing. (I was actually pleasantly surprised that no one had taken that specific name for a gem.)
Now, you might argue: but now anyone who learned Symbiont has to learn Fluent. Yes — but they both share the same interface. Good design means you program to an interface and make that the contract. The public API of Symbiont and Fluent are largely identical, with Fluent simply refining it all. Ironically I ended up going with Symbiont as my tool of choice.
I also have a tool called Lucid, which is pretty much a clone of Cucumber in many ways, except without the name, with a few extra features, and without the Cucumber developer bias that it’s not a testing tool. Lucid is a testing tool, just as Cucumber is, even if the primary maintainers don’t want to admit it and even though their own “Cucumber Book” repeatedly states it.
Lucid promotes what it does, not how it does it. It promotes the concept of lucid testing: making things clear and understandable by providing a single source of truth for requirements-as-test that allows you built-in traceability and a communication mechanism predicated upon a shared notion of quality. All of that is important because the very name leads you into the discussion that testing is a design activity as well as an execution activity. Testing, as a design activity, is all about collaboration. Collaboration is what lucid testing focuses upon. You are testing people’s understanding of a shared notion of quality as it gets encoded as actionable statements that you can call acceptance tests. Calling Lucid a testing tool is actually NOT a bad thing, as long as people have a broad view of testing and realize that testing is a multi-faceted activity.
Having that same discussion around a tool called Cucumber just falls flat, at least in my experience.
A wee bit picky, are we?
Okay, now let’s back up for a second. I’m focusing a lot on names here. And surely what matters is what the tool does, not what it is called, right? After all, these are just names. That’s true. They are. And what they are named does not make the tools more or less efficacious.
But I find the way people treat tools, at least when you get into professional environments, does matter. Expectations are set. A level of professionalism does come into play. I have had much more luck getting companies and teams to rally around a tool called Lucid (by which I promote Lucid Testing) and the use of fluent interfaces (with a tool called Fluent) then if I go in and tell them I want to base my strategy around Cucumber and Capybara.
I can just hear the decision makers. “Huh? So … he wants to … what? Feed fruit to a rodent?” (In case the reference is lost, a capybara is a rodent that is basically a water hog. And, yes, Cucumbers are scientifically classified as a fruit and not a vegetable.)
Anyway, this is all why my Cucumber clone is called Lucid. Because that’s what it does – it makes requirements and testing lucid. Use of this solution is one means by which our testing becomes “lucid” — by which is meant compressible, expressive, intent-revealing, business-focused, design-guiding, quality-oriented. When people talk about my tool, they are forced to use a term that guides their thinking. I can remind them that the point of Lucid (the tool) is being lucid (an approach).
And that’s why Fluent is called as it is. What it does is provide a fluent interface to allow for the test logic behind the scenes to also be compressible, expressive and intent-revealing.
Will Lucid and Fluent ever go anywhere? Will they replace Cucumber or whatever else? Probably not, but that’s not the intent. Competing tools like Lettuce, Freshen, Lime, Spinach, and Rutabaga all provide alternatives to Cucumber in various ways and none of them have displaced it, nor was that likely their intent.
By the way: notice how many of these tool makers feel they have to somehow stay within that naming nomenclature? Cucumber has managed to spawn a whole host of tools that, if nothing else, can make me think about food. They don’t make me think any more deeply about testing or the kinds of things I want a testing tool solution to provide.
Perhaps I’m over-sensitive to this kind of thing, but I find this state of affairs somewhat sad.