SlideShare a Scribd company logo
Querying the History of 
Software Projects using 
QwalKeko 
Reinout Stevens 
resteven@vub.ac.be 
@ReinoutStevens 
Coen De Roover 
cderoove@vub.ac.be 
@oniroi 
1
Motivation 
•Commit Changes 
•Undo Changes 
•Retrieve Changes 
•Branch & Merge 
2 
2
Motivation’ 
~6600 commits 
~1000 source files 
3 
3
Concrete Example 
01 public class Example { 
02 WebDriver driver; 
03 
04 @BeforeTest 
05 public void startDriver(){ 
06 driver = new FirefoxDriver(); 
07 } 
08 
09 @AfterTest 
10 public void stopDriver(){ 
11 driver.quit(); 
12 } 
13 
14 @Test 
15 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 Meuter 
Proceedings of the 30th International Conference on Software Maintenance and Evolution (ICSMe14), Victoria (Canada) 
4 
4
End Result 
● 
● 
● 
0.4 
0.3 
0.2 
0.1 
0.0 
assertion command constant demarcator location 
Change Classification 
Change Hit Ratio 
5 
5
Queried Projects 
Project ~#Commits ~#Source Files 
Atlas 2200 700 
EEG 800 870 
Motech 1900 1090 
OpenLMIS 4000 1000 
xwiki 1600 200 
richfaces-qa 1500 1000 
6 
6
Necessary Steps 
1) Identify modified Selenium files 
2) Compute changes made to the file 
3) Classify changes made to the file 
7 
7
QwalKeko 
https://github.com/ReinoutStevens/damp.qwalkeko 
transformed 
Version 1 Version 2 
Version 
3a 
Version 
4a 
Version 
3b 
Version 
4b 
Version 
5 
Specify Source Code Conditions 
using Declarative Programming 
Move through Graph 
Reason over Changes 
8 
8
Architecture 
QwalKeko 
9 
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) 
… 
Qwal 
q=> 
q=>* 
q<= 
… 
consults 
navigates 
consults 
uses ChangeNodes 
9
10
Identifying Selenium Files 
1 (qwalkeko* [?file ?cu] 
2 (qwal graph start start 
3 (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
Identifying all Selenium Files 
1 (qwalkeko* [?file ?cu ?end] 
2 (qwal graph start ?end 
3 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
Classify Change 
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)))) 
13 
?end 
start 
13
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
Classify Location 
01 ;;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 (all 
11 (change|affects-node change ?find-by) 
12 (methodinvocation|by ?find-by))) 
15 
15
Features 
Git Meta Data Data & Control Flow 
Information* 
AST Information Changes 
Declarative Query Language Graph Query Language 
Performance Reasoning over Multiple 
Changes 
16
https://github.com/ReinoutStevens/damp.qwalkeko 
https://github.com/ReinoutStevens/ChangeNodes 
https://github.com/cderoove/damp.ekeko 
resteven@vub.ac.be 
@ReinoutStevens 
Coen De Roover Laurent Christophe 
Prevalence and Maintenance of Automated Functional Tests for Web Applications 
Laurent Christophe, Reinout Stevens, Coen De Roover and Wolfgang De Meuter 
17

More Related Content

What's hot (20)

ODP
Concurrency on the JVM
Vaclav Pech
 
PDF
Java ME API Next
Otávio Santana
 
PPTX
Advanced guide to Quartz plugin
TO THE NEW | Technology
 
PDF
オープンデータを使ったモバイルアプリ開発(応用編)
Takayuki Goto
 
PDF
Sprint 89
ManageIQ
 
PDF
Real world scala
lunfu zhong
 
PDF
Sprint 76
ManageIQ
 
DOC
Caching a page
Radha Krishnan
 
PDF
Sprint 95
ManageIQ
 
PDF
The Ring programming language version 1.5.2 book - Part 7 of 181
Mahmoud Samir Fayed
 
PDF
Why Grails?
Yiguang Hu
 
PPT
Minute Of Eclipse Papyrus Pre-Committing
BENOIS Jérôme
 
PDF
Introducción a git y GitHub
Lucas Videla
 
PDF
GraphQL in Kiwi.com
Michal Sänger
 
PPTX
Java Script Overview
Return on Intelligence
 
PDF
Sprint 67
ManageIQ
 
PDF
CJK Generation Panels Coordination Review
Kenny Huang Ph.D.
 
PDF
What's coming in Airflow 2.0? - NYC Apache Airflow Meetup
Kaxil Naik
 
PDF
Using Apache Spark to Solve Sessionization Problem in Batch and Streaming
Databricks
 
PDF
Sprint 75
ManageIQ
 
Concurrency on the JVM
Vaclav Pech
 
Java ME API Next
Otávio Santana
 
Advanced guide to Quartz plugin
TO THE NEW | Technology
 
オープンデータを使ったモバイルアプリ開発(応用編)
Takayuki Goto
 
Sprint 89
ManageIQ
 
Real world scala
lunfu zhong
 
Sprint 76
ManageIQ
 
Caching a page
Radha Krishnan
 
Sprint 95
ManageIQ
 
The Ring programming language version 1.5.2 book - Part 7 of 181
Mahmoud Samir Fayed
 
Why Grails?
Yiguang Hu
 
Minute Of Eclipse Papyrus Pre-Committing
BENOIS Jérôme
 
Introducción a git y GitHub
Lucas Videla
 
GraphQL in Kiwi.com
Michal Sänger
 
Java Script Overview
Return on Intelligence
 
Sprint 67
ManageIQ
 
CJK Generation Panels Coordination Review
Kenny Huang Ph.D.
 
What's coming in Airflow 2.0? - NYC Apache Airflow Meetup
Kaxil Naik
 
Using Apache Spark to Solve Sessionization Problem in Batch and Streaming
Databricks
 
Sprint 75
ManageIQ
 

Similar to Querying the History of Software Projects using QwalKeko (20)

PDF
Extracting Executable Transformations from Distilled Code Changes
stevensreinout
 
KEY
QwalKeko, a History Querying Tool
stevensreinout
 
PDF
Maximilian Michels – Google Cloud Dataflow on Top of Apache Flink
Flink Forward
 
PDF
Java 11 - Keeping the Java Release Train on the Right Track
C4Media
 
PDF
Intro to Retrofit 2 and RxJava2
Fabio Collini
 
PDF
Introduction to Spring WebFlux #jsug #sf_a1
Toshiaki Maki
 
PDF
ClojureScript for the web
Michiel Borkent
 
PDF
Continuous Testing
jaredrrichardson
 
PDF
Data herding
unbracketed
 
PDF
Data herding
unbracketed
 
PPTX
XML-Free Programming
Stephen Chin
 
PPTX
Mksong proposal-slide
mksong
 
PPTX
ManageIQ - Sprint 234 Review - Slide Deck
ManageIQ
 
PDF
Kirk Shoop, Reactive programming in C++
Sergey Platonov
 
PDF
Sprint 80
ManageIQ
 
PDF
Aligning Ember.js with Web Standards
Matthew Beale
 
PDF
FMK2019 being an optimist in a pessimistic world by vincenzo menanno
Verein FM Konferenz
 
PPTX
Vertx - Reactive & Distributed
Orkhan Gasimov
 
PPTX
AI Development with H2O.ai
Yalçın Yenigün
 
PDF
ETW - Monitor Anything, Anytime, Anywhere (Velocity NYC 2017)
Dina Goldshtein
 
Extracting Executable Transformations from Distilled Code Changes
stevensreinout
 
QwalKeko, a History Querying Tool
stevensreinout
 
Maximilian Michels – Google Cloud Dataflow on Top of Apache Flink
Flink Forward
 
Java 11 - Keeping the Java Release Train on the Right Track
C4Media
 
Intro to Retrofit 2 and RxJava2
Fabio Collini
 
Introduction to Spring WebFlux #jsug #sf_a1
Toshiaki Maki
 
ClojureScript for the web
Michiel Borkent
 
Continuous Testing
jaredrrichardson
 
Data herding
unbracketed
 
Data herding
unbracketed
 
XML-Free Programming
Stephen Chin
 
Mksong proposal-slide
mksong
 
ManageIQ - Sprint 234 Review - Slide Deck
ManageIQ
 
Kirk Shoop, Reactive programming in C++
Sergey Platonov
 
Sprint 80
ManageIQ
 
Aligning Ember.js with Web Standards
Matthew Beale
 
FMK2019 being an optimist in a pessimistic world by vincenzo menanno
Verein FM Konferenz
 
Vertx - Reactive & Distributed
Orkhan Gasimov
 
AI Development with H2O.ai
Yalçın Yenigün
 
ETW - Monitor Anything, Anytime, Anywhere (Velocity NYC 2017)
Dina Goldshtein
 
Ad

Recently uploaded (20)

PDF
Bitkom eIDAS Summit | European Business Wallet: Use Cases, Macroeconomics, an...
Carsten Stoecker
 
PPTX
CapCut Pro PC Crack Latest Version Free Free
josanj305
 
PPTX
Manual Testing for Accessibility Enhancement
Julia Undeutsch
 
PPTX
Role_of_Artificial_Intelligence_in_Livestock_Extension_Services.pptx
DrRajdeepMadavi
 
PDF
What’s my job again? Slides from Mark Simos talk at 2025 Tampa BSides
Mark Simos
 
PDF
Go Concurrency Real-World Patterns, Pitfalls, and Playground Battles.pdf
Emily Achieng
 
PDF
“Squinting Vision Pipelines: Detecting and Correcting Errors in Vision Models...
Edge AI and Vision Alliance
 
PDF
“ONNX and Python to C++: State-of-the-art Graph Compilation,” a Presentation ...
Edge AI and Vision Alliance
 
PDF
“Voice Interfaces on a Budget: Building Real-time Speech Recognition on Low-c...
Edge AI and Vision Alliance
 
PPTX
Essential Content-centric Plugins for your Website
Laura Byrne
 
PDF
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
PDF
Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
PDF
Modern Decentralized Application Architectures.pdf
Kalema Edgar
 
PDF
Transforming Utility Networks: Large-scale Data Migrations with FME
Safe Software
 
PDF
Bharatiya Antariksh Hackathon 2025 Idea Submission PPT.pdf
ghjghvhjgc
 
PDF
Dev Dives: Accelerating agentic automation with Autopilot for Everyone
UiPathCommunity
 
PDF
NASA A Researcher’s Guide to International Space Station : Fundamental Physics
Dr. PANKAJ DHUSSA
 
PDF
NLJUG Speaker academy 2025 - first session
Bert Jan Schrijver
 
PDF
ICONIQ State of AI Report 2025 - The Builder's Playbook
Razin Mustafiz
 
PDF
Evolution: How True AI is Redefining Safety in Industry 4.0
vikaassingh4433
 
Bitkom eIDAS Summit | European Business Wallet: Use Cases, Macroeconomics, an...
Carsten Stoecker
 
CapCut Pro PC Crack Latest Version Free Free
josanj305
 
Manual Testing for Accessibility Enhancement
Julia Undeutsch
 
Role_of_Artificial_Intelligence_in_Livestock_Extension_Services.pptx
DrRajdeepMadavi
 
What’s my job again? Slides from Mark Simos talk at 2025 Tampa BSides
Mark Simos
 
Go Concurrency Real-World Patterns, Pitfalls, and Playground Battles.pdf
Emily Achieng
 
“Squinting Vision Pipelines: Detecting and Correcting Errors in Vision Models...
Edge AI and Vision Alliance
 
“ONNX and Python to C++: State-of-the-art Graph Compilation,” a Presentation ...
Edge AI and Vision Alliance
 
“Voice Interfaces on a Budget: Building Real-time Speech Recognition on Low-c...
Edge AI and Vision Alliance
 
Essential Content-centric Plugins for your Website
Laura Byrne
 
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
Modern Decentralized Application Architectures.pdf
Kalema Edgar
 
Transforming Utility Networks: Large-scale Data Migrations with FME
Safe Software
 
Bharatiya Antariksh Hackathon 2025 Idea Submission PPT.pdf
ghjghvhjgc
 
Dev Dives: Accelerating agentic automation with Autopilot for Everyone
UiPathCommunity
 
NASA A Researcher’s Guide to International Space Station : Fundamental Physics
Dr. PANKAJ DHUSSA
 
NLJUG Speaker academy 2025 - first session
Bert Jan Schrijver
 
ICONIQ State of AI Report 2025 - The Builder's Playbook
Razin Mustafiz
 
Evolution: How True AI is Redefining Safety in Industry 4.0
vikaassingh4433
 
Ad

Querying the History of Software Projects using QwalKeko

  • 1. Querying the History of Software Projects using QwalKeko Reinout Stevens [email protected] @ReinoutStevens Coen De Roover [email protected] @oniroi 1
  • 2. Motivation •Commit Changes •Undo Changes •Retrieve Changes •Branch & Merge 2 2
  • 3. Motivation’ ~6600 commits ~1000 source files 3 3
  • 4. Concrete Example 01 public class Example { 02 WebDriver driver; 03 04 @BeforeTest 05 public void startDriver(){ 06 driver = new FirefoxDriver(); 07 } 08 09 @AfterTest 10 public void stopDriver(){ 11 driver.quit(); 12 } 13 14 @Test 15 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 Meuter Proceedings of the 30th International Conference on Software Maintenance and Evolution (ICSMe14), Victoria (Canada) 4 4
  • 5. End Result ● ● ● 0.4 0.3 0.2 0.1 0.0 assertion command constant demarcator location Change Classification Change Hit Ratio 5 5
  • 6. Queried Projects Project ~#Commits ~#Source Files Atlas 2200 700 EEG 800 870 Motech 1900 1090 OpenLMIS 4000 1000 xwiki 1600 200 richfaces-qa 1500 1000 6 6
  • 7. Necessary Steps 1) Identify modified Selenium files 2) Compute changes made to the file 3) Classify changes made to the file 7 7
  • 8. QwalKeko https://github.com/ReinoutStevens/damp.qwalkeko transformed Version 1 Version 2 Version 3a Version 4a Version 3b Version 4b Version 5 Specify Source Code Conditions using Declarative Programming Move through Graph Reason over Changes 8 8
  • 9. Architecture QwalKeko 9 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) … Qwal q=> q=>* q<= … consults navigates consults uses ChangeNodes 9
  • 10. 10
  • 11. Identifying Selenium Files 1 (qwalkeko* [?file ?cu] 2 (qwal graph start start 3 (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
  • 12. Identifying all Selenium Files 1 (qwalkeko* [?file ?cu ?end] 2 (qwal graph start ?end 3 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
  • 13. Classify Change 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)))) 13 ?end start 13
  • 14. 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
  • 15. Classify Location 01 ;;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 (all 11 (change|affects-node change ?find-by) 12 (methodinvocation|by ?find-by))) 15 15
  • 16. Features Git Meta Data Data & Control Flow Information* AST Information Changes Declarative Query Language Graph Query Language Performance Reasoning over Multiple Changes 16
  • 17. https://github.com/ReinoutStevens/damp.qwalkeko https://github.com/ReinoutStevens/ChangeNodes https://github.com/cderoove/damp.ekeko [email protected] @ReinoutStevens Coen De Roover Laurent Christophe Prevalence and Maintenance of Automated Functional Tests for Web Applications Laurent Christophe, Reinout Stevens, Coen De Roover and Wolfgang De Meuter 17