SLIDE 1
Baishakhi Ray, Christopher Wiley, Miryung Kim The University - - PowerPoint PPT Presentation
Baishakhi Ray, Christopher Wiley, Miryung Kim The University - - PowerPoint PPT Presentation
Baishakhi Ray, Christopher Wiley, Miryung Kim The University of Texas at Austin Software forking has become popular. Open source forked projects:
SLIDE 2
SLIDE 3
¡
¡ Developers ¡port ¡similar ¡feature ¡additions ¡
and ¡bug-‑fixes ¡across ¡the ¡projects. ¡ ¡
¡ Repertoire ¡analyzes ¡the ¡extent ¡and ¡
characteristics ¡of ¡cross-‑system ¡porting ¡ across ¡forked ¡projects. ¡ ¡
¡
SLIDE 4
gEmacs_1.0 ¡ gEmacs_5.0 ¡ gEmacs_18.0 ¡ gEmacs_20.0 ¡ gEmacs_24.0 ¡
Gnu Emacs
4
SLIDE 5
5
gEmacs_1.0 ¡ gEmacs_5.0 ¡ gEmacs_18.0 ¡ gEmacs_20.0 ¡ gEmacs_24.0 ¡
Gnu Emacs
Urgent ¡ ¡ Requirement? ¡
SLIDE 6
6
gEmacs_1.0 ¡ gEmacs_5.0 ¡ gEmacs_18.0 ¡ gEmacs_20.0 ¡ gEmacs_24.0 ¡
Gnu Emacs
Urgent ¡ ¡ Requirement? ¡
Fork ¡
SLIDE 7
Gnu Emacs XEmacs XE_1.0 XE_10.0 XE_20.0 GE_1.0 GE_5.0 GE_18.0 GE_20.0 GE_24.0
7
SLIDE 8
q Involves ¡repetitive ¡work ¡to ¡port ¡bug-‑fixes ¡and ¡new ¡
- feature. ¡
¡
8
Gnu Emacs XEmacs XE_1.0 XE_10.0 XE_20.0 GE_1.0 GE_5.0 GE_18.0 GE_20.0 GE_24.0
SLIDE 9
Gnu ¡Emacs ¡Commit ¡Messages ¡showing ¡evidence ¡of ¡cross-‑system ¡porting ¡ Author: ¡Stefan ¡Monnier ¡<monnier@iro.umontreal.ca> ¡ Date: ¡ ¡ ¡Tue ¡Jan ¡11 ¡00:07:32 ¡2011 ¡-‑0500 ¡ ¡ ¡ ¡ ¡ ¡* ¡lisp/progmodes/prolog.el: ¡Fix ¡up ¡coding ¡conventions ¡and ¡such. ¡ ¡ ¡ ¡ ¡… ¡ ¡ ¡ ¡ ¡(prolog-‑emacs): ¡Remove. ¡ ¡Use ¡(featurep ¡'xemacs) ¡instead. ¡ ¡ ¡ ¡… ¡ ¡ Author: ¡Richard ¡M. ¡Stallman ¡<rms@gnu.org> ¡ Date: ¡ ¡ ¡Sun ¡Jan ¡22 ¡02:21:32 ¡1995 ¡+0000 ¡ ¡ ¡ ¡ ¡ ¡(term-‑if-‑emacs19, ¡term-‑if-‑xemacs, ¡term-‑ifnot-‑xemacs): ¡ ¡New ¡macros ¡ ¡ ¡ ¡ ¡to ¡conditionalize ¡at ¡compile-‑time ¡for ¡different ¡emacs ¡versions. ¡
9
SLIDE 10
C/ ¡Header ¡ files ¡ KLOC ¡ Authors ¡ Number ¡
- f ¡
Commits ¡
Gnu ¡Emacs ¡ 372 ¡ 246 ¡ 266 ¡ 10525 ¡ XEmacs ¡ 496 ¡ 282 ¡ 11 ¡ 754 ¡
SLIDE 11
User Interface Back End
11
Input ¡Wizard ¡
Projects, ¡Repository ¡ URLs, ¡and ¡Time ¡Period ¡
Analysis ¡Wizard: ¡ ¡
Porting ¡Frequency ¡/ ¡ ¡ File ¡Distribution ¡/ ¡ Developer ¡/ ¡Porting ¡Latency ¡
Data ¡extraction: ¡
diff ¡patches ¡ Developers ¡ Commit ¡dates ¡
Ported ¡edits ¡ identification: ¡
(CCFinderX, ¡N-‑gram ¡ Matching) ¡
Repertoire ¡ DB ¡
SLIDE 12
User Interface Back End
12
Input ¡Wizard ¡
Projects, ¡Repository ¡ URLs, ¡and ¡Time ¡Period ¡
Analysis ¡Wizard: ¡ ¡
Porting ¡Frequency ¡/ ¡ ¡ File ¡Distribution ¡/ ¡ Developer ¡/ ¡Porting ¡Latency ¡
Data ¡extraction: ¡
diff ¡patches ¡ Developers ¡ Commit ¡dates ¡
Ported ¡edits ¡ identification: ¡
(CCFinderX, ¡N-‑gram ¡ Matching) ¡
Repertoire ¡ DB ¡
SLIDE 13
SLIDE 14
User Interface Back End
14
Input ¡Wizard ¡
Projects, ¡Repository ¡ URLs, ¡and ¡Time ¡Period ¡
Analysis ¡Wizard: ¡ ¡
Porting ¡Frequency ¡/ ¡ ¡ File ¡Distribution ¡/ ¡ Developer ¡/ ¡Porting ¡Latency ¡
Data ¡extraction: ¡
diff ¡patches ¡ Developers ¡ Commit ¡dates ¡
Ported ¡edits ¡ identification: ¡
(CCFinderX, ¡N-‑gram ¡ Matching) ¡
Repertoire ¡ DB ¡
SLIDE 15
User Interface Back End
15
Input ¡Wizard ¡
Projects, ¡Repository ¡ URLs, ¡and ¡Time ¡Period ¡
Analysis ¡Wizard: ¡ ¡
Porting ¡Frequency ¡/ ¡ ¡ File ¡Distribution ¡/ ¡ Developer ¡/ ¡Porting ¡Latency ¡
Data ¡extraction: ¡
diff ¡patches ¡ Developers ¡ Commit ¡dates ¡
Ported ¡edits ¡ identification: ¡
(CCFinderX, ¡N-‑gram ¡ Matching) ¡
Repertoire ¡ DB ¡
SLIDE 16
¡ Input: ¡two ¡set ¡of ¡diff ¡based ¡program ¡patches ¡
from ¡the ¡two ¡input ¡projects. ¡ ¡
¡ Output: ¡ported ¡edits ¡among ¡the ¡patches. ¡
¡
¡ Repertoire ¡compares ¡patches ¡to ¡identify ¡
contents ¡and ¡edit ¡operations’ ¡similarity. ¡ ¡
16
SLIDE 17
Patch1 h1 (Jan ’1 n ’10) Patch2 h2 (Mar ‘1 ‘10)
**** Old **** X1 for(i=0;i<MAX;i++){ X2 - x = array[i]+x; X3 - y = foo(x); X4 - x = x-y; X5 } **** New **** X6 for(i=0;i<MAX;i++) { X7 + y = x+y; X8 + x = array[i]+x; X9 + y = foo(x,y); X10 } **** Old **** Y1 for(j=0;j<MAX;j++) { Y2 q = p + q; Y3 - q = array[j]+p; Y4 - p = foo1(q); Y5 } **** New **** Y6 for(j=0;j<MAX;j++) { Y7 q = p + q; Y8 + q = array[j] + q; Y9 + p = foo1(p,q); Y10 }
- 17
SLIDE 18
Patch1 h1 (Jan ’1 n ’10) Patch2 h2 (Mar ‘1 ‘10)
**** Old **** X1 for(i=0;i<MAX;i++){ X2 - x = array[i]+x; X3 - y = foo(x); X4 - x = x-y; X5 } **** New **** X6 for(i=0;i<MAX;i++) { X7 + y = x+y; X8 + x = array[i]+x; X9 + y = foo(x,y); X10 } **** Old **** Y1 for(j=0;j<MAX;j++) { Y2 q = p + q; Y3 - q = array[j]+p; Y4 - p = foo1(q); Y5 } **** New **** Y6 for(j=0;j<MAX;j++) { Y7 q = p + q; Y8 + q = array[j] + q; Y9 + p = foo1(p,q); Y10 }
- 18
SLIDE 19
Patch1 h1 (Jan ’1 n ’10) Patch2 h2 (Mar ‘1 ‘10)
**** Old **** X1 for(i=0;i<MAX;i++){ X2 - x = array[i]+x; X3 - y = foo(x); X4 - x = x-y; X5 } **** New **** X6 for(i=0;i<MAX;i++) { X7 + y = x+y; X8 + x = array[i]+x; X9 + y = foo(x,y); X10 } **** Old **** Y1 for(j=0;j<MAX;j++) { Y2 q = p + q; Y3 - q = array[j]+p; Y4 - p = foo1(q); Y5 } **** New **** Y6 for(j=0;j<MAX;j++) { Y7 q = p + q; Y8 + q = array[j] + q; Y9 + p = foo1(p,q); Y10 }
- Ported ¡
edits ¡
19
SLIDE 20
Patch1 h1 (Jan ’1 n ’10) Patch2 h2 (Mar ‘1 ‘10)
**** Old **** X1 for(i=0;i<MAX;i++){ X2 - x = array[i]+x; X3 - y = foo(x); X4 - x = x-y; X5 } **** New **** X6 for(i=0;i<MAX;i++) { X7 + y = x+y; X8 + x = array[i]+x; X9 + y = foo(x,y); X10 } **** Old **** Y1 for(j=0;j<MAX;j++) { Y2 q = p + q; Y3 - q = array[j]+p; Y4 - p = foo1(q); Y5 } **** New **** Y6 for(j=0;j<MAX;j++) { Y7 q = p + q; Y8 + q = array[j] + q; Y9 + p = foo1(p,q); Y10 }
- 20
SLIDE 21
¡ From ¡our ¡empirical ¡study ¡of ¡cross-‑system ¡
porting ¡in ¡the ¡BSD ¡product ¡family, ¡we ¡find ¡ Repertoire’s ¡Precision: ¡94%, ¡ ¡Recall: ¡84%. ¡ ¡
¡
21
SLIDE 22
User Interface Back End
22
Input ¡Wizard ¡
Projects, ¡Repository ¡ URLs, ¡and ¡Time ¡Period ¡
Analysis ¡Wizard: ¡ ¡
Porting ¡Frequency ¡/ ¡ ¡ File ¡Distribution ¡/ ¡ Developer ¡/ ¡Porting ¡Latency ¡
Data ¡extraction: ¡
diff ¡patches ¡ Developers ¡ Commit ¡dates ¡
Ported ¡edits ¡ identification: ¡
(CCFinderX, ¡N-‑gram ¡ Matching) ¡
Repertoire ¡ DB ¡
SLIDE 23
23
ported_edit ¡
§ porting ¡id ¡ § Edit ¡1 ¡ § Edit ¡2 ¡ § total ¡ported ¡lines ¡ ¡
Edit ¡
§ commit ¡id ¡ § start ¡line ¡ § end ¡line ¡ § patch ¡id ¡ ¡
patch ¡
§ patch ¡id ¡ § patch ¡name ¡ § total ¡edited ¡lines ¡ ¡ § Total ¡ported ¡lines ¡ ¡
commits ¡
§ commit_id ¡ § project ¡id ¡ § author ¡ § commit ¡date ¡ ¡ § List[patch] ¡
Repertoire ¡Database ¡
List[ported_edit] ¡ List[commits] ¡
Populated by “Data Extraction” Module Populated by “Ported edits identification” Module
SLIDE 24
User Interface Back End
24
Input ¡Wizard ¡
Projects, ¡Repository ¡ URLs, ¡and ¡Time ¡Period ¡
Analysis ¡Wizard: ¡ ¡
Porting ¡Frequency ¡/ ¡ ¡ File ¡Distribution ¡/ ¡ Developer ¡/ ¡Porting ¡Latency ¡
Data ¡extraction: ¡
diff ¡patches ¡ Developers ¡ Commit ¡dates ¡
Ported ¡edits ¡ identification: ¡
(CCFinderX, ¡N-‑gram ¡ Matching) ¡
Repertoire ¡ DB ¡
SLIDE 25
¡ Porting ¡Frequency ¡View ¡ § How ¡much ¡duplicate ¡work ¡is ¡taking ¡place ¡to ¡maintain ¡
the ¡forked ¡project? ¡
¡ File ¡Distribution ¡View ¡ § Is ¡porting ¡mostly ¡concentrated ¡to ¡certain ¡files? ¡ ¡ ¡ Developer ¡Distribution ¡View ¡ § Which ¡developers ¡primarily ¡port ¡edits ¡from ¡one ¡
project ¡to ¡another? ¡
¡ Porting ¡Latency ¡View ¡ § How ¡long ¡it ¡takes ¡a ¡patch ¡to ¡port ¡from ¡one ¡project ¡to ¡
another? ¡
SLIDE 26
SLIDE 27
Managers ¡and ¡product ¡architects ¡can ¡make ¡ informed ¡decision ¡about ¡how ¡to ¡manage ¡a ¡ product ¡family. ¡ REPERTOIRE ¡helps ¡to ¡monitor ¡cross ¡system ¡ porting. ¡
27
SLIDE 28
¡ Repertoire ¡can ¡be ¡downloaded ¡from ¡: ¡
¡ ¡ ¡ ¡ ¡http://dolphin.ece.utexas.edu/Repertoire.html ¡
¡
¡ A ¡Case ¡Study ¡of ¡Cross-‑System ¡Porting ¡in ¡Forked ¡
Software ¡Projects, ¡Baishakhi ¡Ray, ¡Miryung ¡Kim, ¡ FSE ¡'12 ¡
§ Presentation: ¡8:30 ¡am ¡on ¡Thursday ¡ ¡
28
SLIDE 29
¡ This ¡work ¡was ¡in ¡part ¡supported ¡by ¡National ¡
Science ¡Foundation ¡under ¡the ¡grants ¡ CCF-‑1117902, ¡CCF-‑1149391, ¡and ¡ CCF-‑1043810 ¡and ¡by ¡Microsoft ¡SEIF ¡award. ¡ ¡
SLIDE 30