Fine-grained Processing of CVS Archives with APFEL

Thomas Zimmermann
Thomas ZimmermannResearcher at Microsoft Research
Fine-grained processing
of CVS archives with APFEL



Tom Zimmermann
Saarland University, Saarbrücken, Germany
Guiding developers




Zimmermann, Weissgerber, Diehl, Zeller (TSE 2005)
Fine-grained Processing of CVS Archives with APFEL
Fine-grained Processing of CVS Archives with APFEL
eROSE suggests further locations.
Fine-grained Processing of CVS Archives with APFEL
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 codeSEPARATOR/code.
--- 60        Operator
 * the item when the item is a codeSEPARATOR/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
1 of 32

More Related Content

What's hot(19)

Introduction To Testing With PerlIntroduction To Testing With Perl
Introduction To Testing With Perl
joshua.mcadams5.1K views
Linked listsLinked lists
Linked lists
George Scott IV267 views
Congfigure python as_ideCongfigure python as_ide
Congfigure python as_ide
Lingfei Kong768 views
Spss syntaxSpss syntax
Spss syntax
rohit vishwakarma47 views
Коварный code type ITGM #9Коварный code type ITGM #9
Коварный code type ITGM #9
Andrey Zakharevich366 views
Zoo management  adri jovinZoo management  adri jovin
Zoo management adri jovin
Adri Jovin804 views
C99C99
C99
sifo121.1K views
FiveFive
Five
Łukasz Langa407 views
11 Things About 11gr211 Things About 11gr2
11 Things About 11gr2
afa reg1.2K views
LispLisp
Lisp
Sam Lee36 views
Refactoring using CodeceptionRefactoring using Codeception
Refactoring using Codeception
Jeroen van Dijk1.9K views
Call Return ExplorationCall Return Exploration
Call Return Exploration
Pat Hawks281 views
Calling FunctionsCalling Functions
Calling Functions
Pat Hawks788 views

Viewers also liked(7)

Action based filter_demoAction based filter_demo
Action based filter_demo
Nilotpal Paul4.1K views
Classic vs New Hiring ProcessClassic vs New Hiring Process
Classic vs New Hiring Process
Basem Musa656 views
Vd Presentation CvsVd Presentation Cvs
Vd Presentation Cvs
metudgn1K views
Drupal Best PracticesDrupal Best Practices
Drupal Best Practices
manugoel20035.4K views
Google Recruiting StrategyGoogle Recruiting Strategy
Google Recruiting Strategy
Maysoun Mohamed5.1K views

Similar to Fine-grained Processing of CVS Archives with APFEL(20)

Php & my sqlPhp & my sql
Php & my sql
Norhisyam Dasuki1K views
UNIT IV (4).pptxUNIT IV (4).pptx
UNIT IV (4).pptx
DrDhivyaaCRAssistant16 views
PhpUnit - The most unknown PartsPhpUnit - The most unknown Parts
PhpUnit - The most unknown Parts
Bastian Feder4.3K views
Php unit the-mostunknownpartsPhp unit the-mostunknownparts
Php unit the-mostunknownparts
Bastian Feder2.6K views
PHPSpec BDD for PHPPHPSpec BDD for PHP
PHPSpec BDD for PHP
Marcello Duarte8K views
Cli deep diveCli deep dive
Cli deep dive
Edward Capriolo705 views
Test-driven Development for TYPO3Test-driven Development for TYPO3
Test-driven Development for TYPO3
oliverklee7.6K views
Speed Things Up with TransientsSpeed Things Up with Transients
Speed Things Up with Transients
Cliff Seal1.5K views
T sql denali code Day of .NetT sql denali code Day of .Net
T sql denali code Day of .Net
KathiK58950 views
SPL, not a bridge too farSPL, not a bridge too far
SPL, not a bridge too far
Michelangelo van Dam1.7K views
Php unit the-mostunknownpartsPhp unit the-mostunknownparts
Php unit the-mostunknownparts
Bastian Feder1.6K views
Unit testing with zend framework tek11Unit testing with zend framework tek11
Unit testing with zend framework tek11
Michelangelo van Dam3.6K views
20220112 sac v120220112 sac v1
20220112 sac v1
Sharon Liu78 views
PHP and MySQLPHP and MySQL
PHP and MySQL
Sanketkumar Biswas584 views
PerlApp2Postgresql (2)PerlApp2Postgresql (2)
PerlApp2Postgresql (2)
Jerome Eteve443 views

More from Thomas Zimmermann(20)

Software Analytics = Sharing InformationSoftware Analytics = Sharing Information
Software Analytics = Sharing Information
Thomas Zimmermann3.3K views
MSR 2013 PreviewMSR 2013 Preview
MSR 2013 Preview
Thomas Zimmermann21.8K views
Analytics for smarter software development Analytics for smarter software development
Analytics for smarter software development
Thomas Zimmermann2.6K views
Klingon Countdown TimerKlingon Countdown Timer
Klingon Countdown Timer
Thomas Zimmermann1.3K views
Data driven games user researchData driven games user research
Data driven games user research
Thomas Zimmermann1.5K views
Security trend analysis with CVE topic modelsSecurity trend analysis with CVE topic models
Security trend analysis with CVE topic models
Thomas Zimmermann1.5K views
Analytics for software developmentAnalytics for software development
Analytics for software development
Thomas Zimmermann4.6K views
Cross-project defect predictionCross-project defect prediction
Cross-project defect prediction
Thomas Zimmermann1.9K views
Quality of Bug Reports in Open SourceQuality of Bug Reports in Open Source
Quality of Bug Reports in Open Source
Thomas Zimmermann1.6K views
Meet Tom and his FishMeet Tom and his Fish
Meet Tom and his Fish
Thomas Zimmermann1.5K views
Got Myth? Myths in Software EngineeringGot Myth? Myths in Software Engineering
Got Myth? Myths in Software Engineering
Thomas Zimmermann5.9K views

Fine-grained Processing of CVS Archives with APFEL

  • 1. Fine-grained processing of CVS archives with APFEL Tom Zimmermann Saarland University, Saarbrücken, Germany
  • 9. APFEL collects CVS data APFEL
  • 10. APFEL collects CVS data APFEL
  • 11. APFEL collects CVS data APFEL
  • 12. 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$ }
  • 13. 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$ }
  • 14. 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$ }
  • 15. Collecting tokens public static void main(String[] args) { System.out.println(quot;Hello Portland.quot;); System.out.println(“Hello eTX.”); }
  • 16. 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.”
  • 17. 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
  • 19. Comparing token sets A() B() C() D() E()
  • 20. Comparing token sets A() A() B() F() C() B() D() D() E() E()
  • 21. Comparing token sets A() A() B() F() C() B() D() D() E() E()
  • 23. 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; 
  • 24. 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
  • 25. 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
  • 26. 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
  • 27. One line fixes 301 Expression 150 Method call 120 Literal (boundaries, constants) 73 Keyword (true/false confusion) 60 Operator 39 Identifier 39 Comment (!!)
  • 28. One line fixes 301 Expression 150 Method call 120 Literal (boundaries, constants) 73 Keyword (true/false confusion) 60 Operator 39 Identifier 39 Comment (!!)
  • 29. 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 codeSEPARATOR/code. --- 60 Operator * the item when the item is a codeSEPARATOR/code 39 Identifier 39 Comment (!!)
  • 30. 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.
  • 31. 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/
  • 32. 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