Software Testing Notes
Software Testing Notes
Software Testing
Motivation
Popular Errors
Ariane 5: rocket exploded due to conversion of 64 bit fp to 16 bit
int for altitude data
Therac 25: machine that gives radiation therapy to cancer
patients. Race condition occured and 6 died
Intel pentium bug: defective pentium chip so lost $475m cause of
FP division error
Inadequate software testing costs US 22-59 billion per year
Amazon had an online discount sale and gave double the discount
Types of software:
Agile: developer must also test
Embedded safety critical: must meet regulatory standards ex:
in cars
Enterprise software: very complex and large. Critical server
requirement ex:citibank, railways
Web apps: Available to many users, Social networking
Free software: also expected to be correct
Cost of testing:Cost of fixing at later stages is very expensive. Errors
more often start at unit testing stage. followed by design and then
requirements. More often detected during system testing or
integration
Testing cannot prove a software to be correct, only shows errors
Testing cannot be replaced by software reviews
Cannot be fully automated
There are 5 process maturity levels:
Level 0: No diff between testing and debugging. Doesn't help
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 1/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 2/66
21/10/2022, 18:42 Software Testing
system will run (ex: with db, clients, server). It is an end to end
testing
Acceptance testing: Done by end customer to make sure it meets
requirements
Beta testing is done in beta version of software (not fully tested
yet)
Functional testing: checks if software meets specified
functionality
Stress testing: peak conditions tested (10000 users)
Performance testing: speed and response
Usability testing: UI testing
Regression Testing: Done after modifying one component and
checks if others are not damaged
2 broad methods of testing:
Black box testing: Test without looking at internal code
White box testing: Tests internal structure and code (unit,
integration, system)
Activities in testing:
1. Define and design test case
2. Test automation is making is execution ready
3. Test execution
4. Evaluation analysis: check if passed and if not where there is an
error
Adjacent activities are test management, maintenance and
documentation
Test design is the most critical job. Effective test cases must be
designed. Inputs and expected outputs are defined. Domain
knowledge is needed so it cannot be automated.
jUnit is used to convert test cases to executable scripts
Testing Based on Models and Criteria
Testability: is the software testable( can inputs be give, executed,
and outputs be observed)
Observability: How easy is it to observe the behaviour of a program in
terms of its outputs, other internal factors
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 3/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 5/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 6/66
21/10/2022, 18:42 Software Testing
Initial vertex has a line coming in that is not connected to any other
vertex
Usually only 1 initial vertex and many final
Initial and final vertex could be the same
Graphs can represent contorl flow, data flow, call graph, use case,
activity
Graphs can have labels with edges or vertices
Tests must cover the graph
If statement can have a vertex with each outgoing edge representing
if condition being true and false. Statements can then be written as a
label for the vertices with condition for if as label for edge
Path is a sequence of vertices such that there exists an edge
between every vertex in the path
Length of path is number of edges
Subpath: subsequence of vertices in a path
A vertex is reachable if there is a path from the initial vertex to that
vertex
An edge (u,v) is reachable if there is a path from the initial vertex to
the vertex u in the edge.
A subgraph is subset of vertices and edges of the graph. The
subgraph is reachable if any vertex of the subgraph is reachable from
the initial node of the graph.
Reachability
DFS
BFS
Test path begins with initial and ends in final vertex
If test path can be executed by text cases then its feasible.
otherwise infeasible
Test path p visits vertex v if v occurs in the path P. Test path p
visits edge e if e occurs in path p.
Test path p tours a path q if q is a sub path of p
Each vertex and edge itself is a subpath so test path tours those
edges and vertices
Many different test cases can execute the same path
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 7/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 8/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 9/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 10/66
21/10/2022, 18:42 Software Testing
it is made gray
for each vertex adjacent to u, if it is not yet discovered (white),
make u the parent and visit that vertex
make u black since it is explored
increment time
u.f=time
DFS visit is called once for every vertex
Running time is O(V+E)
in DFS of a graph G, every edge of G is a tree edge or a back edge
tree edge: edges in the depth first forest
back edges: edge connecting descendant to ancestor, also self
loop
forward edges: edge connecting a vertex to its descendant
cross edges: all other edges
Paranthesis Theorem: for any 2 vertices u and v,
if [u.d,u.f] and [v.d,v.f] are disjoint, u is not a descendant of v
and vice versa also
if [u.d,u.f] is contained in [v.u,v.f] then u is a descendant of v
v is a proper descendant of u if u.d<v.d<u.f<v.f
Strongly connected component is a cycle in a directed graph. All
vertices are reachable from each other. self loops are also
included
Transpose of a graph would be the graph with every edge
direction reversed
Graph and its transpose have the same strongly connected
components
Finding strongly connected components:
Call DFS
Find transpose of the graph
Run DFS on the reversed graph but consider vertices in
decreasing order of finish times
Output vertices in each tree in the DFS forest as a SCC
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 11/66
21/10/2022, 18:42 Software Testing
Correctness
Take all theof strongly
DFS (component
connectedgraph)
component, collapse each one to
create a meta vertex.
There is an edge in the component graph if the graph has a
directed edge from one strongly connected component to another
component graph is acyclic
Discovery and finish time for a component is the least of all and
highest of all vertices
If there are 2 SCC C and C', then if there is an edge from C to C',
finish time of C is greater than finish time of C'
The opposite of the above statement is true for the transpose
Algorithms: Structural graph coverage criteria
Undecidable to see if a criteria is feasible or not
TR for node coverage: all vertices in the graph
TR for edge coverage: all edges in the graph
BFS can be modified to get test paths for node and edge coverage
Edge Pair coverage: explore adjacency list of one node, and
adjacency list of the successors for all vertices
Complete path coverage not feasible if there are loops
Prime path coverage: compute list of prime paths which is the TR
First enumerate simple paths in increasing order of length
Choose some of the simple paths as prime paths
if the final node is included,include ! in the path. If it is a loop and
cannot be further extended use *
Repeat this till you get paths of length |V|
Test path for prime path coverage: Start with longest prime path
and extend it to the left to see if it can be extended to the start
node
Data Flow Graph
Data is represented as variables
A variable is created and then used. A variable that is not declared
cannot be used
We need to track a variable from where its defined to where it's used
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 12/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 14/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 16/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 17/66
21/10/2022, 18:42 Software Testing
( 1,1) not listed as it starts and ends at the same node and is not a du
path. (8,8) should also not have been listed
1 DU path for every DU pair
Find unique DU paths
Categorize paths into skip the loop, 1 iteration of the loop, and more
than 1 iteration of the loop
Test paths must cover all DU paths
More bugs detected using data flow coverage criteria than branch
coverage criteria
Software Design and Integration Testing
C reating graphs for design instead of code is in integration testing
Software design tells how a large software is split into modules
Modules interact wuth each other using interfaces
Interfaces define how control and data flow between modules
Modules are self contained(standalone)
Integration testing involves testing if the put together modules meet
functionalities and if interfaces are correct
Integration is after unit testing
Types of interfaces:
Procedure call interface: procedure or method in one module calls
procedure/method in another module
Shared memory interface: Block of memory shared between 2
modules
Message passing interface: Modules prepare messages and
transmit it through the interface
25% of total errors are interface errors
Types of errors:
Module functionality related: One module could call another
module and assumes the other module offers some functionalities
but that module may not offer those
Interface related: Wrong parameter order when calling procedure
in another module
Inadequate error handling
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 18/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 19/66
21/10/2022, 18:42 Software Testing
atleast once
Edges are calls so edge coverage is to execute every call once
Path coverage is to test a sequence of calls (for big bang)
No loops in call graphs so no prime paths
Class inheritance testing
Arrow from class B to class A means B extends A
Arrow from class A to object a1 means a1 is an object of class A
Class call graphs dont make sense as there wont be many calls
within a classs so graphs represent inheritance and polymorphism
Consider objects for each of the classes since classes are not
execuatble)
OO call coverage criteria (1 obj per class): TR contains each
reachable node in the call graph of an object instantiated for each
class
OO Object call coverage (many objs in a class): TR contains each
reachable node in the call graph of every object instantiated for
each class
Data flow
Caller: module that calls another
Callee: module that is called
Call site: node where the call occurs
Actual parameter: variable in the caller
Formal parameter: variable in the callee
Coupling variables: defined in one unit and used in another
Parameter coupling: x could be passed in caller and y used in
callee
Shared data coupling: Shared variables
External device coupling: access data from a file
Last def (before calls and returns so caller to callee or callee to
caller): set of nodes that define a variable x and has a def clear
path from the node to the call site
First use: Set of nodes that have uses for a variable y and a def
clear and use clear path from call site to the node
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 20/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 22/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 23/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 24/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 25/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 26/66
21/10/2022, 18:42 Software Testing
output
Combinations of test cases from different domains are considered
Input values chosen must produce special values
Soemtimes to do functional testing, the context in which a function is
invoked may be needed. For example, if x>20 call a function g
Types of functional testing:
Equivalence class partitioning: Assumes input domain is large, so
partition inputs such that finite number of partitions and each
partition is sub domain and is an equivalence class. All inputs from
one sub domain have the same effect (output is same)
Boundary Value Analysis: Test inputs near the boundary of the
data domain are chosen. If the partition has an ordered set of
elements, then consider the first and last element. If the partition
specifies a number of values, test for minimum and max value of
the number, and also a value smaller than minimum and greater
than the maximum.
Pair-wise testing: orthogonal arrays
Decision tables: Equivalence class partitioning considers inputs
individually. Decision tables can consider a combination of
equivalence classes.
Decision table has conditions, value for the conditions (Yes - y,
No - n, - is dont care), and rules that specifiy if for each rule a
condition is needed. All possibile combinations are considered
(3 conditions so 2^3 combinations hence 8 rules and each
column has all possible combinations of Y and N)
There are also effects and numbers associated with each
effect and rule. These numbers are the effect sequence
number which specified the order in which the effect should be
carried out if the corresponding conditions are satisfied
There is a checksum row at the end for verification of the
combinations (should be 2^3)
Example in PPT
Random Testing: pick a random input and test. Monkey runners is
a tool which produces random inputs. It can check if exceptions
and error conditions are handled.
Input Space Partitioning
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 27/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 28/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 29/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 30/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 31/66
21/10/2022, 18:42 Software Testing
context associate
Semantics sensitive grammar
a language with regex
L(r+r')=L(r)UL(r')
L(r*)=L(r)*
L(r.r')=L(r).L(r')
CFG is of the form G=(N,A,S,P) where N-non terminals, A-terminals, S
belongs to N and is start non-terminal, P is productions)
Lexical analyzer parses a regular expression
Sentential Form of Grammar G: any alpha belonging to (N U A)* such
that S derives alpha in any number of steps (Intermediate RHS of
derivations)
A Language is a context free language if there is a context free
grammar which has the same language
Coverage Criteria over grammars:
Terminal Symbol Coverage (TSC):TR contains each terminal
symbol in the grammar
Production Coverage (PC): TR contains each production
Derivation Coverage (DC): TR contains every possible string that
can be derived from the grammar. Can be infeasible if language is
infinite
PC subsumes TSC
DC is infeasible
Mutation Testing
Mutation involves making syntactically valid changes and then testing
Grammars generate valid strings. Derivations in grammar also used to
generate invalid strings
Testng based on the valid and invalid strings is mutation testing
Can be applied to code, design, inputs, requirements
Ground String: A string in the grammar
Mutation Operator: Rule that specifies syntactic variations of strings
generated from a grammar
Mutant: Result of 1 application of a mutation operator
Ground string could be a program specified using a grammar (ex java)
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 32/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 35/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 36/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 37/66
21/10/2022, 18:42 Software Testing
Mutation Testing
Mutation testing at integration level: Integration mutation and is also
known as interface mutation and creates mutants on connections
between components
Integration mutation operators
Change calling method by modifying parameters sent to called
method
Change calling method by modifying call
Change called method by modifying values that enter and leave
the method
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 38/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 40/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 41/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 42/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 43/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 44/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 45/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 46/66
21/10/2022, 18:42 Software Testing
data format validation (ex: only pdf files, only zip files)
data value (btwm 1 and 10)
Inter-value,Inter-Field (match credit card and expiry date)
Invalid characters
Inter request data fields (cookies, hidden)
Security violation
empty string
commas
tag symbols
dir paths
special characters
Testing of web applications and web services contd (server side)
Server responses
E rrors at server could cause permanent database damage if not
recognized (Exposure)
Valid responses
Ignores invalid input
Provides error message which is generic or specific
Faults and failures: invalid input cause abnormal server error
Server side testing (white box)
use normal graph models if server code is available
control flow graph only used with static models
Presentation layer of web app is used for testing
2 graph models for software in presentation layer
Component interaction model
application transition graph
Atomic sections
We look at server side code present in the presentation layer
sections are dynamically generated and sent from server to the
client
Atomic section has the property that if one part of the section is
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 48/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 49/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 50/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 51/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 52/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 53/66
21/10/2022, 18:42 Software Testing
added to sigma
At an assignment statement v=e, symbolic expressions are assigned.
Sigma is updated by mapping variable v to sigma(e), which is
obtained by evaluating e in the current symbolic state
PC is initialized to true at the beginning of symbolic execution
At a conditional statement if(E) then .. else .., PC is PC ^ sigma(e) for
then branch and PC ^ !sigma(e) for the else branch
Each path constraint (predicate formula) is solved to find a suitable
assignment of concrete to symbolic values and if it is satisfiable then
symbolic exec continues. Otherwise, it terminates. It can also
terminate if an exit statement is reached or error occurs.
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 54/66
21/10/2022, 18:42 Software Testing
DART does directed search by starting with the random input, checks
the PC, and if some predicate was made true, it will now be made
false and values are generated by the constraint solver so that other
paths can be explored
DART stops on identifying an error
Execution model of DART helps execute normally and
symbolically(collects path constraints)
Symbolic representation of a variable is its memory address
Memory M is a mapping from address locations m to words which are
the actual contents
M'=M + [ m |-> v] Memory M is updated and only value of
address m changes to v
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 55/66
21/10/2022, 18:42 Software Testing
DART part2
Execs can be a tree with assignments having one successor and
conditions with 1 or 2, and leaves are abort or halt
symbolic memory S maps memory addresses to expressions
Whenever a path constraint is not linear, algo uses concrete values
and not symbolic
Symbolic evaluation of expressions
just a variable, then directly return symbolic expression which is
S(m) if m is in S and M(m) otherwise
*(e',e") where * can be any arithmetic
operation :operands e' and e" so each should seperately be
evaluated first. if either of the 2 evaluated expressions is not a
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 56/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 57/66
21/10/2022, 18:42 Software Testing
COverage criteria
All coupling Sequences (ACS) - includes all coupling variables: For
every coupling sequence Sj in f(), there is atleast one test case t
such that there is a coupling path induced by S(j,k) that is a sub
path of the execution trace of f(t). Atleast one coupling path must
be executed. Does not consider inheritance and polymorphism
All poly classes(APC) - includes one test case for every possible
type subs and for every type the object can bind to: For every
coupling sequence S(j,k) in a method f(), and for every class in the
family of types defined by the context of S(j,k) there is atleast one
test case t such that when f() exec using t, there is a path p in the
set of coupling paths S(j,k) that is a sub path of the execution
trace of f(t). There is atleast 1 test case for every type the object
can bind to. Subsumes ACS.
All coupling defs and uses (ACDU): For every coupling variable v in
each coupling S(j,k) of t, there is a coupling path p induced by
S(j,k) such that p is a sub-path of the execution trace of f (t) for at
least one test case t. Does not consider inheritance and
polymorphism . Every last def reaches every first use so they must
be tested .
All-Poly-Coupling-Defs-Uses (APCDU): Every last to every first
use with inheritance and poly
All-Poly-Coupling-Defs-Uses subsumes All poly classes(APC) and All
coupling defs and uses and both of these subsume All coupling
Sequences
Testing Mobile Applications
Mobile application testing is testing of software meant to run only on
handheld devices
Usability very important and it should be consistent accross all
platforms
Can be automated or manual
Apps are either pre installed or installed using distribution platforms
Testing of wearable applications is also related (watch apps)
Challenges:
Wide range of OS and platforms - Device fragmentation
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 59/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 61/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 62/66
21/10/2022, 18:42 Software Testing
happens if load
Soak testing akagoes above the
endurance maximum
testing: continuous expected load
is used and checks for memory leaks
Spike testing: Suddenly increase number of users. It is a type
of stress testing
Goals
Must show system meets performance criteria
compare 2 systems and check which is better
identify which parts of the system caused bad performance
Performance testing always includes
Number of users
response time
Throughput
tools to create and run performance scripts
HP load runner
NeoLoad - good for web and mobile
Apache jmeter: good for web apps, open source
Rational performance tetser
Gatling: good for web apps, open source
System running scripts needs to be monitored using special
scripts or external devices
Regression Testing
Regression testing is validating modified software to detect if new
errors have been introduced into code that was previously tested
It is a black box technique and is expensive
After release, software maintained by developers and during
maintenance, modifications done to code
Let P be a program and P' is the modified program. T is test suite for
P. steps of regression test
1. Select T' which is a subset of T for P'
2. Test P' with T'
3. If needed create new test cases T'' for P'
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 63/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 64/66
21/10/2022, 18:42 Software Testing
OO Subsumption
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 65/66
21/10/2022, 18:42 Software Testing
https://www.remnote.com/w/635287b773d6cd59ed18f547/Software-Testing-OPik7onwKsHeo76aL 66/66