Unit 2
Unit 2
Unit 2
2.1 Different Types of Software Testing
1. Manual Testing
2. Automation Testing
1. Manual Testing
Manual testing is a technique to test the software that is carried out using the functions and features of
an application. In manual software testing, a tester carries out tests on the software by following a set of
predefined test cases. In this testing, testers make test cases for the codes, test the software, and give the
final report about that software. Manual testing is time-consuming because it is done by humans, and
there is a chance of human errors.
Advantages of Manual Testing
Fast and accurate visual feedback: It detects almost every bug in the software application and is
used to test the dynamically changing GUI designs like layout, text, etc.
Less expensive: It is less expensive as it does not require any high-level skill or a specific type of
tool.
No coding is required: No programming knowledge is required while using the black box testing
method. It is easy to learn for the new testers.
Efficient for unplanned changes: Manual testing is suitable in case of unplanned changes to the
application, as it can be adopted easily.
2. Automation Testing
Automated Testing is a technique where the Tester writes scripts on their own and uses suitable
Software or Automation Tool to test the software. It is an Automation Process of a Manual Process. It
allows for executing repetitive tasks without the intervention of a Manual Tester.
Advantages of Automation Testing:
Simplifies Test Case Execution: Automation testing can be left virtually unattended and thus it
allows monitoring of the results at the end of the process. Thus, simplifying the overall test
execution and increasing the efficiency of the application.
Improves Reliability of Tests: Automation testing ensures that there is equal focus on all the areas
of the testing, thus ensuring the best quality end product.
Increases amount of test coverage: Using automation testing, more test cases can be created and
executed for the application under test. Thus, resulting in higher test coverage and the detection of
more bugs. This allows for the testing of more complex applications and more features can be
tested.
Minimizing Human Interaction: In automation testing, everything is automated from test case
creation to execution thus there are no changes for human error due to neglect. This reduces the
necessity for fixing glitches in the post-release phase.
3. High programming skills not required: Testers are not required to have high programming skills
for this testing.
4. Non-intrusive: Gray box testing is non-intrusive.
5. Improved product quality: Overall quality of the product is improved.
1. Functional Testing
Functional Testing is a type of Software Testing in which the system is tested against the functional
requirements and specifications. Functional testing ensures that the requirements or specifications are
properly satisfied by the application. This type of testing is particularly concerned with the result of
processing. It focuses on the simulation of actual system usage but does not develop any system
structure assumptions. The article focuses on discussing function testing.
Benefits of Functional Testing
Bug-free product: Functional testing ensures the delivery of a bug-free and high-quality product.
Customer satisfaction: It ensures that all requirements are met and ensures that the customer is
satisfied.
Testing focused on specifications: Functional testing is focused on specifications as per customer
usage.
Proper working of application: This ensures that the application works as expected and ensures
proper working of all the functionality of the application.
Improves quality of the product: Functional testing ensures the security and safety of the product
and improves the quality of the product.
2. Non-Functional Testing
Non-functional Testing is a type of Software Testing that is performed to verify the non-functional
requirements of the application. It verifies whether the behavior of the system is as per the requirement
or not. It tests all the aspects that are not tested in functional testing. Non-functional testing is a
software testing technique that checks the non-functional attributes of the system. Non-functional
testing is defined as a type of software testing to check non-functional aspects of a software application.
It is designed to test the readiness of a system as per nonfunctional parameters which are never
addressed by functional testing. Non-functional testing is as important as functional testing.
More secure product: As non-functional testing specifically includes security testing that checks
the security bottlenecks of the application and how secure is the application against attacks from
internal and external sources.
1. Unit Testing
Unit testing is a method of testing individual units or components of a software application. It is
typically done by developers and is used to ensure that the individual units of the software are working
as intended. Unit tests are usually automated and are designed to test specific parts of the code, such as
a particular function or method. Unit testing is done at the lowest level of the software development
process , where individual units of code are tested in isolation.
Note: Unit Testing basically Included in both White Box Testing and Black Box Testing.
2. Integration Testing
Integration testing is a method of testing how different units or components of a software application
interact with each other. It is used to identify and resolve any issues that may arise when different units
of the software are combined. Integration testing is typically done after unit testing and before
functional testing and is used to verify that the different units of the software work together as intended.
Integration testing is of four types: (i) Top-down (ii) Bottom-up (iii) Sandwich (iv) Big-Bang
Example:
1. Black Box testing: It is used for validation. In this, we ignore internal working mechanisms and
focus on “what is the output?”
2. White box testing: It is used for verification. In this, we focus on internal mechanisms i.e. how the
output is achieved.
3. System Testing
System testing is a type of software testing that evaluates the overall functionality and performance of a
complete and fully integrated software solution. It tests if the system meets the specified requirements
and if it is suitable for delivery to the end-users. This type of testing is performed after the integration
testing and before the acceptance testing.
System Testing is a type of software testing that is performed on a completely integrated system to
evaluate the compliance of the system with the corresponding requirements. In system testing,
integration testing passed components are taken as input. The goal of integration testing is to detect any
irregularity between the units that are integrated.
It checks the entire functionality of the system with different test scripts and also it covers the
technical and business requirements of clients.
After this testing, the product will almost cover all the possible bugs or errors and hence the
development team will confidently go ahead with acceptance testing.
4. End-to-end Testing
End-to-end testing is the type of software testing used to test entire software from starting to the end
along with its integration with external interfaces. The main purpose of end-to-end testing is to identify
system dependencies and to make sure that the data integrity and communication with other systems,
interfaces and databases to exercise complete production.
5. Acceptance Testing
It is formal testing according to user needs, requirements, and business processes conducted to
determine whether a system satisfies the acceptance criteria or not and to enable the users, customers,
or other authorized entities to determine whether to accept the system or not.
Advantages of Acceptance Testing
This testing helps the project team to know the further requirements from the users directly as it
involves the users for testing.
Automated test execution.
It brings confidence and satisfaction to the clients as they are directly involved in the testing
process.
It is easier for the user to describe their requirement.
It covers only the Black-Box testing process and hence the entire functionality of the product will be
tested.
1. Incremental Testing
Like development, testing is also a phase of SDLC (Software Development Life Cycle) . Different tests
are performed at different stages of the development cycle. Incremental testing is one of the testing
approaches that is commonly used in the software field during the testing phase of integration testing
which is performed after unit testing. Several stubs and drivers are used to test the modules one after
one which helps in discovering errors and defects in the specific modules.
Advantages of Incremental Testing
Each module has its specific significance. Each one gets a role to play during the testing as they are
incremented individually.
Defects are detected in smaller modules rather than denoting errors and then editing and re-
correcting large files.
It’s more flexible and cost-efficient as per requirements and scopes.
The customer gets the chance to respond to each building.
1. Performance Testing
Performance Testing is a type of software testing that ensures software applications perform properly
under their expected workload. It is a testing technique carried out to determine system performance in
terms of sensitivity, reactivity, and stability under a particular workload.
Performance testing is a type of software testing that focuses on evaluating the performance and
scalability of a system or application. The goal of performance testing is to identify bottlenecks,
measure system performance under various loads and conditions, and ensure that the system can handle
the expected number of users or transactions.
2. Usability Testing
You design a product (say a refrigerator) and when it becomes completely ready, you need a potential
customer to test it to check it working. To understand whether the machine is ready to come on the
market, potential customers test the machines. Likewise, the best example of usability testing is when
the software also undergoes various testing processes which is performed by potential users before
launching into the market. It is a part of the software development lifecycle (SDLC).
Advantages and Disadvantages of Usability Testing
Usability testing is preferred to evaluate a product or service by testing it with the proper users. In
Usability testing, the development and design teams will use to identify issues before coding and the
result will be earlier issues will be solved. During a Usability test, you can,
Learn if participants will be able to complete the specific task completely.
identify how long it will take to complete the specific task.
Gives excellent features and functionalities to the product
Improves user satisfaction and fulfills requirements based on user feedback
The product becomes more efficient and effective
3. Compatibility Testing
Compatibility testing is software testing that comes under the non functional testing category, and it is
performed on an application to check its compatibility (running capability) on different
platforms/environments. This testing is done only when the application becomes stable. This means
simply this compatibility test aims to check the developed software application functionality on various
software, hardware platforms, networks browser etc. This compatibility testing is very important in
product production and implementation point of view as it is performed to avoid future issues regarding
compatibility.
Advantages of Compatibility Testing
It ensures complete customer satisfaction.
It provides service across multiple platforms.
Identifying bugs during the development process.
3. Scalability Testing
4. Stability Testing
1. Load Testing
Load testing determines the behavior of the application when multiple users use it at the same time. It is
the response of the system measured under varying load conditions.
1. The load testing is carried out for normal and extreme load conditions.
2. Load testing is a type of performance testing that simulates a real-world load on a system or
application to see how it performs under stress.
3. The goal of load testing is to identify bottlenecks and determine the maximum number of users or
transactions the system can handle.
4. It is an important aspect of software testing as it helps ensure that the system can handle the
expected usage levels and identify any potential issues before the system is deployed to production.
Advantages of Load Testing:
Load testing has several advantages that make it an important aspect of software testing:
1. Identifying bottlenecks: Load testing helps identify bottlenecks in the system such as slow
database queries, insufficient memory, or network congestion. This helps developers optimize the
system and ensure that it can handle the expected number of users or transactions.
2. Improved scalability: By identifying the system’s maximum capacity, load testing helps ensure
that the system can handle an increasing number of users or transactions over time. This is
particularly important for web-based systems and applications that are expected to handle a high
volume of traffic.
3. Improved reliability: Load testing helps identify any potential issues that may occur under heavy
load conditions, such as increased error rates or slow response times. This helps ensure that the
system is reliable and stable when it is deployed to production.
2. Stress Testing
In Stress Testing, we give unfavorable conditions to the system and check how it perform in those
conditions.
Example:
1. Test cases that require maximum memory or other resources are executed.
2. Test cases that may cause thrashing in a virtual operating system.
3. Test cases that may cause excessive disk requirement Performance Testing.
It is designed to test the run-time performance of software within the context of an integrated system. It
is used to test the speed and effectiveness of the program. It is also called load testing. In it, we check,
what is the performance of the system in the given load.
Example:
Checking several processor cycles.
3. Scalability Testing
Scalability Testing is a type of non-functional testing in which the performance of a software
application, system, network, or process is tested in terms of its capability to scale up or scale down the
number of user request load or other such performance attributes. It can be carried out at a hardware,
software or database level. Scalability Testing is defined as the ability of a network, system,
application, product or a process to perform the function correctly when changes are made in the size or
volume of the system to meet a growing need. It ensures that a software product can manage the
scheduled increase in user traffic, data volume, transaction counts frequency, and many other things. It
tests the system, processes, or database’s ability to meet a growing need.
Advantages of Scalability Testing
It provides more accessibility to the product.
It detects issues with web page loading and other performance issues.
It finds and fixes the issues earlier in the product which saves a lot of time.
It ensures the end-user experience under the specific load. It provides customer satisfaction.
It helps in effective tool utilization tracking.
4. Stability Testing
Stability Testing is a type of Software Testing to checks the quality and behavior of the software under
different environmental parameters. It is defined as the ability of the product to continue to function
over time without failure.
It is a Non-functional Testing technique that focuses on stressing the software component to the
maximum. Stability testing is done to check the efficiency of a developed product beyond normal
operational capacity which is known as break point. It has higher significance in error handling,
software reliability, robustness, and scalability of a product under heavy load rather than checking the
system behavior under normal circumstances.
Stability testing assesses stability problems. This testing is mainly intended to check whether the
application will crash at any point in time or not.
1. Sanity Testing
It is a subset of regression testing . Sanity testing is performed to ensure that the code changes that are
made are working properly. Sanity testing is a stoppage to check whether testing for the build can
proceed or not. The focus of the team during the sanity testing process is to validate the functionality of
the application and not detailed testing. Sanity testing is generally performed on a build where the
production deployment is required immediately like a critical bug fix.
Advantages of Sanity Testing
Sanity testing helps to quickly identify defects in the core functionality.
It can be carried out in less time as no documentation is required for sanity testing.
If the defects are found during sanity testing, the project is rejected which is helpful in saving time
for execution of regression tests.
This testing technique is not so expensive when compared to another type of testing.
It helps to identify the dependent missing objects.
2. Regression Testing
The process of testing the modified parts of the code and the parts that might get affected due to the
modifications ensures that no new errors have been introduced in the software after the modifications
have been made. Regression means the return of something and in the software field, it refers to the
return of a bug.
Advantages of Regression Testing
It ensures that no new bugs have been introduced after adding new functionalities to the system.
As most of the test cases used in Regression Testing are selected from the existing test suite, and we
already know their expected outputs. Hence, it can be easily automated by the automated tools.
It helps to maintain the quality of the source code.
3. Acceptance Testing
Acceptance testing is done by the customers to check whether the delivered products perform the
desired tasks or not, as stated in the requirements. We use Object-Oriented Testing for discussing test
plans and for executing the projects.
Advantages of Acceptance Testing
1. This testing helps the project team to know the further requirements of the users directly as it
involves the users for testing.
2. Automated test execution.
3. It brings confidence and satisfaction to the clients as they are directly involved in the testing
process.
4. It is easier for the user to describe their requirement.
5. It covers only the Black-Box testing process and hence the entire functionality of the product will be
tested.
5. Exploratory Testing
Exploratory Testing is a type of software testing in which the tester is free to select any possible
methodology to test the software. It is an unscripted approach to software testing. In exploratory
testing, software developers use their learning, knowledge, skills, and abilities to test the software
developed by themselves. Exploratory testing checks the functionality and operations of the software as
well as identifies the functional and technical faults in it. Exploratory testing aims to optimize and
improve the software in every possible way.
Advantages of Exploratory Testing
Less preparation required: It takes no preparation as it is an unscripted testing technique.
Finds critical defects: Exploratory testing involves an investigation process that helps to find
critical defects very quickly.
Improves productivity: In exploratory testing, testers use their knowledge, skills, and experience
to test the software. It helps to expand the imagination of the testers by executing more test cases,
thus enhancing the overall quality of the software.
6. Adhoc Testing
Adhoc testing is a type of software testing that is performed informally and randomly after the formal
testing is completed to find any loophole in the system. For this reason, it is also known as Random or
Monkey testing. Adhoc testing is not performed in a structured way so it is not based on any
methodological approach. That’s why Adhoc testing is a type of Unstructured Software Testing.
Advantages of Adhoc testing
The errors that can not be identified with written test cases can be identified by Adhoc testing.
It can be performed within a very limited time.
Helps to create unique test cases.
This test helps to build a strong product that is less prone to future problems.
This testing can be performed at any time during Soft the ware Development Life Cycle Process
(SDLC)
7. Security Testing
Security Testing is a type of Software Testing that uncovers vulnerabilities in the system and
determines that the data and resources of the system are protected from possible intruders. It ensures
that the software system and application are free from any threats or risks that can cause a loss. Security
testing of any system is focused on finding all possible loopholes and weaknesses of the system that
might result in the loss of information or repute of the organization.
Advantages of Security Testing
1. Identifying vulnerabilities: Security testing helps identify vulnerabilities in the system that could be
exploited by attackers, such as weak passwords, unpatched software, and misconfigured systems.
2. Improving system security: Security testing helps improve the overall security of the system by
identifying and fixing vulnerabilities and potential threats.
3. Ensuring compliance: Security testing helps ensure that the system meets relevant security standards
and regulations, such as HIPAA, PCI DSS, and SOC2.
8. Globalization Testing
Globalization Testing is a type of software testing that is performed to ensure the system or software
application can function independently of the geographical and cultural environment. It ensures that the
application can be used all over the world and accepts all language texts. Nowadays with the increase in
various technologies, every software product is designed in such a way that it is a globalized software
product.
Benefits of Globalization Testing
Helps to create scalable products: It makes the software product more flexible and scalable.
Save time: It saves overall time and effort for software testing.
Reduce time for localization testing: Globalization testing helps to reduce the time and cost of
localization testing.
9. Regression Testing
Regression testing is a method of testing that is used to ensure that changes made to the software do not
introduce new bugs or cause existing functionality to break. It is typically done after changes have been
made to the code, such as bug fixes or new features, and is used to verify that the software still works
as intended.
Regression testing can be performed in different ways, such as:
Retesting: This involves testing the entire application or specific functionality that was affected by
the changes.
Re – execution: This involves running a previously executed test suite to ensure that the changes
did not break any existing functionality.
Comparison: This involves comparing the current version of the software with a previous version
to ensure that the changes did not break any existing functionality.
Advantages of Regression Testing
It helps to ensure that changes made to the software do not introduce new bugs or cause existing
functionality to break.
It helps to ensure that the software continues to work as intended after changes have been made.
It helps to improve the overall reliability and stability of the software.
It’s important to keep in mind that regression testing is an ongoing process that should be done
throughout the software development
Lifecycle to ensure that the software continues to work as intended. It should be automated as much
as possible to save time and resources. Additionally, it’s important to have a well-defined regression
test suite that covers
Every time a new module is added leads to changes in the program. This type of testing makes sure that
the whole component works properly even after adding components to the complete program.
Example:
In school records, suppose we have module staff, students, and finance combining these modules and
checking if the integration of these modules works fine in regression testing.
Done after unit testing to make sure components work well both alone and together.
Regression Testing
Verifies that changes or updates don’t break existing functionality.
Ensures the application still passes all existing tests after updates.
2. Branch Coverage
In this technique, test cases are designed so that each branch from all decision points is traversed at
least once. In a flowchart, all edges must be traversed at least once.
3. Condition Coverage
In this technique, all individual conditions must be covered as shown in the following example:
READ X, Y
IF(X == 0 || Y == 0)
PRINT ‘0’
#TC1 – X = 0, Y = 55
#TC2 – X = 5, Y = 0
IF(X == 0 || Y == 0)
PRINT ‘0’
#TC1: X = 0, Y = 0
#TC2: X = 0, Y = 5
#TC3: X = 55, Y = 0
#TC4: X = 55, Y = 5
6. Loop Testing
Loops are widely used and these are fundamental to many algorithms hence, their testing is very
important. Errors often occur at the beginnings and ends of loops.
Simple loops: For simple loops of size n, test cases are designed that:
1. Skip the loop entirely
2. Only one pass through the loop
3. 2 passes
4. m passes, where m < n
5. n-1 ans n+1 passes
Nested loops: For nested loops, all the loops are set to their minimum count, and we start from the
innermost loop. Simple loop tests are conducted for the innermost loop and this is worked outwards
till all the loops have been tested.
Concatenated loops: Independent loops, one after another. Simple loop tests are applied for each.
If they’re not independent, treat them like nesting.
1. Syntax-Driven Testing
This type of testing is applied to systems that can be syntactically represented by some language.
For example, language can be represented by context-free grammar.
In this, the test cases are generated so that each grammar rule is used at least once.
2. Equivalence partitioning
It is often seen that many types of inputs work similarly so instead of giving all of them separately
we can group them and test only one input of each group.
The idea is to partition the input domain of the system into several equivalence classes such that
each member of the class works similarly.
If a test case in one class results in some error, other members of the class would also result in the
same error.
5. Requirement-based testing
It includes validating the requirements given in the SRS of a software system.
6. Compatibility testing
The test case results not only depends on the product but is also on the infrastructure for delivering
functionality. When the infrastructure parameters are changed it is still expected to work properly.
Some parameters that generally affect the compatibility of software are:
1. Processor (Pentium 3, Pentium 4) and several processors.
1. In the Black Box Testing technique, the tester is unaware of the internal structure of the item being
tested and in White Box Testing the internal structure is known to the tester.
2. The internal structure is partially known in Gray Box Testing.
3. This includes access to internal data structures and algorithms to design the test cases.
4. Gray Box Testing is named so because the software program is like a semitransparent or gray box
inside which the tester can partially see.
5. It commonly focuses on context-specific errors related to web systems.
6. It is based on requirement test case generation because it has all the conditions presented before the
program is tested.
4. Regression Testing
Regression testing is testing the software after every change in the software to make sure that the
changes or the new functionalities are not affecting the existing functioning of the system. Regression
testing is also carried out to ensure that fixing any defect has not impacted other functionality of the
software.
5. State transition Testing
State transition testing is frequently applied to systems that display various states while they are being
operated. Testers who have just a limited understanding of the internal states create test cases with the
intention of making sure that state transitions are handled correctly.
6. Testing Decision Tables
Decision tables are a useful tool for organizing and condensing complicated business rules and
reasoning. Decision tables are used by testers with limited understanding to generate test cases covering
multiple combinations of input conditions and expected results.
7. Testing APIs
Even though the main code is not entirely known, gray box testing, also known as API (Application
Programming Interface) testing , focuses on testing the system’s exposed interfaces. The main goal of
testing is to make sure the API accepts various input formats and operates as intended.
8. Data Flow Testing
Analyzing the flow of data testing through the system forms the basis of data flow testing. Partial
knowledge testers create test cases that examine the data’s pathways throughout the application,
assisting in the identification of possible problems with handling and processing the data.