I’ve worked as a software tester for a decade and am burned out. I can’t handle the pressure to be perfect in this line of work – the pressure to not let any mistake make it through the testing process where it could possibly get discovered by customers. I’m ready to be made obsolete by automation and artificial intelligence. The future of software testing belongs to a few elite developers who create testing algorithms and train machine learning models that can be applied to a wide variety of different software applications. This small group of programmers can replace the hundreds of thousands of people who work in software testing and software quality jobs.
The International Software Testing Qualifications Board has issued around 400000 certifications worldwide, and this doesn’t include the many non-certified software testers currently employed. Companies can save vast amounts of money by replacing these armies of testers with small numbers of consultants and contractors who apply machine learning techniques to software testing. Developers are almost always better and more useful people than testers. Anything a tester can do, a developer can do better. Most offshore testers and “QA engineers” graduate from lower tier universities. Many American testers have no college degree or they have worthless humanities degrees (like me!)
How could I ever hope to compete with the workers who have computer science degrees and freedom from anxiety disorders who spend time slumming in QA while they search for better jobs? How can I compete with immigrants who studied computer science or software testing since childhood as a means of escaping poverty in their home countries? H-1B and offshore workers are more robotic and emotionally resilient than me so there’s no way I can compete with them. International students set high expectations that engineering professors then apply to all students, since international students come from places that have better education systems and mathematics instruction than the USA does.
While fewer visas are granted to QA workers than are granted to programmers, data from sites like MyVisaJobs or JobsInTech Visa Explorer show visas granted to the many international QA workers currently in the USA. I don’t have anything against offshore workers or people in the USA on visas. I just think of the software testing labor market as a flawed system, similar to a flawed software architecture. Even offshore and visa workers aren’t immune from automation and they’ll also lose their jobs if the future testing strategy I outline in this post comes to fruition. There’s no way that even the best software testers can compete with artificial intelligence applied to testing. In many QA situations, less skilled workers are forced into the uncomfortable position of highlighting the mistakes of developers with greater experience and social status. Even socially and technically skilled testers are still vulnerable to automation.
The genetic algorithms and machine learning techniques referenced in this post are just the beginning. After top artificial intelligence developers use machine learning and neural networks to make billions of dollars automating other industries and putting people out of work, they’ll eliminate software testing jobs. Applying machine learning to test software will seem trivially easy compared to other problems. Then the top one percent of developers will put other developers out of work through self-modifying software. Most management tasks can also be automated, putting managers out of work as machine learning programs adjust project planning in realtime and conduct rapid negotiations among companies similar to high frequency trading systems.
I’ve been a software test technician for ten years. Rather than having ten years of experience, it’s more like one year of experience repeated ten times as I constantly shifted around to different projects and didn’t experience much career advancement. None of this software did anything meaningful for customers in the big picture. Heart disease and cancer continue to kill millions of people around the world. Testing software for screen sharing, help desk systems, computer networking, and mobile entertainment like I did can’t solve those problems. People who believe in unscientific concepts like free will and personal responsibility will say I should have taken more responsibility for my career. That’s difficult to do when constantly dealing with anxiety disorders and impostor syndrome and feeling like a frightened animal around other people.
Many QA environments adopted the open office layouts pioneered by software engineering departments. Giving a private office to a mere tester is now almost unthinkable. Former Google engineer Michael Church wrote an excellent post about how working in open offices negatively impacts anxious people. He also discussed this in a Quora answer coining the term Open-Plan Syndrome. Many offices also have artificial lighting, which puts additional stress on people who experience panic attacks (Photosensitivity in panic disorder). Technology companies often have offices with inadequate ventilation, which leads to increased carbon dioxide. Increased levels of CO2 can induce panic attacks.
Programs can perform actions from a database of methods that have identified bugs in similar types of applications. Computer vision can search and validate software. Genetic algorithms and machine learning can evolve to discover weak points in software. Self-learning programs could eventually check for flaws in software in more creative ways. GUI ripping and crawling analyzes and interacts with user interfaces to trigger and identify bugs. Automated regression testing re-tests components that previously passed tests. Bayesian software defect prediction models can identify defects. Search based software testing uses search algorithms to generate test cases. Grammatical evolution is a type of genetic programming that uses fitness functions and can be used to outperform random testing. Algorithms that generate tests provide better test coverage. Fuzzy logic systems and fuzzing can identify software faults, including security faults. Mutations in genetic algorithms can be used in generating and performing tests. All of these systems can integrate automated traceability and test logging. Code analysis techniques can identify software defects before integration testing even starts.
Imagine putting all of these techniques together. Once the testers are gone, self-healing programs can repair bugs without developer input. First they came for the jobs of workers demanding a higher minimum wage. Then they came for the jobs of high-paid professionals in finance and law and healthcare. Then they came for the software testers and managers. Finally the automators will eliminate jobs in software development.
A Combined Technique of GUI Ripping and Input Perturbation Testing for Android Apps.
A Comparative Study of Different Strategies for Predicting Software Quality.
A Factorial Experiment on Scalability of Search Based Software Testing.
A Framework for Automated and Composable Testing of Component-based Services.
A Fuzzy Based Fault Analysis Approach to Analyze Software Quality.
A GUI Crawling-based technique for Android Mobile Application Testing.
A GUI Modeling DSL for Pattern-Based GUI Testing PARADIGM.
A Little Language for Rapidly Constructing Automated Performance Tests.
A Method for Automated Testing of Software Interface.
A Model-Based Fuzzing Approach for DBMS.
A Model for GUI Automated Testing Framework in Software System.
A Model Independent S/W Framework for Search-Based Software Testing.
A multiple-population genetic algorithm for branch coverage test data generation.
A New Fuzzing Method Using Multi Data Samples Combination.
A New Fuzzing Technique for Software Vulnerability Mining Using Multi-dimension Inputs.
A Parallel Evolutionary Algorithm for Prioritized Pairwise Testing of Software Product Lines.
A Pattern-Based Approach for GUI Modeling and Testing.
A Smart Fuzzing Approach for Integer Overflow Detection.
A Software Quality Predictive Model.
A Survey on Software Testing Techniques using Genetic Algorithm.
A Test Automation Language Framework for Behavioral Models.
A Whitebox Approach for Automated Security Testing of Android Applications on the Cloud.
Achievements, open problems and challenges for search based software testing.
Adaptive Automation: Leveraging Machine Learning to Support Uninterrupted Automated Testing of Software Applications.
An All-in-One Toolkit for Automated White-Box Testing.
An ant colony optimization algorithm to improve software quality prediction models: Case of class stability.
An Approach to Automatic Input Sequence Generation for GUI Testing using Ant Colony Optimization.
An Automated Approach for Fault Injection Testing of BPEL Orchestrations.
An automated approach to reducing test suites for testing retargeted C compilers for embedded systems.
An automated passive testing approach of real-time systems: Application to Web Services.
An Image Comparing-based GUI Software Testing Automation System.
Analysis of Embedded Applications By Evolutionary Fuzzing.
Analysis of Mutation Testing Tools in Aspect Oriented Software Engineering.
Application of Genetic Algorithm and Particle Swarm Optimization in Software Testing.
Applying Computational Intelligence in Software Testing.
AUSTIN: An open source tool for search based software testing of C programs.
Automated Concolic Testing of Smartphone Apps.
Automated Cross-Browser Compatibility Testing.
Automated Firmware Testing using Firmware-Hardware Interaction Patterns.
Automated Functional Testing based on the Navigation of Web Applications.
Automated functional testing of online search services.
Automated Generation of Visual Web Tests from DOM-based Web Tests.
Automated GUI Testing Framework in PRIDE.
Automated Instrument Cluster Testing Using Image Processing.
Automated Java GUI Modeling for Model-Based Testing Purposes.
Automated Metamorphic Testing on the Analyses of Feature Models.
Automated Scalability Testing of Software as a Service.
Automated Software Testing of Memory Performance in Embedded GPUs.
Automated Software Testing Using Metahurestic Technique Based on Improved Ant Algorithms for Software Testing.
Automated System Testing Using Dynamic and Resource Restricted Clients.
Automated test data generation for branch testing using genetic algorithm: An improved approach using branch ordering, memory and elitism.
Automated Testing for Intelligent Agent Systems.
Automated Testing for SQL Injection Vulnerabilities: An Input Mutation Approach.
Automated Testing of API Mapping Relations.
Automated Testing of Cloud-Based Elastic Systems with AUToCLES.
Automated Testing of Embedded Automotive Systems from Requirement Specification Models.
Automated Testing with Targeted Event Sequence Generation.
Automated Verification of Load Tests Using Control Charts.
Automated Web Application Testing Using Search Based Software Engineering.
Automated Web Testing based on Textual-Visual UI Patterns: the UTF Approach.
Automatic testing of GUI-based applications.
Automation of Test Case Generation and Execution for Testing Web Service Orchestrations.
Black-box Test Data Generation for GUI Testing.
BlackHorse: Creating Smart Test Cases from Brittle Recorded Tests.
Caiipa: Automated Large-scale Mobile App Testing through Contextual Fuzzing.
Context Virtualizer: A Cloud Service for Automated Large-scale Mobile App Testing under Real-World Conditions.
Current challenges in automatic software repair.
Detection and Root Cause Analysis of Memory-Related Software Aging Defects by Automated Tests.
Developing a Strategy for Automated Privacy Testing Suites.
Dynamic Reverse Engineering of GUI Models for Testing.
Dynamic White-Box Software Testing using a Recursive Hybrid Evolutionary Strategy/Genetic Algorithm.
Enhanced Software Quality Metrics for Fault Prediction in Object Oriented Components using SVM Classifier.
Evolutionary Testing of Autonomous Software Agents.
EXSYST: Search-Based GUI Testing.
Extension of Selenium RC Tool to Perform Automated Testing with Databases in Web Applications.
Fault Prediction Using Statistical and Machine Learning Methods for Improving Software Quality.
Feasibility of Mutable Replay for Automated Regression Testing of Security Updates.
Fully Automated GUI Testing and Coverage Analysis Using Genetic Algorithms.
Functional Validation and Test Automation for Android Apps.
Generic Approach for Security Error Detection Based on Learned System Behavior Models for Automated Security Tests.
Genetic Algorithm Technique In Program Path Coverage For Improving Software Testing.
Grey-box GUI Testing: Efficient Generation of Event Sequences.
GUI Interaction Testing: Incorporating Event Context.
Guided GUI Testing of Android Apps with Minimal Restart and Approximate Learning.
GUITest: A Java Library for Fully Automated GUI Robustness Testing.
Improved Ant Algorithms for Software Testing Cases Generation.
Improving Testing of Complex Software Models through Evolutionary Test Generation.
Integrating Evolutionary Testing with Reinforcement Learning for Automated Test Generation of Object-Oriented Software.
JAutomate: a Tool for System- and Acceptance-test Automation.
KameleonFuzz: Evolutionary Fuzzing for Black-Box XSS Detection.
Leveraging Existing Tests in Automated Test Generation for Web Applications.
Lightweight Static Analysis for GUI Testing.
Linking software testing results with a machine learning approach.
Machine Learning and Event-Based Software Testing: Classiers for Identifying Infeasible GUI Event Sequences.
Machine Learning and Software Quality Prediction: As an Expert System.
Machine Learning-based Software Quality Prediction Models: State of the Art.
Making Automated Testing of Cloud Applications an Integral Component of PaaS.
MobiGUITAR – A Tool for Automated Model-Based Testing of Mobile Apps.
Model-based Test Oracle Generation for Automated Unit Testing of Agent Systems.
Model-Based Testing with a General Purpose Keyword-Driven Test Automation Framework.
Multi-objective Genetic Optimization for Noise-based Testing of Concurrent Software.
Murphy Tools: Utilizing Extracted GUI Models for Industrial Software Testing.
Optimization of Software Testing for Discrete Testsuite using Genetic Algorithm and Sampling Technique.
Parallel Symbolic Execution for Automated Real-World Software Testing.
PVDF: An Automatic Patch-Based Vulnerability Description and Fuzzing Method.
Random Visual GUI Testing: Proof of Concept.
Scaling Up Automated Test Generation: Automatically Generating Maintainable Regression Unit Tests for Programs.
Search-Based Automated Testing of Continuous Controllers: Framework, Tool Support, and Case Studies.
Search-Based Propagation of Regression Faults in Automated Regression Testing.
Semantics-based Automated Web Testing.
Soft Computing Based Approaches for Software Testing: A Survey.
Software Defect Prediction Models for Quality Improvement: A Literature Study.
Software quality assessment using a multi-strategy classifier.
Software Quality Control Based on Genetic Algorithm.
Software Test Automation using DEVSimPy Environment.
Sound Empirical Evidence in Software Testing.
SSOScan: Automated Testing of Web Applications for Single Sign-On Vulnerabilities.
Techniques for Automated Testing of Lola Industrial Robot Language Parser.
Testdroid: automated remote UI testing on Android.
The Seed is Strong: Seeding Strategies in Search-Based Software Testing.
Using Dynamic Symbolic Execution to Generate Inputs in Search-Based GUI Testing.
Using Genetic Algorithm for Automated Efficient Software Test Case Generation for Path Testing.
Using GUI Ripping for Automated Testing of Android Applications.