JSDEP (Análise de dependência DOM)
@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}
}
O JSDEP é uma ferramenta para encontrar a dependência do evento DOM de um aplicativo da Web, incluindo controle tradicional e dependência de dados usando restrições de dados.
Ele atravessa um arquivo JavaScript estaticamente e encontra a relação entre dois eventos do DOMS.
Esta ferramenta inclui uma versão modificada do Artemis para mostrar a avaliação, conforme apresentado no papel FSE (para aparecer).
As características desta ferramenta
- Alias estáticas e interprocedurais e insensíveis ao contexto Anlaysis
- Esta ferramenta não suporta Dom-Alias Anlaysis
- Esta ferramenta não suporta a extração de JavaScript do HTML (todos os JavaScripts extraídos manualmente para os benchmarks que temos)
Estrutura de JSDEP
- Nesta figura, todos os diretórios do repositório que temos são representados com uma pasta, e os arquivos de saída são representados com um ícone do bloco de notas. E os comandos próximos às setas são scripts reais que você pode usar no JSDEP. Principalmente, existem três partes no JSDEP:
- Análise DOM - Esta parte contém nossa análise principal. Consiste em 3 diretórios (SRC, Z3_Rules, Node_modules). Após a instalação de todas as dependências, quando você executa scripts chamados Make Build-Dep com um nome de arquivo ou faça o Build-Dep-All, a análise produzirá 3 arquivos (dep.txt, numConstraints.txt, z3.time) no diretório de informações de cada referência. O resultado da dependência é impresso no dep.txt e o tempo de análise de cada arquivo é gravado em z3.Time. Além disso, o número de restrições geradas é registrado no NumConstraints.txt.
- Artemis modificado - Para fazer com que os usuários verifiquem a utilidade de nossa análise, fornecemos um Artemis modificado para usar as informações que temos. Antes de executar o Artemis, você deve instalá -lo. Depois de instalar a versão modificada do Artemis, você pode comparar duas versões. Ao executar o comando, faça o Run-Artemis com um nome de arquivo ou faça o Run-Artemis-All, ele usa o dep.txt em cada referência e produz dois arquivos no Artemis-Result para cada referência. Old_artemis.stdout é a saída da versão anterior do Artemis, e New-Artemis.stdout é a saída de uma versão modificada do Artemis, que usa as informações no dep.txt.
- Raw -Data - Este diretório é fornecido para usuários que desejam fazer tabelas sem nenhuma instalação e execução de nossa análise. Todos os dados foram enviados e a estrutura deste diretório é a mesma que a de referência. Se você executar comandos fizer a tabela1, faça a Tabela2 e faça a Tabela3, poderá usar cada tabela usada no papel. A tabela será impressa no terminal e o formulário é para látex. Portanto, se você copiar a impressão e colá -la no LATEX, ele mostrará a mesma tabela que mostramos no papel. E, para aqueles que desejam fazer a tabela com novos dados gerados, fornecemos mais um comando, fabricam dados de busca. Este comando buscará todos os dados em referência no diretório de dados brutos. O mesmo que antes, depois de buscar novos dados, você pode facilmente criar tabelas de estrutura, executando comandos da tabela.
Colaboradores
As seguintes pessoas contribuíram para a aplicação e o artigo:
- Chungha Sung (SCH8906/AT/VT/EDU)
- Markus Kusano (Mukusano/AT/VT/EDU)
- Nishant Sinha
- Chao Wang (Chaowang/AT/VT/EDU)
Dependências do programa
Ambiente
- Testamos apenas este programa no Ubuntu 12.04
- Não verificamos com outras versões do Ubuntu
Para executar apenas a análise estática para executar relacionamentos de dependência de DOM, ele precisa dessas dependências:
- Z3 (https://github.com/z3prover/z3), qualquer versão (testada com 4.4.1).
- Nodejs (para instalar isso, digite
sudo apt-get install nodejs ) - RealPath (para instalar isso, digite
sudo apt-get install realpath )
Para testar com o Artemis, você deve instalar uma versão modificada do Artemis primeiro.
- Você pode seguir a instrução no diretório modificado por Artemis para instalá-lo (às vezes é difícil instalar corretamente, no entanto, devido à limitação de tamanho que não podemos fornecer uma versão totalmente compilada).
- Você deve usar a versão que fornecemos porque esta versão é modificada para comparar a versão anterior do Artemis e a versão modificada do Artemis, que usa relações de dependência do nosso programa.
O link para VM (arquivo OVA da caixa virtual) com o JSDEP instalado (https://drive.google.com/open?id=1o70kdlfwhan4j06y5nhtqopbqiqciyrq). No entanto, isso foi atualizado há muito tempo, então talvez tenha alguns problemas.
USO
===== você precisa instalar a versão modificada do Artemis que fornecemos para executar esses comands abaixo =====
- Faça o arquivo run-artemis = [nome do arquivo] iter = [iteração]
- Você tem que executar a análise de dependência para obter o dep.txt primeiro
- Execute a versão anterior do Artemis com um arquivo especificado e um número de iteração especificado
- Faça Run-Artemis-All Iter = [iteração]
- Você tem que executar a análise de dependência para obter o dep.txt primeiro
- Execute a versão anterior do Artemis com todos os arquivos com um número de interação especificado
Como interpretar dep.txt?
Se você executar o programa, poderá ver o arquivo chamado de dep.txt no diretório de informações.
Existem linhas de texto e cada relações de dependência consistem em 4 linhas de texto.
A primeira e a segunda linha indicam o nome de DOM, e a terceira e a quarta linha indicam o tipo de evento.
Por exemplo, se o conteúdo do arquivo for 1 DOM1 2 Clique em 3 DOM2 4 Mousemove
DOM1 e DOM2 são NOME DO DOM e Click e MouseMove são o tipo de eventos para cada DOM.
O significado dessas quatro linhas é o MouseMove of Test2 depende do clique do Test1.
Cada quatro linhas estão relacionadas (por exemplo, 1 4, 5 8 ...)