0-Software Testing Tutorial
0-Software Testing Tutorial
This tutorial will give you a basic understanding on software testing, its types,
methods, levels, and other related terminologies.
Audience
This tutorial is designed for software testing professionals who would like to
understand the Testing Framework in detail along with its types, methods, and
levels. This tutorial provides enough ingredients to start with the software
testing process from where you can take yourself to higher levels of expertise.
Prerequisites
Before proceeding with this tutorial, you should have a basic understanding of
the software development life cycle (SDLC). In addition, you should have a basic
understanding of software programming using any programming language.
Table of Contents
1. OVERVIEW ................................................................................................................................... 1
2. MYTHS ......................................................................................................................................... 4
Myth 8: Test Automation should be used Wherever Possible to Reduce Time .......................................... 5
ii
Audit and Inspection ................................................................................................................................. 7
What to Automate?................................................................................................................................. 12
6. TESTING LEVELS.........................................................................................................................18
iii
Regression Testing ................................................................................................................................... 20
Acceptance Testing.................................................................................................................................. 20
7. DOCUMENTATION ....................................................................................................................26
iv
1. OVERVIEW
Testing
Software
What is Testing?
Testing is the process of evaluating a system or its component(s) with the intent
to find whether it satisfies the specified requirements or not. In simple words,
testing is executing a system in order to identify any gaps, errors, or missing
requirements in contrary to the actual requirements.
Software Tester
Software Developer
Project Lead/Manager
End User
Different companies have different designations for people who test the software
on the basis of their experience and knowledge such as Software Tester,
Software Quality Assurance Engineer, QA Analyst, etc.
It is not possible to test the software at any time during its cycle. The next two
sections state when testing should be started and when to end it during the
SDLC.
formal testing is conducted in the testing phase; but in the incremental model,
testing is performed at the end of every increment/iteration and the whole
application is tested at the end.
Reviewing the design in the design phase with the intent to improve the
design is also considered as testing.
Testing Deadlines
Bug rate falls below a certain level and no high-priority bugs are identified
Management decision
2
Software Testing
3
Software Testing
2. MYTHS
Given below are some of the most common myths about software testing.
4
Software Testing
5
Software Testing
4. TYPES OF TESTING
This section describes the different types of testing that may be used to test a
software during SDLC.
Manual Testing
Manual testing includes testing a software manually, i.e., without using any
automated tool or any script. In this type, the tester takes over the role of an
end-user and tests the software to identify any unexpected behavior or bug.
There are different stages for manual testing such as unit testing, integration
testing, system testing, and user acceptance testing.
Testers use test plans, test cases, or test scenarios to test a software to ensure
the completeness of testing. Manual testing also includes exploratory testing, as
testers explore the software to identify errors in it.
Automation Testing
Automation testing, which is also known as Test Automation, is when the tester
writes scripts and uses another software to test the product. This process
involves automation of a manual process. Automation Testing is used to re-run
the test scenarios that were performed manually, quickly, and repeatedly.
Apart from regression testing, automation testing is also used to test the
application from load, performance, and stress point of view. It increases the
test coverage, improves accuracy, and saves time and money in comparison to
manual testing.
11
Software Testing
What to Automate?
It is not possible to automate everything in a software. The areas at which a
user can make transactions such as the login form or registration forms, any
area where large number of users can access the software simultaneously
should be automated.
Furthermore, all GUI items, connections with databases, field validations, etc.
can be efficiently tested by automating the manual process.
When to Automate?
Test Automation should be used by considering the following aspects of a
software:
Availability of time
How to Automate?
Automation is done by using a supportive computer language like VB scripting
and an automated software application. There are many tools available that can
be used to write automation scripts. Before mentioning the tools, let us identify
the process that can be used to automate the testing process:
Execution of scripts
12
Software Testing
Selenium
SilkTest
TestComplete
Testing Anywhere
WinRunner
LaodRunner
WATIR
13
Software Testing
5. TESTING METHODS
There are different methods that can be used for software testing. This chapter
briefly describes the methods available.
Black-Box Testing
The technique of testing without having any knowledge of the interior workings
of the application is called black-box testing. The tester is oblivious to the
system architecture and does not have access to the source code. Typically,
while performing a black-box test, a tester will interact with the system's user
interface by providing inputs and examining outputs without knowing how and
where the inputs are worked upon.
The following table lists the advantages and disadvantages of black-box testing.
Advantages Disadvantages
Well suited and efficient for large Limited coverage, since only a
code segments. selected number of test scenarios
is actually performed.
White-Box Testing
White-box testing is the detailed investigation of internal logic and structure of
the code. White-box testing is also called glass testing or open-box testing.
In order to perform white-box testing on an application, a tester needs to know
the internal workings of the code.
14
Software Testing
The tester needs to have a look inside the source code and find out which
unit/chunk of the code is behaving inappropriately.
The following table lists the advantages and disadvantages of white-box testing.
Advantages Disadvantages
As the tester has knowledge of Due to the fact that a skilled tester
the source code, it becomes is needed to perform white-box
very easy to find out which type testing, the costs are increased.
of data can help in testing the
application effectively.
Sometimes it is impossible to look
It helps in optimizing the code.
into every nook and corner to find
Extra lines of code can be out hidden errors that may create
removed which can bring in problems, as many paths will go
hidden defects. untested.
Grey-Box Testing
Grey-box testing is a technique to test the application with having a limited
knowledge of the internal workings of an application. In software testing, the
phrase the more you know, the better carries a lot of weight while testing an
application.
Mastering the domain of a system always gives the tester an edge over someone
with limited domain knowledge. Unlike black-box testing, where the tester only
tests the application's user interface; in grey-box testing, the tester has access
to design documents and the database. Having this knowledge, a tester can
prepare better test data and test scenarios while making a test plan.
Advantages Disadvantages
15
Software Testing
The internal workings The tester has limited Tester has full
of an application need knowledge of the internal knowledge of the
not be known. workings of the internal workings of the
application. application.
16
Software Testing
Not suited for Not suited for algorithm Suited for algorithm
algorithm testing. testing. testing.
This can only be done Data domains and Data domains and
by trial-and-error internal boundaries can internal boundaries can
method. be tested, if known. be better tested.
17
6. TESTING LEVELSSoftware Testing
There are different levels during the process of testing. In this chapter, a brief
description is provided about these levels.
Functional Testing
Non-functional Testing
Functional Testing
This is a type of black-box testing that is based on the specifications of the
software that is to be tested. The application is tested by providing input and
then the results are examined that need to conform to the functionality it was
intended for. Functional testing of a software is conducted on a complete,
integrated system to evaluate the system's compliance with its specified
requirements.
There are five steps that are involved while testing an application for
functionality.
Steps Description
III The output based on the test data and the specifications of the
application.
An effective testing practice will see the above steps applied to the testing
policies of every organization and hence it will make sure that the organization
maintains the strictest of standards when it comes to software quality.18
Software Testing
Unit Testing
This type of testing is performed by developers before the setup is handed over
to the testing team to formally execute the test cases. Unit testing is performed
by the respective developers on the individual units of source code assigned
areas. The developers use test data that is different from the test data of the
quality assurance team.
The goal of unit testing is to isolate each part of the program and show that
individual parts are correct in terms of requirements and functionality.
There is a limit to the number of scenarios and test data that a developer can
use to verify a source code. After having exhausted all the options, there is no
choice but to stop unit testing and merge the code segment with other units.
Integration Testing
Integration testing is defined as the testing of combined parts of an application
to determine if they function correctly. Integration testing can be done in two
ways: Bottom-up integration testing and Top-down integration testing.
1 Bottom-up integration
This testing begins with unit testing, followed by tests of progressively
higher-level combinations of units called modules or builds.
2 Top-down integration
In this testing, the highest-level modules are tested first and
progressively, lower-level modules are tested thereafter.
19
Software Testing
System Testing
System testing tests the system as a whole. Once all the components are
integrated, the application as a whole is tested rigorously to see that it meets
the specified Quality Standards. This type of testing is performed by a
specialized testing team.
System testing is the first step in the Software Development Life Cycle,
where the application is tested as a whole.
System testing enables us to test, verify, and validate both the business
requirements as well as the application architecture.
Regression Testing
Whenever a change in a software application is made, it is quite possible that
other areas within the application have been affected by this change. Regression
testing is performed to verify that a fixed bug hasn't resulted in another
functionality or business rule violation. The intent of regression testing is to
ensure that a change, such as a bug fix should not result in another fault being
uncovered in the application.
Minimize the gaps in testing when an application with changes made has
to be tested.
Testing the new changes to verify that the changes made did not affect
any other area of the application.
Acceptance Testing
This is arguably the most important type of testing, as it is conducted by the
Quality Assurance Team who will gauge whether the application meets the
intended specifications and satisfies the client’s requirement. The QA team will
have a set of pre-written scenarios and test cases that will be used to test the
application.
20
Software Testing
More ideas will be shared about the application and more tests can be performed
on it to gauge its accuracy and the reasons why the project was initiated.
Acceptance tests are not only intended to point out simple spelling mistakes,
cosmetic errors, or interface gaps, but also to point out any bugs in the
application that will result in system crashes or major errors in the application.
Alpha Testing
This test is the first stage of testing and will be performed amongst the teams
(developer and QA teams). Unit testing, integration testing and system testing
when combined together is known as alpha testing. During this phase, the
following aspects will be tested in the application:
Spelling Mistakes
Broken Links
Cloudy Directions
Beta Testing
This test is performed after alpha testing has been successfully performed. In
beta testing, a sample of the intended audience tests the application. Beta
testing is also known as pre-release testing. Beta test versions of software are
ideally distributed to a wide audience on the Web, partly to give the program a
"real-world" test and partly to provide a preview of the next release. In this
phase, the audience will be testing the following:
Users will install, run the application and send their feedback to the
project team.
Getting the feedback, the project team can fix the problems
before releasing the software to the actual users.
The more issues you fix that solve real user problems, the higher the
quality of your application will be.
21
Software Testing
Non-Functional Testing
This section is based upon testing an application from its non-functional
attributes. Non-functional testing involves testing a software from the
requirements which are nonfunctional in nature but important such as
performance, security, user interface, etc.
Some of the important and commonly used non-functional testing types are
discussed below.
Performance Testing
It is mostly used to identify any bottlenecks or performance issues rather than
finding bugs in a software. There are different causes that contribute in lowering
the performance of a software:
Network delay
Client-side processing
Data rendering
Capacity
Stability
Scalability
Load Testing
It is a process of testing the behavior of a software by applying maximum load
in terms of software accessing and manipulating large input data. It can be done
at both normal and peak load conditions. This type of testing identifies the
maximum capacity of software and its behavior at peak time.
Most of the time, load testing is performed with the help of automated tools such
as Load Runner, AppLoader, IBM Rational Performance Tester, Apache JMeter,
Silk Performer, Visual Studio Load Test, etc.
Virtual users (VUsers) are defined in the automated testing tool and the script is
executed to verify the load testing for the software. The number of users can be
22
Software Testing
Stress Testing
Stress testing includes testing the behavior of a software under abnormal
conditions. For example, it may include taking away some resources or applying
a load beyond the actual load limit.
The aim of stress testing is to test the software by applying the load to the
system and taking over the resources used by the software to identify the
breaking point. This testing can be performed by testing different scenarios such
as:
Usability Testing
Usability testing is a black-box technique and is used to identify any error(s) and
improvements in the software by observing the users through their usage and
operation.
Nigel Bevan and Macleod considered that usability is the quality requirement
that can be measured as the outcome of interactions with a computer system.
This requirement can be fulfilled and the end-user will be satisfied if the
intended goals are achieved effectively with the use of proper resources.
Molich in 2000 stated that a user-friendly system should fulfill the following five
goals, i.e., easy to Learn, easy to remember, efficient to use, satisfactory to use,
and easy to understand.
In addition to the different definitions of usability, there are some standards and
quality models and methods that define usability in the form of attributes and
sub-attributes such as ISO-9126, ISO-9241-11, ISO-13407, and IEEE
std.610.12, etc.
23
Software Testing
UI vs Usability Testing
UI testing involves testing the Graphical User Interface of the Software. UI
testing ensures that the GUI functions according to the requirements and tested
in terms of color, alignment, size, and other properties.
On the other hand, usability testing ensures a good and user-friendly GUI that
can be easily handled. UI testing can be considered as a sub-part of usability
testing.
Security Testing
Security testing involves testing a software in order to identify any flaws and
gaps from security and vulnerability point of view. Listed below are the main
aspects that security testing should ensure:
Confidentiality
Integrity
Authentication
Availability
Authorization
Non-repudiation
Injection flaws
Portability Testing
Portability testing includes testing a software with the aim to ensure its
reusability and that it can be moved from another software as well. Following
are the strategies that can be used for portability testing:
24
Software Testing
25
Software Testing
7. DOCUMENTATION
Test Plan
Test Scenario
Test Case
Traceability Matrix
Test Plan
A test plan outlines the strategy that will be used to test an application, the
resources that will be used, the test environment in which testing will be
performed, and the limitations of the testing and the schedule of testing
activities. Typically the Quality Assurance Team Lead will be responsible for
writing a Test Plan.
Test Scenario
It is a one line statement that notifies what area in the application will be tested.
Test scenarios are used to ensure that all process flows are tested from end to
26
Software Testing
end. A particular area of an application can have as little as one test scenario to
a few hundred scenarios depending on the magnitude and complexity of the
application.
The terms 'test scenario' and 'test cases' are used interchangeably, however a
test scenario has several steps, whereas a test case has a single step. Viewed
from this perspective, test scenarios are test cases, but they include several test
cases and the sequence that they should be executed. Apart from this, each test
is dependent on the output from the previous test.
Test Case
Test cases involve a set of steps, conditions, and inputs that can be used while
performing testing tasks. The main intent of this activity is to ensure whether a
software passes or fails in terms of its functionality and other aspects. There are
many types of test cases such as functional, negative, error, logical test cases,
physical test cases, UI test cases, etc.
Furthermore, test cases are written to keep track of the testing coverage of a
software. Generally, there are no formal templates that can be used during test
case writing. However, the following components are always available and
included in every test case:
Test case ID
Product module.
Product version
Revision history
Purpose
Assumptions
Pre-conditions
27
Software Testing
Steps
Expected outcome.
Actual outcome
Post-conditions
Many test cases can be derived from a single test scenario. In addition,
sometimes multiple test cases are written for a single software which are
collectively known as test suites.
Traceability Matrix
Traceability Matrix (also known as Requirement Traceability Matrix - RTM) is a
table that is used to trace the requirements during the Software Development
Life Cycle. It can be used for forward tracing (i.e. from Requirements to Design
or Coding) or backward (i.e. from Coding to Requirements). There are many
user-defined templates for RTM.
Each requirement in the RTM document is linked with its associated test case so
that testing can be done as per the mentioned requirements. Furthermore, Bug
ID is also included and linked with its associated requirements and test case.
The main goals for this matrix are:
28