
NSF Org: |
CCF Division of Computing and Communication Foundations |
Recipient: |
|
Initial Amendment Date: | July 17, 2014 |
Latest Amendment Date: | July 17, 2014 |
Award Number: | 1423645 |
Award Instrument: | Standard Grant |
Program Manager: |
Sol Greenspan
sgreensp@nsf.gov (703)292-7841 CCF Division of Computing and Communication Foundations CSE Directorate for Computer and Information Science and Engineering |
Start Date: | August 1, 2014 |
End Date: | July 31, 2018 (Estimated) |
Total Intended Award Amount: | $500,000.00 |
Total Awarded Amount to Date: | $500,000.00 |
Funds Obligated to Date: |
|
History of Investigator: |
|
Recipient Sponsored Research Office: |
1608 4TH ST STE 201 BERKELEY CA US 94710-1749 (510)643-3891 |
Sponsor Congressional District: |
|
Primary Place of Performance: |
581 Soda Hall Berkeley CA US 94720-1776 |
Primary Place of
Performance Congressional District: |
|
Unique Entity Identifier (UEI): |
|
Parent UEI: |
|
NSF Program(s): | Software & Hardware Foundation |
Primary Program Source: |
|
Program Reference Code(s): |
|
Program Element Code(s): |
|
Award Agency Code: | 4900 |
Fund Agency Code: | 4900 |
Assistance Listing Number(s): | 47.070 |
ABSTRACT
JavaScript is the most popular programming language for client-side
web programming. Advances in browser technologies and JavaScript
engines in the recent years have fueled the use of JavaScript in Rich
Internet Applications, and several mobile platforms including Android,
IOS, Tizen OS, Windows 8, Blackberry, and Firefox OS, support
applications written in JavaScript/HTML5. With a renewed interest in
JavaScript, many complex applications such as Google docs, Gmail, and
a variety of games are being developed using
HTML5/JavaScript. However, unlike C/C++, Java, and C#, JavaScript is
significantly shorthanded in the tools landscape. The dynamic and
reflective nature of JavaScript makes it hard to analyze it
statically.
This project investigates a dynamic analysis framework and several
dynamic analysis techniques for JavaScript. The analysis framework
provides a few useful abstractions and an API that significantly
simplifies implementation of dynamic analyses for JavaScript. The
framework works through source code instrumentation and allows
implementation of various heavy-weight dynamic analyses and test
generation techniques. The projects investigates and implements
several dynamic analyses including concolic testing, pure symbolic
execution, a detector of likely type inconsistencies, and a runtime
memory profiler. The techniques developed in this project are
suitable for analyzing and testing that web applications written in
JavaScript/HTML5 are free of common correctness and performance
bugs. The techniques will benefit directly web applications
programmers, and indirectly the numerous users of mobile and web
applications.
PUBLICATIONS PRODUCED AS A RESULT OF THIS RESEARCH
Note:
When clicking on a Digital Object Identifier (DOI) number, you will be taken to an external
site maintained by the publisher. Some full text articles may not yet be available without a
charge during the embargo (administrative interval).
Some links on this page may take you to non-federal websites. Their policies may differ from
this site.
PROJECT OUTCOMES REPORT
Disclaimer
This Project Outcomes Report for the General Public is displayed verbatim as submitted by the Principal Investigator (PI) for this award. Any opinions, findings, and conclusions or recommendations expressed in this Report are those of the PI and do not necessarily reflect the views of the National Science Foundation; NSF has not approved or endorsed its content.
In this project we built a framework, called Jalangi, for developing correctness and performance analysis tools for JavaScript. We focussed on developing tools for JavaScript because JavaScript is the predominant programming language for building websites and client-side internet applications, such as Gmail, Facebook.com, Twitter.com, Netflix.com, Google Docs, and Amazon.com. Unfortunately, JavaScript programs are prone to various programming errors which result in correctness, performance, and security issues. Unlike other popular programming languages, such as Java and C, JavaScript has very little tool support to analyze and to debug these programming errors.
We have developed a simple yet powerful framework, called Jalangi, for writing dynamic analyses (i.e. techniques that analyze an execution of a program) for JavaScript. Jalangi has two key features. First, the framework works on any modern browser, such as Chrome, Safari, Firefox, or server-side JavaScript framework such as node.js. Browser independence allows our dynamic analyses to have wider impact. Additionally, independence from browsers and JavaScript engines also enables us to easily maintain the framework in the face of a rapidly evolving browser landscape---we do not need to upgrade or rebuild our framework whenever there is a JavaScript engine update. Secondly, Jalangi takes care of various challenging details of JavaScript. One can easily implement a dynamic analysis in the Jalangi framework without worrying about the problematic issues of JavaScript.
Due to Jalangi's simplicity and ease-of-use, we were able to design and implement several dynamic analyses for JavaScript within a short period. One such analysis, called DLint, managed to find 49 programming issues in average on over 200 of the most popular websites, including visible bugs on the websites of IKEA, Hilton, eBay, and CNBC. These bugs sometimes led to wrong output on websites or led to serious security vulnerabilities. Another analysis, called JITProf, managed to improve the performance of the 15 most popular JavaScript benchmarks by up to 26.3%. A memory analysis tool, called MemInsight, discovered several memory bugs in Tizen apps. We used Jalangi to study the use of type coercions in JavaScript. For this we developed the tool called TypeDevil on top of Jalangi. We dynamically analyzed hundreds of programs, including real-world web applications and popular benchmark programs. Applying TypeDevil to widely used benchmark suites and real-world web applications revealed 15 problematic type inconsistencies, including correctness problems, performance problems, and dangerous coding practices. We have developed trace typing: a framework on top of Jalangi for automatically and quantitatively evaluating variations of a retrofitted type system on large code bases. Another analysis, called TRAVIOLI, was developed for visualizing data-structure traversals, for manually generating performance regression tests, and for discovering performance bugs caused by redundant traversals. TRAVIOLI produced fewer than 4% false positives. We were able to construct performance tests for 93.75% of the reported true traversals. TRAVIOLI also found two asymptotic performance bugs in widely used JavaScript frameworks D3 and express. We also implemented a scalable symbolic execution engine with state merging, called MultiSE, in a publicly available open-source tool. Our evaluation of MultiSE on several programs shows that MultiSE can run significantly faster than traditional symbolic execution. Another tool for feedback-directed instrumentation, called Crowdie, was evaluated on 10 real-world issues for which error messages and stack traces are insufficient to debug the problem. Our results showed that feedback-directed instrumentation requires 5% to 25% of the program to be instrumented, that the same crash must be observed 3 to 10 times to discover the crash path, and that feedback-directed instrumentation typically slows down execution by a factor 2x-9x compared to 8x-90x for an approach where applications are fully instrumented.
We published the key paper on this project at ESEC/FSE, the flagship conference of ACM SIGSOFT. We have released Jalangi version 1.0 and version 2.0 as open-source software. Jalangi has powered several research and software tool projects both in academia and industry. Jalangi has garnered interest from several companies, including Samsung Electronics, NTT Japan, Coverity, Mozilla, and Awake networks, a recent security startup. The PI has given several invited talks at conferences and workshops, including a tutorial on Jalangi at PLDI 2016. Two of our papers based on analyses developed on top of Jalangi have won ACM SIGSOFT Distinguished Paper Awards at ICSE 2016 and ESEC/FSE 2015.
Last Modified: 11/26/2018
Modified by: Koushik Sen
Please report errors in award information by writing to: awardsearch@nsf.gov.