querying the history of software projects using qwalkeko

17
Reinout Stevens [email protected] @ReinoutStevens Querying the History of Software Projects using QwalKeko Coen De Roover [email protected] @oniroi 1

Upload: stevensreinout

Post on 22-Jun-2015

187 views

Category:

Technology


0 download

DESCRIPTION

Presentation about QwalKeko presented at the tool demo track of ICSME2014.

TRANSCRIPT

Page 1: Querying the History of Software Projects using QwalKeko

Reinout [email protected]@ReinoutStevens

Querying the History of Software Projects using

QwalKekoCoen De Roover

[email protected]@oniroi

1

Page 2: Querying the History of Software Projects using QwalKeko

Motivation

•Commit Changes•Undo Changes•Retrieve Changes•Branch & Merge

2

2

Page 3: Querying the History of Software Projects using QwalKeko

Motivation’

~6600 commits~1000 source files

3

3

Page 4: Querying the History of Software Projects using QwalKeko

Concrete Example01 public class Example {02 WebDriver driver;03 04 @BeforeTest05 public void startDriver(){06 driver = new FirefoxDriver();07 }08 09 @AfterTest10 public void stopDriver(){11 driver.quit();12 }13

14 @Test15 public void testTitle(){16 driver.get("http://www.google.com");17 WebElement element = driver.findElement(By.name("q"));18 element.sendKeys("Cheese!");19 element.submit();20 assertEquals(driver.getTitle(), "Cheese!");21 }22 }

Prevalence and Maintenance of Automated Functional Tests for Web Applications Laurent Christophe, Reinout Stevens, Coen De Roover and Wolfgang De MeuterProceedings of the 30th International Conference on Software Maintenance and Evolution (ICSMe14), Victoria (Canada)

4

4

Page 5: Querying the History of Software Projects using QwalKeko

End Result●

0.0

0.1

0.2

0.3

0.4

assertion command constant demarcator locationChange Classification

Cha

nge

Hit

Rat

io

5

5

Page 6: Querying the History of Software Projects using QwalKeko

Queried Projects

6

Project ~#Commits ~#Source Files

Atlas 2200 700

EEG 800 870

Motech 1900 1090

OpenLMIS 4000 1000

xwiki 1600 200

richfaces-qa 1500 1000

6

Page 7: Querying the History of Software Projects using QwalKeko

Necessary Steps

1) Identify modified Selenium files

2) Compute changes made to the file

3) Classify changes made to the file

7

7

Page 8: Querying the History of Software Projects using QwalKeko

QwalKeko

Version 1 Version 2

Version 3a

Version 4a

Version 3b

Version 4b

Version 5

Specify Source Code Conditionsusing Declarative Programming

Move through Graph

Reason over Changes8

transformed

https://github.com/ReinoutStevens/damp.qwalkeko

8

Page 9: Querying the History of Software Projects using QwalKeko

Architecture

9

QwalKeko

in-source-code(ast ?type ?node)(has ?prop ?node ?result)(child ?prop ?node ?child)…

in-git-info(fileinfo ?file version)(author version)(revision-number version)(date version)…

Converted Graph

Changes(change ?change left right)(change|affects-node c ?node)…

Qwalq=>q=>*q<=…

consults

navigatesChangeNodesuses

consults

9

Page 10: Querying the History of Software Projects using QwalKeko

10

Page 11: Querying the History of Software Projects using QwalKeko

Identifying Selenium Files

1 (qwalkeko* [?file ?cu]2 (qwal graph start start3 (in-source-code [current]4 (file|added ?file current)5 (file|compilationunit ?file ?cu current)6 (compilationunit|selenium ?cu))))

{:status :add, :file ".../ExperimentPage.java"} #<CompilationUnit package uk.ac.ebi.atlas.acceptance.selenium.pages;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;...>

11

start

11

Page 12: Querying the History of Software Projects using QwalKeko

Identifying all Selenium Files

1 (qwalkeko* [?file ?cu ?end]2 (qwal graph start ?end3 q=>* 4 (in-source-code [current]5 (file|added ?file current)6 (file|compilationunit ?file ?cu current)7 (compilationunit|selenium ?cu))))

{:status :add, :file ".../ExperimentPage.java"} #<CompilationUnit package uk.ac.ebi.atlas.acceptance.selenium.pages;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;...> #<Metaversion-867a3be00501e415bc081f25032b273f44713672>

12

start

?end

...

12

Page 13: Querying the History of Software Projects using QwalKeko

1 (qwalkeko* [?change ?info ?end ?type]2 (qwal graph start ?end [?left-cu ?right-cu]3 (in-source-code [curr]4 (file|selenium|edit ?info curr))5 (file|compilationunit ?info ?right-cu curr))

6 q<= ;;move backwards

7 (in-source-code [curr]8 (compilationunit|corresponding ?right-cu ?left-cu))9 (change ?change ?left-cu ?right-cu)0 (classify-change ?change ?type))))

Classify Change

13

?end

start

13

Page 14: Querying the History of Software Projects using QwalKeko

AST Changes

Beat Fluri and Harald C. Gall. Classifying Change Types for Qualifying Change Couplings. In Proceedings of the 14th International Conference on Program Comprehension, 2006.

A

B C

D E

α’

C

E D

F

B

A

D

F

Delete

Update

Move

Insert

14

14

Page 15: Querying the History of Software Projects using QwalKeko

Classify Location01 ;;driver.findElement(By.name("q"));02 (defn methodinvocation|by [?x]03 (fresh [?name]04 (ast :MethodInvocation ?x)05 (child :expression ?x ?name)06 (name|simple-string ?name "By")))07 08 09 (defn change|affects-findBy [change ?find-by]10 (all11 (change|affects-node change ?find-by)12 (methodinvocation|by ?find-by)))

15

15

Page 16: Querying the History of Software Projects using QwalKeko

FeaturesFeaturesGit Meta Data Data & Control Flow

Information*

AST Information Changes

Declarative Query Language Graph Query Language

Performance Reasoning over Multiple Changes

16

Page 17: Querying the History of Software Projects using QwalKeko

https://github.com/ReinoutStevens/damp.qwalkekohttps://github.com/ReinoutStevens/ChangeNodes

https://github.com/cderoove/damp.ekeko

[email protected]@ReinoutStevens

Prevalence and Maintenance of Automated Functional Tests for Web Applications Laurent Christophe, Reinout Stevens, Coen De Roover and Wolfgang De Meuter

Coen De Roover Laurent Christophe

17