1. eROSE
Guiding Programmers in Eclipse
Thomas Zimmermann, zimmerth@cs.uni-sb.de
Saarland University
Joint work with Valentin Dallmeier, Konstantin Halachev,
Peter Weißgerber, Stephan Diehl, Andreas Zeller
2. Programming in the Large
What’s next?
Program
analysis
27,000 files
Missed by
program analysis
And documentation? xml xml xml html html html
12,000 files
7. Co-Change
40 69
20
ComparePreferencePage.java plugin.properties
#
# Preference Page
#
ComparePreferencePage.name= Compare/Patch
11 ComparePreferencePage.generalTab.label= &General
ComparePreferencePage.structureCompare.label= &Open
structure compare automatically
fKeys[] 10
ComparePreferencePage.showMoreInfo.label= &Show
additional compare information in the status line
ComparePreferencePage.ignoreWhitespace.label= Ignore
&white space
ComparePreferencePage.saveBeforePatching.label=
A&utomatically save dirty editors before patching
ComparePreferencePage.filter.description= Enter member
names that should be excluded from 'Compare With Each
Other'.nList is comma separated (e.g. '*.class,
.project, bin/')
ComparePreferencePage.filter.label= &Filtered Members:
11 ComparePreferencePage.filter.invalidsegment.error=
Filter is invalid: {0}
ComparePreferencePage.textCompareTab.label= &Text
Compare
15 ComparePreferencePage.initiallyShowAncestorPane.label=
Initially show a&ncestor pane
ComparePreferencePage.showPseudoConflicts.label= Show
&pseudo conflicts
ComparePreferencePage.synchronizeScrolling.label=
13
initDefaults() Synchronize &scrolling between panes in compare viewers
ComparePreferencePage.useSingleLine.label= Connect
&ranges with single line
ComparePreferencePage.preview.label= Preview:
8. Demo: Co-Change
buildnotes_compare.html
public API
internal files
Coupling for
ComparePreferencePage.java
and plugin.properties
EPOSEE
icons
www.eposoft.org
9. Learning from History
2003-02-19 (aweinand): fixed #13332
createGeneralPage()
createTextComparePage()
fKeys[]
initDefaults()
buildnotes_compare.html
PatchMessages.properties
plugin.properties 1/47,000
12. Effective Mining
Changes made by user: A, B
Find transactions that contain A, B:
TxID Itemset
100 A, B, C
TxID Itemset Item Count
200 A,D
300 A, B, C 100 A, B, C A 3 { A, B }
find group & sort
400 B, D 300 A, B, C B 3 { A, B }
500 A, D 700 A, B C 2 { A, B, C }
600 B, E
700 A, B
Create recommendations on the fly:
Item Count
{ A, B } => { A } is trivial
A count = 3
{ A, B } => { B } is trivial
B 3
{ A, B } => { C } has count=2, confidence=2/3 and is strong
C 2
14. Evaluation
changes eROSE
xml
one item recommends
User
foo() bar()
Can eROSE suggest related entities?
Evaluation using eight open-source projects
Training: all transactions before evaluation
15. Precision vs. Recall
What EROSE finds What it should find
False positives False negatives
Correct prediction
High precision = returned entities are relevant
High recall = relevant entities are returned
24. Conclusion
The history of a software project
contains a multitude of information.
eROSE recommends related changes.
http://www.st.cs.uni-sb.de/softevo/