Text t; t = new Text(); t.setText(“hello world"); Recommend: setText(…) because it often co-occurs with: new Text() frequently co-occuring terms: [Bruch et al. FSE 09] 3
Text t; t = new Text(); t.setText(“hello world"); Recommend: setText(…) because it often co-occurs with: new Text() frequently co-occuring terms: [Bruch et al. FSE 09] +Order of terms: [Reiss ICSE 09] 3
Text t; t = new Text(); t.setText(“hello world"); Recommend: setText(…) because it often co-occurs with: new Text() frequently co-occuring terms: [Bruch et al. FSE 09] +Order of terms: [Reiss ICSE 09] +Program dependencies: [Nguyen ICSE 12] 3
Score(c,DC) Score(c,(DC,SC))= CHANGE INFERENCE MODEL 10 c = current change (<operation kind>,<AST node type>, <label>) Score(c,SC) = impact of Static Context T on predicting c Score(c,DC) = impact of Dynamic Context on predicting c
+ wDC × Score(c,DC) Score(c,(DC,SC))= CHANGE INFERENCE MODEL 10 c = current change (<operation kind>,<AST node type>, <label>) Score(c,SC) = impact of Static Context T on predicting c Score(c,DC) = impact of Dynamic Context on predicting c wSC = weight of impact of context
+ wDC × Score(c,DC) + wDC × Score(c,(DC,SC))= CHANGE INFERENCE MODEL 10 c = current change (<operation kind>,<AST node type>, <label>) Score(c,SC) = impact of Static Context T on predicting c Score(c,DC) = impact of Dynamic Context on predicting c wSC = weight of impact of context wDC = weight of impact of change
= for (Task t: tasks) { t.execute(); } Set<TaskResult> results Set SIMULATE USER BY RE-PLAYING CHANGES FROM COMMITS 13 Next Change Recommendation 1 2 3 4 5 HashSet<>();
Set<TaskResult> results = new Set<TaskResult> results = for (Task t: tasks) { t.execute(); } Set<TaskResult> results Set SIMULATE USER BY RE-PLAYING CHANGES FROM COMMITS 13 Next Change Recommendation 1 2 3 4 5 results.
Set<TaskResult> results = new HashSet<>(); Set<TaskResult> results = new Set<TaskResult> results = for (Task t: tasks) { t.execute(); } Set<TaskResult> results Set SIMULATE USER BY RE-PLAYING CHANGES FROM COMMITS 13 Next Change Recommendation 1 2 3 4 5 add()
with Community Corpus. Project Edition: APIREC trained first 90% of commits of a single project, tested on remaining 10% of commits User Edition: APIREC trained first 90% of commits of a single user project, tested on remaining 10% of commits 14
APIREC is more accurate than previous work 0% 20% 40% 60% 80% Top-1 Top-5 Top-10 78% 74% 55% 77% 64% 29% 69% 61% 26% 40% 34% 22% sequence based set based graph based APIRec
1 Top 5 Top 10 78% 74% 55% 41% 34% 17% 59% 53% 29% User (trained on 1 user in 1 project) Project (trained on one project) Community (trained on 50 projects)
significant improvement over previous, change agnostic approaches. Changes are personal A developers’s history predicts future changes better than the entire project changes. 19
significant improvement over previous, change agnostic approaches. Changes are personal A developers’s history predicts future changes better than the entire project changes. Changes are untapped Fine grained changes provide a wealth of data that is currently under used. 19