Software Engineering | Software Testing | Types of Software Testing

Software testing is the process of finding errors in the developed product. It is the process of evaluating and verifying that a software product or application does what it is supposed to do. The benefits of testing include preventing bugs, reducing development costs and improving performance. 

Software testing is evaluation of the software against requirements gathered from users and system specification. It is an activity performed to identify errors so that error can be removed to obtain a product with greater quality.

Software Testing is a process, to evaluate the functionality of a software application with an intent to find whether the developed software met the specified requirements or not and to identify the defects to ensure that the product is defect-free in order to produce a quality product. 


Types of Software Testing Technique:

Software testing techniques can be majorly classified into two categories 

    ·    Black Box Testing

    ·    White Box Testing


Black box testing:

Black box testing is a technique of software testing which examines the functionality of software without knowing into its internal structure or coding. It is the method that does not consider the internal structure, design, and product implementation to be tested.  Also known as functional testing or input-output driven testing. A software testing method whereby the inner mechanism of the item being tested are not known by the tester is called black-box testing.


In Black-box testing, a tester doesn’t have any information about the internal working of the software system. The Black Box only evaluates the external behavior of the system. The inputs received by the system and the outputs or responses it produces are tested.

This testing approach focuses on the input that goes into the software, and the output that is produced. Black box testing involves testing a system with no prior knowledge of its internal workings. The testing team does not cover the inside details such as code, server logic, and development method.

Black box testing involves testing against a system where the code and paths are invisible. It is a process of checking the functionality of an application as per the customer requirement. The source code is not visible in this testing; that's why it is known as black-box testing. Black-Box testing treats the software as a “Black Box” – with no information of inner working and it only checks the essential aspects of the system. While performing black box testing, a tester must know the system design and will not have access to the source code.





Black box testing is based on the requirements and checks the system to validate against predefined requirements. The testing is done without the internal knowledge of the products. Black-box testing is commonly known as behavioral testing, since we follow the behavior of the overall design.

In black box testing, test cases are designed from an examination of the input/output values only and no knowledge of design or code is required. For this reason, black box testing is also known as functional testing.


Types of Black Box Testing:

 

There are three types of black-box testing namely: functional testing, non-functional testing, and regression testing.

 

Functional Testing:

This is a type of black box testing which deals with the functional requirements or specifications of a system.  Here, different actions or functions of the system are being tested by providing the input and comparing the actual output with the expected output.

Functional testing is concerned only with the functional requirements of a system and covers how well the system executes its functions. Software testers are responsible for carrying out this test.

 

Non-Functional Testing:

This black box testing type is not related to testing of specific functionality. Black box testing can check additional aspects of the software, beyond features and functionality.

 Non functional testing is concerned with the non-functional requirements and is designed specifically to evaluate the readiness of a system according to the various criteria which are not covered by functional testing.

Apart from the functionalities of the requirements, there are several non-functional aspects that are required to be tested to improve the quality and performance of the application. It is solely focused on non-functional requirements like usability, scalability and performance.

 

Regression Testing:

Regression Testing is done after code fixes, upgrades or any other system maintenance to check the new changes has not affected any existing functionality. The motive is to examine the new code and its effect on the existing code.


Techniques of Black Box Testing:

In order to systematically test a set of functions, it is necessary to design test cases. Testers can create test cases from the requirement specification document using the following Black Box Testing techniques:

1.   Equivalence Partitioning

2.   Boundary Value Analysis

3.   State Transition Testing

4.   Decision Table Testing

5.   Graph-based testing

6.   Error Guessing

7.   Comparison Testing

 

Equivalence Partitioning:

This technique is also known as Equivalence Class Partitioning (ECP).  In this technique, input values to the system or application are divided into different classes or groups based on its similarity in the outcome.

 

Hence, instead of using each and every input value, we can now use any one value from the group/class to test the outcome. This way, we can maintain test coverage while we can reduce the amount of rework and most importantly the time spent.

 


Boundary Value Analysis:

Boundary value testing is focused on the values at boundaries.. The two ends, the inner and the outer limits are considered in this type of testing. We set a boundary value lower or higher than the actual limit to check the behavior of our system in both conditions.

Boundary value analysis tests the software with test cases with extreme values of test data. It is used to identify the flaws or errors that arise due to the limits of input data. This technique determines whether a certain range of values are acceptable by the system or not

 

State Transition Testing:

State Transition Testing is a technique that is used to test the different states of the system under test. The state of the system changes depending upon the conditions or events. If there are different responses during transition from one state to another then state transition testing can be incorporated. 

This testing technique uses the inputs, outputs, and the state of the system during the testing phase. It checks the software against the sequence of transitions or events among the test data.

Based on the type of software that is tested, it checks for the behavioral changes of a system in a particular state or another state while maintaining the same inputs.

 

 

Decision Table Testing:

This approach creates test cases based on various possibilities. It considers multiple test cases in a decision table format where each condition is checked and fulfilled, to pass the test and provide accurate output. It is preferred in case of various input combinations and multiple possibilities.

If the results are obtained depending on certain conditions it comes under Decision table testing. If the conditions are combined they form rules. The outputs of these rules are formed and the test cases are structured.

 

 

 

Graph-Based Testing:

 

It is similar to a decision-based test case design approach where the relationship between links and input cases are considered.

 

 

Error Guessing Technique:

 

Error Guessing is a technique based on guessing the errors that can stay in the application. This method of designing test cases is about guessing the output and input to fix any errors that might be present in the system. It depends on the skills and judgment of the tester. There’s no specific set of rules to test the behavior of a system with this technique.

 

It can help to look for various faults which systematic techniques may fail to detect. The method almost always depends on the tester’s prior experience and their foresight to guess where defects can occur in the future.

 

 

Comparison Testing:

 

In this method, different independent versions of the same software are used to compare to each other for testing.





White Box Testing:

White box testing is a testing technique which evaluates the code and the internal structure of software. It is the detailed investigation of internal logic and structure of the code. White-Box Testing is the testing of a software solution's inner coding and infrastructure.

Open-box testing is a software evaluating method used to examine the internal structure, design, coding and inner-working of software. Developers use this testing method to verify the flow of inputs and outputs through the application, improving usability and design and strengthening security.

In order to perform white-box testing on an application, a tester needs to know the internal workings of the code. White box testing involves testing the product's underlying structure, architecture, and code to validate input-output flow and enhance design, usability, and security. 

The white box test method is the one that looks at the code and structure of the product to be tested and uses that knowledge to perform the tests. Designing white box test cases require a thorough knowledge of the internal structure of a program, and therefore white box testing is also called structural testing.

The other name of white box testing is clear box testing because unlike black box testing the code is available and visible. A few of the other names given to white box testing are open box testing, transparent box testing, glass testing, and code-based testing. White box testing is called "open box" because the code is visible to the tester during the examination.


Types of White Box Testing:

 

White Box testing can be classified into any of the following types:

 

Mutation testing: Mutation testing is a type of testing based on alterations or mutations. Minute modifications are made to the source code to see if the provided test cases can discover bugs in the code. Developers commonly use this testing to test the code that they have modified after detecting bugs or making corrections. 

 

Unit Testing: Unit testing is performed on each unit or block of code as it is developed. The developer tests a few lines of code, a single function or an object for correct working.

Unit testing ensures that each component performs as intended. Bugs identified in this stage are cheaper and easy to fix. Unit testing is helpful as it identifies the majority of errors early in the development cycle, making them cheaper and easier to fix.

 

Integration testing: This method is concerned with combining individual unit or components of the source code and testing them as a group. The purpose of this testing is to expose any errors in the interaction of different components together.

Integration testing is performed to check that modules/components operate as intended when combined, i.e. to ensure that modules that performed fine independently do not have difficulties when merged.

 

Penetration Testing: This method is used to check if errors from outside the system can affect it. This test involves attacking the code from all directions to expose security threats. It's concerned about the software's integration with external factors and errors from outside that can bring the system down. The aim is to attack the code from several angles to expose security threats.

 

Regression TestingIn regression testing, the tester performs further tests to verify that a recent change in the application’s code has not harmed existing functionalities. The already executed test cases are rerun to confirm that previously created and tested features are working as desired. It verifies that the old code still works even after fixing bugs, adding extra security features, or implementing any changes.



White Box Testing Techniques:

There are Different Types of White Box testing techniques available to use. Following are important White Box Testing Techniques:

  • Statement Coverage
  • Branch Coverage
  • Path Coverage
  • Decision Coverage
  • Condition Coverage
  • Multiple Condition Coverage
  • Basis path Testing
  • Loop testing

Statement Coverage: Statement coverage is the most basic form of code coverage analysis in white box software testing. This technique includes every possible statement in the code. In this technique, the tester tests every statement at least once, thereby assuring that all of the code is tested.

A statement   is a line of code or an instruction. Statement coverage ensures every single line of code is tested. This technique examines each line of code at least once. In this technique, the aim is to traverse all statements at least once. Hence, each line of code is tested. 

 

Branch Coverage: Branch coverage is a white box software testing technique that measures the number of branches of the control structures that have been executed. In branch coverage, we check if each branch is processed at least once. This technique is running a series of tests to ensure that all branches are tested at least once.

 

Branch coverage ensures every branch is tested. In this technique, test cases are designed so that each branch from all decision points is traversed at least once. Using this technique, each possible path or decision point of a software application is checked for accuracy.

 

Path Coverage- ensures all possible paths are tested. Path coverage examines all the paths in a given program. This is a thorough strategy that assures that all program paths are explored at least once. Path coverage is more effective than branch coverage. This technique corresponds to testing all possible paths which means that each statement and branch is covered.

 

Decision Coverage: This includes testing every possible decision condition and other conditional loops at least once. Decision Coverage is a white box testing methodology that reports the true or false results of each boolean expression present in the source code.

Condition Coverage: This technique covers all individual conditions. In this technique, all individual conditions are checked. With condition coverage, all of the conditions in the program to be evaluate as both true and false at least once. The purpose of condition coverage is to examine the outcome of each logical condition.

Multiple Condition Coverage:   In this testing technique, all the different combinations of conditions for each decision are evaluated.

Basis Path Testing: Each independent path in the code is taken for testing. In this technique, control flow graphs are created from either code or flowchart. Cyclomatic complexity is then calculated to define the number of independent paths so that the minimal number of test cases can be designed for each independent path.

 

Loop Testing:  The technique focuses on loops. Loops are commonly used in white box testing and are fundamental to many algorithms. Problems are often found at the beginning or the end of a loop. This technique checks the reliability of loops, and involves simple, nested and concatenated loops.


Post a Comment

0 Comments