star: stack-trace based automatic crash reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf ·...

39
Sung Kim <[email protected] > The Hong Kong University of Science and Technology with Ning Chen and Hojun Jaygarl STAR: Stack-Trace based Automatic crash Reproduction ROSAEC Workshop Jan 6, 2011

Upload: others

Post on 03-Jan-2021

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

Sung Kim <[email protected]>The Hong Kong University of Science and Technology

with Ning Chen and Hojun Jaygarl

STAR: Stack-Trace based Automatic crash Reproduction

ROSAEC Workshop Jan 6, 2011

Page 2: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

Sung’s research areas

• MSR: Mining Software Repositories- Defect prediction (learning from repositories)- Bug triage/bug report mining - Crash report/stack trace mining - Code clones

• Static Analysis - Unit test generation- Crash reproduction- Patch generation

Page 3: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

Objects

E-mailsBug reports

ChangesSpecs

Traces

Raw data

History Information

Mine

Bug Prediction

Resource Allocation

Software Understanding

Change Impact Analysis

Bug Prediction

Mining Software Repositores

Feedback

Produce

Page 4: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

objects

stack traces

Mine Testing

Mine Crash repro

Page 5: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

ROSAEC Workshop 2010

Page 6: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

objects

stack traces

Mine Testing

Mine Crash repro

Page 7: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

Reproducing Crashes

• Must be able to reproduce crashes for debugging- To fix bugs and validate fixes

• Reproducing crashes (faults) is hard! - Require the exact configuration of crash (in

field)

Page 8: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

reproduceProgram

ReCrash

6-64% performance overhead

Crash

Unit  tests

generate

ReCrash  

Page 9: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

Crash Reporting System

Crash Database

Page 10: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

Crash Reporting System

Crash Database

reproduceCrash

Test  case

Page 11: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

Crash Stack Traces

org.apache.bcel.classfile.ClassFormatException

at org.apache.bcel.classfile.ClassParser.readClassInfo(ClassParser.java:242)

at org.apache.bcel.classfile.ClassParser.parse(ClassParser.java:165)

at org.aspectj.weaver.bcel.Utility.makeJavaClass(Utility.java:358)

at org.aspectj.weaver.bcel.UnwovenClassFile.getJavaClass(UnwovenClassFile.java:63)

at org.aspectj.weaver.bcel.UnwovenClassFile.getClassName(UnwovenClassFile.java:147)...

Exception

Frame 5

Call Stack

Frame 1

Frame n

Page 12: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

12

Page 13: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

Direc6on?

13

Crash

org.apache.bcel.classfile.ClassFormatException

at org.apache.bcel.classfile.ClassParser.readClassInfo(ClassParser.java:242)

at org.apache.bcel.classfile.ClassParser.parse(ClassParser.java:165)

at org.aspectj.weaver.bcel.Utility.makeJavaClass(Utility.java:358)

at org.aspectj.weaver.bcel.UnwovenClassFile.getJavaClass(UnwovenClassFile.java:63)

at org.aspectj.weaver.bcel.UnwovenClassFile.getClassName(UnwovenClassFile.java:147)...

Exception

Frame 5

Call Stack

Frame 1

Frame n

Page 14: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

Crash Inputs

Frame 1:

ClassParser.readClassInfo(ClassInfo x)

Page 15: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

(1) Receiver

ClassParser.readClassInfo(ClassInfo x)

Page 16: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

(2) Arguments

ClassParser.readClassInfo(ClassInfo x)

Page 17: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

Problem Definition

void testCase() {

ClassParser cp = ?

ClassInfo x = ?

cp.readClassInfo(x)

}

Page 18: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

Problem Definition

void testCase() {

ClassParser cp = ?

ClassInfo x = ?

cp.readClassInfo(x)

}

Page 19: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

Problem Definition

void testCase() {

ClassParser cp = ?

ClassInfo x = ?

cp.readClassInfo(x)

}

Page 20: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

Three Approaches to Find Crash Inputs

• Feedback based random approach (feed)

• Object-capture based (objcap)

• Static analysis (precondition)

Page 21: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

Feedback (Randoop)

• Find methods that return Bar- Bar foo() {..}- Bar getBar(List x) {..}

• Generates object instances recursively - foo = getFoo()- bar = get(foo)

• Mutate objects using method sequences- bar = get(Foo)- setBar(bar)- ...

Page 22: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

Feedback (Randoop)

• Find methods that return Bar- Bar foo() {..}- Bar getBar(List x) {..}

• Generates object instances recursively - foo = getFoo()- bar = get(foo)

• Mutate objects using method sequences- bar = get(Foo)- setBar(bar)- ...

Page 23: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

Feedback (Randoop)

• Find methods that return Bar- Bar foo() {..}- Bar getBar(List x) {..}

• Generates object instances recursively - foo = getFoo()- bar = get(foo)

• Mutate objects using method sequences- bar = get(Foo)- setBar(bar)- ...

Page 24: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

OCAT

STAR

Page 25: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

OCAT

STAR

Page 26: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

Mutating Object (precondition)

foo (Object o) { if (o.x>o.y) { o.x = o.x + o.y; o.y = o.x - o.y; o.x = o.x - o.y; if (o.x - o.y > 0) { // throw exception } }}

Page 27: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

Mutating Object (precondition)

• Identify crash condition (postcondition)

• Compute weakest precondition (wp)

• There is a wp rule for each statement in the programming language

Page 28: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

!!"#$%&'()*+*'(,"--!"#"$%

!!"#'.+&'()*+*'(,"/

!"#$%&'()(%&*+*,*-().*/00*12"##3*%$$4""#&$#5*%2*6*"#70/$#'*89*#

:6/;70#<!!"0..%$+,""--

=55(>&;#&)

12*)%"3

!!"0..%$+,""--!"#"!"&"'%

!!"0..%$+"4"5"6

7$%&'()*+*'("8""94:;<"5"6

?#*-"()#*).(5*/5*-7 2%"*@-#/A#5)*7"#$%&'()(%&B=#9>!"#$?@"/<"8"/"=*+A"4"$%#20&%)"BC"%

wp rules: assignment

Page 29: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

wp: if statement

!!"#$%&'()*+*'(,""--!"#$%&#'(#)*+)#',

!!"#'.+&'()*+*'(,"/

!""#$%&'(()*+'"#*'$'()"&"

,-./!"#$%&#'(#)*+)#',01*23*4

.******5*!!!! ,-./'(01*23*

!!!!

67*"%'%#8#$%"

01*)%"23

.******5*!!!! ,-./'(01*23*

!!!! """"5*!!!! ,-./',01*23**3

Page 30: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

!!"#$%&'()*+*'(,"--!"# !!".'/%".+0+%/%(+!$# !!"0('+1%$".+0+%/%(+

!!"#'.+&'()*+*'(,""2

!"#$%&#"'%()*$%+"%&#",+

3'.+&'()*+*'("4"5#67!"#$!%#89"2:"4"5#67!"#89"5#67!%#89"2::

-.)'/012

3"'/"45+5",%64+)+1'1,+%41781,*149%(0"*$4:

;<*)%"==

-.)'/012

!!"#$%&'()*+*'(,"--%&'&(#

)&'&%*"#

!!"#'.+&'()*+*'(,">"?"@

wp: composition

Page 31: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

wp example

foo (Object o) { if (o.x>o.y) { o.x = o.x + o.y; o.y = o.x - o.y; o.x = o.x - o.y; if (o.x - o.y > 0) { throw exception } }}

Q: x-y>0wp: (x-y)-y>0wp: (x-(x-y))-(x-y)>0wp: ((x+y)-((x+y)-y))-((x+y)-y)>0wp: x>y & ((x+y)-((x+y)-y))-((x+y)-y)>0wp: o.x>o.y & o.y-o.x>0

Page 32: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

Three Approaches to Find Crash Inputs

• Feedback based random approach (feed)

• Object-capture based (objcap)

• Static analysis (precondition)

Page 33: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

Final Test Case

void testCase() {

ClassParser cp = createCP(); // random

ClassInfo x = loadClassInfo(); // object-capture

x. b = false; // based on wp

cp.readClassInfo(x)

}

Page 34: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

STAR Approach

• Challenge1: Crash points?-Crash reporting system (MSR)

• Challenge II: missing objects-Collect from normal execution (MSR)

• Challenge III: not suitable objects-Mutate objects (Static Analysis)

Page 35: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

Experiments

Figure 9 presents the generated test case guided by the satisfiablemodel in Figure 8.

2.5 Implementation

We briefly describe the implementation of each phase in our ap-proach.

Stack Trace Processing We parse a crash stack trace to ex-tract necessary information. To identify receiver and argumentclasses and its compatible classes, we use a program analysis li-brary, WALA [25].

Object Capturing We use OCAT [27] to capture objects. OCATuses an instrumentation framework, ASM [18] to insert object-capturing code. For storing objects, OCAT uses the XStream frame-work [37], which serializes objects into XML files. XStream canserialize objects that do not implement the java.io. Serializableinterface. The captured objects are de-serialized for captured-basedand precondition-based input generation techniques.

Input Generation. To compute the weakest preconditions forthe crashes, STAR first translates the related program code fromJava bytecode into static single assignment (SSA) form [21] usingWALA APIs. It then applies the inter-procedural backward com-putation algorithm to compute the weakest preconditions. STARemploys a satisfiability modulo theories solver, Yices [23] to checkfor the satisfiability of the computed preconditions. Finally, STARmutates objects by using Java reflection APIs [36] based on mod-els from Yices. The generated test cases are finally converted toJUnit [11] test cases that reproduce a crash.

3. EXPERIMENTAL EVALUATION

This section presents our experimental setup and evaluation re-sults of STAR.

3.1 Experimental Setup

The objective of the evaluation is to investigate the followingresearch questions:

RQ1 How many crashes can STAR reproduce based on crash stacktraces?

RQ2 Are generated test cases that reproduce crashes helpful fordebugging?

3.1.1 Subjects

We use crash stack traces collected from bug report systems ofthree open source systems, AJDT, ACC, ACM. AJDT is a tool thatsupports aspect-oriented software development including a AspectJcompiler. We use eight versions of AJDT (1.1.0, 1.1.1, 1.2.0, 1.2.1,1.5.0, 1.5.2, 1.5.3, and 1.5.4). Particularly, we use the org.aspectjpackage for AJDT. ACC implements known data structures such asbuffer, queue, map, and bag. We use two versions of ACC, version3.1, and 3.2. ACM is a library of self-contained mathematics andstatistics components. We use ACM version 1.2 and 2.0 for ourevaluation.

3.1.2 Bug Report Collecting and Processing

Bug reports include metadata and textual contents to describecrashes. Some users include crash stack traces in their bug reports,and we use bug reports which contain crash stack traces for ourexperiment. From bug reports, we extract a bug id, version numberand crash stack traces by using InfoZilla [13].

We exclude some bug reports. First, we do not use bug reportswith invalid crash traces. After extracting stack traces, we obtainmethod names and their line numbers. Then, we check if the meth-ods exist and the line numbers match with the corresponding ver-sion of the system. We prune cases where users report incorrect

# of # of bug reports # of validsystem bug reports with stack traces stack tracesAJDT 461 162 83ACC 97 8 8ACM 116 14 10Total 674 184 101

Table 2: Bug reports used in our experiment

system # of # of reproducible crashescrashes feed objcap precond total

AJDT 1.1.x 21 0 0 +10 10AJDT 1.2.x 16 2 +2 0 4AJDT 1.5.x 46 9 +10 +5 24

ACC 8 1 +2 +2 5ACM 10 1 0 +1 2total 101 13 +14 +18 45

percent 12.9% +13.9% +17.8% 44.6%

Table 3: Reproducible crashes of AJDT, ACC and ACM. The

“feed” column shows the number of reproducible crashes using

feedback-directed input generation technique. The column de-

noted as “objcap” represents the number of additional repro-

ducible crashes by object-capture-based technique. Similarly,

“precond” presents the number of additional reproducible cra-

shes by the precondition-based technique.

version or wrong stack trace information. In addition, we also ex-clude all non-fixed bug reports. Even if they include valid stacktraces, we cannot determine whether they are real bugs.

Table 2 shows the number of the bug reports2used in our exper-iments. We extracted 674 bug reports, but only 184 bug reportsinclude stack traces. After pruning non-fixed bug reports and bugreports with invalid stack traces, we are left with 101 bug reports.

3.1.3 Criteria of Reproducibility

To determine whether a crash is reproduced or not, we checkthe exception type and location of the original and reproduced cra-shes [8]. If the reproduced exception type and the original type areidentical, and both crashed in the same line, we assume the crash issuccessfully reproduced.

3.1.4 Object Capturing

STAR requires captured objects from normal program execution.To capture objects, we instrument our subject systems and executesystem tests provided by each subject. The instrumented systemscapture objects and serialize them during execution of the systemtests.

By executing instrumented systems with their system tests, wecaptured and serialized 12,420 objects zipped in 342MB on aver-age for each version of AJDT, 61,408 objects zipped in 104MB forACC and 7,012 objects zipped in 4MB for ACM. Often, executinginstrumented systems incurs a huge overhead [8, 31, 33, 35]. How-ever, note that this capturing process is conducted once in house,the deployed software does not incur any additional overhead.

3.2 Reproducibility

In this section, we show how many crashes are reproducible by2Bug reports of AJDT can be found in http://bugs.eclipse.org, and bug reports of both ACC and ACM can befound in https://issues.apache.org/.

Page 36: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

Figure 9 presents the generated test case guided by the satisfiablemodel in Figure 8.

2.5 Implementation

We briefly describe the implementation of each phase in our ap-proach.

Stack Trace Processing We parse a crash stack trace to ex-tract necessary information. To identify receiver and argumentclasses and its compatible classes, we use a program analysis li-brary, WALA [25].

Object Capturing We use OCAT [27] to capture objects. OCATuses an instrumentation framework, ASM [18] to insert object-capturing code. For storing objects, OCAT uses the XStream frame-work [37], which serializes objects into XML files. XStream canserialize objects that do not implement the java.io. Serializableinterface. The captured objects are de-serialized for captured-basedand precondition-based input generation techniques.

Input Generation. To compute the weakest preconditions forthe crashes, STAR first translates the related program code fromJava bytecode into static single assignment (SSA) form [21] usingWALA APIs. It then applies the inter-procedural backward com-putation algorithm to compute the weakest preconditions. STARemploys a satisfiability modulo theories solver, Yices [23] to checkfor the satisfiability of the computed preconditions. Finally, STARmutates objects by using Java reflection APIs [36] based on mod-els from Yices. The generated test cases are finally converted toJUnit [11] test cases that reproduce a crash.

3. EXPERIMENTAL EVALUATION

This section presents our experimental setup and evaluation re-sults of STAR.

3.1 Experimental Setup

The objective of the evaluation is to investigate the followingresearch questions:

RQ1 How many crashes can STAR reproduce based on crash stacktraces?

RQ2 Are generated test cases that reproduce crashes helpful fordebugging?

3.1.1 Subjects

We use crash stack traces collected from bug report systems ofthree open source systems, AJDT, ACC, ACM. AJDT is a tool thatsupports aspect-oriented software development including a AspectJcompiler. We use eight versions of AJDT (1.1.0, 1.1.1, 1.2.0, 1.2.1,1.5.0, 1.5.2, 1.5.3, and 1.5.4). Particularly, we use the org.aspectjpackage for AJDT. ACC implements known data structures such asbuffer, queue, map, and bag. We use two versions of ACC, version3.1, and 3.2. ACM is a library of self-contained mathematics andstatistics components. We use ACM version 1.2 and 2.0 for ourevaluation.

3.1.2 Bug Report Collecting and Processing

Bug reports include metadata and textual contents to describecrashes. Some users include crash stack traces in their bug reports,and we use bug reports which contain crash stack traces for ourexperiment. From bug reports, we extract a bug id, version numberand crash stack traces by using InfoZilla [13].

We exclude some bug reports. First, we do not use bug reportswith invalid crash traces. After extracting stack traces, we obtainmethod names and their line numbers. Then, we check if the meth-ods exist and the line numbers match with the corresponding ver-sion of the system. We prune cases where users report incorrect

# of # of bug reports # of validsystem bug reports with stack traces stack tracesAJDT 461 162 83ACC 97 8 8ACM 116 14 10Total 674 184 101

Table 2: Bug reports used in our experiment

system # of # of reproducible crashescrashes feed objcap precond total

AJDT 1.1.x 21 0 0 +10 10AJDT 1.2.x 16 2 +2 0 4AJDT 1.5.x 46 9 +10 +5 24

ACC 8 1 +2 +2 5ACM 10 1 0 +1 2total 101 13 +14 +18 45

percent 12.9% +13.9% +17.8% 44.6%

Table 3: Reproducible crashes of AJDT, ACC and ACM. The

“feed” column shows the number of reproducible crashes using

feedback-directed input generation technique. The column de-

noted as “objcap” represents the number of additional repro-

ducible crashes by object-capture-based technique. Similarly,

“precond” presents the number of additional reproducible cra-

shes by the precondition-based technique.

version or wrong stack trace information. In addition, we also ex-clude all non-fixed bug reports. Even if they include valid stacktraces, we cannot determine whether they are real bugs.

Table 2 shows the number of the bug reports2used in our exper-iments. We extracted 674 bug reports, but only 184 bug reportsinclude stack traces. After pruning non-fixed bug reports and bugreports with invalid stack traces, we are left with 101 bug reports.

3.1.3 Criteria of Reproducibility

To determine whether a crash is reproduced or not, we checkthe exception type and location of the original and reproduced cra-shes [8]. If the reproduced exception type and the original type areidentical, and both crashed in the same line, we assume the crash issuccessfully reproduced.

3.1.4 Object Capturing

STAR requires captured objects from normal program execution.To capture objects, we instrument our subject systems and executesystem tests provided by each subject. The instrumented systemscapture objects and serialize them during execution of the systemtests.

By executing instrumented systems with their system tests, wecaptured and serialized 12,420 objects zipped in 342MB on aver-age for each version of AJDT, 61,408 objects zipped in 104MB forACC and 7,012 objects zipped in 4MB for ACM. Often, executinginstrumented systems incurs a huge overhead [8, 31, 33, 35]. How-ever, note that this capturing process is conducted once in house,the deployed software does not incur any additional overhead.

3.2 Reproducibility

In this section, we show how many crashes are reproducible by2Bug reports of AJDT can be found in http://bugs.eclipse.org, and bug reports of both ACC and ACM can befound in https://issues.apache.org/.

45%

Results

Page 37: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

Summary

• STAR approaches- Feedback based random approach (feed)- Object-capture based (objcap)- Static analysis (precondition)

• 45 % crash reproduction (with 0 overhead)

• Repository data (captured objects, crash traces) help static analysis

Page 38: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

Future Work

• Common change patterns + autofix?- Most autofix approaches are random mutation

based

• Translation + Static analysis- “press x% when %x is on”

• Any other combinations with MSR?

Page 39: STAR: Stack-Trace based Automatic crash Reproductionrosaec.snu.ac.kr/meet/file/20110106d.pdf · 2018. 4. 12. · Even if they include valid stack traces, we cannot determine whether

Sung Kim <[email protected]>http://www.cse.ust.hk/~hunkim

http://www.se.or.kr (Korean Blog)

STAR: Stack-Trace based Automatic crash Reproduction