{"id":3201,"date":"2021-03-10T15:09:39","date_gmt":"2021-03-10T15:09:39","guid":{"rendered":"https:\/\/elementordzyns.com\/subject7\/?p=3201"},"modified":"2024-12-26T15:12:06","modified_gmt":"2024-12-26T15:12:06","slug":"what-does-it-mean-to-scale-test-automation","status":"publish","type":"post","link":"https:\/\/elementordzyns.com\/subject7\/what-does-it-mean-to-scale-test-automation\/","title":{"rendered":"What does it Mean to Scale Test Automation?"},"content":{"rendered":"<p id=\"yui_3_17_2_1_1616247906206_233\">In computer science we have two kinds of scaling. In horizontal scaling, where we add more machines to a cluster to serve many clients at the same time. With vertical scaling we \u201cbeef up\u201d the machines we have, adding more powerful CPU, more RAM, or faster hard drives. In Software Engineering, scaling can also mean coordinating a large project, across teams of teams and larger groups. All that raises the question \u2013 what does \u201cscaling testing\u201d even mean?<\/p>\n<p>Today I\u2019ll address scaling test automation. To do that, I\u2019ll start at the word itself \u2013 very quickly \u2013 then move on to the important bit, what that means to you, the reader, right now.<\/p>\n<h2 id=\"a-moment-on-the-word-scaling\">A Moment on the Word Scaling<\/h2>\n<p>If you look up the word scaling in the dictionary, you\u2019ll find a reference to, well \u2026 a fish. Let\u2019s throw away that definition for now. In computer science, when we use the term \u201cscaling,\u201d the image that comes to mind might be \u201cscaling a cliff,\u201d that is, getting to the highest point. The logo of the\u00a0<a class=\"blog-link\" href=\"https:\/\/www.scaledagile.com\/\" target=\"_blank\" rel=\"noopener\">Scaled Agile, Inc<\/a>\u00a0is a mountain, while\u00a0<a class=\"blog-link\" href=\"https:\/\/www.leadingagile.com\/\" target=\"_blank\" rel=\"noopener\">Leading Agile<\/a>\u00a0uses a mountain as the entire metaphor for their transformation services, with basecamps, a compass, field notes, and so on.<\/p>\n<p>The\u00a0<em>root word<\/em>\u00a0here is scale. That is the thing you use to find out how much something weighs. Or, perhaps the scope of things. \u201cWe need to consider this issue on a global scale,\u201d the President might say, because to do \u201cthe right thing\u201d in a border city could lead to complications. If you\u2019ve used scales, you know they have limits. When you add too much weight, the variables get too large, things break. This is another definition of scaling \u2013 when paint cracks off in small pieces.<\/p>\n<p>To get\u00a0<a href=\"\/subject7\/solutions-overview\/\">test automation<\/a>\u00a0to scale, then, means to do a lot more of it. A lot more\u2026<em>without things breaking down<\/em>, which is exactly what happens on a large project, or program of projects if you\u2019re not paying attention.<\/p>\n<h2 id=\"scaling-test-automation\">Scaling Test Automation<\/h2>\n<p>Ironically, people often turn to automation because they believe software testing doesn\u2019t scale. The logic here is pretty simple: Every new sprint, the programmers add more features, but the testing team does not add more time to test. In the waterfall era, this was less of an issue, as bigger projects just meant a longer testing effort. When Scrum made two week sprints the standard, teams turned to test automation to reduce the testing time. Yet if you run tests on a laptop and the time to execute those tests grows by 15 minutes every two weeks, after two years, that could be a\u00a0<em>thirteen-hour delay<\/em>. That amounts to 1.5 business days. I call this\u00a0<a class=\"blog-link\" href=\"https:\/\/xndev.com\/2021\/02\/automation-delay-and-how-to-prevent-it\/\" target=\"_blank\" rel=\"noopener\">automation delay<\/a>, and that is a major source of failure of test tooling projects. It fits one definition of scaling, as the team is trying to cover more features or more software. Let\u2019s look at some other ones.<\/p>\n<p><strong><em>\u2022 More coverage (Deeper testing).<\/em><\/strong>\u00a0It\u2019s easy enough to create a sort of \u201csmoke test\u201d that runs the bare minimum of scenarios. This shows it is possible to use the software as intended, and it is not broken in some horrendous way for the majority of users. Smoke tests cover something between build verification and the core scenarios. Of course, the software could still be horrendously broken for some minority of users, or modestly broken for all users. So management attempts to scale by adding deeper testing.<\/p>\n<p><strong><em>\u2022 Find problems faster<\/em><\/strong>. When I started at Socialtext, we ran our Selenium-based test suite on all supported browsers toward the end of each sprint. More than twelve years later, those tests all run before a human starts exploratory testing the feature. Other companies I work with run the tests immediately after the code is committed and before it is merged into the master branch. This isolates defects when they are introduced, to the exact change that created them.<\/p>\n<p><strong><em>\u2022 Cross team \/ More applications<\/em><\/strong>. This takes the approach of a successful automation effort for one team, or project, and applies it to many teams and projects. There may be re-use of components or code libraries involved, especially for a large website, like an eCommerce site, with multiple teams. Notice that the first two goals conflict with each other.\u00a0<em>The more testing you have, the longer it takes to run.\u00a0<\/em>Yet one of the goals of test automation, in general, is earlier feedback. This creates automation delay. In more metaphorical terms, these are the cracks in the wall when you have too many layers of paint; the paint\u00a0<em>scales off<\/em>.<\/p>\n<h2 id=\"solving-the-scaling-problem\">Solving the Scaling Problem<\/h2>\n<p>The first step is to figure out exactly what problem your company is trying to solve. Do you want to have multiple teams, find problems faster, or have deeper coverage? How deep is deep enough?<\/p>\n<p>In my experience, these are tough questions. Companies like to defer them. Even changing the conversation from testing \u201cdone or not\u201d or \u201cscale of one to ten\u201d can be incredibly frustrating. As a consultant, one common reply I hear is \u201cI want it all! That\u2019s why we hired you; if I wanted just one thing, my team could do that. I want to have my cake and eat it too.\u201d<\/p>\n<p>Yes, I have literally heard executives use those words. Which is fine, as far as it goes.<\/p>\n<p>For today, step one is defining the particular challenge you want to overcome. What problems do you want to solve first? One way to do figure this out is with a two-step survey. First, ask people the challenges to scaling \u2014 these are the ways the wall is cracking. Then make a list, give them a hundred points, and ask how many they would invest in each. That frames the problem of where to focus investment in solving a problem where it is not possible to do everything at once. If there are ten items, and the solution is ten points each, then expect slow, incremental improvements, and make a plan to address that. It is possible that the word \u201cscale\u201d is a red herring, a term thrown around as in \u201cthat won\u2019t scale\u201d simply to stop the business.<\/p>\n<p>Once you know what it means, it\u2019s time to consider solving it. The most common approaches to scaling test automation are crafted through the use of\u00a0<a class=\"blog-link\" href=\"\/subject7\/blog\/2020\/8\/24\/why-adaptive-testing-is-beating-the-west-coast-school\">adaptive tools<\/a>\u00a0that can be easily adopted by a larger organizational audience. On top of that, companies layer continuous integration, self-service and self-loaded environments, and test coverage rubrics. After that, they may add running multiple tests in parallel. I\u2019ll cover a case study of these on my next blog entry. For now, let\u2019s isolate the problem you are trying to solve. Next, we\u2019ll build on it.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In computer science we have two kinds of scaling. In horizontal scaling, where we add more machines to a cluster to serve many clients at the same time. With vertical scaling we \u201cbeef up\u201d the machines we have, adding more powerful CPU, more RAM, or faster hard drives. In Software Engineering, scaling can also mean [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-3201","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"acf":[],"_links":{"self":[{"href":"https:\/\/elementordzyns.com\/subject7\/wp-json\/wp\/v2\/posts\/3201","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elementordzyns.com\/subject7\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/elementordzyns.com\/subject7\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/elementordzyns.com\/subject7\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/elementordzyns.com\/subject7\/wp-json\/wp\/v2\/comments?post=3201"}],"version-history":[{"count":1,"href":"https:\/\/elementordzyns.com\/subject7\/wp-json\/wp\/v2\/posts\/3201\/revisions"}],"predecessor-version":[{"id":3203,"href":"https:\/\/elementordzyns.com\/subject7\/wp-json\/wp\/v2\/posts\/3201\/revisions\/3203"}],"wp:attachment":[{"href":"https:\/\/elementordzyns.com\/subject7\/wp-json\/wp\/v2\/media?parent=3201"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/elementordzyns.com\/subject7\/wp-json\/wp\/v2\/categories?post=3201"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/elementordzyns.com\/subject7\/wp-json\/wp\/v2\/tags?post=3201"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}