Software testing has always been and will remain as one of the key activities of overall software quality assurance. Historically software testing has often been seen as a methodological, testing tool-based and labor-intensive exercise. In future, accelerating development cycle and deepening technology stack will emphasize the importance of testing as part of DevOps practices. New testing tools that maximize shift-left with help of seamless integration to developer tools and AI-based solutions are needed to raise the quality of testing to sufficient level.
In general, the functional software testing is carried out by examining outputs of the software under different user inputs and external conditions. Testing is said to be passed or the software is said to be validated/verified when the outputs generated by the software for given set of inputs match to the pre-defined test data set. The test data set is defined based on software requirements or features. Testing coverage can be estimated based on functionality (use case, branch, or data coverage) or code (function, statement, or decision coverage).
Short history of software testing
Historically, the need for software testing has existed for as long as there have been developers writing software. Some of the earliest software may have been tested in somewhat strange ways such as adjusting it with a wrench (the IBM1400 series punch-card computers) or mathematically proving the software to be correct (NASA’s approach such as C Global Surveyor). Upon the proliferation of IT projects in organizations software testing has become a domain offering a variety of context-specific practices to improve software quality.
The eras of modern software testing could be described as follows:
- Exploratory, Ad Hoc and Monkey Testing (just test it!)
- Structured Testing (tools, methods, test-driven development (TDD))
- Agile Testing (in parallel with dev, less structure, iterative)
- Automated Testing (UI testing, test scripting/recording)
- Continuous Testing (DevOps, CI/CD)
- AI-based Testing (creation of test cases and test data)
The future of software testing
In the very near future continuous testing will be complemented by AI-based testing solutions. The main improvement in software testing enabled by AI is the shift from black-box testing towards white-box testing. In black-box testing (or end-to-end testing) the tester’s view of the software is external and testing based on expected input-output relations. With the white-box testing the test coverage can be optimized using information about the code and the scope of each test case becomes significantly smaller.
The upcoming era of AI-based testing has its roots in unit testing which has been well-known best practice in software industry since 1980s. Earlier the challenge with unit testing has been that every line of code written requires 3 to 5 lines of test code, and significant effort to maintain and run the tests every time when code changes. AI-based testing tools handle unit test creation, maintenance, and execution while providing optimized test coverage and relevance even for complex and deep stacks of code.
The key benefits of AI-based testing are time saved by developers, shorter time-to-deployment, and reduced the number of production issues. AI-based testing is an effective approach for the regression testing of existing code for example in context of cloud migration, refactoring technical debt or changing existing business logic.