Professional Documents
Culture Documents
Testing is the penultimate step before the launch of the product to the market. It
includes examination, analysis, observation, and evaluation of different aspects of a
product.
Similarly, established organizations need to maintain their client base and their
impression. So they have to ensure the delivery of flawless products to the end-user.
Let’s take a look at some points and see why software testing is vital to good software
development.
An enterprise can bring value to their customers only when the product delivered is
ideal. And to achieve that, organizations have to make sure that users don’t face any
issues while using their product. The fool-proof way of doing it is by making your
product bug-free. Organizations have to focus on testing applications and fix the bugs
that testing reveals before releasing the product. When the team resolves issues before
the product reaches the customer, the quality of the deliverable increases.
Improve Security
When customers use the product, they are bound to reveal some sort of personal
information. To prevent hackers from getting hold of this data, security testing is a
must before the software is released. When an organization follows a proper testing
process, it ensures a secure product that in turn makes customers feel safe while using
the product. For instance, banking applications or e-commerce stores need payment
information. If the developers don’t fix security-related bugs, it can cause massive
financial loss.
The other part of security is not losing your data. It’s common today for people to
store data in cloud storage. You also probably have your photos and files stored on
iCloud or Google drive. What if something goes wrong and you lose all your data?
One of your nightmares isn’t it? Security of a product not only protects information
from hackers but also makes sure it’s not lost or gets corrupted.
The font file in this archive was created by Joanne Taylor in Knysna, South Africa,
using Font Creator 5.6.
By using or installing this font data, you implicitly agree to certain conditions:
Please send a thumnail of any design work using this font to me,
qabbojo@gmail.com
Enjoyal.
Functional Testing
Unit testing. In unit testing, the tester checks individual software components. The aim is
to test whether the components behave according to the requirements.
Integration testing. Integration testing deals with testing individual components or
modules after they are combined in a group.
System testing. Here, the tester executes test cases for verifying the compliance of
integrated and completed software along with specifications.
Sanity testing. This tests logical reasoning related to the working of the program.
Smoke testing. Smoke testing tests simple and basic functionalities, such as if the user is
able to log in or log out.
Interface testing. These tests check whether the communication between two software
systems is correctly carried out.
Regression testing. This is probably one of the most important testing phases. Here, the
old test cases of the entire application are executed after a new functionality has been
implemented.
Beta/acceptance testing. Here, the intended users try the product and report bugs.
Non-Functional Testing
Based on the amount of information you know about the product to test it, software
testing can be divided into different types: Black-box testing, White-box testing, and
Grey-box testing.
Black-box Testing
In this type of testing, you have the least amount of information on how the product is
built. You don’t know about the structure of the product, its code, or logic. You would
use the product as an end user would. Because in black-box testing, you’d have the
same amount of information as your customer, it is used for functional testing.
This type of testing can only happen when the code is executed. Hence, dynamic
testing is used. Dynamic testing is the type where you have to execute the code and
test the product while the code execution is in process. It is mostly done to check how
the would be when it’s up and running and how the user would experience it.
White-box Testing
In white-box testing, you have most of the information about the product. White-box
testing is mostly used to make the code better. Finding inefficiencies in code, poor
coding practices, unnecessary lines of code are identified in this type of testing. Most
of the code optimization and security fixes happen as a result of this testing.
White-box testing doesn’t mainly focus on how the web application is working. It
rather focuses on how it can be made better. You can make a lot of improvements to
your product but the last few steps to make it perfect is difficult. And it can’t be
perfect until it has no issues whatsoever. Making it perfect requires a thorough
inspection. Because a product in execution can’t give you all the insights, you’ll have
to check the code without execution. This is known as static testing. Static testing is
also used in the early stages of development when it’s simple and you needn’t wait for
product deployment.
Grey-box Testing
In this type of testing, you have partial information about the product. This type of
testing is helpful to find out bugs that the user wouldn’t know about. To give you a
very simple example, if you’ve designed an element to have a blue shade but it has a
green shade. The user wouldn’t know that it’s a bug because they’d think that’s how
it’s supposed to be. But your partial knowledge of the product would help you identify
such bugs.
Now that you understand what testing’s all about, it’s time you know how to go about
the software testing process.
Planning
Every process starts with planning. In this phase, you collect all the required details
about the product. You collect a list of tasks that has to be tested first. If you’re testing
after a bug fix, then you’d want to know what the bug was and what’s the ideal
behavior. Then you have the prioritize your checklist of tasks. If a complete team is
involved, then division of tasks can also be done in this phase.
Preparation
Once you know what you have to do, you have to build the foundation for testing.
This includes preparing the test environment, collecting test-cases, researching
product features and test-cases. Gathering tools and techniques for testing and getting
familiar with them should also be done here.
Execution
This is when you actually run tests on the product. You execute test-cases and collect
the results. Then you compare the results with the expected result and see if the
product is working as expected or not. You make a note of all the successful and
failed tests and test-cases.
Reporting
This is the last phase of software testing where you have to document all your
findings and submit it to the concerned personnel. Test-case failures are of most
interest here. A proper and clear explanation of tests run and outputs should be
mentioned. For complex tests, steps to reproduce the error, screenshots, and whatever
is helpful should be mentioned.
As we know, in the current age of machines, everything that involves manual effort is
slowly automated. And the same thing is happening in the testing domain. There are
two different ways of performing software testing—manual and automation.
Manual labor in any field requires a lot of time and effort. Manual testing is a process
in which testers examine different features of an application. Here, the tester performs
the process without using any tools or test scripts. Without using any automated tools,
testers perform execution of different test cases. Finally, they generate a test report.
Quality assurance analysts test the software under development for bugs. They do so
by writing scenarios in an excel file or QA tool and testing each scenario manually.
But in automated testing, testers use scripts for testing (thus automating the process).
The pre-scripted tests run automatically to compare actual and expected outcomes.
With test automation, when constant human intervention is not necessary, things like
regression testing and execution of repetitive tasks don’t seem like much effort.
Now that you’ve got the gist of what manual and automated testing are, we need to
clarify an important question.
Even though the automatic performance of most processes takes place in automation
testing, some manual labor is still a must. Generating the initial script for testing
requires human efforts. Also, in any automated process, human supervision is
mandatory. Automation simply makes the testing process easier. However, it doesn’t
make manual testing obsolete. You only get the best result by combining both manual
and automated tests.
Why Is There Such a Huge Demand for Test Automation?
Since testing is more efficient and speedy, there’s a huge demand for automation
testing compared to manual testing. And the reason is that it helps find more bugs in
less time. By checking every single unit, automated testing also increases test
coverage. As a result, an organization’s productivity increases.
Once the testing team gives the green signal, the deliverable is ready to go out into the
market. But enterprises still need to keep in mind that customer trust doesn’t come
easily. To help earn customer trust, you need to provide consistent, reliable products.
That’s why testing is an integral part of the software development life cycle.
Testing is the penultimate step before the launch of the product to the market. It
includes examination, analysis, observation, and evaluation of different aspects of a
product.
Similarly, established organizations need to maintain their client base and their
impression. So they have to ensure the delivery of flawless products to the end-user.
Let’s take a look at some points and see why software testing is vital to good software
development.
An enterprise can bring value to their customers only when the product delivered is
ideal. And to achieve that, organizations have to make sure that users don’t face any
issues while using their product. The fool-proof way of doing it is by making your
product bug-free. Organizations have to focus on testing applications and fix the bugs
that testing reveals before releasing the product. When the team resolves issues before
the product reaches the customer, the quality of the deliverable increases.
Improve Security
When customers use the product, they are bound to reveal some sort of personal
information. To prevent hackers from getting hold of this data, security testing is a
must before the software is released. When an organization follows a proper testing
process, it ensures a secure product that in turn makes customers feel safe while using
the product. For instance, banking applications or e-commerce stores need payment
information. If the developers don’t fix security-related bugs, it can cause massive
financial loss.
The other part of security is not losing your data. It’s common today for people to
store data in cloud storage. You also probably have your photos and files stored on
iCloud or Google drive. What if something goes wrong and you lose all your data?
One of your nightmares isn’t it? Security of a product not only protects information
from hackers but also makes sure it’s not lost or gets corrupted.
The days are gone when customers worked exclusively on hefty desktops. In the
mobile-first age, testing a product’s device compatibility is a must. For instance, let’s
say your organization developed a website. The tester must check whether the website
runs on different device resolutions. Additionally, it should also run on different
browsers.
Functional Testing
Unit testing. In unit testing, the tester checks individual software components. The aim is
to test whether the components behave according to the requirements.
Integration testing. Integration testing deals with testing individual components or
modules after they are combined in a group.
System testing. Here, the tester executes test cases for verifying the compliance of
integrated and completed software along with specifications.
Sanity testing. This tests logical reasoning related to the working of the program.
Smoke testing. Smoke testing tests simple and basic functionalities, such as if the user is
able to log in or log out.
Interface testing. These tests check whether the communication between two software
systems is correctly carried out.
Regression testing. This is probably one of the most important testing phases. Here, the
old test cases of the entire application are executed after a new functionality has been
implemented.
Beta/acceptance testing. Here, the intended users try the product and report bugs.
Non-Functional Testing
Based on the amount of information you know about the product to test it, software
testing can be divided into different types: Black-box testing, White-box testing, and
Grey-box testing.
Black-box Testing
In this type of testing, you have the least amount of information on how the product is
built. You don’t know about the structure of the product, its code, or logic. You would
use the product as an end user would. Because in black-box testing, you’d have the
same amount of information as your customer, it is used for functional testing.
This type of testing can only happen when the code is executed. Hence, dynamic
testing is used. Dynamic testing is the type where you have to execute the code and
test the product while the code execution is in process. It is mostly done to check how
the would be when it’s up and running and how the user would experience it.
White-box Testing
In white-box testing, you have most of the information about the product. White-box
testing is mostly used to make the code better. Finding inefficiencies in code, poor
coding practices, unnecessary lines of code are identified in this type of testing. Most
of the code optimization and security fixes happen as a result of this testing.
White-box testing doesn’t mainly focus on how the web application is working. It
rather focuses on how it can be made better. You can make a lot of improvements to
your product but the last few steps to make it perfect is difficult. And it can’t be
perfect until it has no issues whatsoever. Making it perfect requires a thorough
inspection. Because a product in execution can’t give you all the insights, you’ll have
to check the code without execution. This is known as static testing. Static testing is
also used in the early stages of development when it’s simple and you needn’t wait for
product deployment.
Grey-box Testing
In this type of testing, you have partial information about the product. This type of
testing is helpful to find out bugs that the user wouldn’t know about. To give you a
very simple example, if you’ve designed an element to have a blue shade but it has a
green shade. The user wouldn’t know that it’s a bug because they’d think that’s how
it’s supposed to be. But your partial knowledge of the product would help you identify
such bugs.
Now that you understand what testing’s all about, it’s time you know how to go about
the software testing process.
Planning
Every process starts with planning. In this phase, you collect all the required details
about the product. You collect a list of tasks that has to be tested first. If you’re testing
after a bug fix, then you’d want to know what the bug was and what’s the ideal
behavior. Then you have the prioritize your checklist of tasks. If a complete team is
involved, then division of tasks can also be done in this phase.
Preparation
Once you know what you have to do, you have to build the foundation for testing.
This includes preparing the test environment, collecting test-cases, researching
product features and test-cases. Gathering tools and techniques for testing and getting
familiar with them should also be done here.
Execution
This is when you actually run tests on the product. You execute test-cases and collect
the results. Then you compare the results with the expected result and see if the
product is working as expected or not. You make a note of all the successful and
failed tests and test-cases.
Reporting
This is the last phase of software testing where you have to document all your
findings and submit it to the concerned personnel. Test-case failures are of most
interest here. A proper and clear explanation of tests run and outputs should be
mentioned. For complex tests, steps to reproduce the error, screenshots, and whatever
is helpful should be mentioned.
As we know, in the current age of machines, everything that involves manual effort is
slowly automated. And the same thing is happening in the testing domain. There are
two different ways of performing software testing—manual and automation.
Manual labor in any field requires a lot of time and effort. Manual testing is a process
in which testers examine different features of an application. Here, the tester performs
the process without using any tools or test scripts. Without using any automated tools,
testers perform execution of different test cases. Finally, they generate a test report.
Quality assurance analysts test the software under development for bugs. They do so
by writing scenarios in an excel file or QA tool and testing each scenario manually.
But in automated testing, testers use scripts for testing (thus automating the process).
The pre-scripted tests run automatically to compare actual and expected outcomes.
With test automation, when constant human intervention is not necessary, things like
regression testing and execution of repetitive tasks don’t seem like much effort.
Now that you’ve got the gist of what manual and automated testing are, we need to
clarify an important question.
Even though the automatic performance of most processes takes place in automation
testing, some manual labor is still a must. Generating the initial script for testing
requires human efforts. Also, in any automated process, human supervision is
mandatory. Automation simply makes the testing process easier. However, it doesn’t
make manual testing obsolete. You only get the best result by combining both manual
and automated tests.
Why Is There Such a Huge Demand for Test Automation?
Since testing is more efficient and speedy, there’s a huge demand for automation
testing compared to manual testing. And the reason is that it helps find more bugs in
less time. By checking every single unit, automated testing also increases test
coverage. As a result, an organization’s productivity increases.
Once the testing team gives the green signal, the deliverable is ready to go out into the
market. But enterprises still need to keep in mind that customer trust doesn’t come
easily. To help earn customer trust, you need to provide consistent, reliable products.
That’s why testing is an integral part of the software development life cycle.
What is a bug?
If testers find any mismatch in the application/system in testing phase then they
call it as Bug.
What is an error?
We can’t compile or run a program due to coding mistake in a program. If a
developer unable to successfully compile or run a program then they call it as
an error.
What is a failure?
Once the product is deployed and customers find any issues then they call the
product as a failure product. After release, if an end user finds an issue then that
particular issue is called as failure
Points to know:
If a Quality Analyst (QA) finds a bug, he has to reproduce and record it using the
bug report template.
Earlier I have posted a detailed post on “Bug Report Template”. If you haven’t
gone through it, you can browse by clicking here.
Defect Status
Defect Status or Bug Status in defect life cycle is the present state from which the
defect or a bug is currently undergoing. The goal of defect status is to precisely
convey the current state or progress of a defect or bug in order to better track and
understand the actual progress of the defect life cycle.
The number of states that a defect goes through varies from project to project. Below
lifecycle diagram, covers all possible states
New: When a new defect is logged and posted for the first time. It is assigned a
status as NEW.
Assigned: Once the bug is posted by the tester, the lead of the tester approves
the bug and assigns the bug to the developer team
Open: The developer starts analyzing and works on the defect fix
Fixed: When a developer makes a necessary code change and verifies the
change, he or she can make bug status as "Fixed."
Pending retest: Once the defect is fixed the developer gives a particular code
for retesting the code to the tester. Since the software testing remains pending
from the testers end, the status assigned is "pending retest."
Retest: Tester does the retesting of the code at this stage to check whether the
defect is fixed by the developer or not and changes the status to "Re-test."
Verified: The tester re-tests the bug after it got fixed by the developer. If there
is no bug detected in the software, then the bug is fixed and the status assigned
is "verified."
Reopen: If the bug persists even after the developer has fixed the bug, the
tester changes the status to "reopened". Once again the bug goes through the
life cycle.
Closed: If the bug is no longer exists then tester assigns the status "Closed."
Duplicate: If the defect is repeated twice or the defect corresponds to the same
concept of the bug, the status is changed to "duplicate."
Rejected: If the developer feels the defect is not a genuine defect then it
changes the defect to "rejected."
Deferred: If the present bug is not of a prime priority and if it is expected to
get fixed in the next release, then status "Deferred" is assigned to such bugs
Not a bug:If it does not affect the functionality of the application then the
status assigned to a bug is "Not a bug".
What is Priority?
Priority is defined as the order in which a defect should be fixed. Higher the priority
the sooner the defect should be resolved.
Defects that leave the software system unusable are given higher priority over defects
that cause a small functionality of the software to fail.
Bug Severity
Bug Severity or Defect Severity in testing is a degree of impact a bug or a Defect has
on the software application under test. A higher effect of bug/defect on system
functionality will lead to a higher severity level. A Quality Assurance engineer
usually determines the severity level of a bug/defect.
KEY DIFFERENCE
Priority is the order in which the developer should resolve a defect whereas
Severity is the degree of impact that a defect has on the operation of the
product.
Priority is categorized into three types : low, medium and high whereas
Severity is categorized into five types : critical. major, moderate, minor and
cosmetic.
Priority is associated with scheduling while Severity is associated with
functionality or standards.
Priority indicates how soon the bug should be fixed whereas Severity indicates
the seriousness of the defect on the product functionality.
Priority of defects is decided in consultation with the manager/client while
Severity levels of the defects are determined by the QA engineer.
Priority is driven by business value while Severity is driven by functionality.
Priority value is subjective and can change over a period of time depending on
the change in the project situation whereas Severity value is objective and less
likely to change.
High Priority and low severity status indicates, defect have to be fixed on
immediate bases but does not affect the application while High Severity and
low priority status indicates defect have to be fixed but not on immediate bases.
Priority status is based on customer requirements whereas Severity status is
based on the technical aspect of the product.
Types of Severity
In Software Testing, Types of Severity of bug/defect can be categorized into four
parts :
Critical: This defect indicates complete shut-down of the process, nothing can
proceed further
Major: It is a highly severe defect and collapses the system. However, certain
parts of the system remain functional
Medium: It causes some undesirable behavior, but the system is still functional
Low: It won't cause any major break-down of the system
Priority Types
Types of Priority of bug/defect can be categorized into three parts :
Low: The Defect is an irritant but repair can be done once the more serious
Defect has been fixed
Medium: During the normal course of the development activities defect should
be resolved. It can wait until a new version is created
High: The defect must be resolved as soon as possible as it affects the system
severely and cannot be used until it is fixed