SlideShare a Scribd company logo
Evolutionary Testing for Crash
Reproduction
Annibale PanichellaMozhan Soltani Arie van Deursen
Bugs are everywhere…
Cost of Bug Fixings
https://issues.apache.org/jira/browse/COLLECTIONS-70
Major Bug for
Apache Commons
Collections
Cost of Bug Fixings
https://issues.apache.org/jira/browse/COLLECTIONS-70
Major Bug for
Apache Commons
Collections
Cost of Bug Fixings
https://issues.apache.org/jira/browse/COLLECTIONS-70
Created on
June 2005
Major Bug for
Apache Commons
Collections
Cost of Bug Fixings
https://issues.apache.org/jira/browse/COLLECTIONS-70
Created on
June 2005
Solved on
January 2006
Major Bug for
Apache Commons
Collections
Crash Replication
1) Inspect the stack trace / bug report
2) Analyse the code
3) Replicate the crash
4) Fix the problem
Related Work
Record-and-play approaches
S. Artzi et al., ESEC/FSE 2009.
Stored
Objects
Data from
Heap and Stack
@Test
public void test(){
boolean boolean0 = false;
String string0 = BooleanUtils.toStringOnOff(boolean0);
assertNotNull(string0);
assertEquals("off", string0);
}
Disadvantages:
1) Require software instrumentation
and special hardware deployment
2) Memory and run-time overhead:
• 10%-90% of memory overhead
• 30%-60% of runtime overhead
Record-and-play approaches
S. Artzi et al., ESEC/FSE 2009.
Related Work
Core dump-based approaches
J. Rößler et al., ICST 2013.
Stack Traces Core-dump
+
@Test
public void test(){
boolean boolean0 = false;
String string0 = BooleanUtils.toStringOnOff(boolean0);
assertNotNull(string0);
assertEquals("off", string0);
}
Related Work
Core dump-based approaches
J. Rößler et al., ICST 2013.
Disadvantages:
1) Requires core-dump at the time of
the crash in addition to stack
traces
2) Ability to replicate crashes
depends on the amount of core-
dump data available
Advantages:
1) No overhead due to system
monitoring
2) SBST Approaches
Related Work
Stack Trace based Crash Replication
N. Chen and Kim, TSE 2015.
STAR (Stack Traced based Automatic crash
Reproduction) uses backward Symbolic Execution
triggering crash preconditions
Symbolic Execution
public void test0() throws Throwable {
java.util.HashMap v1 = new java.util.HashMap();
java.util.HashMap v2 = new java.util.HashMap();
org.apache.commons.collections.map.TransformedMap v3 =
(org.apache.commons.collections.map.TransformedMap)
org.apache.commons.collections.map.TransformedMap.decorate((java.util.Map) v2,
(org.apache.commons.collections.Transformer) null,
(org.apache.commons.collections.Transformer) null);
v3.putAll((java.util.Map) v1);
}
Stack Trace
v2.size == 0
v2 == not null
v1 == not null
v2 instanceOf(Ljava/util/HashMap)
v1 instanceOf(Lorg/apache/commons/collections/map/TransformedMap)
java.lang.IllegalArgumentException:
org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:142)
org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:127)
org.apache.commons.collections.map.AbstractLinkedMap.<init> (AbstractLinkedMap.java:95)
org.apache.commons.collections.map.LinkedMap.<init> (LinkedMap.java:78)
org.apache.commons.collections.map.TransformedMap.transformMap (TransformedMap.java:153)
org.apache.commons.collections.map.TransformedMap.putAll (TransformedMap.java:190)
Preconditions
Test Case
Stack Trace based Crash Replication
N. Chen and Kim, TSE 2015.
Symbolic Execution
Disadvantages:
1) Crashes with environmental
dependencies (e.g, external files)
are not replicable
2) Path explosion
3) SMT solver limitations
Advantages:
1) Better than Randoop (random
testing)
2) Better than BugRedux
Stack Trace based Crash Replication
J. Xuan et al., ESEC/FSE 2015.
Mutation Analysis
@Test
public void test(){
Boolean boolean0 = false;
String string0 = BooleanUtils.toStringOnOff(boolean0);
assertNotNull(string0);
assertEquals("off", string0);
}
@Test
public void test(){
Boolean boolean0 = false;
String string0 = BooleanUtils.toStringOnOff(null);
assertNotNull(string0);
assertEquals("off", string0);
}
MuCrash
Stack Trace based Crash Replication
J. Xuan et al., ESEC/FSE 2015.
Mutation Analysis
Disadvantages:
1) Leads to a large number of
unnecessary test cases
2) Crashes requiring method
sequences (not included in the
original test case) are not
reproduced
Advantages:
1) Replicate some crashes not
replicable by STAR
2) No solver is used
What about SBST Unit Test Tools?
Are they competitive if relying on Stack Traces only?
Why Unit Test Tools?
java.lang.IllegalArgumentException:
org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:142)
org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:127)
org.apache.commons.collections.map.AbstractLinkedMap.<init> (AbstractLinkedMap.java:95)
org.apache.commons.collections.map.LinkedMap.<init> (LinkedMap.java:78)
org.apache.commons.collections.map.TransformedMap.transformMap (TransformedMap.java:153)
org.apache.commons.collections.map.TransformedMap.putAll (TransformedMap.java:190)
Stack Trace
Target Crash
Bug Name: ACC-48
Library: Apache Commons Collection
https://issues.apache.org/jira/browse/COLLECTIONS-48
Exception Name Root Cause of the Exception
Why Unit Test Tools?
Target Crash
Bug Name: ACC-48
Library: Apache Commons Collection
https://issues.apache.org/jira/browse/COLLECTIONS-48
Class Under Test
java.lang.IllegalArgumentException:
org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:142)
org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:127)
org.apache.commons.collections.map.AbstractLinkedMap.<init> (AbstractLinkedMap.java:95)
org.apache.commons.collections.map.LinkedMap.<init> (LinkedMap.java:78)
org.apache.commons.collections.map.TransformedMap.transformMap (TransformedMap.java:153)
org.apache.commons.collections.map.TransformedMap.putAll (TransformedMap.java:190)
Stack Trace
Exception Name
Method Under Test
Line to reach
Test Case n
Test Case...
Test Case1
Test Case 2
Finale Test
Evaluation
Selection
Crossover
Mutation
Genetic
Algorithm
Search Strategy: one target (crash)
at a time approach
Fitness Function
Main Conditions to Satisfy
1) the line (statement) where the exception is thrown has to be covered
2) the target exception has to be thrown
3) the generated stack trace must be as similar to the original one as
possible.
java.lang.IllegalArgumentException:
org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:142)
org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:127)
org.apache.commons.collections.map.AbstractLinkedMap.<init> (AbstractLinkedMap.java:95)
org.apache.commons.collections.map.LinkedMap.<init> (LinkedMap.java:78)
org.apache.commons.collections.map.TransformedMap.transformMap (TransformedMap.java:153)
org.apache.commons.collections.map.TransformedMap.putAll (TransformedMap.java:190)
Target Stack Trace
(2)
(1)
(3)
f(t) = 3 x line_coverage + 2 x exception_coverage + trace_similarity
(1) (2) (3)
Fitness Function
java.lang.IllegalArgumentException:
org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:142)
org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:127)
org.apache.commons.collections.map.AbstractLinkedMap.<init> (AbstractLinkedMap.java:95)
org.apache.commons.collections.map.LinkedMap.<init> (LinkedMap.java:78)
org.apache.commons.collections.map.TransformedMap.transformMap (TransformedMap.java:153)
org.apache.commons.collections.map.TransformedMap.putAll (TransformedMap.java:190)
Target Stack Trace
f(t) = 3 x line_coverage + 2 x exception_coverage + trace_similarity
(1) (2) (3)
1) line_coverage = approach_level + branch_distance
Fitness Function
java.lang.IllegalArgumentException:
org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:142)
org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:127)
org.apache.commons.collections.map.AbstractLinkedMap.<init> (AbstractLinkedMap.java:95)
org.apache.commons.collections.map.LinkedMap.<init> (LinkedMap.java:78)
org.apache.commons.collections.map.TransformedMap.transformMap (TransformedMap.java:153)
org.apache.commons.collections.map.TransformedMap.putAll (TransformedMap.java:190)
Target Stack Trace
f(t) = 3 x line_coverage + 2 x exception_coverage + trace_similarity
(1) (2) (3)
1) line_coverage = approach_level + branch_distance
2) exception_coverage = 0 if the target exception in thrown; 1 otherwise
Fitness Function
java.lang.IllegalArgumentException:
org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:142)
org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:127)
org.apache.commons.collections.map.AbstractLinkedMap.<init> (AbstractLinkedMap.java:95)
org.apache.commons.collections.map.LinkedMap.<init> (LinkedMap.java:78)
org.apache.commons.collections.map.TransformedMap.transformMap (TransformedMap.java:153)
org.apache.commons.collections.map.TransformedMap.putAll (TransformedMap.java:190)
Target Stack Trace
f(t) = 3 x line_coverage + 2 x exception_coverage + trace_similarity
(1) (2) (3)
1) line_coverage = approach_level + branch_distance
2) exception_coverage = 0 if the target exception in thrown; 1 otherwise
3) trace_similarity = cumulative differences with target trace elements
Trace Elements
Trace Similarity
java.lang.IllegalArgumentException:
org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:142)
org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:127)
org.apache.commons.collections.map.AbstractLinkedMap.<init> (AbstractLinkedMap.java:95)
org.apache.commons.collections.map.LinkedMap.<init> (LinkedMap.java:78)
org.apache.commons.collections.map.TransformedMap.transformMap (TransformedMap.java:153)
org.apache.commons.collections.map.TransformedMap.putAll (TransformedMap.java:190)
Target Stack Trace
Two trace elements are equal iff:
1) same class name
2) same method name
3) same line
java.lang.IllegalArgumentException:
org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:141)
org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:48)
org.apache.commons.collections.map.AbstractLinkedMap.<init> (AbstractLinkedMap.java:31)
org.apache.commons.collections.map.LinkedMap.<init> (LinkedMap.java:72)
org.apache.commons.collections.map.TransformedMap.transformMap (TransformedMap.java:148)
org.apache.commons.collections.map.TransformedMap.putAll (TransformedMap.java:190)
Generated Stack Trace
Trace Similarity
java.lang.IllegalArgumentException:
org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:142)
org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:127)
org.apache.commons.collections.map.AbstractLinkedMap.<init> (AbstractLinkedMap.java:95)
org.apache.commons.collections.map.LinkedMap.<init> (LinkedMap.java:78)
org.apache.commons.collections.map.TransformedMap.transformMap (TransformedMap.java:153)
org.apache.commons.collections.map.TransformedMap.putAll (TransformedMap.java:190)
Target Stack Trace
Two trace elements are equal iff:
1) same class name (distance = 0)
2) same method name
3) same line
java.lang.IllegalArgumentException:
org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:141)
org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:48)
org.apache.commons.collections.map.AbstractLinkedMap.<init> (AbstractLinkedMap.java:31)
org.apache.commons.collections.map.LinkedMap.<init> (LinkedMap.java:72)
org.apache.commons.collections.map.TransformedMap.transformMap (TransformedMap.java:148)
org.apache.commons.collections.map.TransformedMap.putAll (TransformedMap.java:190)
Generated Stack Trace
Trace Similarity
java.lang.IllegalArgumentException:
org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:142)
org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:127)
org.apache.commons.collections.map.AbstractLinkedMap.<init> (AbstractLinkedMap.java:95)
org.apache.commons.collections.map.LinkedMap.<init> (LinkedMap.java:78)
org.apache.commons.collections.map.TransformedMap.transformMap (TransformedMap.java:153)
org.apache.commons.collections.map.TransformedMap.putAll (TransformedMap.java:190)
Target Stack Trace
Two trace elements are equal iff:
1) same class name (distance = 0)
2) same method name (distance = 0)
3) same line
java.lang.IllegalArgumentException:
org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:141)
org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:48)
org.apache.commons.collections.map.AbstractLinkedMap.<init> (AbstractLinkedMap.java:31)
org.apache.commons.collections.map.LinkedMap.<init> (LinkedMap.java:72)
org.apache.commons.collections.map.TransformedMap.transformMap (TransformedMap.java:148)
org.apache.commons.collections.map.TransformedMap.putAll (TransformedMap.java:190)
Generated Stack Trace
Trace Similarity
java.lang.IllegalArgumentException:
org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:142)
org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:127)
org.apache.commons.collections.map.AbstractLinkedMap.<init> (AbstractLinkedMap.java:95)
org.apache.commons.collections.map.LinkedMap.<init> (LinkedMap.java:78)
org.apache.commons.collections.map.TransformedMap.transformMap (TransformedMap.java:153)
org.apache.commons.collections.map.TransformedMap.putAll (TransformedMap.java:190)
Target Stack Trace
java.lang.IllegalArgumentException:
org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:141)
org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:48)
org.apache.commons.collections.map.AbstractLinkedMap.<init> (AbstractLinkedMap.java:31)
org.apache.commons.collections.map.LinkedMap.<init> (LinkedMap.java:72)
org.apache.commons.collections.map.TransformedMap.transformMap (TransformedMap.java:148)
org.apache.commons.collections.map.TransformedMap.putAll (TransformedMap.java:190)
Generated Stack Trace
Two trace elements are equal iff:
1) same class name (distance = 0)
2) same method name (distance = 0)
3) same line (distance = |153 - 148| / (1+ |153 - 148| ) = 0.83)
Trace Similarity
java.lang.IllegalArgumentException:
org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:142)
org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:127)
org.apache.commons.collections.map.AbstractLinkedMap.<init> (AbstractLinkedMap.java:95)
org.apache.commons.collections.map.LinkedMap.<init> (LinkedMap.java:78)
org.apache.commons.collections.map.TransformedMap.transformMap (TransformedMap.java:153)
org.apache.commons.collections.map.TransformedMap.putAll (TransformedMap.java:190)
Target Stack Trace
java.lang.IllegalArgumentException:
org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:141)
org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:48)
org.apache.commons.collections.map.AbstractLinkedMap.<init> (AbstractLinkedMap.java:31)
org.apache.commons.collections.map.LinkedMap.<init> (LinkedMap.java:72)
org.apache.commons.collections.map.TransformedMap.transformMap (TransformedMap.java:148)
org.apache.commons.collections.map.TransformedMap.putAll (TransformedMap.java:190)
Generated Stack Trace
Two trace elements are equal iff:
1) same class name (distance = 0)
2) same method name (distance = 0)
3) same line (distance = |153 - 148| / (1+ |153 - 148| ) = 0.83)
0.5
0.99
0.98
0.85
0.83
Tot = 4.15
Pilot Study
Context: 10 real bugs from Apache Commons Collections
Experimented algorithms:
- EvoSuite + our fitness function (30 independent runs)
- STAR (Symbolic execution)
- MuCrash (Mutation analysis)
Empirical Evaluation
Bug ID Version Exception Priority
ACC-4 2.0 NullPointer Major
ACC-28 2.0 NullPointer Major
ACC-35 2.0 UnsupportedOperation Major
ACC-48 3.1 IllegalArgument Major
ACC-53 3.1 ArrayIndexOutOfBound Major
ACC-70 3.1 NullPointer Major
ACC-77 3.1 IllegalState Major
ACC-104 3.1 ArrayIndexOutOfBound Major
ACC-331 3.2 NullPointer Minor
ACC-377 3.2 NullPointer Minor
N. Chen and Kim, TSE 2015.
J. Xuan et al., ESEC/FSE 2015.
Used in:
Results
Bug ID
% Successful
Replication
STAR MuCrash
ACC-4 30/30 YES YES
ACC-28 30/30 YES YES
ACC-35 30/30 YES YES
ACC-48 30/30 YES YES
ACC-53 28/30 YES NO
ACC-70 30/30 NO NO
ACC-77 30/30 YES NO
ACC-104 0/30 YES YES
ACC-331 10/30 NO YES
ACC-377 0/30 NO NO
Results
Bug ID
% Successful
Replication
STAR MuCrash
ACC-4 30/30 YES YES
ACC-28 30/30 YES YES
ACC-35 30/30 YES YES
ACC-48 30/30 YES YES
ACC-53 28/30 YES NO
ACC-70 30/30 NO NO
ACC-77 30/30 YES NO
ACC-104 0/30 YES YES
ACC-331 10/30 NO YES
ACC-377 0/30 NO NO
Our solution
replicated 8/10 bugs
STAR replicated 7/10
bugs
MuCrash replicated
6/10 bugs
Results
Bug ID
% Successful
Replication
STAR MuCrash
ACC-4 30/30 YES YES
ACC-28 30/30 YES YES
ACC-35 30/30 YES YES
ACC-48 30/30 YES YES
ACC-53 28/30 YES NO
ACC-70 30/30 NO NO
ACC-77 30/30 YES NO
ACC-104 0/30 YES YES
ACC-331 10/30 NO YES
ACC-377 0/30 NO NO
Replicable by our
SBST solution only
ACC-70
Exception in thread "main" java.lang.NullPointerException at
org.apache.commons.collections.list.TreeList$TreeListIterator.previous (TreeList.java:841)
at java.util.Collections.get(Unknown Source)
at java.util.Collections.iteratorBinarySearch(Unknown Source)
at java.util.Collections.binarySearch(Unknown Source)
at utils.queue.QueueSorted.put(QueueSorted.java:51)
at framework.search.GraphSearch.solve(GraphSearch.java:53)
at search.informed.BestFirstSearch.solve(BestFirstSearch.java:20)
at Hlavni.main(Hlavni.java:66)
Target Stack Trace
ACC-70
Exception in thread "main" java.lang.NullPointerException at
org.apache.commons.collections.list.TreeList$TreeListIterator.previous (TreeList.java:841)
at java.util.Collections.get(Unknown Source)
at java.util.Collections.iteratorBinarySearch(Unknown Source)
at java.util.Collections.binarySearch(Unknown Source)
at utils.queue.QueueSorted.put(QueueSorted.java:51)
at framework.search.GraphSearch.solve(GraphSearch.java:53)
at search.informed.BestFirstSearch.solve(BestFirstSearch.java:20)
at Hlavni.main(Hlavni.java:66)
public void test0() throws Throwable {
TreeList treeList0 = new TreeList();
treeList0.add((Object) null);
TreeList.TreeListIterator treeList_TreeListIterator0 = new
TreeList.TreeListIterator(treeList0, 732);
// Undeclared exception!
treeList_TreeListIterator0.previous();
}
Target Stack Trace
Test generated by our solution
ACC-70
Exception in thread "main" java.lang.NullPointerException at
org.apache.commons.collections.list.TreeList$TreeListIterator.previous (TreeList.java:841)
at java.util.Collections.get(Unknown Source)
at java.util.Collections.iteratorBinarySearch(Unknown Source)
at java.util.Collections.binarySearch(Unknown Source)
at utils.queue.QueueSorted.put(QueueSorted.java:51)
at framework.search.GraphSearch.solve(GraphSearch.java:53)
at search.informed.BestFirstSearch.solve(BestFirstSearch.java:20)
at Hlavni.main(Hlavni.java:66)
public void test0() throws Throwable {
TreeList treeList0 = new TreeList();
treeList0.add((Object) null);
TreeList.TreeListIterator treeList_TreeListIterator0 = new
TreeList.TreeListIterator(treeList0, 732);
// Undeclared exception!
treeList_TreeListIterator0.previous();
}
Target Stack Trace
Test generated by our solution
public Object previous() {
...
if (next == null) {
next = parent.root.get(nextIndex - 1);
} else {
next = next.previous();
}
Object value = next.getValue();
...
}
}
Affected Code
if “parent” is null,
this code generates
an exception
Thank you!
Q&A

More Related Content

PDF
Google guava overview
PDF
The core libraries you always wanted - Google Guava
PDF
Google Guava & EMF @ GTUG Nantes
PDF
Google Guava
PDF
Google Guava for cleaner code
PDF
Clean code with google guava jee conf
PPTX
Numba-compiled Python UDFs for Impala (Impala Meetup 5/20/14)
PDF
Compiled Python UDFs for Impala
Google guava overview
The core libraries you always wanted - Google Guava
Google Guava & EMF @ GTUG Nantes
Google Guava
Google Guava for cleaner code
Clean code with google guava jee conf
Numba-compiled Python UDFs for Impala (Impala Meetup 5/20/14)
Compiled Python UDFs for Impala

What's hot (20)

PDF
Google guava
PDF
Reactive programming with RxJS - ByteConf 2018
PDF
Google guava - almost everything you need to know
PDF
RxJS Operators - Real World Use Cases (FULL VERSION)
PPTX
Java 8 Puzzlers [as presented at OSCON 2016]
PDF
Using Android Things to Detect & Exterminate Reptilians
PPTX
The Groovy Puzzlers – The Complete 01 and 02 Seasons
PDF
Riga DevDays 2017 - The hitchhiker’s guide to Java class reloading
PDF
Home Automation with Android Things and the Google Assistant
ODP
Java Boilerplate Busters
PDF
Best Java Problems and Solutions
PDF
JEEConf 2017 - Having fun with Javassist
PDF
JavaOne 2015 - Having fun with Javassist
PDF
A Playful Introduction to Rx
PDF
GeeCON 2017 - TestContainers. Integration testing without the hassle
PDF
The Ring programming language version 1.5.4 book - Part 79 of 185
PDF
Architecture Patterns in Practice with Kotlin. UA Mobile 2017.
PPTX
Down to Stack Traces, up from Heap Dumps
PPTX
Don't Be Afraid of Abstract Syntax Trees
PDF
JavaScript on the GPU
Google guava
Reactive programming with RxJS - ByteConf 2018
Google guava - almost everything you need to know
RxJS Operators - Real World Use Cases (FULL VERSION)
Java 8 Puzzlers [as presented at OSCON 2016]
Using Android Things to Detect & Exterminate Reptilians
The Groovy Puzzlers – The Complete 01 and 02 Seasons
Riga DevDays 2017 - The hitchhiker’s guide to Java class reloading
Home Automation with Android Things and the Google Assistant
Java Boilerplate Busters
Best Java Problems and Solutions
JEEConf 2017 - Having fun with Javassist
JavaOne 2015 - Having fun with Javassist
A Playful Introduction to Rx
GeeCON 2017 - TestContainers. Integration testing without the hassle
The Ring programming language version 1.5.4 book - Part 79 of 185
Architecture Patterns in Practice with Kotlin. UA Mobile 2017.
Down to Stack Traces, up from Heap Dumps
Don't Be Afraid of Abstract Syntax Trees
JavaScript on the GPU
Ad

Similar to Evolutionary Testing for Crash Reproduction (20)

PDF
Research overview Oct. 2018
KEY
2 the essentials of effective java
PDF
20181106 arie van_deursen_testday2018
PDF
Mining Fix Patterns for FindBugs Violations
PDF
findbugs Bernhard Merkle
PDF
Java Memory Analysis: Problems and Solutions
PDF
survey on analysing the crash reports of software applications
PDF
Pldi09 semantics aware trace analysis
PDF
Collections forceawakens
PDF
Hacking Java - Enhancing Java Code at Build or Runtime
PPT
Memories of Bug Fixes
PPTX
Finding bugs that matter with Findbugs
PPTX
First adoption hackathon at BGJUG
PPSX
Java.lang.object
PDF
GTAC 2014: What lurks in test suites?
PDF
STAMP Descartes Presentation
PPTX
Programming picaresque
PDF
What could possibly go wrong
PPT
Crowd debugging (FSE 2015)
PDF
Java Se next Generetion
Research overview Oct. 2018
2 the essentials of effective java
20181106 arie van_deursen_testday2018
Mining Fix Patterns for FindBugs Violations
findbugs Bernhard Merkle
Java Memory Analysis: Problems and Solutions
survey on analysing the crash reports of software applications
Pldi09 semantics aware trace analysis
Collections forceawakens
Hacking Java - Enhancing Java Code at Build or Runtime
Memories of Bug Fixes
Finding bugs that matter with Findbugs
First adoption hackathon at BGJUG
Java.lang.object
GTAC 2014: What lurks in test suites?
STAMP Descartes Presentation
Programming picaresque
What could possibly go wrong
Crowd debugging (FSE 2015)
Java Se next Generetion
Ad

More from Annibale Panichella (20)

PDF
Metamorphic-Based Many-Objective Distillation of LLMs for Code-related Tasks
PDF
MIP Award presentation at the IEEE International Conference on Software Analy...
PDF
Breaking the Silence: the Threats of Using LLMs in Software Engineering
PDF
Searching for Quality: Genetic Algorithms and Metamorphic Testing for Softwar...
PDF
A Fast Multi-objective Evolutionary Approach for Designing Large-Scale Optica...
PDF
An Improved Pareto Front Modeling Algorithm for Large-scale Many-Objective Op...
PDF
VST2022.pdf
PDF
IPA Fall Days 2019
PDF
An Adaptive Evolutionary Algorithm based on Non-Euclidean Geometry for Many-O...
PDF
Speeding-up Software Testing With Computational Intelligence
PDF
Incremental Control Dependency Frontier Exploration for Many-Criteria Test C...
PPTX
Sbst2018 contest2018
PDF
Java Unit Testing Tool Competition — Fifth Round
PDF
ICSE 2017 - Evocrash
PDF
Parameterizing and Assembling IR-based Solutions for SE Tasks using Genetic A...
PDF
Security Threat Identification and Testing
PDF
Reformulating Branch Coverage as a Many-Objective Optimization Problem
PDF
Results for EvoSuite-MOSA at the Third Unit Testing Tool Competition
PDF
Adaptive User Feedback for IR-based Traceability Recovery
PDF
Diversity mechanisms for evolutionary populations in Search-Based Software En...
Metamorphic-Based Many-Objective Distillation of LLMs for Code-related Tasks
MIP Award presentation at the IEEE International Conference on Software Analy...
Breaking the Silence: the Threats of Using LLMs in Software Engineering
Searching for Quality: Genetic Algorithms and Metamorphic Testing for Softwar...
A Fast Multi-objective Evolutionary Approach for Designing Large-Scale Optica...
An Improved Pareto Front Modeling Algorithm for Large-scale Many-Objective Op...
VST2022.pdf
IPA Fall Days 2019
An Adaptive Evolutionary Algorithm based on Non-Euclidean Geometry for Many-O...
Speeding-up Software Testing With Computational Intelligence
Incremental Control Dependency Frontier Exploration for Many-Criteria Test C...
Sbst2018 contest2018
Java Unit Testing Tool Competition — Fifth Round
ICSE 2017 - Evocrash
Parameterizing and Assembling IR-based Solutions for SE Tasks using Genetic A...
Security Threat Identification and Testing
Reformulating Branch Coverage as a Many-Objective Optimization Problem
Results for EvoSuite-MOSA at the Third Unit Testing Tool Competition
Adaptive User Feedback for IR-based Traceability Recovery
Diversity mechanisms for evolutionary populations in Search-Based Software En...

Recently uploaded (20)

PPTX
PurpoaiveCommunication for students 02.pptx
PPTX
2025-08-10 Joseph 02 (shared slides).pptx
PPTX
chapter8-180915055454bycuufucdghrwtrt.pptx
PDF
Tunisia's Founding Father(s) Pitch-Deck 2022.pdf
PPTX
The Effect of Human Resource Management Practice on Organizational Performanc...
PPTX
nose tajweed for the arabic alphabets for the responsive
PPTX
AcademyNaturalLanguageProcessing-EN-ILT-M02-Introduction.pptx
DOCX
"Project Management: Ultimate Guide to Tools, Techniques, and Strategies (2025)"
PDF
MODULE 3 BASIC SECURITY DUTIES AND ROLES.pdf
PPTX
Effective_Handling_Information_Presentation.pptx
PPTX
Intro to ISO 9001 2015.pptx wareness raising
PDF
Yusen Logistics Group Sustainability Report 2024.pdf
PPTX
Tablets And Capsule Preformulation Of Paracetamol
PPTX
Introduction-to-Food-Packaging-and-packaging -materials.pptx
DOCX
ENGLISH PROJECT FOR BINOD BIHARI MAHTO KOYLANCHAL UNIVERSITY
PPTX
MERISTEMATIC TISSUES (MERISTEMS) PPT PUBLIC
PPTX
_ISO_Presentation_ISO 9001 and 45001.pptx
PPT
First Aid Training Presentation Slides.ppt
PPTX
Tour Presentation Educational Activity.pptx
PPTX
fundraisepro pitch deck elegant and modern
PurpoaiveCommunication for students 02.pptx
2025-08-10 Joseph 02 (shared slides).pptx
chapter8-180915055454bycuufucdghrwtrt.pptx
Tunisia's Founding Father(s) Pitch-Deck 2022.pdf
The Effect of Human Resource Management Practice on Organizational Performanc...
nose tajweed for the arabic alphabets for the responsive
AcademyNaturalLanguageProcessing-EN-ILT-M02-Introduction.pptx
"Project Management: Ultimate Guide to Tools, Techniques, and Strategies (2025)"
MODULE 3 BASIC SECURITY DUTIES AND ROLES.pdf
Effective_Handling_Information_Presentation.pptx
Intro to ISO 9001 2015.pptx wareness raising
Yusen Logistics Group Sustainability Report 2024.pdf
Tablets And Capsule Preformulation Of Paracetamol
Introduction-to-Food-Packaging-and-packaging -materials.pptx
ENGLISH PROJECT FOR BINOD BIHARI MAHTO KOYLANCHAL UNIVERSITY
MERISTEMATIC TISSUES (MERISTEMS) PPT PUBLIC
_ISO_Presentation_ISO 9001 and 45001.pptx
First Aid Training Presentation Slides.ppt
Tour Presentation Educational Activity.pptx
fundraisepro pitch deck elegant and modern

Evolutionary Testing for Crash Reproduction

  • 1. Evolutionary Testing for Crash Reproduction Annibale PanichellaMozhan Soltani Arie van Deursen
  • 3. Cost of Bug Fixings https://issues.apache.org/jira/browse/COLLECTIONS-70 Major Bug for Apache Commons Collections
  • 4. Cost of Bug Fixings https://issues.apache.org/jira/browse/COLLECTIONS-70 Major Bug for Apache Commons Collections
  • 5. Cost of Bug Fixings https://issues.apache.org/jira/browse/COLLECTIONS-70 Created on June 2005 Major Bug for Apache Commons Collections
  • 6. Cost of Bug Fixings https://issues.apache.org/jira/browse/COLLECTIONS-70 Created on June 2005 Solved on January 2006 Major Bug for Apache Commons Collections
  • 7. Crash Replication 1) Inspect the stack trace / bug report 2) Analyse the code 3) Replicate the crash 4) Fix the problem
  • 8. Related Work Record-and-play approaches S. Artzi et al., ESEC/FSE 2009. Stored Objects Data from Heap and Stack @Test public void test(){ boolean boolean0 = false; String string0 = BooleanUtils.toStringOnOff(boolean0); assertNotNull(string0); assertEquals("off", string0); }
  • 9. Disadvantages: 1) Require software instrumentation and special hardware deployment 2) Memory and run-time overhead: • 10%-90% of memory overhead • 30%-60% of runtime overhead Record-and-play approaches S. Artzi et al., ESEC/FSE 2009. Related Work
  • 10. Core dump-based approaches J. Rößler et al., ICST 2013. Stack Traces Core-dump + @Test public void test(){ boolean boolean0 = false; String string0 = BooleanUtils.toStringOnOff(boolean0); assertNotNull(string0); assertEquals("off", string0); } Related Work
  • 11. Core dump-based approaches J. Rößler et al., ICST 2013. Disadvantages: 1) Requires core-dump at the time of the crash in addition to stack traces 2) Ability to replicate crashes depends on the amount of core- dump data available Advantages: 1) No overhead due to system monitoring 2) SBST Approaches Related Work
  • 12. Stack Trace based Crash Replication N. Chen and Kim, TSE 2015. STAR (Stack Traced based Automatic crash Reproduction) uses backward Symbolic Execution triggering crash preconditions Symbolic Execution public void test0() throws Throwable { java.util.HashMap v1 = new java.util.HashMap(); java.util.HashMap v2 = new java.util.HashMap(); org.apache.commons.collections.map.TransformedMap v3 = (org.apache.commons.collections.map.TransformedMap) org.apache.commons.collections.map.TransformedMap.decorate((java.util.Map) v2, (org.apache.commons.collections.Transformer) null, (org.apache.commons.collections.Transformer) null); v3.putAll((java.util.Map) v1); } Stack Trace v2.size == 0 v2 == not null v1 == not null v2 instanceOf(Ljava/util/HashMap) v1 instanceOf(Lorg/apache/commons/collections/map/TransformedMap) java.lang.IllegalArgumentException: org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:142) org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:127) org.apache.commons.collections.map.AbstractLinkedMap.<init> (AbstractLinkedMap.java:95) org.apache.commons.collections.map.LinkedMap.<init> (LinkedMap.java:78) org.apache.commons.collections.map.TransformedMap.transformMap (TransformedMap.java:153) org.apache.commons.collections.map.TransformedMap.putAll (TransformedMap.java:190) Preconditions Test Case
  • 13. Stack Trace based Crash Replication N. Chen and Kim, TSE 2015. Symbolic Execution Disadvantages: 1) Crashes with environmental dependencies (e.g, external files) are not replicable 2) Path explosion 3) SMT solver limitations Advantages: 1) Better than Randoop (random testing) 2) Better than BugRedux
  • 14. Stack Trace based Crash Replication J. Xuan et al., ESEC/FSE 2015. Mutation Analysis @Test public void test(){ Boolean boolean0 = false; String string0 = BooleanUtils.toStringOnOff(boolean0); assertNotNull(string0); assertEquals("off", string0); } @Test public void test(){ Boolean boolean0 = false; String string0 = BooleanUtils.toStringOnOff(null); assertNotNull(string0); assertEquals("off", string0); } MuCrash
  • 15. Stack Trace based Crash Replication J. Xuan et al., ESEC/FSE 2015. Mutation Analysis Disadvantages: 1) Leads to a large number of unnecessary test cases 2) Crashes requiring method sequences (not included in the original test case) are not reproduced Advantages: 1) Replicate some crashes not replicable by STAR 2) No solver is used
  • 16. What about SBST Unit Test Tools? Are they competitive if relying on Stack Traces only?
  • 17. Why Unit Test Tools? java.lang.IllegalArgumentException: org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:142) org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:127) org.apache.commons.collections.map.AbstractLinkedMap.<init> (AbstractLinkedMap.java:95) org.apache.commons.collections.map.LinkedMap.<init> (LinkedMap.java:78) org.apache.commons.collections.map.TransformedMap.transformMap (TransformedMap.java:153) org.apache.commons.collections.map.TransformedMap.putAll (TransformedMap.java:190) Stack Trace Target Crash Bug Name: ACC-48 Library: Apache Commons Collection https://issues.apache.org/jira/browse/COLLECTIONS-48 Exception Name Root Cause of the Exception
  • 18. Why Unit Test Tools? Target Crash Bug Name: ACC-48 Library: Apache Commons Collection https://issues.apache.org/jira/browse/COLLECTIONS-48 Class Under Test java.lang.IllegalArgumentException: org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:142) org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:127) org.apache.commons.collections.map.AbstractLinkedMap.<init> (AbstractLinkedMap.java:95) org.apache.commons.collections.map.LinkedMap.<init> (LinkedMap.java:78) org.apache.commons.collections.map.TransformedMap.transformMap (TransformedMap.java:153) org.apache.commons.collections.map.TransformedMap.putAll (TransformedMap.java:190) Stack Trace Exception Name Method Under Test Line to reach
  • 19. Test Case n Test Case... Test Case1 Test Case 2 Finale Test Evaluation Selection Crossover Mutation Genetic Algorithm Search Strategy: one target (crash) at a time approach
  • 20. Fitness Function Main Conditions to Satisfy 1) the line (statement) where the exception is thrown has to be covered 2) the target exception has to be thrown 3) the generated stack trace must be as similar to the original one as possible. java.lang.IllegalArgumentException: org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:142) org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:127) org.apache.commons.collections.map.AbstractLinkedMap.<init> (AbstractLinkedMap.java:95) org.apache.commons.collections.map.LinkedMap.<init> (LinkedMap.java:78) org.apache.commons.collections.map.TransformedMap.transformMap (TransformedMap.java:153) org.apache.commons.collections.map.TransformedMap.putAll (TransformedMap.java:190) Target Stack Trace (2) (1) (3) f(t) = 3 x line_coverage + 2 x exception_coverage + trace_similarity (1) (2) (3)
  • 21. Fitness Function java.lang.IllegalArgumentException: org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:142) org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:127) org.apache.commons.collections.map.AbstractLinkedMap.<init> (AbstractLinkedMap.java:95) org.apache.commons.collections.map.LinkedMap.<init> (LinkedMap.java:78) org.apache.commons.collections.map.TransformedMap.transformMap (TransformedMap.java:153) org.apache.commons.collections.map.TransformedMap.putAll (TransformedMap.java:190) Target Stack Trace f(t) = 3 x line_coverage + 2 x exception_coverage + trace_similarity (1) (2) (3) 1) line_coverage = approach_level + branch_distance
  • 22. Fitness Function java.lang.IllegalArgumentException: org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:142) org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:127) org.apache.commons.collections.map.AbstractLinkedMap.<init> (AbstractLinkedMap.java:95) org.apache.commons.collections.map.LinkedMap.<init> (LinkedMap.java:78) org.apache.commons.collections.map.TransformedMap.transformMap (TransformedMap.java:153) org.apache.commons.collections.map.TransformedMap.putAll (TransformedMap.java:190) Target Stack Trace f(t) = 3 x line_coverage + 2 x exception_coverage + trace_similarity (1) (2) (3) 1) line_coverage = approach_level + branch_distance 2) exception_coverage = 0 if the target exception in thrown; 1 otherwise
  • 23. Fitness Function java.lang.IllegalArgumentException: org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:142) org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:127) org.apache.commons.collections.map.AbstractLinkedMap.<init> (AbstractLinkedMap.java:95) org.apache.commons.collections.map.LinkedMap.<init> (LinkedMap.java:78) org.apache.commons.collections.map.TransformedMap.transformMap (TransformedMap.java:153) org.apache.commons.collections.map.TransformedMap.putAll (TransformedMap.java:190) Target Stack Trace f(t) = 3 x line_coverage + 2 x exception_coverage + trace_similarity (1) (2) (3) 1) line_coverage = approach_level + branch_distance 2) exception_coverage = 0 if the target exception in thrown; 1 otherwise 3) trace_similarity = cumulative differences with target trace elements Trace Elements
  • 24. Trace Similarity java.lang.IllegalArgumentException: org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:142) org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:127) org.apache.commons.collections.map.AbstractLinkedMap.<init> (AbstractLinkedMap.java:95) org.apache.commons.collections.map.LinkedMap.<init> (LinkedMap.java:78) org.apache.commons.collections.map.TransformedMap.transformMap (TransformedMap.java:153) org.apache.commons.collections.map.TransformedMap.putAll (TransformedMap.java:190) Target Stack Trace Two trace elements are equal iff: 1) same class name 2) same method name 3) same line java.lang.IllegalArgumentException: org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:141) org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:48) org.apache.commons.collections.map.AbstractLinkedMap.<init> (AbstractLinkedMap.java:31) org.apache.commons.collections.map.LinkedMap.<init> (LinkedMap.java:72) org.apache.commons.collections.map.TransformedMap.transformMap (TransformedMap.java:148) org.apache.commons.collections.map.TransformedMap.putAll (TransformedMap.java:190) Generated Stack Trace
  • 25. Trace Similarity java.lang.IllegalArgumentException: org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:142) org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:127) org.apache.commons.collections.map.AbstractLinkedMap.<init> (AbstractLinkedMap.java:95) org.apache.commons.collections.map.LinkedMap.<init> (LinkedMap.java:78) org.apache.commons.collections.map.TransformedMap.transformMap (TransformedMap.java:153) org.apache.commons.collections.map.TransformedMap.putAll (TransformedMap.java:190) Target Stack Trace Two trace elements are equal iff: 1) same class name (distance = 0) 2) same method name 3) same line java.lang.IllegalArgumentException: org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:141) org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:48) org.apache.commons.collections.map.AbstractLinkedMap.<init> (AbstractLinkedMap.java:31) org.apache.commons.collections.map.LinkedMap.<init> (LinkedMap.java:72) org.apache.commons.collections.map.TransformedMap.transformMap (TransformedMap.java:148) org.apache.commons.collections.map.TransformedMap.putAll (TransformedMap.java:190) Generated Stack Trace
  • 26. Trace Similarity java.lang.IllegalArgumentException: org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:142) org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:127) org.apache.commons.collections.map.AbstractLinkedMap.<init> (AbstractLinkedMap.java:95) org.apache.commons.collections.map.LinkedMap.<init> (LinkedMap.java:78) org.apache.commons.collections.map.TransformedMap.transformMap (TransformedMap.java:153) org.apache.commons.collections.map.TransformedMap.putAll (TransformedMap.java:190) Target Stack Trace Two trace elements are equal iff: 1) same class name (distance = 0) 2) same method name (distance = 0) 3) same line java.lang.IllegalArgumentException: org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:141) org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:48) org.apache.commons.collections.map.AbstractLinkedMap.<init> (AbstractLinkedMap.java:31) org.apache.commons.collections.map.LinkedMap.<init> (LinkedMap.java:72) org.apache.commons.collections.map.TransformedMap.transformMap (TransformedMap.java:148) org.apache.commons.collections.map.TransformedMap.putAll (TransformedMap.java:190) Generated Stack Trace
  • 27. Trace Similarity java.lang.IllegalArgumentException: org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:142) org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:127) org.apache.commons.collections.map.AbstractLinkedMap.<init> (AbstractLinkedMap.java:95) org.apache.commons.collections.map.LinkedMap.<init> (LinkedMap.java:78) org.apache.commons.collections.map.TransformedMap.transformMap (TransformedMap.java:153) org.apache.commons.collections.map.TransformedMap.putAll (TransformedMap.java:190) Target Stack Trace java.lang.IllegalArgumentException: org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:141) org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:48) org.apache.commons.collections.map.AbstractLinkedMap.<init> (AbstractLinkedMap.java:31) org.apache.commons.collections.map.LinkedMap.<init> (LinkedMap.java:72) org.apache.commons.collections.map.TransformedMap.transformMap (TransformedMap.java:148) org.apache.commons.collections.map.TransformedMap.putAll (TransformedMap.java:190) Generated Stack Trace Two trace elements are equal iff: 1) same class name (distance = 0) 2) same method name (distance = 0) 3) same line (distance = |153 - 148| / (1+ |153 - 148| ) = 0.83)
  • 28. Trace Similarity java.lang.IllegalArgumentException: org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:142) org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:127) org.apache.commons.collections.map.AbstractLinkedMap.<init> (AbstractLinkedMap.java:95) org.apache.commons.collections.map.LinkedMap.<init> (LinkedMap.java:78) org.apache.commons.collections.map.TransformedMap.transformMap (TransformedMap.java:153) org.apache.commons.collections.map.TransformedMap.putAll (TransformedMap.java:190) Target Stack Trace java.lang.IllegalArgumentException: org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:141) org.apache.commons.collections.map.AbstractHashedMap.<init> (AbstractHashedMap.java:48) org.apache.commons.collections.map.AbstractLinkedMap.<init> (AbstractLinkedMap.java:31) org.apache.commons.collections.map.LinkedMap.<init> (LinkedMap.java:72) org.apache.commons.collections.map.TransformedMap.transformMap (TransformedMap.java:148) org.apache.commons.collections.map.TransformedMap.putAll (TransformedMap.java:190) Generated Stack Trace Two trace elements are equal iff: 1) same class name (distance = 0) 2) same method name (distance = 0) 3) same line (distance = |153 - 148| / (1+ |153 - 148| ) = 0.83) 0.5 0.99 0.98 0.85 0.83 Tot = 4.15
  • 30. Context: 10 real bugs from Apache Commons Collections Experimented algorithms: - EvoSuite + our fitness function (30 independent runs) - STAR (Symbolic execution) - MuCrash (Mutation analysis) Empirical Evaluation Bug ID Version Exception Priority ACC-4 2.0 NullPointer Major ACC-28 2.0 NullPointer Major ACC-35 2.0 UnsupportedOperation Major ACC-48 3.1 IllegalArgument Major ACC-53 3.1 ArrayIndexOutOfBound Major ACC-70 3.1 NullPointer Major ACC-77 3.1 IllegalState Major ACC-104 3.1 ArrayIndexOutOfBound Major ACC-331 3.2 NullPointer Minor ACC-377 3.2 NullPointer Minor N. Chen and Kim, TSE 2015. J. Xuan et al., ESEC/FSE 2015. Used in:
  • 31. Results Bug ID % Successful Replication STAR MuCrash ACC-4 30/30 YES YES ACC-28 30/30 YES YES ACC-35 30/30 YES YES ACC-48 30/30 YES YES ACC-53 28/30 YES NO ACC-70 30/30 NO NO ACC-77 30/30 YES NO ACC-104 0/30 YES YES ACC-331 10/30 NO YES ACC-377 0/30 NO NO
  • 32. Results Bug ID % Successful Replication STAR MuCrash ACC-4 30/30 YES YES ACC-28 30/30 YES YES ACC-35 30/30 YES YES ACC-48 30/30 YES YES ACC-53 28/30 YES NO ACC-70 30/30 NO NO ACC-77 30/30 YES NO ACC-104 0/30 YES YES ACC-331 10/30 NO YES ACC-377 0/30 NO NO Our solution replicated 8/10 bugs STAR replicated 7/10 bugs MuCrash replicated 6/10 bugs
  • 33. Results Bug ID % Successful Replication STAR MuCrash ACC-4 30/30 YES YES ACC-28 30/30 YES YES ACC-35 30/30 YES YES ACC-48 30/30 YES YES ACC-53 28/30 YES NO ACC-70 30/30 NO NO ACC-77 30/30 YES NO ACC-104 0/30 YES YES ACC-331 10/30 NO YES ACC-377 0/30 NO NO Replicable by our SBST solution only
  • 34. ACC-70 Exception in thread "main" java.lang.NullPointerException at org.apache.commons.collections.list.TreeList$TreeListIterator.previous (TreeList.java:841) at java.util.Collections.get(Unknown Source) at java.util.Collections.iteratorBinarySearch(Unknown Source) at java.util.Collections.binarySearch(Unknown Source) at utils.queue.QueueSorted.put(QueueSorted.java:51) at framework.search.GraphSearch.solve(GraphSearch.java:53) at search.informed.BestFirstSearch.solve(BestFirstSearch.java:20) at Hlavni.main(Hlavni.java:66) Target Stack Trace
  • 35. ACC-70 Exception in thread "main" java.lang.NullPointerException at org.apache.commons.collections.list.TreeList$TreeListIterator.previous (TreeList.java:841) at java.util.Collections.get(Unknown Source) at java.util.Collections.iteratorBinarySearch(Unknown Source) at java.util.Collections.binarySearch(Unknown Source) at utils.queue.QueueSorted.put(QueueSorted.java:51) at framework.search.GraphSearch.solve(GraphSearch.java:53) at search.informed.BestFirstSearch.solve(BestFirstSearch.java:20) at Hlavni.main(Hlavni.java:66) public void test0() throws Throwable { TreeList treeList0 = new TreeList(); treeList0.add((Object) null); TreeList.TreeListIterator treeList_TreeListIterator0 = new TreeList.TreeListIterator(treeList0, 732); // Undeclared exception! treeList_TreeListIterator0.previous(); } Target Stack Trace Test generated by our solution
  • 36. ACC-70 Exception in thread "main" java.lang.NullPointerException at org.apache.commons.collections.list.TreeList$TreeListIterator.previous (TreeList.java:841) at java.util.Collections.get(Unknown Source) at java.util.Collections.iteratorBinarySearch(Unknown Source) at java.util.Collections.binarySearch(Unknown Source) at utils.queue.QueueSorted.put(QueueSorted.java:51) at framework.search.GraphSearch.solve(GraphSearch.java:53) at search.informed.BestFirstSearch.solve(BestFirstSearch.java:20) at Hlavni.main(Hlavni.java:66) public void test0() throws Throwable { TreeList treeList0 = new TreeList(); treeList0.add((Object) null); TreeList.TreeListIterator treeList_TreeListIterator0 = new TreeList.TreeListIterator(treeList0, 732); // Undeclared exception! treeList_TreeListIterator0.previous(); } Target Stack Trace Test generated by our solution public Object previous() { ... if (next == null) { next = parent.root.get(nextIndex - 1); } else { next = next.previous(); } Object value = next.getValue(); ... } } Affected Code if “parent” is null, this code generates an exception