Other meanings of Software testing
Software Engineering
Software testing is the process of evaluating and verifying that a software product or application does what it is supposed to do. It involves executing a program or system with the intent of finding defects, ensuring that requirements are met, and building confidence in the software's quality. Testing is a critical part of the software development lifecycle, encompassing a wide range of activities from unit testing of individual components to full-scale system and acceptance testing.
Software testing is the process of evaluating and verifying that a software product or application does what it is supposed to do. The primary objectives are to identify defects, ensure that the software meets specified requirements, and reduce the risk of failure in production. Testing also provides objective information about the quality of the software, which helps stakeholders make informed release decisions.1
Testing is not merely about finding bugs; it also involves validating that the software behaves as expected under both normal and exceptional conditions. This includes checking functional correctness, performance, security, and usability. The scope of testing can range from a simple unit test of a single function to comprehensive end-to-end testing of a distributed system.
Software testing is typically organized into levels that correspond to the development stages. Unit testing verifies individual components in isolation, integration testing checks interactions between modules, system testing validates the complete system against requirements, and acceptance testing determines whether the software is ready for delivery.
Beyond levels, testing is categorized by type: functional testing (e.g., black-box and white-box), non-functional testing (e.g., performance, security, usability), and maintenance testing (e.g., regression testing). Each type serves a distinct purpose, and a comprehensive test strategy combines multiple types to achieve adequate coverage.
Effective testing relies on systematic test design techniques. Black-box techniques, such as equivalence partitioning and boundary value analysis, derive test cases from the specification without examining internal code. White-box techniques, such as statement and branch coverage, use the internal structure to ensure that all code paths are exercised.2
Experience-based techniques, like exploratory testing, rely on the tester's skill and intuition to discover defects. These methods are often used in agile environments where formal documentation is minimal. The choice of technique depends on the risk, the complexity of the system, and the available resources.
Test automation uses specialized tools to execute test cases and compare actual outcomes with expected results. Automation is essential for regression testing, continuous integration, and large-scale projects where manual testing is impractical. Popular tools include Selenium for web applications, JUnit for Java unit tests, and JMeter for performance testing.3
Automated tests can run frequently and provide rapid feedback, but they require an initial investment in script development and maintenance. Not all tests are suitable for automation; exploratory and usability testing often remain manual. A balanced approach combines automated checks with manual testing to maximize coverage and efficiency.
The term "bug" for a software defect was popularized in 1947 when a moth was found trapped in a relay of the Harvard Mark II computer, though the word had been used in engineering earlier. Glenford Myers' 1979 book The Art of Software Testing is a foundational text that introduced the concept of testing as a destructive process aimed at finding errors.
Mutation testing is a niche technique that introduces small faults into the code to check whether the test suite can detect them, thereby measuring test effectiveness. Another edge case is the "oracle problem," where there is no reliable way to determine the expected output, making testing particularly challenging. Additionally, testing of non-deterministic systems, such as those using concurrency or randomness, requires specialized approaches like property-based testing.
Software testing is supported by international standards and professional certifications. ISO/IEC/IEEE 29119 provides a comprehensive framework for software testing processes, documentation, and techniques.4 The ISTQB (International Software Testing Qualifications Board) offers certifications such as Certified Tester Foundation Level, which are widely recognized in the industry.
These standards and certifications aim to professionalize testing, ensuring consistency and quality across organizations. They also provide a common vocabulary and best practices that help testers communicate and collaborate effectively.
Software testing is a dynamic field that evolves with development methodologies, and its importance continues to grow as software systems become more complex and critical.
Help improve the encyclopedia. Reports go straight to the site manager.