Title: Discovering Accurate Interclass Test Dependence
1Discovering Accurate Interclass Test Dependence
Weilei Zhang, Barbara RyderDepartment of
Computer ScienceRutgers University
2Motivation
- Class testing is very important for OO testing
- It corresponds with the classic definition of
unit testing by exercising a relatively small
software component via a driver - Most classes in the system are interdependent,
and there is test dependence between classes - An accurate knowledge of ICTD (InterClass Test
Dependence) is desired - Important in deciding class integration test
order - Dependence cycles/SCCs causes complication
- Helpful to parallelize integration test
activities - Can be useful for program understanding and
software visualization
3Existing works on ICTD
ORD-based
- Briand, et al (TSE 2003)
- Milanova, et al (ICSM 2002)
- Hanh, et al (ECOOP 2001)
- Labiche, et al (ICSE 2000)
- Tai and Daniels (JOOP 1999)
- Kung, et al (JOOP 1995)
4ORD-Based Definition For ICTD
- Causes for ICTD
- Inheritance
- Aggregation
- Association
- Polymorphism
B
As
A
I
Ag
C
D
- B is test dependent on A, C and D
- Transitive closure of the above
5Contributions
- To propose and formalize a new definition for
ICTD in order to prune out the spurious
dependences - Semantics-based definition
- To give a practical algorithm to approximate the
definition - Method-level dependence analysis
- To implement the algorithm and evaluate the
results
6Motivating Examples
As
DeliveryHandler
DeliveryTransaction
As
class DeliveryHandlerpublic void
handleDelivery(DeliveryTransaction
deliveryTransaction) deliveryTransaction.proces
s() deliveryTransaction.display(outFile)
- Cases when ICTD does not exist though there is
association - No reference during run-time (Milanova et al ICSM
2002) - No method calls (Stack its containees)
- Only calls to inherited methods (HashMap its
containees) - Methods called but no impact on the caller (the
above in specjbb)
7Semantics-based Definition of ICTD
- There is test dependence from class A to class B,
if there is a statement s in a method callable on
an A object and a statement t in a method
declared in B, such that - s may have visible side effects (i.e., s may
either write to the external memory or return a
value), and - s is semantically dependent on t while testing
class A
8Approximation Algorithm
- Turing-incomputable -gt dependence analysis
- Statement-level granularity dependence analysis
is too costly - Approximate at method-level granularity
dependence - Three causes for method dependence
- Caller uses return value of callee
- Callee is control-dependent on caller
- Side effect one method writes to the same memory
region that another method reads - Propagate dependences on the call graph
wx.foo()
9Algorithm Illustration
CUT
class
Method
Heap Data
Call and return useful value
Other calls
Side Effect
write
read
10Algorithm Illustration
Methods Callable on CUT
CUT
class
Method
Heap Data
Call and return useful value
Other calls
Side Effect
write
read
11Algorithm Illustration
Methods Callable on CUT
CUT
class
Method
Heap Data
Call and return useful value
Other calls
Side Effect
write
read
12Algorithm Illustration
Methods Callable on CUT
CUT
class
Method
Heap Data
Call and return useful value
Other calls
Side Effect
write
read
13Algorithm Illustration
Methods Callable on CUT
CUT
class
Method
Heap Data
Call and return useful value
Other calls
Side Effect
write
read
14Algorithm Illustration
Methods Callable on CUT
CUT
class
Method
Heap Data
Call and return useful value
Other calls
Side Effect
write
read
15Algorithm Illustration
Methods Callable on CUT
CUT
class
Method
Heap Data
Call and return useful value
Other calls
Side Effect
write
read
16Analysis Configurations
- The proposed algorithm is parameterized by the
choice of program analyses to calculate the call
graph and side effect information - For analysis configuration applied
- VTA variable type analysis (call graph not
constructed on the fly) - 0CFA 0-CFA (call graph constructed on the fly)
- OB 1-object-sensitive points-to analysis
- OBR OBR (a data reachability algorithm to
resolve library call-backs and construct accurate
application call graphs)
17ICTD Reduction Rate wrt. ORD-based Definition
18Size of Dependence Cycles
19Objective-Sensitive Analysis
- Metrics output_properly()this.wrap()
- AsciiMetrics overrides Method wrap().
20Objective-Sensitive Analysis
- Metrics output_properly()this.wrap()
- AsciiMetrics overrides Method wrap().
Object-sensitive CG
Methods reachable from Metrics
Methods reachable from AsciiMetrics
m, Metrics output_properly()
am, Metrics output_properly()
m,Metrics wrap()
am,AsciiMetrics wrap()
PLDI07 Sridharan, Fink, Bodik
context-sensitive dependence analysis is too
costly and did not provide much realistic usage
for thin slicing. Method-level dependence
calculation makes context-sensitive dependence
analysis more practical and it is very useful in
our study in ICTD.
21Conclusions
- A new semantics-based accurate definition for
interclass test dependence - An approximate algorithm and implementation
- A great number of spurious dependences are
removed - Dependence cycles are determined accurately in 6
out of 7 benchmarks amenable to code inspection. - Method-level dependence propagation makes
object-sensitive dependence analysis more
practical - Object-sensitive analysis is key to achieve
accurate results for dependence cycles
22Questions?