Developers are constantly competing against budgets and deadlines to get code out of the door as fast as possible. Testing is crucial but cannot come at the cost of sacrificing code quality. In seeking out solutions to these common concerns, this has led to the rise of automated software development and software development automation tools. Automating part of your application’s test suite can provide dramatic reductions in testing overhead, allowing you to reduce the number of tests and cut test runtime while also improving the quality of your test suite.
What Should We Automate?
What’s the difference between sculpting marble and breaking rocks?
In this case, it’s analogous to the difference between smashing a rock with a hammer and sculpting it. Both the tools and the medium are the same but the difference lies in the engagement of the mind. Smashing rocks is mindless, repetitive work. Sculpting rock requires human creativity and ingenuity. We let machines take care of simple rock smashing while we rely on artists to create new and amazing sculptures.
David Liedle and I were discussing automation the other day and I realized that this is a great analogy for what we should automate. Machines break rocks so people don’t have to. Why don’t machines take care of the mindless, repetitive aspects of software testing so human testers don’t have to?
Are there parts of the software development process that are more like breaking rocks than sculpting? Of course. Would we ask a sculptor to chisel their own rock out of the earth and carry it to their workshop? No: it is a terrible use of their time and does not take advantage of their unique talents.
For software development, we should automate the parts of the process that do not engage the creativity, strategy, cleverness, and organizational strength of a great developer. We should automate the repetitive, boring and uninteresting parts that burn people out.
What Software Development Steps Can We Automate?
Perhaps not surprisingly, the tasks we should automate and the tasks we can automate have significant overlap by their very nature. The kinds of tasks that lack a need for creativity or a ‘human eye’ on them that are so hard to quantify are the very ones that are easiest to automate.
Rapid Application Development
A lot of boilerplate code goes into rapidly developing new apps. Many popular frameworks come with pre-defined unit tests as part of the framework itself or the scaffolding that is generated to help kickstart new projects. These tests are typically ideal for automating, as they’re the same for every project and are typically fairly elementary in nature, testing core functionality without complicated or project-specific logic needing to be applied.
Tests can be auto-generated and test data can be automatically generated for those tests. These tests are very good for test cases where the logic is simple but lots of data is needed to test it, such as input validation. Many different field inputs can be automatically generated to test against a wide variety of edge cases much quicker and more comprehensively than with manual testing.
Why Automate Software Development at All?
The bottom line is that automating software produces faster and more consistent results. For testing, this means that there is no longer a battle for QA teams between hitting tight deadlines and choosing which parts get tested. When you automate your tests, you can integrate your test suite into a continuous testing workflow. This means that every part of your codebase can be tested, including your regression testing, on a regular basis without concern for burnout from testers or taking their time away from other parts of the project.
The Future of Software Automation
Right now, and for the foreseeable future, we automate tasks that can be defined and repeated, either deterministically or probabilistically (the latter being what we think of as machine learning). In human history, the tasks which have been automated have been those wherein the human mind is no longer creatively engaged. We have automated picking crops, forming boxes, and stacking shelves. We are beginning to automate repetitive tasks on applications using Robotic Process Automation. QA engineers automate the task of manually clicking through an application repeatedly. All of these free up the human mind from drudgery so it can turn its focus towards more beautiful work.
This holds true for the current wave of software automation: the jobs being automated are those which have been so proceduralized by management or development processes that they no longer require the ingenuity of the human mind. They are the filler and boilerplate of the software development and testing realms. Tests that are necessary but not exciting or interesting. And there’s much more of the software development process that can yet be automated away from human burden.
At ProdPerfect, we seek to combat the drudgery of sitting in a room guessing what’s important to test. Repeatedly re-writing and re-tooling the same end-to-end automation tests ad nauseam is boring and leads to burnout. We’re here to fight burnout, to help software teams deal with less BS from broken code and from having to test it, so they can go build the things that help other people avoid burnout, and thrive.
If you’re looking to take your testing to the next level and free your testers from the drudgery of boilerplate testing, get in touch with us and discover how we can help automate your testing processes to relieve your QA engineers from the menial parts of software testing and let them concentrate on the parts of your project that need the human touch.