Professional Documents
Culture Documents
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?
Quality Assurance methodology has a defined cycle called PDCA cycle or Deming cycle.
The phases of this cycle are:
Plan
Do
Check
Act
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.
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.
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
The above activities are concerned with Quality Assurance and Control mechanisms for
any product and not essentially software. With respect to software
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.
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
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.
CMMI level
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.
1. Functional Testing
2. Non Functional Testing
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 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
Test Case Expected Actual
Case Test Steps Test Data Pass/Fail
Description Results Results
ID
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
Let’s create a Test Case for the scenario: Check Login Functionality
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.
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.
During test execution time, the tester will check expected results against actual results and
assign a pass or fail status
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.
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.
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
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.
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.
Name the test case id such that they are identified easily while tracking defects or identifying
a software requirement at a later stage.
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.
The test case should generate the same results every time no matter who tests it
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.
An excellent example of non-functional test would be to check how many people can
simultaneously login into a software.
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.
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/