JSDEP (análisis DOM-Dependency)
@inproceedings{DBLP:conf/sigsoft/SungKS016,
author = {Chungha Sung and
Markus Kusano and
Nishant Sinha and
Chao Wang},
title = {Static {DOM} event dependency analysis for testing web applications},
booktitle = {Proceedings of the 24th {ACM} {SIGSOFT} International Symposium on
Foundations of Software Engineering, {FSE} 2016, Seattle, WA, USA,
November 13-18, 2016},
pages = {447--459},
year = {2016},
crossref = {DBLP:conf/sigsoft/2016},
url = {https://doi.org/10.1145/2950290.2950292},
doi = {10.1145/2950290.2950292},
timestamp = {Tue, 06 Nov 2018 16:59:23 +0100},
biburl = {https://dblp.org/rec/bib/conf/sigsoft/SungKS016},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
JSDEP es una herramienta para encontrar la dependencia del evento DOM de una aplicación web que incluye control tradicional y dependencia de datos utilizando restricciones de datos.
Traversa un archivo de JavaScript estáticamente y encuentra la relación entre dos eventos de DOMS.
Esta herramienta incluye una versión modificada de Artemis para mostrar la evaluación presentada en el documento FSE (que aparecerá).
Las características de esta herramienta
- Alias estática e interprocedural y con un contexto anlaysis
- Esta herramienta no admite Dom-Alias Anlaysis
- Esta herramienta no admite la extracción de JavaScript de HTML (todos los JavaScripts extraídos manualmente para los puntos de referencia que tenemos)
Estructura de JSDEP
- En esta figura, todos los directorios del repositorio que tenemos se representan con una carpeta, y los archivos de salida se representan con un icono de bloc de notas. Y, los comandos al lado de las flechas son scripts reales que puede usar en JSDEP. Principalmente, hay tres partes en JSDEP:
- Análisis DOM: esta parte contiene nuestro análisis principal. Consiste en 3 directorios (SRC, Z3_Rules, Node_Modules). Después de instalar todas las dependencias, cuando ejecuta scripts llamados Make Build-Dep con un nombre de archivo o Make Build-Dep-All, el análisis producirá 3 archivos (Dep.Txt, NumConstraints.txt, Z3.Time) en el directorio de información de cada punto de referencia. El resultado de la dependencia se imprime en Dep.txt, y el tiempo de análisis de cada archivo se registra en Z3.Time. Además, el número de restricciones generadas se registra en numConstraints.txt.
- Artemis modificado: para que los usuarios verifiquen la utilidad de nuestro análisis, proporcionamos un Artemis modificado para usar la información que tenemos. Antes de ejecutar Artemis, debe instalarlo. Después de instalar la versión modificada de Artemis, puede comparar dos versiones de ella. Al ejecutar el comando, hacer run-artemis con un nombre de archivo o hacer run-artemis-all, usa dep.txt en cada punto de referencia y produce dos archivos en el directorio de Artemis-Result para cada punto de referencia. Old_artemis.stdout es la salida de la versión anterior de Artemis, y New-Artemis.stDout se produce de una versión modificada de Artemis que utiliza la información en Dep.txt.
- Datos brutos: se proporciona este directorio para los usuarios que desean hacer tablas sin ninguna instalación y ejecutar nuestro análisis. Todos los datos se han cargado y la estructura de este directorio es la misma que la de Benchmark. Si ejecuta comandos Make Tabla1, haga la Tabla 2 y haga la Tabla3, puede utilizar cada mesa en el papel. La tabla se imprimirá en la terminal y la forma es para látex. Por lo tanto, si copia la impresión y la pega al látex, mostrará la misma tabla que mostramos en el papel. Y, para aquellos que desean hacer una tabla con nuevos datos generados, proporcionamos un comando más, hacemos datos de Fetch. Este comando obtendrá todos los datos en Benchmark al directorio de datos sin procesar. Igual que antes, después de obtener nuevos datos, puede hacer fácilmente las mismas tablas de estructura ejecutando comandos de tabla Make.
Colaboradores
Las siguientes personas han contribuido a esta aplicación y al documento:
- Chungha Sung (SCH8906/AT/VT/EDU)
- Markus Kusano (Mukusano/AT/VT/EDU)
- Nishant Sinha
- Chao Wang (Chaowang/AT/VT/EDU)
Dependencia del programa
Ambiente
- Solo probamos este programa en Ubuntu 12.04
- No lo hemos revisado con otras versiones de Ubuntu
Para ejecutar solo un análisis estático para ejecutar relaciones DOM-dependencia, necesita estas dependencias:
- Z3 (https://github.com/z3prover/z3), cualquier versión (probada con 4.4.1).
- NodeJS (para instalar esto, escriba
sudo apt-get install nodejs ) - RealPath (para instalar esto, escriba
sudo apt-get install realpath )
Para probar con Artemis, primero debe instalar una versión modificada de Artemis.
- Puede seguir las instrucciones en el directorio modificado de Artemis para instalarlo (a veces es difícil instalar correctamente, sin embargo, debido a la limitación de tamaño, no podemos proporcionar una versión completamente compilada).
- Debe usar la versión que proporcionamos porque esta versión se modifica para comparar la versión anterior de Artemis y la versión modificada de Artemis que utiliza relaciones de dependencia de nuestro programa.
El enlace para VM (archivo OVA de virtual Box) con JSDEP instalado (https://drive.google.com/open?id=1O70kdlfwhan4j06y5nhtqopbqiqciyrq). Sin embargo, esto se ha actualizado hace mucho tiempo, por lo que tal vez tenga algunos problemas.
USO
===== Debe instalar la versión modificada de Artemis que proporcionamos para ejecutar estas comandos a continuación =====
- hacer run-artemis file = [filename] iter = [iteration]
- Debe ejecutar el análisis de dependencia para obtener dep.txt primero
- Ejecute la versión anterior de Artemis con un archivo especificado y un número de iteración especificado
- hacer run-artemis-todo iter = [iteración]
- Debe ejecutar el análisis de dependencia para obtener dep.txt primero
- Ejecute la versión anterior de Artemis con todos los archivos con un número de interación especificado
¿Cómo interpretar dep.txt?
Si ejecuta el programa, puede ver el archivo llamado Dep.txt Archivo en el directorio de información.
Hay líneas de texto, y cada relaciones de depedencia consisten en 4 líneas de texto.
Primera y segunda línea indican el nombre de DOM, y la tercera y cuarta línea indican el tipo de evento.
Por ejemplo, si el contenido del archivo es 1 DOM1 2 Haga clic 3 DOM2 4 MouseMove
DOM1 y DOM2 son el nombre de los nodos DOM y Click y MouseMove son el tipo de eventos para cada DOM.
El significado de estas cuatro líneas es el mouseMove de Test2 depende del clic de Test1.
Cada cuatro líneas están relacionadas (por ejemplo, 1 4, 5 8 ...)