On Detecting Performance Regression Inducing Code Changes in Evolving Software

- ASE 2015 Online Appendix

This web page is a companion to our ASE 2015 submission entitled "On Detecting Performance Regression Inducing Code Changes in Evolving Software".

1. An illustrative example

This example illustrates that understanding AUT’s behaviors and their relationships to input values (and combinations of inputs) is critical to detecting performance regressions.


2. Workflow of PerfImpact


3. Examples of URLs and a chromosome in our GA implementation

Each number in the chromosome refers to a unique URL ID. The URLs are extracted from one of our subject application, Agilefant.


4. Examples of GA operators, crossover and mutation.

4.1 The crossover operator in GAs.


4.1 The mutation operator in GAs.


5.Subject Applications and Code Changes

5.1 Subject Applications.


JPetStorewebsite; Source Code (V3.0.0, and V4.0.5)
Agilefantwebsite; Source Code (V3.2, V3.3, and V3.5)

5.2 Code Changes.

> Code changes between JPetStore V3.0.0 and V4.0.5 - list.

> Code changes between Agilefant V3.2 and V3.3 - list.

> Code changes between Agilefant V3.2 and V3.5 - list.

6. Results

6.1 The time differences cross generations on JPetStore and Agilefant.





6.2 The ranks and total execution times for different code changes in JPetStore and Agilefant.


(a) fi.hut.soberit.agilefant.business.impl. SearchBusinessImpl.taskListSearchResultranks, total execution times on two versions, source code.
(b) fi.hut.soberit.agilefant.business.impl. SettingBusinessImpl.retrieveByNameranks, total execution times on two versions, source code.
(c) injected code change - Aranks, total execution times on two versions, source code.
(d) fi.hut.soberit.agilefant.business.impl. StoryHierarchyBusinessImpl.calculateStoryTreeMetricsranks, total execution times on two versions, source code.
(e) fi.hut.soberit.agilefant.business.impl. ProjectBusinessImpl.retrieveLeafStoriesranks, total execution times on two versions, source code.
(f) fi.hut.soberit.agilefant.web. TimesheetAction.generateTreeranks, total execution times on two versions, source code.
(g) injected code change - Branks, total execution times on two versions, source code.
(h) fi.hut.soberit.agilefant.model. WidgetCollection.getWidgetsranks, total execution times on two versions, source code.

7. Tools & Databases


8. Authors

  • Qi Luo - The College of William and Mary, VA, USA.
    E-mail: qluo at cs dot wm dot edu
  • Denys Poshyvanyk - The College of William and Mary.
    E-mail: denys at cs dot wm dot edu
  • Mark Grechanik - University of Illinois, Chicago, USA.
    Email: drmark at uic dot edu