License: Creative Commons Attribution 3.0 Germany license (CC BY 3.0 DE)
When quoting this document, please refer to the following
DOI: 10.4230/DARTS.4.3.8
URN: urn:nbn:de:0030-drops-92394
URL: http://dagstuhl.sunsite.rwth-aachen.de/volltexte/2018/9239/
Mezzetti, Gianluca ;
Møller, Anders ;
Torp, Martin Toldam
Type Regression Testing to Detect Breaking Changes in Node.js Libraries (Artifact)
Abstract
This artifact provides an implementation of a novel technique, type regression testing, to automatically determine whether an update of a npm library implementation affects the types of its public interface, according to how the library is being used by other npm packages. Type regression testing is implemented in the tool NoRegrets. A run of NoRegrets is parameterized with a pre-update and post-update version of the library, and it consists of three fully automatic phases. First, NoRegrets fetches a list of clients that depend upon the pre-update library, and that have a test suite that succeeds on the pre-update version. Second, NoRegrets uses an ECMAScript 6 proxy instrumentation to generate the API model of both the pre-update and post-update libraries, based on observations of how the client test suites interact with the library. Third, the two models are compared, and inconsistencies are reported as type regressions.
This artifact contains the source code and an installation of NoRegrets, with a guide for how to use the tool and reproduce the experimental results presented in the paper.
BibTeX - Entry
@Article{mezzetti_et_al:DARTS:2018:9239,
author = {Gianluca Mezzetti and Anders M\oller and Martin Toldam Torp},
title = {{Type Regression Testing to Detect Breaking Changes in Node.js Libraries (Artifact)}},
pages = {8:1--8:2},
journal = {Dagstuhl Artifacts Series},
ISSN = {2509-8195},
year = {2018},
volume = {4},
number = {3},
publisher = {Schloss Dagstuhl--Leibniz-Zentrum fuer Informatik},
address = {Dagstuhl, Germany},
URL = {http://drops.dagstuhl.de/opus/volltexte/2018/9239},
doi = {10.4230/DARTS.4.3.8},
annote = {Keywords: JavaScript, semantic versioning, dynamic analysis}
}