four “interesting” ways in which history can teach us about software

14
University of Waterloo Four “interesting” ways in which history can teach us about software Michael W. Godfrey * Xinyi Dong Cory Kapser Lijie Zou Software Architecture Group (SWAG) University of Waterloo *Currently on sabbatical at Sun Microsystems

Upload: stuart

Post on 19-Jan-2016

18 views

Category:

Documents


0 download

DESCRIPTION

Four “interesting” ways in which history can teach us about software. Michael W. Godfrey * Xinyi Dong Cory Kapser Lijie Zou Software Architecture Group (SWAG) University of Waterloo *Currently on sabbatical at Sun Microsystems. Longitudinal case studies of growth and evolution. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Four “interesting” ways in which history can teach us about software

University of Waterloo

Four “interesting” ways in which history can teach us about software

Michael W. Godfrey *Xinyi DongCory KapserLijie Zou

Software Architecture Group (SWAG)University of Waterloo

*Currently on sabbatical at Sun Microsystems

Page 2: Four “interesting” ways in which history can teach us about software

1. Longitudinal case studies of growth and evolution

• Studied several OSSs, esp. Linux kernel:– Looked for “evolutionary

narratives” to explain observable historical phenomena

• Methodology:– Analyze individual tarball

versions– Build hierarchical metrics

data model– Generate graphs, look for

interesting lumps under the carpet, try to answer why

0

1000

2000

3000

4000

5000

6000

Jan 1993 Jun 1994 Oct 1995 Mar 1997 Jul 1998 Dec 1999 Apr 2001

# o

f s

ou

rce

co

de

fil

es

(*.

[ch

] ) Development releases (1.1, 1.3, 2.1, 2.3)

Stable releases (1.0, 1.2, 2.0, 2.2)

0

20

40

60

80

100

120

140

Jan 1993 Jun 1994 Oct 1995 Mar 1997 Jul 1998 Dec 1999 Apr 2001

Un

com

men

ted

LO

C

Average .h file size -- dev. releasesAverage .h file size -- stable releasesMedian .h file size -- dev. releasesMedian .h file size -- stable releases

Page 3: Four “interesting” ways in which history can teach us about software

1. Longitudinal case studies of growth and evolution

Sourcecode

Metricsdata

Analysisscripts

MSExcel

Extraction / analysis

Exploration

Page 4: Four “interesting” ways in which history can teach us about software

2. Case studies of origin analysis

• Reasoning about structural change – (moving, renaming, merging, splitting, etc.)– Try to reconstruct what happened– Formalized several “change patterns”

• e.g., service consolidation

• Methodology:– Consider consecutive pairs of versions:

• Entity analysis – metrics-based clone detection

• Relationship analysis – compare relational images (calls, called-by, uses, extends, etc)

– Create evolutionary record of what happened

• what evolved from what, and how/why

g

y x

zVold

f

y x

zVnew

???

Page 5: Four “interesting” ways in which history can teach us about software

2. Case studies of origin analysis

Sourcecode

ER model

Metricsdata

cppx /Understand /

Beagle

Beagle

Extraction / analysis

Exploration

Page 6: Four “interesting” ways in which history can teach us about software

3. Case studies of code cloning

• Motivation:– Lots of research in clone detection, but more on algorithms and

tools than on case studies and comprehension• What kinds of cloning are there? Why does cloning happen? What

kinds are the most/least harmful? Do different clone kinds have different precision / recall numbers? Different algorithms?

– Future work: track clone evolution • Do related bugs get fixed? Does cloned code have more bugs?

• Methodology:1. Use CCFinder on source to find initial clone pairs.2. Use ctags to map out source files into “entity regions”

– Consecutive typedefs, fcn prototypes, var defs– Individual macros, structs, unions, enums, fcn defs

3. Map (abstract up) clone pairs to the source code regions

Page 7: Four “interesting” ways in which history can teach us about software

3. Case studies of code cloning

• Methodology:4. Filter different region kinds according to observed heuristics

– C structs often look alike; parameterized string matching returns many more false positives without these filters than, say, between functions.

5. Sort clones by location:– Same region, same file, same directory, or different directory

6. … and entity kind:– Fcn to fcn– structures (enum, union, struct) – macro– heterogeneous (different region kinds)– misc. clones

7. … and even more detailed criteria:– Function initialization / finalization clones, …

8. Navigate and investigate using CICS gui, look for patterns– Cross subsystem clones seems to vary more over time– Intra subsystem clones are usually function clones

Page 8: Four “interesting” ways in which history can teach us about software

3. Case studies of code cloning

Sourcecode

CCFinder

Extraction / analysis

Exploration

ctags

CICS gui

Taxonomizedclone pairs

Custom filtersand sorter

Page 9: Four “interesting” ways in which history can teach us about software

4. Longitudinal case studies of software manufacturing-related artifacts

Q: How much maintenance effort is put into SM artifacts, relative to the system as a whole?

• Studying six OSSs:– GCC, PostgreSQL, kepler, ant, mycore, midworld

• All used CVS; we examined their logs

• We look for SM artifacts (Makefile, build.xml, SConscript) and compared them to non-SM artifacts

Page 10: Four “interesting” ways in which history can teach us about software

4. Longitudinal case studies of software manufacturing-related artifacts

• Some results:– Between 58 and 81 % of the core developers

contributed changes to SM artifacts– SM artifacts were responsible for

• 3-10% of the number of changes made• Up to 20% of the total LOC changed (GCC)

• Open questions:– How difficult is it to maintain these artifacts?– Do different SM tools require different amounts of

effort?

Page 11: Four “interesting” ways in which history can teach us about software

4. Longitudinal case studies of software manufacturing-related artifacts

CVSrepos

Metricsdata

Analysisscripts

MSExcel

Extraction / analysis

Exploration

Page 12: Four “interesting” ways in which history can teach us about software

Dimensions of studies

• Single version vs. consecutive version pairs vs. longitudinal study

• Coarsely vs. finely grained detail• Intermediate representation of artifacts:

– Raw code vs. metrics vs. ER-like semantic model

– Navigable representation of system architecture; auto-abstraction of info at arbitrary levels

Page 13: Four “interesting” ways in which history can teach us about software

Challenges in this field

1. Dealing with scale• “Big system analysis” times “many versions”• Research tools often live at bleeding edge,

slow and produce voluminous detail

2. Automation• Research tools often buggy, require

handholding• Often, hard to get automated multiple analyses.

Page 14: Four “interesting” ways in which history can teach us about software

Challenges in this field

3. Artifact linkage and analysis granularity• Repositories (CVS, Unix fs) often store only

source code, with no special understanding of, say, where a particular method resides.

• (How) should we make them smarter? • e.g., ctags and CCfinder

4. [Your thoughts?]