This article is predicated on a chat I gave on Open Testing at just a few conferences: STARWEST 2021, TAU: The Homecoming, TSQA 2022, QA or the Highway 2022, and Conf42: SRE 2022.
I’m tremendous excited to introduce a considerably new concept to you and to our business: Open Testing: What if we open our exams like we open our supply? I’m not merely speaking about creating open supply check frameworks. I’m speaking about opening the exams themselves. What if it grew to become regular to share check instances and automatic procedures? What if it grew to become regular for corporations to publicly share their check outcomes? And what are the levels of openness in testing for which we must always attempt as an business?
I believe that we – whether or not we’re testers, builders, managers, or another position in software program – can drastically enhance the standard of our work if we undertake rules of openness into our testing practices. To assist me clarify, I’d prefer to share how I discovered about the principle advantages of open supply software program, after which we will cross these advantages over into testing work.
So, let’s go approach again in time to once I first encountered open supply software program.
My first encounter with open supply code
I first began programming once I was in highschool. At 13 years outdated, I used to be an incoming freshman at Parkville High School of their magnet college for math, science, and pc science in good outdated Baltimore, Maryland. (Fun reality: Parkville’s mascots had been the Knights, which is my final identify!) All college students within the magnet program wanted to have a TI-83 Plus graphing calculator. Now, thoughts you, this was again within the day earlier than sensible telephones existed. Flip telephones had been the cool pattern! The TI-83 Plus was cutting-edge handheld expertise at the moment. It was so superior that once I first acquired it, it took me 5 minutes to determine easy methods to flip it off!
I rapidly discovered that the TI-83 Plus was only a mini-computer in disguise. Did you recognize that this factor has a full programming language constructed into it? TI-BASIC! Within the primary two weeks of my freshman Intro to Computer Science class, our instructor taught us easy methods to program math formulation: Slope. Circle circumference and space. The quadratic components. You identify it, I programmed it, even when it wasn’t a homework project. It felt superior! It was extra enjoyable to me than taking part in video video games, and imagine me, I used to be an enormous Nintendo fan.
There had been two additional options of the TI-83 Plus that made it excellent for programming. First, it had a hyperlink cable for sharing packages. Two folks may join their calculators and replica packages from one to the opposite. Needless to say, with all my formulation, I grew to become fairly common round check time. Second, anybody may open any program file on the calculator and skim its code. The TI-BASIC supply code may not be hidden. By design, it was “open supply.”
This is how I discovered my very first lesson about open supply software program: Open supply helps me be taught. Whenever I’d copy packages from others, together with video games, I’d open this system and skim the code to see the way it labored. Sometimes, I’d make adjustments to enhance it. More importantly, although, many instances, I’d be taught one thing new that might assist me write higher packages. This is how I taught myself to code. All on this tiny display. All by means of ripping open different folks’s code and studying it. All as a result of the code was open to me.
From the second I wrote my first calculator program, I knew I wished to develop into a software program engineer. I had that spark.
My first open supply library
Let’s fast-forward to school. I entered the Computer Science program at Rochester Institute of Technology – Go Tigers! By my freshman yr in school, I had discovered Java, C++, somewhat Python, and, of all issues, COBOL. All the code in all my initiatives till that time had been written fully by me. Sometimes, I’d take a look at examples in books as a information, however I’d by no means use different folks’s code. In reality, if a professor caught you utilizing copied code, you then’d fail that project and danger being expelled from the varsity.
Then, in my first software program engineering course, we discovered easy methods to write unit exams utilizing a library referred to as JUnit. We downloaded JUnit from someplace on-line – this was earlier than Maven grew to become huge – and hooked it into our Java path. Then, we began writing check lessons with check case strategies, and someway, all of it ran magically in methods I couldn’t determine on the time.
I used to be astounded that I may use software program that I didn’t write myself in a undertaking. Permission from a professor was one factor, however the truth that somebody on the market on the earth was giving freely good code without cost simply blew my thoughts. I noticed the worth in unit exams, and I instantly noticed the worth in a easy, free check framework like JUnit.
That’s once I discovered my second lesson about open supply software program: Open supply helps me develop into a greater developer. I may have written my very own check framework, however that might have taken me a whole lot of time. JUnit was able to go and free to make use of. Plus, since a number of people had already spent years growing JUnit, it could have extra options and fewer bugs than something I may develop by myself for a school undertaking. Using a package deal like JUnit helped me write and run my unit exams while not having to develop into an skilled in check automation frameworks. I may construct cool issues while not having to construct each single part.
That revelation felt empowering. Within just a few years of taking that software program engineering course, websites for internet hosting open supply initiatives like GitHub grew to become large. Programming language package deal indexes like Maven, NuGet, PyPI, and NPM grew to become growth mainstays. The working joke inside Python grew to become that you may import something! This was approach higher than swapping calculator video games with hyperlink cables.
My first likelihood to provide again
When I graduated school, I used to be zealous for open supply software program. I believed in it. I used to be an ardent supporter. But, I used to be principally a client. As a Software Engineer in Test, I used many main check instruments and frameworks: JUnit, TestNG, Cucumber, NUnit, xUnit.internet, SpecFlow, pytest, Jasmine, Mocha, Selenium WebDriver, RestSharp, Rest Assured – the listing goes on and on. As a Python developer, I used many modules and frameworks within the Python ecosystem like Django, Flask, and requests.
Then, I acquired the prospect to provide again: I launched an open supply undertaking referred to as Boa Constrictor. Boa Constrictor is a .NET implementation of the Screenplay Pattern. It helps you make higher interactions for higher automation. Out of the field, it gives Web UI interactions utilizing Selenium WebDriver and Rest API interactions utilizing RestSharp, however you need to use it to implement any interactions you need.
My firm and I launched Boa Constrictor publicly in October 2020. You can try the boa-constrictor repository on GitHub. Originally, my workforce and I at Q2 developed all of the code. We launched it as an open supply undertaking hoping that it may assist others within the business. But then, one thing cool occurred: people within the business helped us! We began receiving pull requests for brand new options. In reality, we even began utilizing some new interactions developed by group members internally in our firm’s check automation undertaking. We additionally proudly participated in Hacktoberfest in 2020 and 2021.
That’s once I discovered my third lesson about open supply software program: Open supply helps me develop into a greater maintainer. Large initiatives want all the assistance they’ll get. Even a workforce of core maintainers can’t all the time deal with all of the work. However, when a undertaking is open supply, anybody who makes use of it will probably assist out. Each little contribution can add worth for the entire consumer base. Maintaining software program then turns into simpler, and the undertaking can develop into extra impactful.
Struggling with poor high quality
As a Software Engineer in Test, I discovered myself caught between two worlds. In one world, I used to be a developer at coronary heart who liked to jot down code to resolve issues. In the opposite world, I used to be a software program high quality skilled who examined software program and advocated for enhancements. These worlds got here collectively primarily by means of check automation and steady integration. Now that I’m a developer advocate, I nonetheless occupy this intersectionality with a better accountability for serving to others.
However, all through my total profession, I maintain hitting one main drawback: Software high quality has an issue with high quality. Let that sink in: software program high quality has an enormous drawback with high quality. I’ve labored on groups with titles starting from “Software Quality Assurance” to “Test Engineering & Architecture,” and even an “Automation Center of Excellence.” Despite the titular deal with high quality, each workforce has suffered from elements of poor high quality in workmanship.
Here are just a few poignant examples:
- Manual check case repositories are stuffed with exams with redundant steps.
- Test automation initiatives are riddled with duplicate code.
- Setup and cleanup steps are copy-pasted endlessly, whether or not wanted or not.
- Automation code makes use of poor practices, comparable to world variables as an alternative of dependency injection.
- A 90% success fee is handled as a “good” day with “restricted” flakiness.
- Many exams cowl foolish, pointless, or unimportant issues as an alternative of precious, significant behaviors.
How can we name ourselves high quality professionals when our personal work suffers from poor high quality? Why are these sorts of issues so pervasive? I believe they construct up over time. Copy-pasting one process feels innocuous. One rogue variable gained’t be observed. One flaky check is not any huge deal. Once this begins occurring, groups insularly maintain repeating these practices till they make a large number. I don’t suppose giving groups extra time to work on these issues will remedy them, both, as a result of extra time doesn’t interrupt inertia – it merely prolongs it.
The developer in me desperately needs to resolve these issues. But how? I can do it in my very own initiatives, however as a result of my exams are sealed behind firm doorways, I can’t use it to indicate others easy methods to do it at scale. Many of the articles and programs we’ve got on how-to-do-X are stuffed with toy examples, too.
Changing our high quality tradition
So, how can we get groups to interrupt dangerous habits? I believe our business wants a tradition change. If we may very well be extra open with testing like we’re open with supply code, then maybe we may convey lots of the advantages we see from open supply into testing:
- Helping folks be taught testing
- Helping folks develop into higher testers
- Helping folks develop into higher check maintainers
If we domesticate a tradition of openness, then we could lead on higher practices by instance. Furthermore, if we develop into clear about our high quality, it may bolster our customers’ confidence in our merchandise whereas concurrently maintaining us motivated to maintain high quality excessive.
There are a number of methods to start out pursuing this concept of open testing. Not each risk could also be relevant for each circumstance, however my objective is to get y’all desirous about it. Hopefully, these concepts can encourage higher practices for higher high quality.
Openness by means of inside collaboration
For a place to begin of reference, let’s take into account the least open context for testing. Imagine a workforce the place testing work is fully siloed by position. In one of these workforce, there’s a harsh line between builders and testers. Only the testers ever see check instances, entry check repositories, or contact automation. Test instances and check plans are basically “closed” to non-testers as a result of entry, readability, and even apathy. The solely output from testers are failure percentages and bug stories. Results are primarily based extra on belief than on proof.
This form of workforce sounds fairly bleak. I hope this isn’t the form of workforce you’re on, however possibly it’s. Let’s see how openness could make issues higher.
The first step in the direction of open testing is inside openness. Let’s break down some siloes. Testers don’t completely personal high quality. Not everybody must be a tester by title, however everybody on the workforce ought to develop into quality-conscious. In reality, any software program growth workforce has three principal roles: Business, Development, and Testing. Business appears for what issues to resolve, Development addresses easy methods to implement options, and Testing gives suggestions on the answer. These three roles collectively are often known as “The Three Amigos” or “The Three Hats.”
Each position gives a precious perspective with distinctive experience. When the Three Amigos keep aside, options below growth don’t take pleasure in a number of views. They may need critical design flaws, they is likely to be unreasonable to implement, or they is likely to be troublesome to check. Misunderstandings may additionally trigger builders to construct the incorrect issues or testers to jot down ineffective exams. However, when the Three Amigos get collectively, they’ll collectively contribute to the design of product options. Everyone can get on the identical web page. The workforce can construct high quality into the product from the beginning. They may do actions like Question Storming and Example Mapping to assist them outline behaviors.
As a part of this collaboration, not everybody might find yourself writing exams, however everybody will likely be desirous about high quality. Testing then turns into simpler as a result of anticipated behaviors are well-defined and well-understood. Testers get deeper perception into what’s vital to cowl. When testers share outcomes and open bugs, different workforce members are extra receptive as a result of the suggestions is extra significant and extra precious.
We practiced Three Amigos collaboration at my earlier firm, Q2. My good friend Steve was a developer who noticed the worth in Example Mapping. Many instances, he’d decide up poorly-defined consumer tales with conflicting info or lacking acceptance standards. Sometimes, he’d burn a complete dash simply attempting to determine issues out! Once he discovered about Example Mapping, he began establishing half-hour periods with the opposite two Amigos (one among whom was me) to raised perceive consumer tales from the beginning. He acquired into it. Thanks to proactive collaboration, he may develop the tales extra easily. One time, I bear in mind we stopped engaged on a narrative as a result of we couldn’t justify its enterprise worth, which saved Steve two weeks of pointless work. The story didn’t finish there: Steve grew to become a Software Engineer in Test! He shifted left so exhausting that he shifted into a complete new position.
Openness by means of residing specs
Another step in the direction of open testing is residing documentation by means of specification by instance. Collaboration like we noticed with the Three Amigos is nice, however the worth it gives could be fleeting if it’s not written down. Teams want artifacts to file designs, examples, and finally check instances.
One cause why I like Example Mapping is as a result of it facilitates a workforce to spell out tales, guidelines, examples, and questions onto color-coded playing cards that they’ll maintain for future refinement.
- Stories develop into work objects.
- Rules develop into acceptance standards.
- Examples develop into check instances.
- Questions develop into spikes or future tales.
During Example Mapping, people sometimes write playing cards rapidly. An instance card describes a habits to check, but it surely won’t fastidiously design the situation. It wants additional refinement. Defining behaviors utilizing a transparent, concise format like Given-When-Then makes behaviors straightforward to grasp and simple to check.
For instance, let’s say we wished to check an online search engine. The instance may very well be to seek for a phrase like”panda”. We may write this instance as the next situation:
- Given the search engine web page is displayed
- When the consumer searches for the phrase “panda”
- Then the outcomes web page exhibits an inventory of hyperlinks for “panda”
This particular Given-When-Then format is named the Gherkin language. Gherkin comes from Behavior-Driven Development instruments like Cucumber, however it may be useful for any kind of testing. Gherkin defines testable behaviors in a concise approach that follows the Arrange-Act-Assert sample. You set issues up, you work together with the characteristic, and also you confirm the outcomes.
Furthermore, Gherkin encourages Specification by Example. This situation gives clear directions on easy methods to carry out a search. It has actual knowledge, which is the search phrase “panda,” and clear outcomes. Using real-world examples in specs like this helps all Three Amigos perceive the exact habits.
Behavior specs are multifaceted artifacts:
- They are necessities that outline how a characteristic ought to behave.
- They are acceptance standards that should be met for a deliverable to be full.
- They are check instances with clear directions.
- They may develop into automated scripts with the proper of check framework.
- They reside documentation for the product.
Living documentation is open and highly effective. Anyone on the workforce or exterior the workforce can learn it to be taught in regards to the product. Refining concepts into instance playing cards into habits specs turns into a pipeline that delivers residing doc as a byproduct of the software program growth lifecycle.
SpecFlow is among the greatest frameworks that helps one of these openness with Specification by Example and Living Documentation. SpecFlow is a free and open-source check automation framework for .NET. In SpecFlow, you write your check instances as Gherkin situations, and also you automate every Given-When-Then step utilizing C# strategies.
One of SpecFlow’s niftiest options, nevertheless, is SpecFlow+ LivingDoc. Most check frameworks focus completely on automation code. When a check is automated, then solely a programmer can learn it and perceive it. Gherkin makes this simpler as a result of steps are written in plain language, however Gherkin situations are however saved in a code repository that’s inaccessible to many workforce members. SpecFlow+ LivingDoc breaks that sample. It turns Gherkin situations right into a searchable doc web site accessible to all Three Amigos. It makes check instances and check automation way more open. LivingDoc additionally gives check outcomes for every situation. Green test marks point out passing exams, whereas purple X’s point out failures.
Historically, testers use stories like this to offer suggestions in-house to their managers and builders. Results point out what works and what must be mounted. However, check outcomes could be helpful to extra folks than simply inside workforce members. What if check outcomes had been shared with customers and prospects? I’m going to repeat that assertion, as a result of it may appear surprising: What if customers and prospects may see check outcomes?
Think about it. Open check outcomes have very optimistic results. Transparency with customers builds belief. If customers can see that issues are examined and dealing, then they may acquire confidence within the high quality of the product. If they might peer into the residing documentation, then they might learn to use the product even higher. On the flip facet, transparency holds growth groups accountable to maintaining high quality excessive, each within the product and within the testing. Open check outcomes provide these advantages provided that the outcomes could be trusted. If exams are ineffective or failures are rampant, then public check outcomes may really harm those growing the product.
This kind of radical transparency would require an infinite tradition shift. It will not be acceptable for each firm to create public dashboards with their check outcomes, but it surely may very well be a strategic differentiator when used correctly. For instance, once I labored at Q2, we shared LivingDoc stories with particular PrecisionLender prospects after each two-week launch. It constructed belief. Plus, because the LivingDoc report consists of solely high-level habits specs with easy outcomes, even a vice chairman may learn it! We may share exams with out sharing automation code. That was highly effective.
Openness by means of open supply
Let’s maintain extending open testing outward. In addition to sharing check outcomes and residing documentation, people may share instruments, frameworks, and different elements of their exams. This is the place open testing really is open supply.
We already coated a bunch of open supply initiatives for check automation. As an business, we’re really blessed with so many unbelievable initiatives. Every single one among them represents a workforce of testers who not solely solved an issue however determined to share their answer with the world. Each answer is summary sufficient to use to many circumstances however concrete sufficient to offer a useful implementation. Collectively, the initiatives on this web page have most likely been downloaded greater than a billion instances, and that’s no joke. And if you’d like, you may learn the open supply code for any of them.
Cool new initiatives seem on a regular basis, too. One of my favourite initiatives that began previously few years is Playwright, an superior browser automation instrument from Microsoft. Playwright makes end-to-end net testing straightforward, dependable, and quick. It gives cross-browser and cross-language help like Selenium, a concise syntax like Cypress, and a bunch of superior options like automated ready, tracing, and code era. Plus, Playwright is magnitudes sooner than different automation instruments. It took issues that made Selenium, Cypress, and Puppeteer nice, and it took them to the following stage.
Openness by means of shared check suites
So far, all of the methods of approaching open testing are issues we may do at the moment. Many of us are most likely already doing these items, even when we didn’t consider them below the phrase “open testing.” But the place can these concepts go sooner or later?
My thoughts goes again to one of many huge issues with testing that I discussed earlier: duplication. Opening up collaboration fixes some dangerous habits, and sharing elements eliminates some duplication within the plumbing of check automation, however so a lot of our exams throughout the business repeat the identical sorts of steps and observe the identical varieties of patterns.
For instance, take into consideration any time you’ve ordered one thing from a web based retailer. It may very well be Amazon, Walmart, Target – no matter. Every single on-line retailer has a digital buying cart. Whenever you need to purchase one thing, you add it to your cart. Then, if you’re executed buying, you proceed to pay for all of the objects in your cart. If you determine you don’t need one thing anymore, you take away it from the cart. Easy-peasy.
As I describe one of these buying cart, I don’t want to indicate you screenshots from the shop web site to elucidate it. Y’all have executed a lot on-line buying that you simply intuitively know the way it works, whatever the retailer. Heck, I lately ordered a bunch of elements for an outdated Volkswagen Beetle from a web site named JBugs, and the buying cart was the identical.
If so many functions have the identical elements, then why can we maintain duplicating the identical exams somewhere else? Think about it. Think about what number of instances completely different groups have written practically similar buying cart exams. Ouch. Think about how a lot time was wasted on that duplication of effort.
I believe that is one thing the place Artificial Intelligence and Machine Learning may assist. What if we may develop machine studying fashions to be taught widespread behaviors for apps and providers? The studying brokers would search for issues like commonplace icons and typical workflows. We may basically create check suites for issues like login, search, buying, and fee that might run efficiently on most apps. These sorts of exams most likely couldn’t cowl every thing in any given utility, however they might cowl primary, widespread behaviors. Maybe that might cowl 1 / 4 of all behaviors value testing. Maybe a 3rd? Maybe half? Every little bit helps!
Now, think about sharing these generic check suites publicly. In the identical approach builders have open supply initiatives to assist expedite their coding, and in the identical approach knowledge scientists have open knowledge units to make use of for modeling, testers may have open check suites that they might decide up and run as relevant. Not check instruments – however precise runnable exams that might run in opposition to any utility. If these sorts of check suites show to be precious, then outstanding ones may develop into universally-accepted bars of high quality for software program apps. For instance, sooner or later, corporations may obtain and execute exams that run on any system for the apps they’re growing along with the exams they develop in-house. I believe that may very well be a very cool alternative.
This kind of testing – Autonomous Testing – is the long run. Software developer and testers will use AI-backed instruments to raised be taught, discover, and train app behaviors. These instruments will make it simpler than ever to automate scriptable exams.
How to start out pursuing openness
As we’ve got coated, open testing may take many kinds:
- It may very well be openness in collaboration to construct higher high quality from the beginning.
- It may very well be openness in specification by instance and residing documentation.
- It may very well be openness in sharing exams and their outcomes with prospects and customers.
- It may very well be openness in sharing instruments, frameworks, and platforms.
- It may very well be openness in constructing shared check units for widespread utility behaviors.
Some of those concepts may appear far-fetched or aspirational, however fairly truthfully, I believe every of them may add numerous worth to testing practices. I believe each tester and each workforce ought to take a look at this listing and ask themselves, “Could we strive a few of these issues?” Perhaps your workforce may take child steps with higher collaboration or higher specification. Perhaps your workforce has a cool undertaking you constructed in-house that you may launch as an open supply undertaking, like my outdated workforce and I did with Boa Constrictor. Perhaps there’s a startup concept in utilizing machine studying for autonomous testing. Perhaps there are different methods to realize open testing that aren’t listed right here. Who is aware of? It may very well be cool!
We also needs to take into account the flip facet. Are there sure elements of testing that ought to stay closed? My thoughts goes to safety. Could absolutely open testing inadvertently reveal safety vulnerabilities? Could lack of protection in some areas welcome expedited exploitation? I don’t know, however I believe we must always take into account potentialities like these.
If you need to pursue open testing, listed below are three inquiries to get you began:
- How is your testing at the moment?
- In what methods is it already open?
- In what methods is it closed?
- How may your testing enhance with incremental openness?
- We’re speaking child steps right here – small enhancements that you may simply obtain at the moment.
- It may very well be as small as attempting Example Mapping or becoming a member of a mob programming session.
- How may your testing enhance with radical openness?
- Shoot the moon! Dream huge! Get artistic!
- In the world of software program, something is feasible.
We also needs to do not forget that open testing isn’t a objective unto itself. It’s a method to an finish, and that finish is larger high quality: high quality in our practices, high quality in our artifacts, and finally high quality within the software program we create. We shouldn’t search openness in testing simply because I’m spouting numerous buzzwords on this article. At the identical time, we additionally shouldn’t brush off these concepts as too radical or idealistic. What we must always do is search methods for perpetual enchancment. Remember that this complete concept of open testing got here from the tried-and-true advantages of open supply code.