220 likes | 354 Views
Discovering Accurate Interclass Test Dependence. Weilei Zhang, Barbara Ryder Department of Computer Science Rutgers University. Motivation. Class testing is very important for OO testing
E N D
PASTE’07 Discovering Accurate Interclass Test Dependence Weilei Zhang, Barbara RyderDepartment of Computer ScienceRutgers University
PASTE’07 Motivation • 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
PASTE’07 Existing 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)
PASTE’07 ORD-Based Definition For ICTD • Causes for ICTD: • Inheritance • Aggregation • Association • Polymorphism As B A I Ag C D • B is test dependent on A, C and D • Transitive closure of the above
PASTE’07 Contributions • 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
PASTE’07 • The spurious ICTD causes a fake dependence cycle. Motivating Examples As DeliveryHandler DeliveryTransaction • specjbb benchmark As class DeliveryHandler{public void handleDelivery(DeliveryTransaction deliveryTransaction){deliveryTransaction.process(); 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)
PASTE’07 Semantics-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
PASTE’07 Approximation Algorithm • Turing-incomputable -> 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 w=x.foo()
PASTE’07 Algorithm Illustration CUT class Method Heap Data Call and return “useful” value Other calls Side Effect write read
PASTE’07 Algorithm Illustration Methods Callable on CUT CUT class Method Heap Data Call and return “useful” value Other calls Side Effect write read
PASTE’07 Algorithm Illustration Methods Callable on CUT CUT class Method Heap Data Call and return “useful” value Other calls Side Effect write read
PASTE’07 Algorithm Illustration Methods Callable on CUT CUT class Method Heap Data Call and return “useful” value Other calls Side Effect write read
PASTE’07 Algorithm Illustration Methods Callable on CUT CUT class Method Heap Data Call and return “useful” value Other calls Side Effect write read
PASTE’07 Algorithm Illustration Methods Callable on CUT CUT class Method Heap Data Call and return “useful” value Other calls Side Effect write read
PASTE’07 Algorithm Illustration Methods Callable on CUT CUT class Method Heap Data Call and return “useful” value Other calls Side Effect write read
PASTE’07 Analysis 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: OB+R (a data reachability algorithm to resolve library call-backs and construct accurate application call graphs)
PASTE’07 ICTD Reduction Rate wrt. ORD-based Definition
PASTE’07 Size of Dependence Cycles
PASTE’07 Metrics I AsciiMetrics Context-insensitive CG Methods reachable from Metrics Metrics: output_properly() Methods reachable from AsciiMetrics AsciiMetrics: wrap() Metrics: wrap() Objective-Sensitive Analysis Metrics: output_properly(){…this.wrap()…} AsciiMetrics overrides Method wrap().
PASTE’07 Metrics I AsciiMetrics Objective-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()] PLDI’07 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.
PASTE’07 Conclusions • 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
PASTE’07 Thanks! Questions?