• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0
 

JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0

on

  • 161 views

 

Statistics

Views

Total Views
161
Views on SlideShare
161
Embed Views
0

Actions

Likes
1
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0 JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0 Presentation Transcript

    • Wissenstransfer 2.0: 
 Liest du noch, oder programmierst du schon? The knowledge transfer company
    • • 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. About Me 2 @MarcelBruch +MarcelBruch
    • Codetrails at a Glance • The company behind Eclipse Code Recommenders • Eclipse RCP Experts & Consultants • Software Tool Developers • Data Mining Specialists • Research Spin-off Darmstadt University of Technology 3 supported by
    • About Eclipse Code Recommenders 4 2006 2009 2011 2012 2013 2014 Research begins CR published CR goes Eclipse CR 1.0 
 Part of IDE CR 2.0 CR 2.1
    • Awards & Traction 5 2012 • >3.000.000 downloads Top 20 • Talks at 50+ Democamps, Eclipse Days, and Java User Groups all over Europe. • Talks at 10+ intl. and local conferences. • articles every 4 months, • lots of general coverage
    • PROBLEM
    • Problem #1: Knowledge Drain 7
    • Problem #1: Knowledge Drain 8
    • Problem #1: Knowledge Drain 9 Software
    • Problem #2: Continuous Learning 10
    • A typical developer day 11 Comprehend Task 3 % Handling Interruptions 20 % Navigate Code 14 % Study Code 19 % Searching Web 12 % Reading Docs 6 % Write Code 27 % 51% of their time, developers invest in searching and understanding code
    • How we search 12
    • What developers look for 13 Question + Answer + Code Example = ✓
    • A typical developer day 14 Comprehend Task 3 % Handling Interruptions 20 % Navigate Code 14 % Study Code 19 % Searching Web 12 % Reading Docs 6 % Write Code 27 % Even when writing code we search…
    • If we don’t google… 15
    • 1 of 387 ?
    • 17 Code Completion Frequency : 100 completions / day Duration (⌀) : 27 seconds / completion Sum : 45 minutes / day 9% of their time developers spent searching in their code completion
    • Problem 18 Comprehend Task 3 % Handling Interruptions 20 % Searching Code 12 % Navigate Code 14 % Reading Code 19 % Reading Docs 6 % Edit Code 27 %
    • Problem 19 Comprehend Task 3 % Handling Interruptions 20 % Searching Code 12 % Navigate Code 14 % Reading Code 19 % Reading Docs 6 % Edit Code 27 % • 51% of their time, developers spent searching the web and existing code for help • In addition, even when programming, they spent 9% searching in their code completion • In total, 60% is about finding the right information to solve a programming task
    • SOLUTION „Leveraging the power of the crowds“
    • Behind every answered question… 21
    • … there is some code 22
    • Use the code 23
    • INTELLIGENT CODE COMPLETION „Other developers frequently bought used the following methods…“
    • @Override! protected Control createDialogArea(final Composite parent) {! Composite container = (Composite) super.createDialogArea(parent);! ! swtTextWidget = new Text(container, SWT.BORDER);! swtTextWidget.|! return container;! } Code Completion… What does the developer need, i.e., which methods should the code completion present to the user? 25
    • All 164 Methods of Text ?
    • Intelligent Code Completion What your team really needs to know… 27
    • Snippet Completion (1) 28
    • HOW IT WORKS „Finding the hidden gems in your code“
    • class Example extends Page {! Text t;! ! @Override! void createContents() {! t = new Text();! t.setText(..);! ...! }! ...! } in:Page.performOk() Text.<init>() Text.getText() Text.setFont() ... Text.setText() … … … … … … … 0 0 0 … 30 1 1 1 From code to models... in:Page.createContents()
    • 31 class Example extends Page {! Text t;! ...! ! @Override! void performOk() {! t.getText();! ...! }! ! } in:Page.performOk() Text.<init>() Text.getText() Text.setFont() ... Text.setText() 1 0 1 1 1 1 0 0 0 0 0 0 … … … … … … … … … From code to models... in:Page.createContents()
    • 32 class MyPage extends Page {! ! Text t;! @Override! void createContents() {! t = new Text();! t.|<^space>! }! ...! } 1 …1 ?? ?0 From models to recommendations... in:Page.performOk() Text.<init>() Text.getText() Text.setFont() ... Text.setText() in:Page.createContents()
    • 33 1 …1 ?? ?0 in:Page.performOk() Text.<init>() Text.getText() Text.setFont() ... Text.setText() 01 10 0 … 1 10 0 0 0 … … … … … … … … 1 0 1 1 1 0 …1 01 00 0 …1 ⅔ ⅓ 0 From models to recommendations... in:Page.createContents()
    • CALL-CHAIN COMPLETION “Welcome to the jungle...”
    • public class MyView extends ViewPart {! ! public void updateMessage(final String newMessage) {! ! // How do I get an instance of IStatusLineManager?! final IStatusLineManager manager = |! ! } How to obtain an instance of... There is no trivial solution. Again, what should code completion return? 35
    • What we need... 36 ViewPart IViewSite IAc-onBars IStatusLineManager getStatusLineManager() getAc-onbars() getViewSite() public void updateMessage(final String newMessage) {! ! // How do I get an instance of ! ! final IStatusLineManager manager = ! this! .getViewSite()! .getActionBars()! .getStatusLineManager();! ! manager.setMessage(newMessage);! }
    • SUBWORDS COMPLETION “BecausePureCamelCaseMatching****s!”
    • Use speaking names...? 38
    • When letters become just guidelines... 39I Like? Source: http://vimeo.com/19369928
    • EXTENDING API DOCUMENTATION “Developers who bought overwrote this method typically also overwrote...”
    • In good documentation we trust... 41 good /**! * 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?
    • Generating high-quality API documentation 42 /**! * The number of questions.! */! private int numberOfQuestions;! ! ! /**! * Sets the number of questions.! * ! * @param numberOfQuestions the number of questions! * @throws IllegalArgumentException the illegal argument exception! */! public void setNumberOfQuestions(int numberOfQuestions) ! throws IllegalArgumentException {! if (numberOfQuestions < 0) {! throw new IllegalArgumentException("numberOfQuestions < 0");! }! this.numberOfQuestions = numberOfQuestions;! }
    • What people say about JAutodoc... 43 User: Anonymous Rating: 9 2009-08-02 11:32:37 Wow exactly what I needed! User: Anonymous Rating: 9 2009-02-13 19:58:32 Thank you... this plugin rocks! User: Anonymous Rating: 9 2009-02-13 19:58:32 Works perfectly. Smarter than I expected! WTH? What did you expect?!
    • How Recommenders is coming to rescue... 44
    • What documentation would you expect when subclassing Dialog? 45 package org.eclipse.recommenders.examples.demo;! ! import org.eclipse.jface.*;! ! public class MyDialog extends Dialog {! ! protected MyDialog(final IShellProvider parentShell) {! super(parentShell);! } ! }! !
    • What Javadoc gives you... 46 A dialog is a specialized window used for narrow- focused communication with the user. ! Dialogs are usually modal. Consequently, it is generally bad practice to open a dialog without a parent. A modal dialog without a parent is not prevented from disappearing behind the application's other windows, making it very confusing for the user. ! If there is more than one modal dialog is open the second one should be parented off of the shell of the first one otherwise it is possible that the OS will cus to the first dialog potentially blocking the UI. But what are the hot-spots of Dialog? org.eclipse.jface.dialogs.Dialog
    • What code completion offers... 47 Which of the 56 methods should we override?
    • Recommending method overrides... 48 ! public class MyDialog extends Dialog {! !
    • Recommending self-calls 49 public class MyWizard extends Wizard {! ! ! @Override! public void addPages() {! ! };
    • Mining for subclassing patterns 50 ! public class MyViewerSorter extends ViewerComparator {
    • Mined example code snippets… 51 ! public class MyDialog extends Dialog {! ! @Override! protected Control createDialogArea(Composite parent) {! !
    • SNIPMATCH „Stop searching Stackoverflow for code snippets“
    • Why do you use code templates? 53
    • Safe time typing 54 <ctrl+space> <ctrl+space> { <ctrl+space> <ctrl+space> }
    • Learning from snippets 55
    • Eclipse Java Templates 56 42x Java Templates. 35x SWT Templates.
    • Learning from snippets 57
    • The rise of code snippet repositories 58 and many more...
    • Snipmatch 59 Recom m enders 2.1
    • AND IF THERE IS NO CODE TO ANALYZE? „From code analysis to crowd sourcing“
    • Being for Software Developers How 39 million click events make your IDE a smarter place
    • 62
    • 63
    • The amazon success factors 64
    • 65 How about applying the very same principles to software development?
    • So, instead of using the web browser… 66
    • 68 ! ! ! Disclaimer ! Data sharing is involved! ! Not Eclipse anymore!
    • Crowdsourced Code Completion Developers that bought used a StringBuilder, typically… 69
    • A fairly trivial example… 70
    • Instead saying… 71
    • What if we‘d just count calls...? 72 Codetrails Connect Community Edition,
 Install from http://www.codetrails.com/connect
    • ! void ctor() { ! List l = new A… } Crowdsourced Constructor Completion 73 What is the mostly likely completion a developer looks for in this particular situation ?
    • 74 1 out of 302
    • ! void ctor() { ! List l = new A… } Use (costly) subtype checks 75 Codetrails Completion Tweaks for Eclipse,
 Install from http://download.codetrails.com/updates/connect/
    • Crowdsourcing constructor completions...? 76 It learns from you. From the very 1st moment. Codetrails Connect Community Edition,
 Install from http://download.codetrails.com/updates/connect/
    • public class MyDialog extends Dialog { ! | ! ! Crowdsourcing override completions...? 77
    • ! void quickfix() { ! List l = new A } How about fixing quick-fix? 78 Not fixed yet. But could be easily - when you start sharing your knowledge…
    • 39.000.000 clicks for a smarter IDE 79 Read more (October 2013)
 http://www.codetrails.com/blog/powered-33-million-code-completions-codetrails-connect-12 Method Overrides 1.579.303 Constructor Calls 8.915.540 Method Calls 38.254.438 48.749.281 Bootstrapped with
 30++ GB Java Bytecode. Powered by Maven Central and EclipseSource Yoxos.
    • 56.424 crowdsourced completion events 80 org.eclipse.* 11 %org.apache.* 4 % com.google.* 9 % com.vaadin.* 5 % com.codetrails.* 3 % others 14 % javax.* 3 % java.[n]io.* 6 % java.util.* 25 % java.lang.* 21 % From December 22 to March 12
    • Trend: Events sent by the community 81 Visit the Codetrails Connect live dashboard:
 http://download.codetrails.com/connect/dashboard/
    • How well does it work? 82 What do you expect?
    • How well does it work? 83 Numberofproposalsmade 1 2 3 4 5 6 7 Position in code completion window -1 0 1 2 3 4 5 6 993 475 304 214 189 123 1.094 833 327 238 197 114 87 145 56 40 38 96 61 23 22 21 77 52 19 21 20 10 963 591 373 243 285 151 157 Hit Miss not found
    • Successfully concluded sessions 84 Codetrails 78,8 JDT 67,9 JDT standalone vs. Codetrails Developers find what they need 11% more often with smart code completion. Number of documentation lookups saved in 3 months: 3.000!
    • What get’s shared? 85
    • What is shared? 86 {! „type“: „StringBuilder“,! „completion“: „append(String)“! }
    • Sharing Preferences 87
    • Still scared of crowdsourcing? 88 Do you also suffer from Anatidaephobia? „Big Brother is watching you“
 http://anniemachon.ch/annie_machon/2013/11/cryptofestival-london-30th-november.html
    • 89 ANATIDAEPHOBIA IS THE FEAR
 THAT SOMEWHERE IN THE WORLD, THERE IS A DUCK WATCHING YOU.
    • 90 https://vaadin.com/blog/-/blogs/crowdsourcing-vaadin-with-codetrails-connect
    • 91 Snippets going social 5 0
    • Enriching Javadoc 92 Eclipse Code Recommenders Livedoc 0.8 Incubator
 Install from http://eclipse.org/recommenders/incubators
    • Javadocs with mined snippets 93http://download.codetrails.com/livedoc/published/latest/org/eclipse/jface/org.eclipse.jface/3.8.102/
    • 94 Breaking News:! Words carry meaning! As leading scientists found out, words.... Rethinking Recommendation for Code Completion
    • A simple observation 95 You wouldn‘t expect a call to #dispose()
 in #createSomething(), right?
    • What you expect is... 96
    • How many words do you have for ‟create” ? 97
    • So, it works for #createSomething too! 98
    • Almost no difference! 99 Precision 0 25 50 75 100 Recall 0 10 20 30 40 50 60 70 80 90 100 Classic Verbs Interpolated Precision Recall Curves over 136.761 samples on JRE
    • What get‘s shared? 100 {! „method“: „create“! „type“: „Composite“,! „completion“: „setLayout(...)“! }
    • Let‘s back up here for a second! 101
    • We get (almost) language agnostic! 102
    • Read More 103
    • Installation 104
    • WRAP UP „Closing notes“
    • All that only happens if you share… 106
    • 107 Yes, there is a duck somewhere.
    • 108But it probably doesn’t care what you are doing.
    • THANK YOU @MarcelBruch +MarcelBruch