Software Testing and Its Types
What is Software Testing?
Software Testing is a process of verifying an application's functionality as per customer's requirement.
As per ANSI/IEEE 1059, Testing in Software Engineering is a process of evaluating a software product to find whether the current software product meets the required conditions or not. The testing process involves evaluating the features of the software product for requirements in terms of any missing requirements, bugs or errors, security, reliability and performance.
In order to ensure that the software we are building, is bug-free or stable, we must perform the various types of software testing because testing is the only method that makes our application bug-free.
On a high level based on Test Execution, testing can be
2. Automation Testing
1. Manual Testing
Testing any application according to the client's requirement without using any automation tool is known as manual testing.
In other words, we can say that it is a procedure of verification and validation.
Manual testing is a software testing process in which test cases are executed manually without using any automated tool. All test cases executed by the tester manually according to the end user's perspective. It ensures whether the application is working, as mentioned in the requirement document or not.
2. Automated testing
It is a type of testing in which automated test case execution is performed using different automation tools and test scripts. Here the advantage is – once the automated scripts get created, it saves a lot of test-execution time.
Automated testing is a process that validates if software is functioning appropriately and meeting requirements before it is released into production by writing test scripts or using any automation testing tool. Test automation is used to automate repetitive tasks and other testing tasks which are difficult to perform manually.
Also, it helps with the implementation of Continous-Integration and Continous Deployment (CICD) in which automated test cases can be made to execute automatically as soon as the new code is pushed. Thus making the product releases automatic and much faster.
Types of Software
Testing
Software testing is
generally classified into two main broad categories: functional testing and
non-functional testing. There is also another general type of testing called
maintenance testing.
1. Functional
Testing
Functional testing
involves the testing of the functional aspects of a software application. When
you’re performing functional tests, you have to test each and every
functionality. You need to see whether you’re getting the desired results or
not.
There are several
types of functional testing, such as:
- Unit testing
- Integration testing
- End-to-end testing
- Smoke testing
- Sanity testing
- Regression testing
- Acceptance testing
- White box testing
- Black box testing
- Interface testing
Functional tests are performed both manually and using automation tools. For this kind of testing, manual testing is easy, but you should use tools when necessary.
2. Non-functional
Testing
Non-functional
testing is the testing of non-functional aspects of an application, such as
performance, reliability, usability, security, and so on. Non-functional tests
are performed after the functional tests.
With non-functional
testing, you can improve your software’s quality to a great extent. Functional
tests also improve the quality, but with non-functional tests, you have the
opportunity to make your software even better. Non-functional testing allows
you to polish the software. This kind of testing is not about whether the
software works or not. Rather, it’s about how well the software runs, and many
other things.
Non-functional
tests are not generally run manually. In fact, it’s difficult to perform this
kind of tests manually. So these tests are usually executed using tools.
There are several
types of non-functional testing, such as:
- Performance testing
- Security testing
- Load testing
- Failover testing
- Compatibility testing
- Usability testing
- Scalability testing
- Volume testing
- Stress testing
- Maintainability testing
- Compliance testing
- Efficiency testing
- Reliability testing
- Endurance testing
- Disaster recovery testing
- Localization testing
- Internationalization testing
Most Common Types of Software Testing
1. Unit Testing
Testing each
component or module of your software project is known as unit testing. To
perform this kind of testing, knowledge of programming is necessary. So only
programmers do this kind of tests, not testers.
You have to do a
great deal of unit testing as you should test each and every unit of code in
your project.
2. Integration
testing
After integrating
the modules, you need to see if the combined modules work together or not. This
type of testing is known as integration testing. You need to perform fewer
integration tests than unit tests.
Some good tools for
unit and integration testing are Jasmine, Mocha,
etc.
3. End-to-end
Testing
End-to-end testing
is the functional testing of the entire software system. When you test the
complete software system, such testing is called end-to-end testing. You need
to perform fewer end-to-end tests than integration tests.
Cucumber, Protractor, Jasmine, etc. are some great end-to-end
testing tools.
4. User Interface
Testing
User interface
testing involves the testing of the application’s user interface. The aim of UI
tests is to check whether the user interfaces have been developed according to
what is described in the requirements specifications document.
By running UI tests,
you can make the application’s user interfaces more user-friendly and appealing
to the eyes.
Some great
automated user interface testing tools are Monkey test for Android, Saucelabs,
and Protractor.
5. Accessibility
testing
Testing whether
your software is accessible to disabled people or not is termed as accessible
testing. For this type of tests, you need to check if disabled people such as
those who are color blind, blind, and deaf can use your application.
The right choice of
color and contrast need to be made to make your software accessible to
color-blind people.
6. Alpha testing
Alpha testing is a
kind of testing to look for all the errors and issues in the entire software.
This kind of test is done at the last phase of app development and is performed
at the place of the developers, before launching the product or before
delivering it to the client to ensure that the user/client gets an error-free
software application.
Alpha testing is
run before the beta testing, which means that after performing alpha testing,
you need to run beta testing.
Alpha testing is
not performed in the real environment. Rather, this kind of tests is done by
creating a virtual environment that resembles a real environment.
7. Beta testing
As said earlier,
beta testing takes place after alpha testing. Beta testing is done before the
launch of the product. It is carried out in a real user environment by a
limited number of actual customers or users, in order to be certain that the
software is completely error-free and it functions smoothly. After collecting
feedback and constructive criticism from those users, some changes are made to
make the software better.
So when the
software is under beta testing, it is called beta version of the software.
After this testing is complete, the software is released to the public.
8. Ad-hoc testing
As the name
suggests, ad-hoc testing is a kind of testing that is performed in an ad-hoc
manner, without using any test cases, plans, documentation, or systems. Unlike
all other types of testing, this kind of testing is not carried out in a
systematic manner.
Although finding
errors can be difficult without using test cases, there are technical issues
that are easily detected through an ad-hoc test, but are hard to find through
other testing approaches that use test cases.
This informal type
of software testing can be executed by any person involved with the project.
9. Compatibility
testing
Compatibility
testing involves compatibility checking of the software with different
operating systems, web browsers, network environments, hardware, and so on. It
checks whether the developed software application is working fine with
different configurations.
To give you a few
examples, if the software is a Windows app, it should be checked whether it is
compatible with different versions of the Windows operating system. If it’s a
web application, it is tested whether the app is easily accessible from
different versions of the widely-used web browsers. And if it’s an Android app,
it should be checked whether it is working well with all the commonly used
versions of the Android operating system.
10. Backward
compatibility testing
Backward
compatibility testing is carried out to test if a brand new or an updated
version of an application is compatible with the previous versions of the
environments (such as operating systems and web browsers) on which the software
runs. Sometimes, some application is updated specifically to match the standard
and style of a newer, more modern environment. In that case, support for
backward compatibility is necessary.
Backward
compatibility testing ensures that all those who are using the older versions
of a particular environment can use your software.
11. Browser
compatibility testing
As the name says,
browser compatibility testing checks a web application for browser
compatibility. More specifically, it is tested whether the web app can easily
be accessed from all versions of the major web browsers.
It is a specific
form of compatibility testing, while compatibility testing checks for general
compatibility.
Some popular tools
to check browser compatibility include CrossBrowserTesting.com, LamdaTest, Browsershots, Experitest, Turbo
Browser Sandbox, Ranorex Studio, Browsera,
etc.
12. Performance
testing
Performance tests
are run to check if the software’s performance is good or not. There are
performance testing tools that analyze your app’s performance and show you the
performance issues. By fixing those issues, you’ll be able to increase the
performance of your software application.
Some great
performance testing tools, also known as load testing tools, for web
applications are WebLOAD, LoadView, NeoLoad, LoadNinja, Appvance, LoadRunner, Apache
JMeter, Loadster, LoadImpact, Testing
Anywhere, SmartMeter.io, Tricentis Flood, Rational Performance Tester, LoadComplete, etc.
13. Load testing
Load testing is one
kind of performance testing that tests how much load a system can take before
the software performance begins to degrade. By running load tests, we can know
the capacity of taking load of a system.
You can run load
tests using tools like LoadRunner, WebLoad, JMeter,
etc.
14. Recovery
testing
Recovery testing
involves the checking of whether the application can recover from crashes and
how well it recovers. In this kind of tests, testers observe how well the
software can come back to the normal flow of execution. Crashes can happen
anytime. Even if your software is of exceptional quality, crashes may happen.
You don’t know when they may take place and annoy the users.
So you have to
implement mechanisms that will recover the software application quickly and
that will make the application run smoothly again.
15. Regression
testing
If you need to make
changes in any component, module, or function, you have to see if the whole
system functions properly after those modifications. Testing of the whole
system after such modifications is known as regression testing.
16. Agile testing
Carried out by the
QA team, Agile testing is a type of testing that is conducted according to the
rules of agile methodology. This kind of testing is done from the actual
customers’ viewpoint.
Some useful tools
that you can use for Agile testing are JIRA, PractiTest, JunoOne, VersionOne, TestRail, SoapUI,
etc.
17. API testing
Just like unit
testing, API testing is also a code-level testing type. The basic difference
between unit testing and API testing is that unit testing is performed by the
development team whereas API testing is handled by the QA team.
18. Security
testing
Security tests are
performed to ensure the security of your application, in order that security
breaches can be prevented. Security experts run this kind of tests to see how
much your software is secure from attacks and to find security issues so that
the app’s security can be strengthened.
The top website security testing tools include Grabber, Arachni, Iron
Wasp, Nogotofail, SQLMap, W3af, Wapiti, Wfuzz, Zed Attack Proxy, etc.
19. Usability
testing
Testing the
user-friendliness of an app is known as usability testing. It involves the
checking of how much usable or user-friendly the app is. It is tested whether
any user can easily use your software without getting stuck.
One of the best
ways to test the usability of your software is to invite a few people to use
your software. See if they can do certain things in your app without taking any
help from you.
20. Scalability
testing
Scalability testing
verifies whether the software is scalable or not. In other words, it checks if
your app performs well when the number of users, amount of data, or the number
of transactions increases significantly. A software application that is not
scalable may cause great business loss.
21. Reliability
testing
Reliability testing
is a type of software testing that verifies if the software is reliable or not.
In other words, it checks whether the software runs error-free and that one can
rely on it.
For example, if a
user’s important information stored in the database of the software gets
suddenly deleted after a few months because of some error in the code, we can
say that the software is not reliable.
22. Acceptance
testing
The client who will
purchase your software will perform acceptance testing (also known as User
Acceptance Testing) to see if the software can be accepted or not by checking
whether your software meets all the client’s requirements and preferences. If
your software doesn’t meet all the requirements or if your client doesn’t like
something in the app, they may request you to make changes before accepting the
project.
I will write more about all of the testing types in more details in further posts.
Comments
Post a Comment