NEXT GENERATION IDE 
HOW CROWDSOURCING (IN) YOUR IDE SPEEDS UP 
YOUR SOFTWARE DEVELOPMENT PROCESSES
About me 
• Project Lead of Eclipse Code Recommenders 
• Eclipse Committer since 2010 
• Plug-in Developer for 10 years (Eclipse 2.1) 
• Member of the Eclipse Architecture Council 
• Co-Lead of Java User Group Darmstadt 
• Speaker at JUGs, EclipseCon, JAX, JavaOne… 
• PhD in Computer Science 
• CEO of Codetrails 
• Passion to improve developers day-to-day work with 
intelligent and practical tools - mostly using Data 
Mining on Big (Software Engineering) Data. 
2 
Marcel Bruch 
@marcelbruch
About Codetrails 
• The company behind Eclipse Code Recommenders 
• Software Tool Developers 
• Data Mining Specialists 
• Eclipse RCP Experts & Consultants 
• Research Spin-off Darmstadt University of Technology 
3
NEXT GENERATION IDE 
HOW CROWDSOURCING (IN) YOUR IDE SPEEDS UP 
YOUR SOFTWARE DEVELOPMENT PROCESSES
Back in 1995… 
5
6 
{ — Your Software —– } 
Developer
——— 7 
{ — Your Software 
—– } 
Developer
{ ——– } 
8 
Your Software 
{ — —– } 
Developer 
Your Software
Your Software 
Your Software 
9 
Framework 
Developer 
? 
{ ——– } 
{ — —– } 
ADpepvleicloaptioenr 
Developer 
!
Here the problems begin… 
Documentation 
10 
{ ——– } 
docs are 
missing! 
there are 
no code 
examples! 
docs are 
outdated! 
api is 
bloated! 
code has 
many bugs! 
is the api 
easy? 
is 
documentation 
good? 
does it work? 
are there 
bugs? 
where to 
improve? 
where do 
you struggle? 
what do you 
use? 
what can I 
remove?
How to leverage the crowd? 
11 
Documentation 
Framework 
Developer 
{ ——— } 
{ — —— { } ——— } 
Application 
Developers 
{ — —— }
How to leverage the crowd? 
12 
Framework 
Developer 
——— { —— — { } 
——— —— — } 
{ — —— } 
{ — —— } 
Application 
Developers 
{ — — —} 
{ — — —} 
{ — — —} 
{ — — —}
By integrating with your IDE… 
13 
Debugging 
instructions 
Source code 
Used 
frameworks 
Selected 
proposals 
Viewed 
documentation 
Runtime errors 
and stacktraces
Bad Javadoc 
In good documentation we trust…
In API documentation we trust 
15 
/** 
* Rollsback the transaction if any and clears different lists to 
* start with an empty resource again. 
* Note that the super.doUnload is not called because that clears 
* the list resulting in all kinds of undesirable inverseremoves. 
*/ 
@Override 
protected void doUnload() { 
super.doUnload(); 
} 
No? Are you sure?
In those situations you wish you could… 
16 
/** 
* Rollsback the transaction if any and clears different lists to 
* start with an empty resource again. 
* Note that the super.doUnload is not called because that clears 
* the list resulting in all kinds of undesirable inverseremoves. 
*/ 
@Override 
protected void doUnload() { 
super.doUnload(); 
}
…and let the committers know… 
17 
Hello committers, 
we received a user feedback for TYPE «com.your.class». The user rated the 
overall documentation quality as «NOT_AT_ALL_HELPFUL». In particular 
he/she said: 
1. UNCLEAR_INFORMATION 
The user provided the following comment: 
«The class is deprecated but no pointers are given which other class to use 
instead. Please provide a hint in the class javadoc. Thanks, Frederik» 
Thank you for caring. 
Your friendly 
Javadoc Feedback Inbox 
The class is deprecated but no pointers are given which other 
class to use instead. Please provide a hint in the class javadoc. 
Thanks, Frederik 
Customer case study & prototype at Codetrails.
No examples 
A snippet says more than thousand words
These I’ve a great idea moments… 
19 
{ ——– } 
Application 
Developer 
Product 
Manager
How we learn about it… 
20 
{ ——– } 
Application 
Developer
But if we just could have asked Eclipse… 
public class HelpExample extends WizardPage 
{ 
| 
21 
Eclipse Code Recommenders Snipmatch 
See http://eclipse.org/recommenders/manual/#snipmatch
Creating snippets for the community… 
22
Sharing with the community… 
23
Integrating Snippets into API docs 
24 
public class MyDialog extends Dialog { 
(automatically, of course) 
@Override 
protected Control createDialogArea(Composite parent) {
Codesearch reloaded 
More than just ”Find References in your Workspace”…
How do I… 
26 
void showHelp() { 
// How do I get the help system? 
IWorkbenchHelpSystem help = | 
}
You should ask your IDE…
… obtain an instance of X? 
28 
void showHelp() { 
// How do I get the help system? 
IWorkbenchHelpSystem help = |
…which arguments to fill in? 
29
…about frequent usage patterns? 
30
Where does that data come from? 
(i) eclipse workspace (ii) maven repository 
Codetrails Connect Codesearch, currently closed beta 31
Overwhelming APIs 
What do you think of when you hear “bloated API”?
One example… 
33 
@Override 
public void create(JPanel parent) { 
JButton button = new JButton(); 
button.| 
Which method will you 
call next in this situation?
1 of 389?
A fairly trivial example… 
StringBuilder sb = new StringBuilder(); 
sb.| 
35
What if we’d just count clicks…? 
StringBuilder sb = new StringBuilder(); 
sb.| 
36 
{ ——– } 
Application 
Developer 
{ 
„type“: „StringBuilder“, 
„completion“: „append(String)“ 
}
We could crowdsource code completion! 
37 
StringBuilder sb = new StringBuilder(); 
sb.| 
Codetrails Connect Community Edition, 
Install from http://www.codetrails.com/connect
How about argument completions? 
38 
@Override 
protected Control createControl(final Composite parent) { 
textWidget = new Text(parent, SWT.BORDER); 
textWidget.addListener(eventType, listener) 
Codetrails Connect Community Edition, 
Install from http://www.codetrails.com/connect
And when extending a framework base class? 
39 
public class MyDialog extends Dialog { 
| 
Codetrails Connect Community Edition, 
Install from http://www.codetrails.com/connect
Successfully concluded sessions 
40 
crowdsourced 
79,5 
JDT 
66,5 
JDT as-is vs. crowdsourced 
13% less terminated sessions, 
measured in over 400.000 
sessions
Bug detection, crowd-style 
99.5% of all developers didn’t do it like you. So…
Costs fixing a bug between code and production 
42 
Relative cost of a bugfix 
25x 
10x 
0x 0x 1x 
Req Design Code Acceptance Production 
http://www.abeacha.com/NIST_press_release_bugs_cost.htm
What’s wrong with this code? 
43 
@Override 
public void createControl(Composite parent) { 
Composite container = new Composite(parent, SWT.NONE); 
container.setLayout(new GridLayout()); 
TableViewer tableViewer = new TableViewer(container); 
tableViewer.setUseHashlookup(false); 
tableViewer.addSelectionChangedListener(listener); 
Table table = tableViewer.getTable(); 
tableViewer.setCellEditors(editors); 
tableViewer.setColumnProperties(columnProperties); 
tableViewer.setLabelProvider(labelProvider); 
tableViewer.setInput(input); 
tableViewer.setContentProvider(provider); 
}
Findbugs’ crowd ed. would find it… 
Codetrails Findbugs, currently closed alpha 44
If no one dared to do it like this… 
45
Rethinking Stacktraces 
“People who ‘bought’ this NullPointerException typically fixed this by...”
Automated Error Reporting in Eclipse Mars 
https://www.eclipse.org/community/eclipse_newsletter/2014/november/article1.php 47
48
Committers get notified about new bugs… 
49
Reporters get immediate feedback 
50 
Your report has been matched against an existing bug which 
was closed as FIXED with comment: 
Please update to the latest version. 
See Bug 446841 for details.
Eclipse Committer Dashboard of the Automated Error Reports plugin 51
Finding similar errors (aka duplicates) 
org.eclipse.swt.SWTException: Invalid Thread access 
at org.eclipse.swt.SWT.error(SWT.java:3884) 
at org.eclipse.swt.SWT.error(SWT.java:3799) 
at org.eclipse.swt.SWT.error(SWT.java:3770) 
at org.eclipse.swt.widgets.Widget.error(Widget.java:463) 
at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:355) 
at org.eclipse.swt.widgets.ProgressBar.setSelection(ProgressBar.java:317) 
at org.eclipse.recommenders.stacktraces.Demo.run(Demo.java:23) 
at java.lang.Thread.run(Thread.java:619) 
52 
+ java version 
+ bundle/jar versions 
+ installed extensions 
+ thread dumps 
+ …
Automated error reporting is nice, but… 
How can we support you in writing software? 
53
Debugging – the old way 
54 
Exception in thread “Thread-0” org.eclipse.swt.SWTException: Invalid Thread access 
at org.eclipse.swt.SWT.error(SWT.java:3884) 
at org.eclipse.swt.SWT.error(SWT.java:3799) 
at org.eclipse.swt.SWT.error(SWT.java:3770) 
at org.eclipse.swt.widgets.Widget.error(Widget.java:463) 
at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:355) 
at org.eclipse.swt.widgets.ProgressBar.setSelection(ProgressBar.java:317) 
at org.eclipse.recommenders.stacktraces.Demo.run(Demo.java:23) 
at java.lang.Thread.run(Thread.java:619)
Getting help – the old way 
55
But usually you get… 
56
How about sharing exceptions that 
occurred at development time? 
57 
Exception in thread “Thread-0” org.eclipse.swt.SWTException: Invalid Thread access 
at org.eclipse.swt.SWT.error(SWT.java:3884) 
at org.eclipse.swt.SWT.error(SWT.java:3799) 
at org.eclipse.swt.SWT.error(SWT.java:3770) 
at org.eclipse.swt.widgets.Widget.error(Widget.java:463) 
at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:355) 
at org.eclipse.swt.widgets.ProgressBar.setSelection(ProgressBar.java:317) 
at org.eclipse.recommenders.stacktraces.Demo.run(Demo.java:23) 
at java.lang.Thread.run(Thread.java:619)
Telling your users what went wrong 
Found a match! 
We found a knowledge base entry that matches your stacktrace. 
The SWTException “Invalid thread access” you experienced 
is caused by calling an UI widget’s methods from a non-ui 
thread. See knowledge base entry #341 for further details. 
A concept yet, no prototype. 58
How about stacktraces.org? 
59
Take aways? 
60
The crowd is here to stay! 
61
The IDE is your browser - let’s learn to use it as such 
62 
Debugging 
instructions 
Source code 
Used 
frameworks 
Selected 
proposals 
Viewed 
documentation 
Runtime errors 
and stacktraces
Thank You. 
marcelbruch marcel.bruch@codetrails.com 
@marcelbruch
Contact Us 
64 
Codetrails GmbH 
Robert-Bosch-Str. 7 
64293 Darmstadt, Germany 
www: codetrails.com 
phone: 06151 / 2767 092 
email: info@codetrails.com 
Dr. Marcel Bruch 
CEO 
mobile: 0179 / 1317 721 
email: marcel.bruch@codetrails.com

Need 4 Speed FI

  • 1.
    NEXT GENERATION IDE HOW CROWDSOURCING (IN) YOUR IDE SPEEDS UP YOUR SOFTWARE DEVELOPMENT PROCESSES
  • 2.
    About me •Project Lead of Eclipse Code Recommenders • Eclipse Committer since 2010 • Plug-in Developer for 10 years (Eclipse 2.1) • Member of the Eclipse Architecture Council • Co-Lead of Java User Group Darmstadt • Speaker at JUGs, EclipseCon, JAX, JavaOne… • PhD in Computer Science • CEO of Codetrails • Passion to improve developers day-to-day work with intelligent and practical tools - mostly using Data Mining on Big (Software Engineering) Data. 2 Marcel Bruch @marcelbruch
  • 3.
    About Codetrails •The company behind Eclipse Code Recommenders • Software Tool Developers • Data Mining Specialists • Eclipse RCP Experts & Consultants • Research Spin-off Darmstadt University of Technology 3
  • 4.
    NEXT GENERATION IDE HOW CROWDSOURCING (IN) YOUR IDE SPEEDS UP YOUR SOFTWARE DEVELOPMENT PROCESSES
  • 5.
  • 6.
    6 { —Your Software —– } Developer
  • 7.
    ——— 7 {— Your Software —– } Developer
  • 8.
    { ——– } 8 Your Software { — —– } Developer Your Software
  • 9.
    Your Software YourSoftware 9 Framework Developer ? { ——– } { — —– } ADpepvleicloaptioenr Developer !
  • 10.
    Here the problemsbegin… Documentation 10 { ——– } docs are missing! there are no code examples! docs are outdated! api is bloated! code has many bugs! is the api easy? is documentation good? does it work? are there bugs? where to improve? where do you struggle? what do you use? what can I remove?
  • 11.
    How to leveragethe crowd? 11 Documentation Framework Developer { ——— } { — —— { } ——— } Application Developers { — —— }
  • 12.
    How to leveragethe crowd? 12 Framework Developer ——— { —— — { } ——— —— — } { — —— } { — —— } Application Developers { — — —} { — — —} { — — —} { — — —}
  • 13.
    By integrating withyour IDE… 13 Debugging instructions Source code Used frameworks Selected proposals Viewed documentation Runtime errors and stacktraces
  • 14.
    Bad Javadoc Ingood documentation we trust…
  • 15.
    In API documentationwe trust 15 /** * Rollsback the transaction if any and clears different lists to * start with an empty resource again. * Note that the super.doUnload is not called because that clears * the list resulting in all kinds of undesirable inverseremoves. */ @Override protected void doUnload() { super.doUnload(); } No? Are you sure?
  • 16.
    In those situationsyou wish you could… 16 /** * Rollsback the transaction if any and clears different lists to * start with an empty resource again. * Note that the super.doUnload is not called because that clears * the list resulting in all kinds of undesirable inverseremoves. */ @Override protected void doUnload() { super.doUnload(); }
  • 17.
    …and let thecommitters know… 17 Hello committers, we received a user feedback for TYPE «com.your.class». The user rated the overall documentation quality as «NOT_AT_ALL_HELPFUL». In particular he/she said: 1. UNCLEAR_INFORMATION The user provided the following comment: «The class is deprecated but no pointers are given which other class to use instead. Please provide a hint in the class javadoc. Thanks, Frederik» Thank you for caring. Your friendly Javadoc Feedback Inbox The class is deprecated but no pointers are given which other class to use instead. Please provide a hint in the class javadoc. Thanks, Frederik Customer case study & prototype at Codetrails.
  • 18.
    No examples Asnippet says more than thousand words
  • 19.
    These I’ve agreat idea moments… 19 { ——– } Application Developer Product Manager
  • 20.
    How we learnabout it… 20 { ——– } Application Developer
  • 21.
    But if wejust could have asked Eclipse… public class HelpExample extends WizardPage { | 21 Eclipse Code Recommenders Snipmatch See http://eclipse.org/recommenders/manual/#snipmatch
  • 22.
    Creating snippets forthe community… 22
  • 23.
    Sharing with thecommunity… 23
  • 24.
    Integrating Snippets intoAPI docs 24 public class MyDialog extends Dialog { (automatically, of course) @Override protected Control createDialogArea(Composite parent) {
  • 25.
    Codesearch reloaded Morethan just ”Find References in your Workspace”…
  • 26.
    How do I… 26 void showHelp() { // How do I get the help system? IWorkbenchHelpSystem help = | }
  • 27.
    You should askyour IDE…
  • 28.
    … obtain aninstance of X? 28 void showHelp() { // How do I get the help system? IWorkbenchHelpSystem help = |
  • 29.
  • 30.
  • 31.
    Where does thatdata come from? (i) eclipse workspace (ii) maven repository Codetrails Connect Codesearch, currently closed beta 31
  • 32.
    Overwhelming APIs Whatdo you think of when you hear “bloated API”?
  • 33.
    One example… 33 @Override public void create(JPanel parent) { JButton button = new JButton(); button.| Which method will you call next in this situation?
  • 34.
  • 35.
    A fairly trivialexample… StringBuilder sb = new StringBuilder(); sb.| 35
  • 36.
    What if we’djust count clicks…? StringBuilder sb = new StringBuilder(); sb.| 36 { ——– } Application Developer { „type“: „StringBuilder“, „completion“: „append(String)“ }
  • 37.
    We could crowdsourcecode completion! 37 StringBuilder sb = new StringBuilder(); sb.| Codetrails Connect Community Edition, Install from http://www.codetrails.com/connect
  • 38.
    How about argumentcompletions? 38 @Override protected Control createControl(final Composite parent) { textWidget = new Text(parent, SWT.BORDER); textWidget.addListener(eventType, listener) Codetrails Connect Community Edition, Install from http://www.codetrails.com/connect
  • 39.
    And when extendinga framework base class? 39 public class MyDialog extends Dialog { | Codetrails Connect Community Edition, Install from http://www.codetrails.com/connect
  • 40.
    Successfully concluded sessions 40 crowdsourced 79,5 JDT 66,5 JDT as-is vs. crowdsourced 13% less terminated sessions, measured in over 400.000 sessions
  • 41.
    Bug detection, crowd-style 99.5% of all developers didn’t do it like you. So…
  • 42.
    Costs fixing abug between code and production 42 Relative cost of a bugfix 25x 10x 0x 0x 1x Req Design Code Acceptance Production http://www.abeacha.com/NIST_press_release_bugs_cost.htm
  • 43.
    What’s wrong withthis code? 43 @Override public void createControl(Composite parent) { Composite container = new Composite(parent, SWT.NONE); container.setLayout(new GridLayout()); TableViewer tableViewer = new TableViewer(container); tableViewer.setUseHashlookup(false); tableViewer.addSelectionChangedListener(listener); Table table = tableViewer.getTable(); tableViewer.setCellEditors(editors); tableViewer.setColumnProperties(columnProperties); tableViewer.setLabelProvider(labelProvider); tableViewer.setInput(input); tableViewer.setContentProvider(provider); }
  • 44.
    Findbugs’ crowd ed.would find it… Codetrails Findbugs, currently closed alpha 44
  • 45.
    If no onedared to do it like this… 45
  • 46.
    Rethinking Stacktraces “Peoplewho ‘bought’ this NullPointerException typically fixed this by...”
  • 47.
    Automated Error Reportingin Eclipse Mars https://www.eclipse.org/community/eclipse_newsletter/2014/november/article1.php 47
  • 48.
  • 49.
    Committers get notifiedabout new bugs… 49
  • 50.
    Reporters get immediatefeedback 50 Your report has been matched against an existing bug which was closed as FIXED with comment: Please update to the latest version. See Bug 446841 for details.
  • 51.
    Eclipse Committer Dashboardof the Automated Error Reports plugin 51
  • 52.
    Finding similar errors(aka duplicates) org.eclipse.swt.SWTException: Invalid Thread access at org.eclipse.swt.SWT.error(SWT.java:3884) at org.eclipse.swt.SWT.error(SWT.java:3799) at org.eclipse.swt.SWT.error(SWT.java:3770) at org.eclipse.swt.widgets.Widget.error(Widget.java:463) at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:355) at org.eclipse.swt.widgets.ProgressBar.setSelection(ProgressBar.java:317) at org.eclipse.recommenders.stacktraces.Demo.run(Demo.java:23) at java.lang.Thread.run(Thread.java:619) 52 + java version + bundle/jar versions + installed extensions + thread dumps + …
  • 53.
    Automated error reportingis nice, but… How can we support you in writing software? 53
  • 54.
    Debugging – theold way 54 Exception in thread “Thread-0” org.eclipse.swt.SWTException: Invalid Thread access at org.eclipse.swt.SWT.error(SWT.java:3884) at org.eclipse.swt.SWT.error(SWT.java:3799) at org.eclipse.swt.SWT.error(SWT.java:3770) at org.eclipse.swt.widgets.Widget.error(Widget.java:463) at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:355) at org.eclipse.swt.widgets.ProgressBar.setSelection(ProgressBar.java:317) at org.eclipse.recommenders.stacktraces.Demo.run(Demo.java:23) at java.lang.Thread.run(Thread.java:619)
  • 55.
    Getting help –the old way 55
  • 56.
    But usually youget… 56
  • 57.
    How about sharingexceptions that occurred at development time? 57 Exception in thread “Thread-0” org.eclipse.swt.SWTException: Invalid Thread access at org.eclipse.swt.SWT.error(SWT.java:3884) at org.eclipse.swt.SWT.error(SWT.java:3799) at org.eclipse.swt.SWT.error(SWT.java:3770) at org.eclipse.swt.widgets.Widget.error(Widget.java:463) at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:355) at org.eclipse.swt.widgets.ProgressBar.setSelection(ProgressBar.java:317) at org.eclipse.recommenders.stacktraces.Demo.run(Demo.java:23) at java.lang.Thread.run(Thread.java:619)
  • 58.
    Telling your userswhat went wrong Found a match! We found a knowledge base entry that matches your stacktrace. The SWTException “Invalid thread access” you experienced is caused by calling an UI widget’s methods from a non-ui thread. See knowledge base entry #341 for further details. A concept yet, no prototype. 58
  • 59.
  • 60.
  • 61.
    The crowd ishere to stay! 61
  • 62.
    The IDE isyour browser - let’s learn to use it as such 62 Debugging instructions Source code Used frameworks Selected proposals Viewed documentation Runtime errors and stacktraces
  • 63.
    Thank You. marcelbruchmarcel.bruch@codetrails.com @marcelbruch
  • 64.
    Contact Us 64 Codetrails GmbH Robert-Bosch-Str. 7 64293 Darmstadt, Germany www: codetrails.com phone: 06151 / 2767 092 email: info@codetrails.com Dr. Marcel Bruch CEO mobile: 0179 / 1317 721 email: marcel.bruch@codetrails.com