Need 4 Speed FI

Post on 09-Jul-2015

239 views 4 download

Transcript of Need 4 Speed FI

NEXT GENERATION IDEHOW 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

@marcelbruchMarcel Bruch

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 IDEHOW CROWDSOURCING (IN) YOUR IDE SPEEDS UP

YOUR SOFTWARE DEVELOPMENT PROCESSES

Back in 1995…

5

6

Your Software{ — — –}

Developer

{ — — —}

7

Your Software{ — — –}

Developer

Your Software

{ — — –}

8

Your Software

{ — — –}

Developer

Your Software

Your Software

Your Software

9

Framework Developer

{ — — –}

{ — — –}

DeveloperApplicationDeveloper

?

!

Here the problems begin…

10Documentation

{ — — –}

docs are missing!

there are no code

examples!

api is bloated!

code has many bugs!

docs are outdated!

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

Usedframeworks

Source code

Debugging instructions

Viewed documentation

Runtime errors and stacktraces

Selected proposals

Bad JavadocIn 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. */@Overrideprotected 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. */@Overrideprotected 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 examplesA 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

public class HelpExample extends WizardPage {

|

But if we just could have asked Eclipse…

21Eclipse 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 { @Override protected Control createDialogArea(Composite parent) {

(automatically, of course)

Codesearch reloadedMore 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?

31Codetrails Connect Codesearch, currently closed beta

(i) eclipse workspace (ii) maven repository

Overwhelming APIsWhat do you think of when you hear “bloated API”?

One example…

33

@Overridepublic 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

StringBuilder sb = new StringBuilder();sb.|

36

{ — — –}

Application Developer

{„type“: „StringBuilder“,„completion“: „append(String)“}

What if we’d just count clicks…?

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

@Overrideprotected 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

crowdsourced79,5

JDT66,5

JDT as-is vs. crowdsourced

13% less terminated sessions, measured in over 400.000

sessions

Bug detection, crowd-style99.5% of all developers didn’t do it like you. So…

Costs fixing a bug between code and production

42

Rela

tive

cost

of a

bug

fix

Req Design Code Acceptance Production

25x

10x

1x0x0x

http://www.abeacha.com/NIST_press_release_bugs_cost.htm

What’s wrong with this code?

43

@Overridepublic 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…

44Codetrails Findbugs, currently closed alpha

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

47https://www.eclipse.org/community/eclipse_newsletter/2014/november/article1.php

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.

51Eclipse Committer Dashboard of the Automated Error Reports plugin

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)

Finding similar errors (aka duplicates)

52

+ java version + bundle/jar versions + installed extensions + thread dumps + …

How can we support you in writing software?Automated error reporting is nice, but…

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 thatoccurred 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)

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.

Found a match!

We found a knowledge base entry that matches your stacktrace.

Telling your users what went wrong

58A concept yet, no prototype.

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

Usedframeworks

Source code

Debugging instructions

Viewed documentation

Runtime errors and stacktraces

Selected proposals

Thank You.

@marcelbruchmarcelbruch marcel.bruch@codetrails.com

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