Fine-grained Processing of CVS Archives with APFEL
Upcoming SlideShare
Loading in...5
×
 

Fine-grained Processing of CVS Archives with APFEL

on

  • 1,460 views

Presented at ETX 2006.

Presented at ETX 2006.

Statistics

Views

Total Views
1,460
Views on SlideShare
1,460
Embed Views
0

Actions

Likes
0
Downloads
13
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

Fine-grained Processing of CVS Archives with APFEL Fine-grained Processing of CVS Archives with APFEL Presentation Transcript

  • Fine-grained processing of CVS archives with APFEL Tom Zimmermann Saarland University, Saarbrücken, Germany
  • Guiding developers Zimmermann, Weissgerber, Diehl, Zeller (TSE 2005)
  • eROSE suggests further locations.
  • eROSE prevents incomplete changes.
  • eROSE is customizable.
  • APFEL collects CVS data APFEL
  • APFEL collects CVS data APFEL
  • APFEL collects CVS data APFEL
  • Fine-grained changes initDefaults(IPreferenceStore store) public static void initDefaults(IPreferenceStore store) { store.setDefault(OPEN_STRUCTURE_COMPARE, true); store.setDefault(SYNCHRONIZE_SCROLLING, true); store.setDefault(SHOW_PSEUDO_CONFLICTS, false); store.setDefault(INITIALLY_SHOW_ANCESTOR_PANE, false); store.setDefault(SHOW_MORE_INFO, false); store.setDefault(IGNORE_WHITESPACE, false); store.setDefault(PREF_SAVE_ALL_EDITORS, false); //store.setDefault(USE_SPLINES, false); store.setDefault(USE_SINGLE_LINE, true); //store.setDefault(USE_RESOLVE_UI, false); store.setDefault(PATH_FILTER, quot;quot;); //$NON-NLS-1$ }
  • Fine-grained changes initDefaults(IPreferenceStore store) public static void initDefaults(IPreferenceStore store) { store.setDefault(OPEN_STRUCTURE_COMPARE, true); D store.setDefault(SYNCHRONIZE_SCROLLING, true); E store.setDefault(SHOW_PSEUDO_CONFLICTS, false); G store.setDefault(INITIALLY_SHOW_ANCESTOR_PANE, false); N A store.setDefault(SHOW_MORE_INFO, false); H store.setDefault(IGNORE_WHITESPACE, false); C store.setDefault(PREF_SAVE_ALL_EDITORS, false); //store.setDefault(USE_SPLINES, false); store.setDefault(USE_SINGLE_LINE, true); //store.setDefault(USE_RESOLVE_UI, false); store.setDefault(PATH_FILTER, quot;quot;); //$NON-NLS-1$ }
  • Fine-grained changes initDefaults(IPreferenceStore store) public static void initDefaults(IPreferenceStore store) { store.setDefault(OPEN_STRUCTURE_COMPARE, true); Removed call to setDefault (2x): store.setDefault(SYNCHRONIZE_SCROLLING, true); store.setDefault(USE_SPLINES, false); store.setDefault(SHOW_PSEUDO_CONFLICTS, false); store.setDefault(INITIALLY_SHOW_ANCESTOR_PANE, false); store.setDefault(USE_RESOLVE_UI, false); store.setDefault(SHOW_MORE_INFO, false); store.setDefault(IGNORE_WHITESPACE, false); Inserted comments (2x): store.setDefault(PREF_SAVE_ALL_EDITORS, false); //store.setDefault(USE_SPLINES, false); //store.setDefault(USE_SPLINES, false); store.setDefault(USE_SINGLE_LINE, true); //store.setDefault(USE_RESOLVE_UI, false); //store.setDefault(USE_RESOLVE_UI, false); store.setDefault(PATH_FILTER, quot;quot;); //$NON-NLS-1$ }
  • Collecting tokens public static void main(String[] args) { System.out.println(quot;Hello Portland.quot;); System.out.println(“Hello eTX.”); }
  • Collecting tokens public static void main(String[] args) { System.out.println(quot;Hello Portland.quot;); System.out.println(“Hello eTX.”); } P-public T-String[] P-static V-args T-System T-System V-out V-out M-println M-println Y-”Hello eTX.” Y-”Hello eTX.”
  • Collecting tokens Modularization packages, imports Inheritance extends, implements Method calls inner vs final call Variable usage identifiers, types Exceptions throws, throw, catch Comments Javadoc, blocks, lines modifiers, literals, Various operator, keywords
  • Comparing token sets
  • Comparing token sets A() B() C() D() E()
  • Comparing token sets A() A() B() F() C() B() D() D() E() E()
  • Comparing token sets A() A() B() F() C() B() D() D() E() E()
  • Cross-cutting changes
  • Cross-cutting changes SELECT token_name, COUNT(DISTINCT element_id)  FROM cvs_tokens_method NATURAL JOIN cvs_revisions  WHERE token_type='M' AND change_type='CHG'  GROUP BY transaction_id, token_name   ORDER BY COUNT(DISTINCT element_id) DESC; 
  • Cross-cutting changes SELECT token_name, COUNT(DISTINCT element_id)  FROM cvs_tokens_method NATURAL JOIN cvs_revisions  WHERE token_type='M' AND change_type='CHG'  GROUP BY transaction_id, token_name   ORDER BY COUNT(DISTINCT element_id) DESC;  token_name count getString 1462 lock 1284 unlock 1284 error 996 isValidWidget 988
  • Cross-cutting changes SELECT token_name, COUNT(DISTINCT element_id)  FROM cvs_tokens_method NATURAL JOIN cvs_revisions  WHERE token_type='M' AND change_type='CHG'  GROUP BY transaction_id, token_name   ORDER BY COUNT(DISTINCT element_id) DESC;  token_name count getString 1462 ASPECTS? lock 1284 unlock 1284 error 996 isValidWidget 988
  • Cross-cutting changes SELECT token_name, COUNT(DISTINCT element_id)  FROM cvs_tokens_method NATURAL JOIN cvs_revisions  WHERE token_type='M' AND change_type='CHG'  GROUP BY transaction_id, token_name   ORDER BY COUNT(DISTINCT element_id) DESC;  token_name count getString 1462 SOON! lock 1284 unlock 1284 HAM: Cross-Cutting error 996 Concerns in Eclipse isValidWidget 988
  • One line fixes >301 Expression 150 Method call 120 Literal (boundaries, constants) 73 Keyword (true/false confusion) 60 Operator 39 Identifier 39 Comment (!!)
  • One line fixes >301 Expression 150 Method call 120 Literal (boundaries, constants) 73 Keyword (true/false confusion) 60 Operator 39 Identifier 39 Comment (!!)
  • One line fixes >301 Expression 150 Method call 120 Literal (boundaries, constants) Bug report: 119638 - Typo in ToolItem.getControl 73 Keyword (true/false confusion) 252c252 < * the item when the items is a <code>SEPARATOR</code>. --- 60 Operator > * the item when the item is a <code>SEPARATOR</code> 39 Identifier 39 Comment (!!)
  • Future work • Capture the context of a change, e.g., within an if/while/switch expression. • Integrate with dynamic analysis, i.e., signature in addition to handles. • Package and ship APFEL.
  • Conclusion • APFEL collects CVS and change data. • APFEL supports software evolution research, in particular early testing of hypotheses. • http://www.st.cs.uni-sb.de/softevo/
  • Conclusion • APFEL collects CVS and change data. • APFEL supports software evolution research, in particular early testing of hypotheses. • http://www.st.cs.uni-sb.de/softevo/ MSR Challenge 2007