How I Learned to Stop Worrying and Love the...
Transcript of How I Learned to Stop Worrying and Love the...
![Page 1: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/1.jpg)
How I Learned to Stop Worrying and Love the “DOM” :
Characterizing and Improving the Reliability of JavaScript-based Web
Applications
Karthik Pattabiraman Frolin S. Ocariza, Jr., Kartik Bajaj, and Ali
Mesbah
University of British Columbia (UBC)
![Page 2: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/2.jpg)
My Research } Building fault-tolerant software applications
} Compiler & runtime techniques for resilience } Partitioning data for differential resilience [ASPLOS’11] } Error detection in parallel programs [DSN’12] } Error detection in soft-computing applications [DSN’13]
} This talk } Reliability of modern web applications } [ISSRE’10] [ISSRE’11] [ICST’12] [ESEM’13] [ICST’13] [ASE’13]
2
![Page 3: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/3.jpg)
Modern Web Applications: Examples
3
![Page 4: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/4.jpg)
Modern Web Applications: JavaScript } JavaScript: Implementation of ECMAScript standard
} Client-Side JavaScript: used to develop web applications
} Executes in client’s browser – send AJAX messages } Responsible for web application’s core functionality } Not easy to write code in – has many “evil” features
4
![Page 5: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/5.jpg)
Studies of JavaScript Web Applications
5
Performance and parallelism: JSMeter [Ratanaworabhan-2010], [Richards-2009], [Fortuna-2011]
Reliability
?
Security and Privacy: [Yue-2009], Gatekeeper[Guarnieri-2009], [Jang-2010]
perfo
rman
ce
secu
rity
relia
bilit
y
Goal: Study and improve the reliability of JavaScript web applications
![Page 6: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/6.jpg)
Does Reliability Matter in Web Apps ?
} Snapshot of iFeng.com: Leading media website in China
6
an error occurred when processing this directive
![Page 7: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/7.jpg)
JavaScript Reliability: Our Prior Work } Earlier study based on Console Messages: Alexa top 100 } Popular web applications experience four distinct
JavaScript error messages on average [ISSRE’11] } Many errors were non-deterministic and it was hard to
determine the root cause and impact of these errors
7
0 2 4 6 8
10 12 14 16 18
Total Distinct Errors
![Page 8: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/8.jpg)
Talk Outline } Bug Report Study of twelve open source JS applications
} To understand bug characteristics [ESEM’13]
} AutoFlox: Localizing DOM-related faults in JS applications } Based on dynamic backward slice [ICST’12 best paper
nominee]
} Vejovis: Automatically fixing JavaScript Faults [in preparation]
} Future Directions & Other work
8
![Page 9: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/9.jpg)
Bug Report Study: Goals } What errors/mistakes cause JavaScript faults?
} What impact do JavaScript faults have?
9
Bug Report Study of twelve popular, Open Source JavaScript Applications
![Page 10: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/10.jpg)
Bug Report Study: Experimental Objects
10
Eight JavaScript Web Applications
Four JavaScript Libraries
![Page 11: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/11.jpg)
Bug Report Study: Methodology } Collect bug reports from bug repositories
} Focus on bugs that are marked fixed to avoid spurious bugs } Organized into a uniform format (XML file)
11
Search for all bug reports that have the
word “JavaScript”
Filter out reports that
are not marked “fixed” OR the fault
does not involve JS
Pick the first 30 reports and analyze them manually to determine
cause/impact
![Page 12: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/12.jpg)
Bug Report Study: Research Questions } RQ1: What types of JavaScript faults occur in web apps?
} RQ2: What is the nature of failures from JS faults?
} RQ3: What is the impact of JS faults ?
} RQ4: What is the root cause of JS faults? } RQ5: How long does it take to fix a JS fault?
12
![Page 13: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/13.jpg)
Bug Report Study: Fault Categories
13
TABLE IIIMPACT TYPES.
Type Description Examples1 Cosmetic Table is not centred; header is too
small2 Minor functionality loss Cannot create e-mail addresses
containing apostrophe characters,which are often only used by spam-mers
3 Some functionality loss Cannot use delete button to deletee-mails, but delete key works fine
4 Major functionality loss Cannot delete e-mails at all; cannotcreate new posts
5 Data loss, crash, or security issue Browser crashes/hangs; entire ap-plication unusable; save buttondoes not work and prevents userfrom saving considerable amountof data; information leakage
• Syntax-Based Fault: There is a syntax error in theJavaScript code. Example: There is an unescaped apos-trophe character in a string literal that is defined usingsingle quotes.
• Other: Errors that do not fall into the above categories.Example: There is a naming conflict between methods orvariables in the JavaScript code.
Failure Categories. The failure category refers to the observ-able consequence of the fault. For each bug report, we markedthe failure category as either Code-terminating or Output-related, as defined in Section II-B. This categorization helpsus answer RQ2.Impact Types. To classify the impact of a fault, we usethe classification scheme used by Bugzilla.3 This scheme isapplicable to any software application, and has been also usedin other studies [7], [8]. Table II shows the categories. Thiscategorization helps us answer RQ2.Error Locations. The error location refers to the code unit orfile where the error was made (either by the programmer orthe server-side program generating the JavaScript code). Foreach bug report, we marked the error location as one of thefollowing: (1) JavaScript code (JS); (2) HTML Code (HTML);(3) Server-side code (SSC); (4) Server configuration file (SCF);(5) Other (OTH); and (6) Multiple error locations (MEL). Incases where the error location is marked as either OTH orMEL, the location(s) is/are specified in the error description.This categorization helps us answer RQ3.Browser Specificity. In addition, we also noted whether acertain bug report is browser-specific – that is, the faultdescribed in the report only occurs in one or two browsers,but not in others – to help us answer answer RQ4.Time for Fixing. To answer RQ5, we define the triage time asthe time it took a bug to get assigned to a developer, from thetime it was reported (or, if there is no “assigned” marking, thetime until the first comment is posted in the report). We alsodefine fix time as the time it took the corresponding JavaScriptfault to get marked as “fixed”, from the time it was triaged. Werecorded the time taken for each JavaScript bug report to be
3http://www.bugzilla.org/
!"#$%"$#&'())*+,-.,/)$*
!0,1$*23*
!"#$%"$#*4$567#*
83*
9":7--$:5*;$5(-"*+,)($*
<3*
=>"5,?@A,0$#*B,()5*
CC3*
D56$-*C3*
'75*ED4@;$),5$#*F3*
ED4@-$),5$#*283*
9":7--$:5*4$567#*
G,-,H$5$-*IJ3*
Fig. 2. Pie chart of the distribution of fault categories.
triaged, and for the report to be fixed; note that other studieshave classified bugs on a similar basis [9], [10]. Further, notethat times are calculated based on the calendar date; hence, ifa bug report was triaged on the same date as it was reported,the triage time is recorded as 0.
IV. RESULTS
We now present the results of our empirical study onJavaScript bug reports. The subsections are organized accord-ing to the research questions enumerated in Section III-A.
A. Fault CategoriesTable III shows the breakdown of the fault categories in
our experimental objects. The pie chart in Figure 2 shows theoverall percentages. As seen from the table and the figure,the vast majority – approximately 74% – of JavaScript faultsbelong to the “Incorrect Method Parameter” category. Thissuggests that most JavaScript faults result from errors relatedto setting up the parameters of native JavaScript methods, orthe values assigned to native JavaScript properties.
Finding #1: “Incorrect Method Parameter” faultsaccount for around 74% of JavaScript faults.
In our earlier study of JavaScript error messages [1] and onfault-localization of JavaScript errors [11], we also noticed thatthere are many of these “Incorrect Method Parameter” faults,but their prevalence was not quantified. Interestingly, we alsoobserved in these earlier studies that many of the methods andproperties affected by these faults are DOM methods/proper-ties (either DOM access or DOM update methods/properties,as defined in Section II). Based on these prior observations,we became curious as to how many of these “IncorrectMethod Parameter” faults are DOM-related faults – that is,“Incorrect Method Parameter” faults in which the incorrectparameter or assignment value propagates into a DOM methodor property, such as getElementById(), setAttribute(), orinnerHTML.
We further classified the “Incorrect Method Parameter”faults based on the methods/properties in which the incorrect
5
Incorrect Method Parameter Fault: Unexpected or invalid value passed to JS method or assigned to JS property DOM-Related Fault: The method is a DOM API method - Account for around two-thirds of JavaScript Faults
![Page 14: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/14.jpg)
Bug Report Study: DOM-Related Faults
14
html
body head
script div p
Text: “Hello world”
table
tr p
Want to retrieve this element
![Page 15: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/15.jpg)
Bug Report Study: DOM-Related Faults
15
div
id: elem
JavaScript code:
DOM:
var x = document.getElementById(“elem”); var x = document.getElementById(“elme”);
Inexistent ID Will return null
DOM-related JavaScript fault
![Page 16: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/16.jpg)
Bug Report Study: DOM-Related Fault
16
1 !var toggle = 1;!2 !var x = “hlelo_”;!3 !var y = “world”;!4 !var elem = document.getElementById(x + y);!5 !var dis = “”;!6 !if (toggle == 1) {!7 ! !dis = “block”;!8 !}!9 !else {!10 ! !dis = “inline”;!11 !}!12 !elem.style.display = dis;!
ID of element to retrieve: hello_world
1 !var toggle = 1;!2 !var x = “hlelo_”;!3 !var y = “world”;!4 !var elem = document.getElementById(x + y);!5 !var dis = “”;!6 !if (toggle == 1) {!7 ! !dis = “block”;!8 !}!9 !else {!10 ! !dis = “inline”;!11 !}!12 !elem.style.display = dis;!
Error: “hello_” is misspelled
Fault: Code would attempt to retrieve the DOM element using wrong ID. Variable elem becomes NULL
Failure: NULL EXCEPTION!
![Page 17: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/17.jpg)
Bug Report Study: Research Questions } RQ1: What types of JavaScript faults occur in web apps?
} RQ2: What is the nature of failures stemming from JS faults?
} RQ3: What is the impact of JS faults ?
} RQ4: What is the root cause of JS faults? } RQ5: How long does it take to fix a JS fault?
17
![Page 18: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/18.jpg)
Bug Report Study: Nature of Failures } DOM related errors are less likely to be code-terminating
} 54% of JavaScript faults lead to exceptions } 88% of non-DOM-related faults lead to exceptions } Only 39% of DOM-related faults lead to exceptions
18
0
10
20
30
40
50
60
70
80
90
100
Overall DOM-related Non DOM-related
Code-terminating Errors Output related errors
Non-DOM related
DOM related
![Page 19: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/19.jpg)
Bug Report Study: Research Questions } RQ1: What types of JavaScript faults occur in web apps?
} RQ2: What is the nature of failures stemming from JS faults?
} RQ3: What is the impact of JS faults ?
} RQ4: What is the root cause of JS faults? } RQ5: How long does it take to fix a JS fault?
19
![Page 20: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/20.jpg)
Bug Report Study: Impact of JS Faults } Impact Types – Based on Bugzilla’s classification [ICSE’11]
} Type 1 (lowest impact), Type 5 (highest impact)
20
0
20
40
60
80
100
120
140
Type 1 Type 2 Type 3 Type 4 Type 5
Num
ber
of B
ug R
epor
ts
Impact Type
All Faults DOM-Related Faults Only
80% of highest impact faults are DOM-related
![Page 21: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/21.jpg)
Bug Report Study: Research Questions } RQ1: What types of JavaScript faults occur in web apps?
} RQ2: What is the nature of failures stemming from JS faults?
} RQ3: What is the impact of JS faults ?
} RQ4: What is the root cause of JS faults? } RQ5: How long does it take to fix a JS fault?
21
![Page 22: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/22.jpg)
Bug Report Study: Causes of JS Faults } Error Locations
} Most errors manually committed by programmer in JS code
22
86%
1% 10%
1% 1% JavaScript
HTML
Server-Side Code
Server Config File
Other
![Page 23: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/23.jpg)
Bug Report Study: Research Questions } RQ1: What types of JavaScript faults occur in web apps?
} RQ2: What is the nature of failures stemming from JS faults?
} RQ3: What is the impact of JS faults ?
} RQ4: What is the root cause of JS faults? } RQ5: How long does it take to fix a JS fault?
23
![Page 24: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/24.jpg)
Bug Report Study: Triage and Fix Times } Triage Time: Time it took to assign/comment on bug } Fix Time: Time it took to fix the bug since it was triaged
24
0
10
20
30
40
50
60
70
80
90
100
Triage Time Fix Time
Ave
rage
# o
f Day
s
All Faults
DOM-Related Only
Non-DOM-Related Only
![Page 25: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/25.jpg)
Bug Report Study: Summary } Bug report study of 12 applications: JS faults
} Over 300 bug reports analyzed; only fixed bugs considered
} DOM-related faults dominate JavaScript faults } Responsible for nearly two-thirds of all faults } Mostly lead to output errors (not exceptions) } Responsible for 80% of highest impact faults } Arise in the JavaScript code (not server/HTML) } Take 50% longer time to fix for developers
} Need low-cost solutions for DOM-related faults
25
![Page 26: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/26.jpg)
Talk Outline } Bug Report Study of twelve open source JS applications
} To understand bug characteristics [ESEM’13]
} AutoFlox: Localizing DOM-related faults in JS applications } Based on dynamic backward slice [ICST’12 best paper
nominee]
} Vejovis: Automatically fixing JavaScript Faults [in preparation]
} Future Directions & Other Work
26
![Page 27: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/27.jpg)
AutoFlox: Fault Localization
} What to do after we find errors? Need to fix them } Fault localization: Find the root cause of the error
} Focus on DOM-related JavaScript errors
27
![Page 28: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/28.jpg)
element = $(“elem”);
b = element.getAttribute(“badAttr”)
element.innerHTML = “text”;
b.value = “newValue”;
AutoFlox: Scope of Technique } Types of DOM-related JS errors
28
Code-terminating DOM-related JS errors
exception
Output DOM-related JS errors function changeToBlue(elem) {
elem.style.color = “red”;
} Wrong colour change
![Page 29: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/29.jpg)
1 function changeBanner(bannerID) {
2 clearTimeout(changeTimer);
3 changeTimer = setTimeout(changeBanner, 5000);
4
5 prefix = “banner_”;
6 currBannerElem = document.getElementById(prefix+currentBannerID);
7 bannerToChange = document.getElementById(prefix + bannerID);
8 currBannerElem.removeClassName(“active”);
9 bannerToChange.addClassName(“active”);
10 currentBannerID = bannerID;
11 }
12 currentBannerID = 1;
13 changeTimer = setTimeout(changeBanner, 5000);
AutoFlox: Running Example
29
1 function changeBanner(bannerID) {
2 clearTimeout(changeTimer);
3 changeTimer = setTimeout(changeBanner, 5000);
4
5 prefix = “banner_”;
6 currBannerElem = document.getElementById(prefix+currentBannerID);
7 bannerToChange = document.getElementById(prefix + bannerID);
8 currBannerElem.removeClassName(“active”);
9 bannerToChange.addClassName(“active”);
10 currentBannerID = bannerID;
11 }
12 currentBannerID = 1;
13 changeTimer = setTimeout(changeBanner, 5000);
} Show a banner that cycles through four images every 5s
Passed with no argument (even though changeBanner needs one argument)
bannerID will be set to undefined
Would return null
NULL EXCEPTION! asynchronous call
![Page 30: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/30.jpg)
AutoFlox: Block Diagram
30
Instrument JS Code
Run Web Application
Generate Traces
Analyze backward slice
Extract Relevant
Sequence
Partition into Sequences
Trace file
Web Application
direct DOM access
Trace Collection
Phase
Trace Analysis Phase
![Page 31: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/31.jpg)
31
Instrument JS Code
Run Web Application
Generate Traces
Trace file
Web Application
AutoFlox: Trace Collection
![Page 32: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/32.jpg)
1 function changeBanner(bannerID) {
2 clearTimeout(changeTimer); trace();
3 changeTimer = setTimeout(changeBanner, 5000); trace();
4
5 prefix = “banner_”; trace();
6 currBannerElem = document.getElementById(prefix+currentBannerID);trace();
7 bannerToChange = document.getElementById(prefix + bannerID); trace();
8 currBannerElem.removeClassName(“active”); trace();
9 bannerToChange.addClassName(“active”); trace();
10 currentBannerID = bannerID; trace();
11 }
12 currentBannerID = 1; trace();
13 changeTimer = setTimeout(changeBanner, 5000); trace();
AutoFlox: Trace Collection
32
1 function changeBanner(bannerID) {
2 clearTimeout(changeTimer);
3 changeTimer = setTimeout(changeBanner, 5000);
4
5 prefix = “banner_”;
6 currBannerElem = document.getElementById(prefix+currentBannerID);
7 bannerToChange = document.getElementById(prefix + bannerID);
8 currBannerElem.removeClassName(“active”);
9 bannerToChange.addClassName(“active”);
10 currentBannerID = bannerID;
11 }
12 currentBannerID = 1;
13 changeTimer = setTimeout(changeBanner, 5000);
1 function changeBanner(bannerID) {
2 clearTimeout(changeTimer); trace();
3 changeTimer = setTimeout(changeBanner, 5000); trace();
4
5 prefix = “banner_”; trace();
6 currBannerElem = document.getElementById(prefix+currentBannerID);trace();
7 bannerToChange = document.getElementById(prefix + bannerID); trace();
8 currBannerElem.removeClassName(“active”); trace();
9 bannerToChange.addClassName(“active”); trace();
10 currentBannerID = bannerID; trace();
11 }
12 currentBannerID = 1; trace();
13 changeTimer = setTimeout(changeBanner, 5000); trace();
Trace Record Prefix:
changeBanner:::4
Variables:
currentBannerID (global): 1
changeTimer (global): 2
bannerID (local): -11
prefix (local): none
currBannerElem (local): none
bannerToChange (local): none
![Page 33: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/33.jpg)
AutoFlox: Trace Analysis
33
Instrument JS Code
Run Web Application
Generate Traces
Analyze backward slice
Extract Relevant
Sequence
Partition into Sequences
Trace file
direct DOM access
Web Application
![Page 34: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/34.jpg)
1 function changeBanner(bannerID) {
2 clearTimeout(changeTimer);
3 changeTimer = setTimeout(changeBanner, 5000);
4
5 prefix = “banner_”;
6 currBannerElem = document.getElementById(prefix+currentBannerID);
7 bannerToChange = document.getElementById(prefix + bannerID);
8 currBannerElem.removeClassName(“active”);
9 bannerToChange.addClassName(“active”);
10 currentBannerID = bannerID;
11 }
12 currentBannerID = 1;
13 changeTimer = setTimeout(changeBanner, 5000);
Sequences.: (1) line2 -> line3 -> line5 -> line6 -> line7 -> line8 -> line9
(2) line12 -> line13
AutoFlox: Trace Analysis 1 function changeBanner(bannerID) {
2 clearTimeout(changeTimer);
3 changeTimer = setTimeout(changeBanner, 5000);
4
5 prefix = “banner_”;
6 currBannerElem = document.getElementById(prefix+currentBannerID);
7 bannerToChange = document.getElementById(prefix + bannerID);
8 currBannerElem.removeClassName(“active”);
9 bannerToChange.addClassName(“active”);
10 currentBannerID = bannerID;
11 }
12 currentBannerID = 1;
13 changeTimer = setTimeout(changeBanner, 5000);
34
Relevant Seq.: line12 -> line13 -> line2 -> line3 -> line5 -> line6 -> line7 -> line8 -> line9
1 function changeBanner(bannerID) {
2 clearTimeout(changeTimer);
3 changeTimer = setTimeout(changeBanner, 5000);
4
5 prefix = “banner_”;
6 currBannerElem = document.getElementById(prefix+currentBannerID);
7 bannerToChange = document.getElementById(prefix + bannerID);
8 currBannerElem.removeClassName(“active”);
9 bannerToChange.addClassName(“active”);
10 currentBannerID = bannerID;
11 }
12 currentBannerID = 1;
13 changeTimer = setTimeout(changeBanner, 5000);
1 function changeBanner(bannerID) {
2 clearTimeout(changeTimer);
3 changeTimer = setTimeout(changeBanner, 5000);
4
5 prefix = “banner_”;
6 currBannerElem = document.getElementById(prefix+currentBannerID);
7 bannerToChange = document.getElementById(prefix + bannerID);
8 currBannerElem.removeClassName(“active”);
9 bannerToChange.addClassName(“active”);
10 currentBannerID = bannerID;
11 }
12 currentBannerID = 1;
13 changeTimer = setTimeout(changeBanner, 5000);
bannerToChange being assigned return value of DOM access function
Error Marker
AutoFlox outputs this line as direct DOM access
Last variable to take on null value
![Page 35: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/35.jpg)
AutoFLox: Implementation } Trace Collection: Modified versions of existing tools
} InvarScope [Groeneveld et al.] } Crawljax [Mesbah et al.]
} Trace Analysis: Written from scratch
} Evaluated on three applications } Tudu } TaskFreak } Wordpress
35
![Page 36: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/36.jpg)
AutoFlox: Accuracy } Approach: Fault injection into TUDU, TaskFreak, and
WordPress to emulate DOM-related JS faults
36
Web App Total Number of Mutations
Number of direct DOM accesses identified
Percentage identified
TaskFreak 29 29 100%
TUDU 24 24 100%
WordPress 13 7 53.8%
Overall 66 60 90.9%
![Page 37: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/37.jpg)
AutoFlox: Performance
} Approach: Measure trace collection overhead } Tumblr website to localize example fault } Successfully localized the fault
} Results } Trace collection incurred 35% overhead } Trace analysis took 0.115 seconds to complete
37
![Page 38: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/38.jpg)
AutoFlox: Summary } Fault localization for DOM-related JS errors
} Errors due to interaction of DOM and JS } Assumes code-terminating faults that result in exceptions
} AutoFlox uses dynamic backward slicing to successfully isolate > 90% of injected faults
38
![Page 39: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/39.jpg)
Talk Outline } Bug Report Study of twelve open source JS applications
} To understand bug characteristics [ESEM’13]
} AutoFlox: Localizing DOM-related faults in JS applications } Based on dynamic backward slice [ICST’12 best paper
nominee]
} Vejovis: Automatically fixing JavaScript Faults [in preparation]
} Future Directions & Other work
39
![Page 40: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/40.jpg)
Vejovis: Motivation } Automatically “fix” DOM-related faults
} Starts from DOM interaction point (i.e., AutoFLox’s output)
} Finds symptoms to determine “possible
sicknesses” } Suggests workarounds to get rid of these
symptoms and, hopefully, the actual error. } Workaround patterns based on “common
fixes” applied to DOM-related errors
40
![Page 41: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/41.jpg)
Vejovis: Example
41
JavaScript Code: !1 var cls = “pre”;!2 for (var i = 0; i <= 3; i++) {!3 !cls = cls + i;!4 !var elem = $(“p.” + cls);!5 !elem[0].style.display = “block”;!6 }!
DOM State: DIV
P class=“pre0”
P class=“pre01”
P class=“pre012”
SPAN class=“pre0”
SPAN class=“pre01”
SPAN class=“pre012”
SPAN class=“pre0123”
Set up the class name of element being retrieved
Retrieve element using $(). In last iteration of loop, code tries to retrieve p element with class “pre0123”. This does not exist in the DOM. UNDEFINED EXCEPTION!
![Page 42: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/42.jpg)
Vejovis: Example
42
JavaScript Code: !1 var cls = “pre”;!2 for (var i = 0; i <= 3; i++) {!3 !cls = cls + i;!4 !var elem = $(“p.” + cls);!5 !elem[0].style.display = “block”;!6 }!
DOM State: DIV
P class=“pre0”
P class=“pre01”
P class=“pre012”
SPAN class=“pre0”
SPAN class=“pre01”
SPAN class=“pre012”
SPAN class=“pre0123”
Vejovis Step 1: Assume CSS selector is wrong. Divide the selector into components. e.g., Selector is “p.pre0123”. Components: - Tag name p - “Has class” indicator .!- Id name pre0123
![Page 43: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/43.jpg)
Vejovis: Example
43
JavaScript Code: !1 var cls = “pre”;!2 for (var i = 0; i <= 3; i++) {!3 !cls = cls + i;!4 !var elem = $(“p.” + cls);!5 !elem[0].style.display = “block”;!6 }!
DOM State: DIV
P class=“pre0”
P class=“pre01”
P class=“pre012”
SPAN class=“pre0”
SPAN class=“pre01”
SPAN class=“pre012”
SPAN class=“pre0123”
Vejovis Step 2: Divide each component into string set. e.g., String set of “pre0123” - “pre” (Line 1) - “0” (Line 3, Iteration 1)!- “1” (Line 3, Iteration 2) - “2” (Line 3, Iteration 3) - “3” (Line 3, Iteration 4)
![Page 44: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/44.jpg)
Vejovis: Example
44
JavaScript Code: !1 var cls = “pre”;!2 for (var i = 0; i <= 3; i++) {!3 !cls = cls + i;!4 !var elem = $(“p.” + cls);!5 !elem[0].style.display = “block”;!6 }!
DOM State: DIV
P class=“pre0”
P class=“pre01”
P class=“pre012”
SPAN class=“pre0”
SPAN class=“pre01”
SPAN class=“pre012”
SPAN class=“pre0123”
Vejovis Step 3: Find valid replacements for each component of the selector, based on the current DOM state. e.g., Valid replacements for the ID component pre0123 in the original selector “p.pre0123” are - “p.pre0”!- “p.pre01”!- “p.pre012”
![Page 45: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/45.jpg)
Vejovis: Example
45
JavaScript Code: !1 var cls = “pre”;!2 for (var i = 0; i <= 3; i++) {!3 !cls = cls + i;!4 !var elem = $(“p.” + cls);!5 !elem[0].style.display = “block”;!6 }!
DOM State: DIV
P class=“pre0”
P class=“pre01”
P class=“pre012”
SPAN class=“pre0”
SPAN class=“pre01”
SPAN class=“pre012”
SPAN class=“pre0123”
Vejovis Step 4: For each string set part, assume that part is wrong. Use string constraint solver to find suitable replacements based on valid selectors found earlier.
Example: Let’s say the “3” part of “pre0123” is assumed wrong. Hence, we must find a valid selector such that “3” has been replaced – i.e., a valid selector of the form “p.pre012<s>”, where <s> may be empty string.
![Page 46: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/46.jpg)
Vejovis: Example
46
JavaScript Code: !1 var cls = “pre”;!2 for (var i = 0; i <= 3; i++) {!3 !cls = cls + i;!4 !var elem = $(“p.” + cls);!5 !elem[0].style.display = “block”;!6 }!
DOM State: DIV
P class=“pre0”
P class=“pre01”
P class=“pre012”
SPAN class=“pre0”
SPAN class=“pre01”
SPAN class=“pre012”
SPAN class=“pre0123”
Example: To replace “p.pre0123”!with “p.pre012”, the following suggestion is displayed: “Off by one. Modify the upper bound of the for loop that contains Line 3”
![Page 47: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/47.jpg)
} Crawljax used to crawl web application [Mesbah’09] } User specifies “clickables” to reproduce bug
} Rhino used to instrument JS code (for retrieving traces and supplementary information) } Instrumentation done at AST level
} Hampi used to perform string constraint solving when finding potential replacement selectors [Kiezun’09] } Valid selectors used when defining “Context Free Grammar”
Vejovis: Implementation
47
![Page 48: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/48.jpg)
Talk Outline } Bug Report Study of twelve open source JS applications
} To understand bug characteristics [ESEM’13]
} AutoFlox: Localizing DOM-related faults in JS applications } Based on dynamic backward slice [ICST’12 best paper
nominee]
} Vejovis: Automatically fixing JavaScript Faults [in preparation]
} Future Directions & Other work
48
![Page 49: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/49.jpg)
Future Directions } Integrating multiple techniques into a single IDE
} Allow programmers to reason about DOM interactions } Automated code synthesis for DOM-JS interactions
} Support for HTML5 primitives and features } Canvas interactions, local storage etc.
49
![Page 50: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/50.jpg)
Mutandis [Mirshokraie - ICST 2013] } Mutates original program to test quality of test suites } Problem: Equivalent mutants obscure the value } Generate only a few equivalent mutants – FunctionRank } Introduced DOM-specific and JS-specific mutations
50
![Page 51: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/51.jpg)
Pythia [Mirshokraie – ASE 2013] } Automated unit test and oracle generation for web apps. } First, crawls application to generate event sequences } Extracts unit tests from sequences with high coverage } Creates Oracles for unit tests using mutation testing
51
![Page 52: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/52.jpg)
Clematis [Alimadi – under preparation] } Challenge: Web applications are complex, and consist of
DOM interactions, AJAX messages and timeouts } Difficult to trace the links between events and JS code } Clematis allows users to visualize causal dependencies
between events and code, and between asynchrous events
52
![Page 53: How I Learned to Stop Worrying and Love the “DOM”blogs.ubc.ca/karthik/files/2013/09/India-talk.pdfHow I Learned to Stop Worrying and Love the “DOM” Characterizing and Improving](https://reader035.fdocuments.in/reader035/viewer/2022071112/5fe7cf324f1cbe5b7a64f1b7/html5/thumbnails/53.jpg)
Conclusions
} Modern web applications growing in importance } Reliability is a significant challenge for these applications
} Characterized the reliability of modern web applications [ESEM’13] } Majority of errors are DOM-related (66%) } Majority of highest impact errors are DOM-related (80%)
} Techniques to address DOM-related faults } AutoFlox: To localize DOM-related faults [ICST’12] } Vejovis: To automatically fix DOM-related faults [in prep.]
53