SE Note 3
SE Note 3
In Software testing various types of testing Include checking the Code that you have written is
working as expected. All Testing types have its own functions and properties we will explore them
one by one.
1. Manual Testing
2. Automation Testing
There are two different types of software testing currently used in the industry, both have their
own advantages and disadvantages.
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.
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.
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.
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.
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.
Advantages of Unit Testing:
Some of the advantages of Unit Testing are listed below.
It helps to identify bugs early in the development process before they become more
difficult and expensive to fix.
It helps to ensure that changes to the code do not introduce new bugs.
It makes the code more modular and easier to understand and maintain.
It helps to improve the overall quality and reliability of the software.
Note: Some popular frameworks and tools that are used for unit testing include JUnit , NUnit,
and xUnit.
It’s important to keep in mind that Unit Testing is only one aspect of software testing,
and it should be used in combination with other types of testing such as integration
testing, functional testing, and acceptance testing to ensure that the software meets the
needs of its users.
It focuses on the smallest unit of software design. In this, we test an individual unit or
group of interrelated units. It is often done by the programmer by using sample input
and observing its corresponding outputs.
Example:
1. In a program we check if the loop, method, or function is working fine.
2. Misunderstood or incorrect, arithmetic precedence.
3. Incorrect initialization.
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.
The objective is to take unit-tested components and build a program structure that has been
dictated by design. Integration testing is testing in which a group of components is combined to
produce output.
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 whether 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.
Advantages of System Testing:
The testers do not require more knowledge of programming to carry out this testing.
It will test the entire product or software so that we will easily detect errors or defects
that cannot be identified during the unit testing and integration testing.
The testing environment is like that of the real-time production or business
environment.
It checks the entire functionality of the system with different test scripts, and 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 start to end along
with its integration with external interfaces. The main purpose of end-of-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 requirements.
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.
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.
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 from a point of view as it is
performed to avoid future issues regarding compatibility.
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.
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 the performance of the system is 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.
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 overtime 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 test is mainly intended to check whether the
application will crash at any point in time or not.
1. Smoke Testing
Smoke Testing is done to make sure that the software under testing is ready or stable for further
testing.
It is called a smoke test as the testing of an initial pass is done to check if it did not catch fire or
smoke in the initial switch-on.
Example:
If the project has 2 modules before going to the module, make sure that module 1 works properly.
Advantages of Smoke Testing
1. Smoke testing is easy to perform.
2. It helps in identifying defects in the early stages.
3. It improves the quality of the system.
4. Smoke testing reduces the risk of failure.
5. Smoke testing makes progress easier to access.
2. 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
building 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 building where the production deployment is required immediately like a critical bug fix.
3. 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.
4. 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.
6. 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.
7. 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.
8. 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.
9. 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.
Once your tests can run from your terminal, you can automate them using a continuous integration
(CI) server like Bamboo or a cloud service like Bitbucket Pipelines. These tools monitor your
code repository and run your tests automatically whenever new changes are pushed.
Verification Validation
Type of
Verification is the static testing. Validation is dynamic testing.
Testing
Validation is often considered more challenging than verification in software engineering due
to several reasons.