You are on page 1of 23

What is Quality Assurance (QA) in

Software Testing?
What is Quality?

Quality is extremely hard to define, and it is simply stated: “Fit for use or purpose.” It is all
about meeting the needs and expectations of customers with respect to functionality, design,
reliability, durability, & price of the product.

What is Assurance?

Assurance is nothing but a positive declaration on a product or service, which gives


confidence. It is certainty of a product or a service, which it will work well. It provides a
guarantee that the product will work without any problems as per the expectations or
requirements.

What is Quality Assurance in Software Testing

Quality Assurance in Software Testing is defined as a procedure to ensure the quality of


software products or services provided to the customers by an organization. Quality
assurance focuses on improving the software development process and making it efficient
and effective as per the quality standards defined for software products. Quality Assurance is
popularly known as QA Testing.

How to do Quality Assurance: Complete Process

Quality Assurance methodology has a defined cycle called PDCA cycle or Deming cycle.
The phases of this cycle are:

 Plan
 Do
 Check
 Act

Quality Assurance Process


These above steps are repeated to ensure that processes followed in the organization are
evaluated and improved on a periodic basis. Let’s look into the above QA Process steps in
detail –

 Plan – Organization should plan and establish the process related objectives and
determine the processes that are required to deliver a high-Quality end product.
 Do – Development and testing of Processes and also “do” changes in the processes
 Check – Monitoring of processes, modify the processes, and check whether it meets
the predetermined objectives
 Act – A Quality Assurance tester should implement actions that are necessary to
achieve improvements in the processes

An organization must use Quality Assurance to ensure that the product is designed and
implemented with correct procedures. This helps reduce problems and errors, in the final
product.

What is Quality Control?

Quality control popularly abbreviated as QC. It is a Software Engineering process used to


ensure quality in a product or a service. It does not deal with the processes used to create a
product; rather it examines the quality of the “end products” and the final outcome.

The main aim of Quality control is to check whether the products meet the specifications and
requirements of the customer. If an issue or problem is identified, it needs to be fixed before
delivery to the customer.

QC also evaluates people on their quality level skill sets and imparts training and
certifications. This evaluation is required for the service based organization and helps provide
“perfect” service to the customers.

Difference between Quality Control and Quality Assurance?

Sometimes, QC is confused with the QA. Quality control is to examine the product or service
and check for the result. Quality Assurance in Software Engineering is to examine the
processes and make changes to the processes which led to the end-product.
Quality Control V/s Quality Assurance

Examples of QC and QA activities are as follows:

Quality Control Activities Quality Assurance Activities

Walkthrough Quality Audit

Testing Defining Process

Inspection Tool Identification and selection

Checkpoint review Training of Quality Standards and Processes

The above activities are concerned with Quality Assurance and Control mechanisms for
any product and not essentially software. With respect to software

 QA becomes SQA ( Software Quality Assurance)


 QC becomes Software Testing.

Differences between SQA and Software Testing

Following table explains on differences between SQA and Software Testing:

SQA Software Testing


Software Quality Assurance is about engineering process Software Testing is to test a product for
that ensures quality problems before the product goes live

Involves activities related to the implementation of


Involves actives concerning verification
processes, procedures, and standards. Example – Audits
of product Example – Review Testing
Training

Process focused Product focused

Preventive technique Corrective technique

Proactive measure Reactive measure

The scope of SQA applied to all products that will be created The scope of Software Testing applies to
by the organization a particular product being tested.

Best practices for Quality Assurance:

 Create a Robust Testing Environment


 Select release criteria carefully
 Apply automated testing to high-risk areas to save money. It helps to fasten the entire
process.
 Allocate Time Appropriately for each process
 It is important to prioritize bugs fixes based on software usage
 Form dedicated security and performance testing team
 Simulate customer accounts similar to a production environment

Quality Assurance Functions:

There are 5 primary Quality Assurance Functions:

1. Technology transfer: This function involves getting a product design document as well as
trial and error data and its evaluation. The documents are distributed, checked and
approved
2. Validation: Here validation master plan for the entire system is prepared. Approval of test
criteria for validating product and process is set. Resource planning for execution of a
validation plan is done.
3. Documentation: This function controls the distribution and archiving of documents. Any
change in a document is made by adopting the proper change control procedure. Approval
of all types of documents.
4. Assuring Quality of products
5. Quality improvement plans

Quality Assurance Certifications:

There are several certifications available in the industry to ensure that Organizations follow
Standards Quality Processes. Customers make this as qualifying criteria while selecting a
software vendor.
ISO 9000

This standard was first established in 1987, and it is related to Quality Management Systems.
This helps the organization ensure quality to their customers and other stakeholders. An
organization who wishes to be certified as ISO 9000 is audited based on their functions,
products, services and their processes. The main objective is to review and verify whether the
organization is following the process as expected and check whether existing processes need
improvement.

This certification helps –

 Increase the profit of the organization


 Improves Domestic and International trade
 Reduces waste and increase the productivity of the employees
 Provide Excellent customer satisfaction

CMMI level

The Capability Maturity Model Integrated (CMMI) is a process improvement approach


developed specially for software process improvement. It is based on the process maturity
framework and used as a general aid in business processes in the Software Industry. This
model is highly regarded and widely used in Software Development Organizations.

CMMI has 5 levels. An organization is certified at CMMI level 1 to 5 based on the maturity
of their Quality Assurance Mechanisms.

 Level 1 – Initial: In this stage the quality environment is unstable. Simply, no processes have
been followed or documented
 Level 2 – Repeatable: Some processes are followed which are repeatable. This level ensures
processes are followed at the project level.
 Level 3 – Defined: Set of processes are defined and documented at the organizational level.
Those defined processes are subject to some degree of improvement.
 Level 4 – Managed: This level uses process metrics and effectively controls the processes
that are followed.
 Level 5 – Optimizing: This level focuses on the continuous improvements of the processes
through learning &  innovation.

Conclusion:

Quality Assurance is to check whether the product developed is fit for use. For that,
Organization should have processes and standards to be followed which need to be improved
on a periodic basis. It concentrates mainly on the quality of product/service that we are
providing to the customers during or after implementation of software.

Different Types Of Software Testing :-


The quality of a software product is always a priority for business and not an option. So ideally, when
a business is considering maintenance, you must place the best software testing strategies in place.
Making quality and performance an indispensable part of a quality assurance program brings
software testing services in focus for many businesses. There are multiple types of software testing
like agile testing, automation testing, unit testing, usability testing, acceptance testing, security
testing, sanity testing, smoke testing, compatibility testing, ad hoc testing, integration testing,
performance, and several other so types of software testing too. It is time to explore all types of
software testing and get to know which one will help us resolve which type of flaws. So, let’s get
started.

Functional Testing and Non-Functional Testing

Testing has two major categorical bifurcations

1. Functional Testing
2. Non Functional Testing

Let’s see what each of these technical aspects stands for.

1. 1 Functional testing 

Functional testing ensures that a software application’s functionalities are as specified in the
requirements. The key differentiator of Functional testing is that it does not rely on the
application’s source code. You can check the User Interface, Database, APIs, Client/Server
applications, as well as the security and functioning of the program under test, verify if all
options are available or not. You can do Functional testing either manually or with the help of
software i.e automatically.
1.2 Non-Functional Testing

Non-functional testing examines the application’s non-functional characteristics, such as


performance, usability, and dependability among others. You can perform tests in this section
that have an influence on the basis of what affects the performance of the application. There
are multiple ways you can analyze the non-functional aspects of business apps with software
testing.

The initial black box testing and white box testing also had these functional testing imbibed
in it. The perception of ways are different but it has the same agenda of making application
bug-free and high-performing. Let’s get deeper and understand each type of software testing.

2. Types of Functional Testing

2.1 Unit Testing

Unit tests are done in many steps as rightly highlighted in the tweet below. It is one of the
most important types of software testing.

As a developer, you write code. Unit testing is the software development practice of writing
additional code, called unit tests.

In unit testing, individual units or components of software are tested. In this type of software
testing, each unit is minutely observed and analyzed.  The goal of Unit Testing is to ensure
that each component of the software works as intended. A unit is the smallest possible unit of
software that requires testing. It generally just has one or a few inputs and one output.
Programmers/ developers carry out this process and not the testers. Because it encompasses
each code of testing which is equivalent to coding again if testers do that. Hence, developers
perform this type of unit testing.

Example of Unit Testing-  Python unittest – unit test example

2.2 Integration Testing

In integration testing, individual components are integrated and tested as a group. This level
of testing is designed to reveal flaws in the interaction of integrated units.

There are different ways of approaching the integration tests of your software development
life cycle. It can be through top down approach, big bang approach or Sandwich/hybrid.

2.3 System Testing

In the software testing phenomenon, system testing plays an equally important role. You
perform this type of testing to check whether the system meets the standards and accordingly
match up the system standards. This performs end-to-end testing where there are system
plans, system test cases and system tests. You  can use various software testing methods to
test the system and perform functional testing and you can also use different types of testing
tools.
2.4 Interface Testing

As rightly said in this tweet, User interface testing sets the ground for usability on your
websites, web apps, and mobile applications.

User interface testing sets the ground for usability on your websites, web apps, and mobile
applications.

Interface is basically the platform that connects the back end side of functioning and front
end side of the developed application. You can test the user interface of an application during
user interface testing. The purpose of user interface testing is to ensure that the user interface
is built in accordance with the requirements specifications document. When you see an
application running successfully with great UIs, the reason behind it is strong interface testing
that has made the application robust and secure to perform in any environment.

2.5 Regression Testing

Regression testing is an important step for a product’s development and is highly helpful for
developers in determining the product’s stability whenever there are modifications in need.
Regression testing ensures that a software update does not affect the product’s current
functioning. The regression testing allows developers to build tests, till the application is bug-
free. Regression testing blindly follows a few techniques such as retest all where there is
retesting of the whole app till it becomes error-free. Here the execution of Regression test
case prioritization is as per priority, criticality and its implication on the developing
application. After this step, you can ensure that the developed app is all set to break into the
market. Now at this point majorly, all the tests are completed and all the errors are also
addressed.
2.6 User Acceptance Testing

Acceptance Testing is a type of software testing that examines the acceptability of a system.
The goal of this test is to determine whether the system meets the business requirements and
whether it is suitable for delivery. User Acceptance Testing determines whether or not the
software can be accepted by ensuring that it fulfills all of the client’s criteria and if it is not
then it is sent back to the developers to accurately check the requirement sheet and make sure
you meet the unmet requirements. Later, it will again undergo the same regression testing to
make sure everything is in place.

2.7 Alpha Testing

Alpha testing is a type of testing that looks for all of the software’s faults and problems. You
can carry this type of test towards the end of the app development process, before the product
launch or delivery to the client, to guarantee that the user/client receives an error-free
software program. Alpha testing comes before beta testing, therefore you’ll need to do beta
testing after you’ve finished with alpha testing. Alpha testing isn’t done in a real testing
environment. Instead, carry these assessments in a virtual environment that closely matches
the actual world.

Here is an image showing the 7 criteria to start Alpha Testing:

2.8 Beta Testing

This test is conducted in small numbers of actual customers or users in a real-world setting to
ensure that the program is error-free and runs smoothly. You can make improvements to the
software after gathering input and constructive criticism from those users.

Here is an image showing the 7 criteria to start Beta Testing:


3. Types of Non-Functional Testing

xample Test Cases Non-Functional Testing

Following are examples of Non-Functional Testing

Test Case Test Case Domain


#

Application load time should not be more than 5 secs up to 1000 users Performance
1
accessing it simultaneously Testing

Compatibility
2 Software should be installable on all versions of Windows and Mac
Testing

Accessibility
3 All web images should have alt tags
testing.

The fundamentals of software testing remains unchanged and there are businesses who take
functional testing as well non- functional testing at equal importance. We have already seen
how functional testing works and what its types are. Now, when it comes to non-functional
testing, its primary function is to put the applications under test, based on load, how they
perform in terms of performance, reliability, usability, and scalability among other things.
Non-functional testing such as load and stress testing is commonly performed with the use of
test automation tools and solutions like LoadView.

3.1 Documentation Testing

There is a document in preparation for the test to pass smoothly. With documentation testing
aids in the estimation of testing effort and coverage. The test strategy, test cases, and
requirements section are all included in the software documentation. Check almost all types
of documents, examples, methods, and samples as input in the document are legit or not. If
not, modify it and correct it.

3.2 Installation Testing

In the software business, installation testing is a form of quality assurance work. This has its
major focus on what consumers will need to do at the time of installation and set up new
software. It could be anything from a third-party backup app, link description, or any other
essential needs. It can be full, partial, or upgrade type of install/uninstall operations may be
part of the testing process. This is a non-functional need but without this the installation
process won’t succeed
3.3 Performance Testing

Performance testing determines whether or not the program is performing well as per the
expectations. There are performance testing tools that assess the performance of your app and
show you where the problems are. You may improve the performance of your software
program by addressing these concerns.

The general objective of this performance testing is to compare an application’s performance


to different operating systems and network benchmarks such as CPU utilization, page load
speed, peak traffic handling, server resource consumption, and so on. There are numerous
different forms of performance testing, such as load testing and stress testing. Following are
the 4 essential types of performance testing.
3.3.1  Load Testing

Load testing is a type of performance testing that determines how much load a system can
withstand before its performance degrades. You can determine a system’s load capacity by
performing load testing. If your developed application is able to take the amount of audiences
targeted at a single time then the load test is successful. Unit tests are performed here to
understand how much is the load at each feature and how you should resolve it to make it a
seamless performer.

3.3.2 Stress Testing

Stress is another type of performance testing that ensures the maximum limit of load that can
be applied on a website or application. This type of software testing ensures the feasibility of
the application or website or any software and how it can be addressed.

3.3.3 Endurance Testing

This type of testing is continuous testing measures a specific type of workload given applied
consistently on the website. Based on this, you can make the decision of the estimation of
users and concurrent users using these apps.

3.3.4  Spike Testing

For specific business scenarios when there is an unexpected user intervention or load applied
in any other form on application. This is a precautionary measure to understand how the app
reacts when the load is low.
3.4 Reliability Testing

Reliability testing ensures that the product is free of flaws and capable of performing its
intended function.It’s all about testing an application to find out whether it has any flaws
before deploying it. Each function in the software should be run at least once as part of the
feature test. In addition, there should be less interaction between two or more functions.
Within the reliability test, you can also perform regression tests whenever there is an addition
of a new functionality or deletion of old functionality. This is to ensure there is no entry of 
new issues in the system.

Before setting the reliability testing objectives, you must mark certain restrictions such as
software behavior under certain testing environments, attainable targets, and time.

3.5 Security Testing

As a software testing practice, you must consider security tests to be the first thing. There are
multiple ways you can maintain the security of the application. Security testing is a type of
software testing that guarantees that an organization’s systems and applications are free of
flaws. The goal of security testing is to identify any system flaws that might lead to data loss
or bad market reputation.

Other Aspects of Manual Testing Vs Automated Testing

Manual or Automated- both these types of software testing just defines the speed and the
precision with which the testing is done. As simple as it sounds, there are so many different
aspects that make both these types of software testing different from each other.

4.1 Manual Testing 

Manual testing is done manually by a testing team  by exploring and interacting through the
developed application.The tester gets a chance to interact with software, APIs and all other
necessary functions where flaws can be identified and resolved. You can use appropriate
tools which will help you identify the bugs easily and at an early stage. 

This method seems to be tedious and expensive too. If the project is bigger, you might need
to add more resources, spend on infrastructure, hiring and training costs are additional. As
this requires a proper set up, it is quite obvious to make human mistakes which might later
affect the overall output of the app.

4.2 Automated Testing

The concept of automated testing was brought into picture to level up the game of manual
testing. How to improve your manual testing skills is not the question here, the primary
aspect here is how automation or automated testing works. Automated testing is carried out
by a machine that runs a pre-programmed test script. The complexity of these tests might
range from checking a single method in a class to ensuring that completing a sequence of
complex actions in the UI produces the same results. 
Automated testing uses programs to run and check the errors in the software or developed
app. The efficiency cannot be questioned and the speed too.  It is far more robust and
dependable than manual tests, yet the quality of your automated tests is determined by how
well your test scripts are written.

How to Write Test Cases in Software


Testing with Examples
What is a Test Case?

A Test Case is a set of actions executed to verify a particular feature or functionality of your
software application. A Test Case contains test steps, test data, precondition, post-condition
developed for specific test scenario to verify any requirement. The test case includes specific
variables or conditions, using which a testing engineer can compare expected and actual
results to determine whether a software product is functioning as per the requirements of the
customer.

Test Scenario Vs Test Case

Test scenarios are rather vague and cover a wide range of possibilities. Testing is all about
being very specific.

For a Test Scenario: Check Login Functionality there many possible test cases are:

 Test Case 1: Check results on entering valid User Id & Password


 Test Case 2: Check results on entering Invalid User ID & Password
 Test Case 3: Check response when a User ID is Empty & Login Button is pressed, and many
more

This is nothing but a Test Case.

The format of Standard Test Cases

Below is a format of a standard login Test cases example.

Test
Test Case Expected Actual
Case Test Steps Test Data Pass/Fail
Description Results Results
ID

TU01 Check 1. Go to site Userid = User should As Pass


http://demo.guru99.c
Customer om guru99
2. Enter UserId Login into an
Login with Password = Expected
3. Enter Password application
valid Data pass99
4. Click Submit

1. Go to site
Check http://demo.guru99.c Userid = User should
Customer om guru99 not Login As
TU02 2. Enter UserId Pass
Login with Password = into an Expected
3. Enter Password
invalid Data glass99 application
4. Click Submit

This entire table may be created in Word, Excel or any other Test management tool. That’s
all to Test Case Design

How to Write Test Cases in Manual Testing

Let’s create a Test Case for the scenario: Check Login Functionality

Step 1) A simple test case to explain the scenario would be

Test Case # Test Case Description


1 Check response when valid email and password is entered

Step 2) Test the Data.


In order to execute the test case, you would need Test Data. Adding it below

Test Case
Test Case Description Test Data
#
1 Check response when valid email and Email: guru99@email.com Password:
password is entered lNf9^Oti7^2h

Identifying test data can be time-consuming and may sometimes require creating test data
afresh. The reason it needs to be documented.

Step 3) Perform actions.


In order to execute a test case, a tester needs to perform a specific set of actions on the AUT.
This is documented as below:

Test
Test Case Description Test Steps Test Data
Case #
1) Enter Email
Address Email:
Check response when valid email and guru99@email.com
1
password is entered 2) Enter Password
Password: lNf9^Oti7^2h
3) Click Sign in

Many times the Test Steps are not simple as above, hence they need documentation. Also, the
author of the test case may leave the organization or go on a vacation or is sick and off duty
or is very busy with other critical tasks. A recently hire may be asked to execute the test case.
Documented steps will help him and also facilitate reviews by other stakeholders.

Step 4) Check behaviour of the AUT.


The goal of test cases in software testing is to check behaviour of the AUT for an expected
result. This needs to be documented as below
Test
Test Case Description Test Data Expected Result
Case #
Email:
Check response when valid email and guru99@email.com Login should be
1
password is entered Password: successful
lNf9^Oti7^2h

During test execution time, the tester will check expected results against actual results and
assign a pass or fail status

Test Test Case Expected Actual


Test Data Pass/Fail
Case # Description Result Result
Check response when Email:
Login should Login was
1 valid email and guru99@email.com Pass
be successful successful
password is entered Password: lNf9^Oti7^2h

Step 5) That apart your test case -may have a field like,
Pre – Condition which specifies things that must be in place before the test can run. For our
test case, a pre-condition would be to have a browser installed to have access to the site under
test. A test case may also include Post – Conditions which specifies anything that applies
after the test case completes. For our test case, a postcondition would be time & date of login
is stored in the database
Best Practice for writing good Test Case.

Test Case Best Practice

1. Test Cases need to be simple and transparent:

Create test cases that are as simple as possible. They must be clear and concise as the author
of the test case may not execute them.

Use assertive language like go to the home page, enter data, click on this and so on. This
makes the understanding the test steps easy and tests execution faster.

2. Create Test Case with End User in Mind

The ultimate goal of any software project is to create test cases that meet customer
requirements and is easy to use and operate. A tester must create test cases keeping in mind
the end user perspective

3. Avoid test case repetition.

Do not repeat test cases. If a test case is needed for executing some other test case, call the
test case by its test case id in the pre-condition column

4. Do not Assume
Do not assume functionality and features of your software application while preparing test
case. Stick to the Specification Documents.

5. Ensure 100% Coverage

Make sure you write test cases to check all software requirements mentioned in the
specification document. Use Traceability Matrix to ensure no functions/conditions is left
untested.

6. Test Cases must be identifiable.

Name the test case id such that they are identified easily while tracking defects or identifying
a software requirement at a later stage.

7. Implement Testing Techniques

It’s not possible to check every possible condition in your software application. Software
Testing techniques help you select a few test cases with the maximum possibility of finding a
defect.

 Boundary Value Analysis (BVA): As the name suggests it’s the technique that defines the
testing of boundaries for a specified range of values.
 Equivalence Partition (EP): This technique partitions the range into equal parts/groups that
tend to have the same behavior.
 State Transition Technique: This method is used when software behavior changes from one
state to another following particular action.
 Error Guessing Technique: This is guessing/anticipating the error that may arise while doing
manual testing. This is not a formal method and takes advantages of a tester’s experience
with the application

8. Self-cleaning

The test case you create must return the Test Environment to the pre-test state and should not
render the test environment unusable. This is especially true for configuration testing.

9. Repeatable and self-standing

The test case should generate the same results every time no matter who tests it

10. Peer Review.

After creating test cases, get them reviewed by your colleagues. Your peers can uncover
defects in your test case design, which you may easily miss.

While drafting a test case to include the following information

 The description of what requirement is being tested


 The explanation of how the system will be tested
 The test setup like a version of an application under test, software, data files, operating
system, hardware, security access, physical or logical date, time of day, prerequisites such as
other tests and any other setup information pertinent to the requirements being tested
 Inputs and outputs or actions and expected results
 Any proofs or attachments
 Use active case language
 Test Case should not be more than 15 steps
 An automated test script is commented with inputs, purpose and expected results
 The setup offers an alternative to pre-requisite tests
 With other tests, it should be an incorrect business scenario order

What is Non-Functional Testing?

Non-Functional Testing is defined as a type of Software testing to check non-functional


aspects (performance, usability, reliability, etc.) of a software application. It is designed to
test the readiness of a system as per non-functional parameters which are never addressed by
functional testing.

An excellent example of non-functional test would be to check how many people can
simultaneously login into a software.

Non-functional testing is equally important as functional testing and affects client


satisfaction.

Differences Between Test Scenario Vs Test Case In Tabular Format

Test Cases Test Scenarios

A concept which provides detailed


A concept which provides one-line
What it is => information what to test, steps to be taken
information about what to test.
and expected result of the same

It’s more about thinking and discussing


It’s about => It’s more about documenting details.
details.

Importance => It’s important when testing is off shored It’s important when time is less and most
Test Cases Test Scenarios

and development is onsite. Writing test of the team members can agree /
cases with details will help both dev and understand the details from one-liner
QA team in sync. scenario.

A time saver and idea generation activity,


One time documentation of all the test preferred by new generation software
cases is beneficial to track 1000s rounds of testing community.
regression testing in future. Modification and addition is simple and
Most of the time, its helpful while bug not specific to a person.
Advantage =>
reporting. Tester just need to give For a huge project, where group of people
reference of test case ID and does not know specific modules only, this activity
require mentioning each and every minute gives a chance to everyone to look into
detail. other modules and brain storm and
discuss

Good test coverage can be achieved by


Beneficial to A full-proof test case document is a life line dividing application in test scenarios and it
=> for new tester. reduces repeatability and complexity of
product

If created by specific person, the reviewer


Time and money consuming as it requires
Disadvantage or the other user might not sync the exact
more resources to detail out everything
=> idea behind it. Need more discussions and
about what to test and how to test
team efforts.
References:

https://www.guru99.com/all-about-quality-assurance.html

https://www.guru99.com/test-case.html

https://www.guru99.com/quality-assurance-vs-quality-control.html

https://www.tatvasoft.com/outsourcing/2021/09/types-of-software-testing.html

https://www.digitalocean.com/community/tutorials/python-unittest-unit-test-example

https://www.softwaretestinghelp.com/types-of-software-testing/

You might also like