eROSE: Guiding programmers in Eclipse

Thomas Zimmermann
Thomas ZimmermannResearcher at Microsoft Research
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
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
eROSE: Guiding programmers in Eclipse
“Programmers who
changed this function also changed…”
Demo: eROSE
Your task:
Extend Eclipse with a new preference.
Demo: eROSE
You changed the field fKeys[].
eROSE recommends further changes:
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:
Demo: Co-Change
   buildnotes_compare.html



                                               public API




                               internal files

               Coupling for
ComparePreferencePage.java
      and plugin.properties




                                                            EPOSEE
                                                icons
                                                            www.eposoft.org
Learning from History

       2003-02-19 (aweinand): fixed #13332

       createGeneralPage()
       createTextComparePage()
       fKeys[]
       initDefaults()
       buildnotes_compare.html
       PatchMessages.properties
       plugin.properties        1/47,000
Mining Associations
   #42   fKeys[], initDefaults(), …, plugin.properties, …
  #752   fKeys[], initDefaults(), …, plugin.properties, …
 #9872   fKeys[], initDefaults(), …, plugin.properties, …
#11386   fKeys[], initDefaults(), …
#20814   fKeys[], initDefaults(), …, plugin.properties, …
#30989   fKeys[], initDefaults(), …, plugin.properties, …
#41999   fKeys[], initDefaults(), …, plugin.properties, …
#47423   fKeys[], initDefaults(), …, plugin.properties, …
Mining Associations
     #42 fKeys[], initDefaults(), …, plugin.properties, …
    #752 fKeys[], initDefaults(), …, plugin.properties, …
   #9872 fKeys[], initDefaults(), …, plugin.properties, …
  #11386 fKeys[], initDefaults(), …
  #20814 fKeys[], initDefaults(), …, plugin.properties, …
  #30989 fKeys[], initDefaults(), …, plugin.properties, …
  #41999 fKeys[], initDefaults(), …, plugin.properties, …
{fKeys[], initDefaults()}           {plugin.properties}
  #47423 fKeys[], initDefaults(), …, plugin.properties, …
Support 7, Confidence 7/8 = 0.875
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
Demo: Association Rules
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
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
Results #1
                      ENTITIES                   FILES
             Recall   Precision   Top 3 Recall Precision Top 3
   Eclipse    0.34      0.30       0.57 0.36      0.29    0.57
    GCC       0.45      0.31       0.91 0.59      0.35    0.88
    Gimp      0.35      0.30       0.92 0.48      0.28    0.92
    JBoss     0.36      0.31       0.62 0.36      0.19    0.51
     jEdit    0.21      0.31       0.86 0.41      0.31    0.88
  KOffice      0.24      0.23       0.54 0.45      0.30    0.70
 Postgres     0.29      0.29       0.65 0.37      0.29    0.72
  Python      0.37      0.27       0.54 0.46      0.34    0.61
AVERAGE       0.33      0.29       0.70 0.44      0.29    0.72
Results #1
                  ENTITIES                 FILES
           Recall Precision Top 3 Recall Precision Top 3
   Eclipse 0.34     0.30     0.57 0.36      0.29     0.57
      eROSE predicts 33% 0.91 changed 0.35
                             of all 0.59    entities 0.88
    GCC 0.45        0.31
      (files: 44%) 0.30
    Gimp 0.35                0.92 0.48      0.28     0.92
    JBoss70% of all0.31
      In 0.36        transactions, eROSE’s topmost 0.51
                             0.62 0.36      0.19
     jEdit 0.21
      three suggestions contain a 0.41
                    0.31     0.86 changed0.31entity 0.88
  KOffice 0.24
      (files: 72%) 0.23       0.54 0.45      0.30     0.70
 Postgres 0.29      0.29     0.65 0.37      0.29     0.72
  Python 0.37       0.27     0.54 0.46      0.34     0.61
AVERAGE 0.33        0.29     0.70 0.44      0.29     0.72
Results #2
0.8


0.7                                                                                   Likelihood 10


0.6
                                                                                      Feedback

0.5


0.4


0.3
                                                                                      Recall
                                                                                      Precision
0.2


0.1


                                                                                      Txs per Day
 0
      OSS
            (Xmas)



                     (Freeze)
                          2.0
                        2.0.1



                                (Xmas)


                                         2.1


                                               2.1.1



                                                       2.1.2
                                                               (Xmas)

                                                                        2.1.3


                                                                                3.0
                                                                                      Releases
Upcoming: Reorganizer
Upcoming: Reorganizer
Upcoming: HATARI

Movie with
John Wayne
   (1962)

                       Swahili for
                        “Danger”


     Raising Risk Awareness
HATARI: Annotations

“Safe” Location
    (green)


Risky Location
  (dark red)
HATARI: Risk History
Bug, Fix, or both?
                     Change information




  Bug information
Conclusion


The history of a software project
contains a multitude of information.
eROSE recommends related changes.
http://www.st.cs.uni-sb.de/softevo/
1 of 24

More Related Content

What's hot(20)

Redux Deep Dive - ReactFoo Pune 2018Redux Deep Dive - ReactFoo Pune 2018
Redux Deep Dive - ReactFoo Pune 2018
Aziz Khambati209 views
Java设置环境变量Java设置环境变量
Java设置环境变量
Zianed Hou1.9K views
Elixir: the not-so-hidden path to ErlangElixir: the not-so-hidden path to Erlang
Elixir: the not-so-hidden path to Erlang
Laura M. Castro376 views
Operator overload  rrOperator overload  rr
Operator overload rr
Dhivya Shanmugam192 views
Vaadin 7Vaadin 7
Vaadin 7
Joonas Lehtinen3.1K views
2 introduction toentitybeans2 introduction toentitybeans
2 introduction toentitybeans
ashishkirpan389 views
Teste de Integração com DbUnit e jIntegrityTeste de Integração com DbUnit e jIntegrity
Teste de Integração com DbUnit e jIntegrity
Washington Botelho1.6K views
JavaJava
Java
Frida Herencia Quispe233 views
The Language for future-juliaThe Language for future-julia
The Language for future-julia
岳華 杜128 views
Introduction to hibernateIntroduction to hibernate
Introduction to hibernate
Muhammad Zeeshan2.4K views
I regret nothingI regret nothing
I regret nothing
Łukasz Langa1.3K views
Talk - Query monad Talk - Query monad
Talk - Query monad
Fabernovel1.7K views
Devoxx 2012   hibernate enversDevoxx 2012   hibernate envers
Devoxx 2012 hibernate envers
Romain Linsolas3K views
Ecom lec4 fall16_jpaEcom lec4 fall16_jpa
Ecom lec4 fall16_jpa
Zainab Khallouf89 views
ATG Secure RepositoryATG Secure Repository
ATG Secure Repository
Sanju Thomas1.7K views
Event driven javascriptEvent driven javascript
Event driven javascript
Francesca1980438 views
Google guavaGoogle guava
Google guava
Thomas Ferris Nicolaisen9.8K views

Similar to eROSE: Guiding programmers in Eclipse

RefactoringRefactoring
RefactoringAmir Barylko
909 views113 slides
RefactoringRefactoring
RefactoringAmir Barylko
967 views101 slides
Java beansJava beans
Java beansSher Singh Bardhan
1.1K views12 slides
Testing survival GuideTesting survival Guide
Testing survival GuideThilo Utke
2.4K views69 slides

Similar to eROSE: Guiding programmers in Eclipse(20)

RefactoringRefactoring
Refactoring
Amir Barylko909 views
RefactoringRefactoring
Refactoring
Amir Barylko967 views
Java beansJava beans
Java beans
Sher Singh Bardhan1.1K views
Testing survival GuideTesting survival Guide
Testing survival Guide
Thilo Utke2.4K views
Behavior driven oopBehavior driven oop
Behavior driven oop
Piyush Verma72 views
Making Django and NoSQL Play NiceMaking Django and NoSQL Play Nice
Making Django and NoSQL Play Nice
Alex Gaynor6.1K views
Testing Legacy Rails AppsTesting Legacy Rails Apps
Testing Legacy Rails Apps
Rabble .4.7K views
Rails vs Web2pyRails vs Web2py
Rails vs Web2py
jonromero4.3K views
Java Quiz - MeetupJava Quiz - Meetup
Java Quiz - Meetup
CodeOps Technologies LLP204 views
Practical CeleryPractical Celery
Practical Celery
Cameron Maske5.6K views
Experiments in genetic programmingExperiments in genetic programming
Experiments in genetic programming
Lars Marius Garshol1K views
Front End Development: The Important PartsFront End Development: The Important Parts
Front End Development: The Important Parts
Sergey Bolshchikov23.2K views

More from Thomas Zimmermann(20)

Software Analytics = Sharing InformationSoftware Analytics = Sharing Information
Software Analytics = Sharing Information
Thomas Zimmermann3.3K views
MSR 2013 PreviewMSR 2013 Preview
MSR 2013 Preview
Thomas Zimmermann21.8K views
Analytics for smarter software development Analytics for smarter software development
Analytics for smarter software development
Thomas Zimmermann2.6K views
Klingon Countdown TimerKlingon Countdown Timer
Klingon Countdown Timer
Thomas Zimmermann1.3K views
Data driven games user researchData driven games user research
Data driven games user research
Thomas Zimmermann1.5K views
Security trend analysis with CVE topic modelsSecurity trend analysis with CVE topic models
Security trend analysis with CVE topic models
Thomas Zimmermann1.5K views
Analytics for software developmentAnalytics for software development
Analytics for software development
Thomas Zimmermann4.6K views
Cross-project defect predictionCross-project defect prediction
Cross-project defect prediction
Thomas Zimmermann1.9K views
Quality of Bug Reports in Open SourceQuality of Bug Reports in Open Source
Quality of Bug Reports in Open Source
Thomas Zimmermann1.6K views
Meet Tom and his FishMeet Tom and his Fish
Meet Tom and his Fish
Thomas Zimmermann1.5K views
Got Myth? Myths in Software EngineeringGot Myth? Myths in Software Engineering
Got Myth? Myths in Software Engineering
Thomas Zimmermann5.9K views

Recently uploaded(20)

Java Platform Approach 1.0 - Picnic MeetupJava Platform Approach 1.0 - Picnic Meetup
Java Platform Approach 1.0 - Picnic Meetup
Rick Ossendrijver20 views
ThroughputThroughput
Throughput
Moisés Armani Ramírez25 views
ChatGPT and AI for Web DevelopersChatGPT and AI for Web Developers
ChatGPT and AI for Web Developers
Maximiliano Firtman143 views
METHOD AND SYSTEM FOR PREDICTING OPTIMAL LOAD FOR WHICH THE YIELD IS MAXIMUM ...METHOD AND SYSTEM FOR PREDICTING OPTIMAL LOAD FOR WHICH THE YIELD IS MAXIMUM ...
METHOD AND SYSTEM FOR PREDICTING OPTIMAL LOAD FOR WHICH THE YIELD IS MAXIMUM ...
Prity Khastgir IPR Strategic India Patent Attorney Amplify Innovation22 views
Green Leaf Consulting: Capabilities DeckGreen Leaf Consulting: Capabilities Deck
Green Leaf Consulting: Capabilities Deck
GreenLeafConsulting147 views

eROSE: Guiding programmers in Eclipse

  • 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
  • 4. “Programmers who changed this function also changed…”
  • 5. Demo: eROSE Your task: Extend Eclipse with a new preference.
  • 6. Demo: eROSE You changed the field fKeys[]. eROSE recommends further changes:
  • 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
  • 10. Mining Associations #42 fKeys[], initDefaults(), …, plugin.properties, … #752 fKeys[], initDefaults(), …, plugin.properties, … #9872 fKeys[], initDefaults(), …, plugin.properties, … #11386 fKeys[], initDefaults(), … #20814 fKeys[], initDefaults(), …, plugin.properties, … #30989 fKeys[], initDefaults(), …, plugin.properties, … #41999 fKeys[], initDefaults(), …, plugin.properties, … #47423 fKeys[], initDefaults(), …, plugin.properties, …
  • 11. Mining Associations #42 fKeys[], initDefaults(), …, plugin.properties, … #752 fKeys[], initDefaults(), …, plugin.properties, … #9872 fKeys[], initDefaults(), …, plugin.properties, … #11386 fKeys[], initDefaults(), … #20814 fKeys[], initDefaults(), …, plugin.properties, … #30989 fKeys[], initDefaults(), …, plugin.properties, … #41999 fKeys[], initDefaults(), …, plugin.properties, … {fKeys[], initDefaults()} {plugin.properties} #47423 fKeys[], initDefaults(), …, plugin.properties, … Support 7, Confidence 7/8 = 0.875
  • 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
  • 16. Results #1 ENTITIES FILES Recall Precision Top 3 Recall Precision Top 3 Eclipse 0.34 0.30 0.57 0.36 0.29 0.57 GCC 0.45 0.31 0.91 0.59 0.35 0.88 Gimp 0.35 0.30 0.92 0.48 0.28 0.92 JBoss 0.36 0.31 0.62 0.36 0.19 0.51 jEdit 0.21 0.31 0.86 0.41 0.31 0.88 KOffice 0.24 0.23 0.54 0.45 0.30 0.70 Postgres 0.29 0.29 0.65 0.37 0.29 0.72 Python 0.37 0.27 0.54 0.46 0.34 0.61 AVERAGE 0.33 0.29 0.70 0.44 0.29 0.72
  • 17. Results #1 ENTITIES FILES Recall Precision Top 3 Recall Precision Top 3 Eclipse 0.34 0.30 0.57 0.36 0.29 0.57 eROSE predicts 33% 0.91 changed 0.35 of all 0.59 entities 0.88 GCC 0.45 0.31 (files: 44%) 0.30 Gimp 0.35 0.92 0.48 0.28 0.92 JBoss70% of all0.31 In 0.36 transactions, eROSE’s topmost 0.51 0.62 0.36 0.19 jEdit 0.21 three suggestions contain a 0.41 0.31 0.86 changed0.31entity 0.88 KOffice 0.24 (files: 72%) 0.23 0.54 0.45 0.30 0.70 Postgres 0.29 0.29 0.65 0.37 0.29 0.72 Python 0.37 0.27 0.54 0.46 0.34 0.61 AVERAGE 0.33 0.29 0.70 0.44 0.29 0.72
  • 18. Results #2 0.8 0.7 Likelihood 10 0.6 Feedback 0.5 0.4 0.3 Recall Precision 0.2 0.1 Txs per Day 0 OSS (Xmas) (Freeze) 2.0 2.0.1 (Xmas) 2.1 2.1.1 2.1.2 (Xmas) 2.1.3 3.0 Releases
  • 21. Upcoming: HATARI Movie with John Wayne (1962) Swahili for “Danger” Raising Risk Awareness
  • 22. HATARI: Annotations “Safe” Location (green) Risky Location (dark red)
  • 23. HATARI: Risk History Bug, Fix, or both? Change information Bug information
  • 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/