JSDEP(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}
}
JSDEPは、Datalogの制約を使用した従来のコントロールやデータ依存性など、WebアプリケーションのDOMイベント依存性を見つけるためのツールです。
1つのJavaScriptファイルを静的に横断し、DOMの2つのイベント間の関係を見つけます。
このツールには、FSEペーパー(表示する)に示されている評価を示すArtemisの修正バージョンが含まれています。
このツールの特性
- 静的&coptural&Context-inssive-Insensitive Alias Anlaysis
- このツールは、Dom-Alias Anlaysisをサポートしていません
- このツールは、HTMLからのJavaScriptの抽出をサポートしていません(すべてのJavaScriptsは、ベンチマークのために手動で抽出しました)
JSDEPの構造
- この図では、私たちが持っているリポジトリのすべてのディレクトリはフォルダーで表され、出力ファイルはメモパッドアイコンで表されます。また、矢印の横にあるコマンドは、JSDEPで使用できる実際のスクリプトです。主に、JSDEPには3つの部分があります。
- DOM分析 - このパートには、メイン分析が含まれています。 3つのディレクトリ(SRC、Z3_rules、node_modules)で構成されています。すべての依存関係をインストールした後、ファイル名でbuild-depという名前のスクリプトを実行する場合、またはbuild-dep-allを作成すると、分析は各ベンチマークの情報ディレクトリの下で3つのファイル(dep.txt、numconstraints.txt、z3.time)を生成します。依存関係の結果はdep.txtに印刷され、各ファイルの分析時間はz3.timeに記録されます。また、生成された制約の数は、numconstraints.txtに記録されます。
- 修正されたArtemis-ユーザーに分析の有用性を確認させるために、私たちが持っている情報を使用するように変更されたArtemisを提供します。 Artemisを実行する前に、インストールする必要があります。 Artemisの変更されたバージョンをインストールした後、2つのバージョンを比較できます。 [ファイル名]を使用してrun-areTemisを実行するか、Run-Artemis-Allを作成することにより、各ベンチマークの下でdep.txtを使用し、各ベンチマークのArtemis-Resultディレクトリの下に2つのファイルを生成します。 old_artemis.stdoutは、以前のバージョンのArtemisの出力であり、new-artemis.stdoutは、dep.txtで情報を使用するArtemisの変更されたバージョンの出力です。
- RAW -DATA-このディレクトリは、インストールや分析を実行することなくテーブルを作成したいユーザー向けに提供されます。すべてのデータがアップロードされており、このディレクトリの構造はベンチマークの構造と同じです。コマンドを実行してtable1を作成し、table2を作成し、table3を作成すると、各テーブルを用紙で使用できます。テーブルはターミナルに印刷され、フォームはラテックス用です。したがって、プリントをコピーしてラテックスに貼り付けると、論文で示したのと同じテーブルが表示されます。また、新しいデータを生成してテーブルを作成したい人のために、もう1つのコマンドを提供し、Fetch-Dataを作成します。このコマンドは、ベンチマークの下ですべてのデータをRaw-Dataディレクトリに取得します。以前と同じように、新しいデータを取得した後、Make Tableコマンドを実行することで同じ構造テーブルを簡単に作成できます。
貢献者
次の人々がこのアプリケーションと論文に貢献しています。
- Chungha Sung(sch8906/at/vt/edu)
- Markus kusano(ムクサノ/at/vt/edu)
- ニシャント・シンハ
- Chao Wang(Chaowang/at/vt/edu)
プログラムの依存関係
環境
- Ubuntu 12.04でこのプログラムのみをテストしました
- 他のubuntuバージョンで確認していません
dom依存関係を実行するために静的分析のみを実行するには、これらの依存関係が必要です。
- Z3(https://github.com/z3prover/z3)、任意のバージョン(4.4.1でテスト)。
- nodejs(これをインストールするには、
sudo apt-get install nodejs入力) - RealPath(これをインストールするには、
sudo apt-get install realpath入力)
Artemisでテストするには、最初にArtemisの変更されたバージョンをインストールする必要があります。
- Artemis修飾ディレクトリの下で命令に従ってインストールすることができます(サイズの制限があるため、完全にコンパイルされたバージョンを提供することはできません)。
- このバージョンは、プログラムの依存関係関係を使用するArtemisの以前のバージョンとArtemisの変更されたバージョンを比較するために変更されているため、提供するバージョンを使用する必要があります。
jsdepがインストールされたVM(仮想ボックスのOVAファイル)のリンク(https://drive.google.com/open?id=1o70kdlfwhan4j06y5nhtqopbqiqciyrq)。ただし、これは非常にずっと前に更新されているため、いくつかの問題があるかもしれません。
使用法
=====これらのコマンドを以下で実行するために提供するArtemisの変更バージョンをインストールする必要があります=====
- run-artemis file = [filename] iter = [iteration]を作成します
- dep.txtを最初に取得するには、依存関係分析を実行する必要があります
- 指定されたファイルと指定された反復番号を使用して、以前のバージョンのArtemisを実行します
- run-artemis-all iter = [iteration]を作成します
- dep.txtを最初に取得するには、依存関係分析を実行する必要があります
- 指定されたインターション番号を持つすべてのファイルを使用して、以前のバージョンのArtemisを実行します
dep.txtを解釈する方法は?
プログラムを実行すると、Info Directoryの下にdep.txtファイルという名前のファイルが表示されます。
テキストの行があり、それぞれの依存関係の関係は4行のテキストで構成されています。
1行目と2行目はDOMの名前を示し、3行目と4行目はイベントのタイプを示します。
たとえば、ファイルコンテンツが1 dom12の場合、3 dom2 4 mousemoveをクリックします
DOM1とDOM2はDOMノードの名前であり、クリックとMousemoveは各DOMのイベントのタイプです。
これらの4つの線の意味は、test2のムーセモブです。TEST1のクリックに依存します。
それぞれ4行が関連しています(例: 4、5 8 ...)