While pursuing my undergraduate education, I came across the term “software testing”, I found it interesting and started finding various sources to gain adequate knowledge. On my way, I found that there is no specific source that includes all the concepts about the basics of software testing. That’s why here’s an article that summarizes the basic concepts of software testing along with its importance.
What is Software Testing?
As per technical definition, software testing is the process of evaluating a system or its components to find whether it satisfies specified requirements or not. It is an element of “Verification and Validation”. Software testing is essential as it indicates software quality and reliability, which boosts customer satisfaction.
Testing is vital if you are to release bug-free software, but not all software is easily testable. The degree to which software supports testing is known as software testability. Testability of a software is determined by some factors that are :
- Decomposability : Different components of the software can be tested in isolation.
- Observability : Any change in input is reflected back in the output of the software.
- Controllability : It is the degree to which it is possible to control the state of the component under test.
- Simplicity : Every component of the software is self-explanatory (well-documented).
- Stability : Software changes are rare but well-controlled.
Qualities of a Good Test
Testing is the process of executing a program with the intent of finding an error. A good test is the one which is neither too simple nor too complex and has the highest likelihood of uncovering a whole class of errors among the group of tests.
While writing a test, try to answer this question: How adequately a particular set of tests will cover the product?
This will help you write an efficient test for the software.
Software Testing Life Cycle (STLC)
It is a sequence of specific activities conducted during the testing process to ensure software quality goals are met. STLC includes :
- Analysis of product requirements
- Planning of the test
- Test Case Development
- Test Environment setup
- Execution of Tests
- Evaluation of Results
In the whole testing process, the most essential task is to design a good test case and adopt a suitable strategy via which the software product will be tested. These two terms are further explained below:
Test Case Design Methods
A test case is usually a single step, or occasionally a sequence of steps, to test the correct functionality and features of an application.
A successful test case is one that detects an as-yet-undiscovered error.
The test case design is an important aspect of software testing as it provides the developer a systematic approach to testing. Any engineering product can be tested in one of two ways:
1. White Box Testing (Glass Box Testing)
It is a test case design method that includes a detailed investigation of the internal logic and structure of the software i.e. it finds errors in the logic and structure of the software’s source code. It is further divided into two categories:
- Path Testing : It is an approach that enables the test case designer to derive a logical complexity measure of a program. In this method, we ensure that every path through the program has been executed at least once with the least number of test cases.
- Structural Testing : It is related to the internal design and implementation of the software. It mainly consists of data flow testing (concerned with errors in data flow i.e. variable declaration and usage) and mutation testing (ensures the robustness of program by making sure program fails the mutated/edited source code).
2. Black Box Testing (Behavioral Testing)
It is a test case design method which focuses on functional requirements of the software without having any knowledge of the interior working of the software product. It includes :
- Equivalence Class Partitioning : It is a black box testing method that divides the input domain of a program into classes of data from which test cases can be derived. It defines a test case that uncovers classes of errors thereby reducing the total number of test cases.
- Boundary Value Analysis : It complements equivalence class partitioning. Rather than selecting any element of an equivalence class, it leads to the selection of test cases at the edges of class.
- Decision Table Testing : Systematic approach where various input conditions and their respective system behavior are captured in tabular form. It provides coverage of all possible test cases. (Completeness property)
- Cause-Effect Graphing (Fish Bone Diagram) : It graphically illustrates the relationship between a given outcome and all the factors (input conditions) that influence that outcome (output/effect).
Software Testing Strategies
A software testing strategy integrates software test case design methodology into a well-planned series of steps which results in successful construction of software. Software testing begins at the component level and works outwards towards the integration of entire computer-based system. It includes:
1. Unit Testing (Component Testing)
In this testing method, individual units (components) of a software are tested. It is white-box oriented and is done by developers.
A unit may be an individual function, method, module, or object.
2. Integration Testing
It is a systematic technique for constructing the program structure while at the same time conducting tests to uncover errors associated with the interaction between different units of software. It includes :
- Big Bang Integration : When all components are integrated at once and tested as a unit
- Incremental Integration : When two or more logically related components are integrated and tested. It includes two approaches i.e. Top-down (when higher modules are tested first) and Bottom-up (when lower-level modules are tested first).
- Regression Testing : Testing done to ensure that a recent code change has not adversely affected existing features of the software.
- Smoke Testing : Testing which determines whether software build is stable or not.
A build includes all data files, libraries, and modules that are required to implement one or more product functions.
3. System Testing
It is a black-box testing technique performed to evaluate complete system’s compliance against specified requirements. It includes :
- Recovery Testing : Verifies that software recovery is properly performed in case of any failure.
- Security Testing : It uncovers vulnerabilities of the system.
- Stress Testing : Designed to confront programs with abnormal situations.
- Performance Testing : Designed to test the program’s speed, stability, and scalability.
4. User Acceptance Testing (UAT)
It is performed by the end-user (clients) to verify the software before moving it to the production environment. It includes :
- Alpha Testing : Carried out by testers to identify all possible bugs present in the software by performing tasks a typical user might perform.
- Beta Testing : Carried out by real users in real environment. It includes the process of releasing the software to a limited number of users, to obtain feedback via which the product can be improved.
Software Testing is a broad and diverse field which focuses on the quality of product delivered to customers. Customer satisfaction is prioritized majorly by the product’s quality which makes software testing one of the most challenging and satisfying job in the IT industry. This article covers the fundamentals of software testing and its classification, which may help you develop an interest in this field or to complete university assignments !!!
 Pressman, Roger S.. Software Engineering: A Practitioner’s Approach. United Kingdom, McGraw Hill, 2001.