Testing
Testing
- Testing fundamentals
-Functional Testing
-Manual Testing
-Automation Testing
Characteristics of Testable
Software
• Operable
– The better it works (i.e., better quality), the easier it is to test
• Observable
– Incorrect output is easily identified; internal errors are
automatically detected
• Controllable
– The states and variables of the software can be controlled
directly by the tester
• Decomposable
– The software is built from independent modules that can be
tested independently
(more on next slide) 2
Characteristics of Testable
Software (continued)
• Simple
– The program should exhibit functional, structural, and code
simplicity
• Stable
– Changes to the software during testing are infrequent and do not
invalidate existing tests
• Understandable
– The architectural design is well understood; documentation is
available and organized
3
Test Characteristics
• A good test has a high probability of finding an error
– The tester must understand the software and how it might fail
4
Software Testing
5
Manual and Automation Testing
• 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. 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. 6
Manual and Automation Testing
• The following tools can be used for automation testing −
7
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 non functional 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
Database transaction processing
Load balancing between servers
Data rendering 8
Non Functional Testing
• testing is considered as one of the important and mandatory testing
type in terms of the following aspects −
Speed (i.e. Response Time, data rendering and accessing)
Capacity
Stability
Scalability
9
Non Functional Testing
• 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.
11
Non Functional Testing
• 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.
• According to Nielsen, usability can be defined in terms of five
factors, i.e. efficiency of use, learn-ability, memory-ability,
errors/safety, and satisfaction. According to him, the usability of a
product will be good and the system is usable if it possesses the
above factors.
• 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.
12
User Acceptance Testing
• Alpha Testing
• Beta Testing
13
Alpha Testing
• 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
The Application will be tested on machines with the lowest
specification to test loading times and any latency problems.
14
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
• In this phase, the audience will be testing the following −
Users will install, run the application and send their feedback to
the project team.
Typographical errors, confusing application flow, and even
crashes.
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.
Having a higher-quality application when you release it to the
general public will increase customer satisfaction.
15
Two Unit Testing Techniques
• Black-box testing
– Knowing the specified function that a product has been designed to perform,
test to see if that function is fully operational and error free
– Includes tests that are conducted at the software interface
– Not concerned with internal logical structure of the software
• White-box testing
– Knowing the internal workings of a product, test that all internal operations
are performed according to specifications and all internal components have
been exercised
– Involves tests that concentrate on close examination of procedural detail
– Logical paths through the software are tested
– Test cases exercise specific sets of conditions and loops
16
White-box Testing
• Uses the control structure part of component-level design to
derive the test cases
• These test cases
– Guarantee that all independent paths within a module have been
exercised at least once
– Exercise all logical decisions on their true and false sides
– Execute all loops at their boundaries and within their operational
bounds
– Exercise internal data structures to ensure their validity
• Types of white box testing are
– Control Flow Testing
– Branch Testing
– Basis Path
– Data Flow Testing
– Loop Testing 17
Basis Path Testing
• White-box testing technique proposed by Tom McCabe
18
Basis Path Testing
• An execution path is a set of nodes and directed edges in a flow
graph that connects (in a directed fashion) the start node to a
terminal node.
19
Flow Graph Notation
• A circle in a graph represents a node, which stands for a sequence of
one or more procedural statements
R4
1 1
2 2
3 R3
3
6 4 6 4
R2
7 8 5
7 R1 8 5
9
9
11 10 22
11 10
Cyclomatic Complexity
• Provides a quantitative measure of the logical complexity of a program
• Defines the number of independent paths in the basis set
23
Independent Program Paths
• Defined as a path through the program from the start node
until the end node that introduces at least one new set of
processing statements or a new condition (i.e., new nodes)
• Must move along at least one edge that has not been traversed
before by a previous path
4) Prepare test cases that will force execution of each path in the
basis set
25
A Second Flow Graph Example
1 int functionY(void) 3
2 {
3 int x = 0; 4
4 int y = 19;
5 A: x++; 5
6 if (x > 999)
7 goto D;
8 if (x % 11 == 0) 6
9 goto B;
10 else goto A; 8 7
11 B: if (x % y == 0) 10 9 16
12 goto C;
13 else goto A;
11 17
14 C: printf("%d\n", x);
15 goto A; 13 12
16 D: printf("End of list\
n"); 14
17 return 0;
18 } 26
15
Graph Matrics
27
Loop Testing
28
Black-box Testing
• Complements white-box testing by uncovering different classes of
errors
• Used during the later stages of testing after white box testing has
been performed
30
Equivalence Partitioning
• A black-box testing method that divides the input domain of a
program into classes of data from which test cases are derived
• From each equivalence class, test cases are selected so that the
largest number of attributes of an equivalence class are exercise at
once
31
Guidelines for Defining
Equivalence Classes
• If an input condition specifies a range, one valid and two invalid
equivalence classes are defined
– Input range: 1 – 10 Eq classes: {1..10}, {x < 1}, {x > 10}
• If an input condition requires a specific value, one valid and two invalid
equivalence classes are defined
– Input value: 250 Eq classes: {250}, {x < 250}, {x > 250}
• If an input condition specifies a member of a set, one valid and one invalid
equivalence class are defined
– Input set: {-2.5, 7.3, 8.4} Eq classes: {-2.5, 7.3, 8.4}, {any other x}
• If an input condition is a Boolean value, one valid and one invalid class are
define
– Input: {true condition} Eq classes: {true condition}, {false condition}
32
Boundary Value Analysis
• A greater number of errors occur at the boundaries of the
input domain rather than in the "center“
33
Guidelines for
Boundary Value Analysis
• 1. If an input condition specifies a range bounded by values a and
b, test cases should be designed with values a and b as well as
values just above and just below a and b