Published February 6, 2022
| Version 2.0
Dataset
Open
FragGen Replication Package
Description
FragGenVM (Tool and instructions )
username: fraggen
password: fraggenvm
FragGenData (experiments for Results reported in the paper)
Instructions in VM: /home/fraggen/fraggen/readme.md
for RQ1 /home/TSE_RQ1/tse_rq1/readme.md
Instructions also available in additional notes
Notes
- VM Folder structure
-
- /home/fraggen/fraggen (project home)
- dockerApps (subjects)
- GroundTruth (ground truth models)
- pythonCode (contains scripts to run experiments)
- jars (required jars)
- results (Final results after experiments available here)
- saveJsons (folder to save manual classification jsons
- out (output of crawls and tests)
- paper-crawls (Contains crawls reported in the paper) *
- test-results_mac (regression tests in mac server) *
- test-results_rhel (regression tests in mac server) *
- oracle_analysis (manually labelled oracle failures) *
* - to be extracted from FragGenData separately
- RQ1
-folder
-/home/TSE_RQ1/tse_rq1
- readme.md : contains additional instructions
- TSE_Fraggen.py : contains comments to help run the code
- Need to download dataset_rq1 separately and use the location in TSE_Fraggen.py
- To get results reported in paper
- python3 TSE_Fraggen.py
- Setup/instructions before starting experiments
-
- Make sure VM has working internet connection
- Set the screen resolution to atleast 1400x900
- Update chrome browser if necessary for your experiments
- Memory Requirements : recommended 8GB
- Hard Disk : recommended (100GB)
- Always save manually classified json files into /home/fraggen/fraggen/saveJsons
- Using Crawls reported in the paper for RQ2, RQ3
- Download the provided "FragGenData.7z" from zenodo
- Place the extracted data
: /home/fraggen/fraggen/paper-crawls (crawl, mutationRun)
: /home/fraggen/fraggen/test-results_mac (e1)
: /home/fraggen/fraggen/test-results_rhel (e2, e3)
: /home/fraggen/fraggen/oracle_analysis
- RQ2
- cd /home/fraggen/fraggen/pythonCode
- python3 analyzeCrawl.py
- set ALL_CRAWLS = "../paper-crawls"
- raw stats for all crawls
- /home/fraggen/fraggen/paper_crawls/results/analysis_BestCrawls_60min.csv
- RQ3a
-
- cd /home/fraggen/fraggen/pythonCode
- python3 analyzeTestRun_Regression.py
- use the function "analyzePaperTestRuns()"
- results generated in results folder
- raw results for all tests
- /home/fraggen/fraggen/results/testRunStats.csv
- python3 analyzeTestRun_Regression.py
- use the function "testAnalyzeManualTestOracles()"
- prints the results to stdout
- manually classified 100 failures per oracle
- RQ3b
-
- cd /home/fraggen/fraggen/pythonCode
- python3 analyzeTestRun_alt.py
- ALL_CRAWLS = "/home/fraggen/fraggen/paper-crawls"
- mutation analysis for all the oracles.
- results generated in results folder
- test run stats (no of tests passed, failed etc)
- /home/fraggen/fraggen/results/mutationStats.csv
- raw results for all oracles
- /home/fraggen/fraggen/results/mutationOracleStats.csv
To Run New Experiments :
- Running Crawls
-
- cd /home/fraggen/fraggen/pythonCode
- python3 runCrawljaxBatch.py
- set "DRY_RUN = False" to get the expected runtime
- set the runtime as required
- Runs the crawls for all the subject apps
- generates the crawls in "/home/fraggen/fraggen/out"
- RQ2
-
- Familiarize yourself with groundtruth models in /home/fraggen/fraggen/GroundTruth
- cd /home/fraggen/fraggen/pythonCode
- python3 analyzeCrawl.py
- set ALL_CRAWLS = "../out"
- creates classification.html for each crawl produced by runCrawljaxBatch.py
- Assigns bin values and classifications for state-pairs in new crawls where possible.
- manually classify state-pairs using web interface in each crawl.
- /home/fraggen/fraggen/out/subject/algo/host/crawl/html_classification/classification.html
- subject : eight subject apps
- algo: e.g., addressbook_DOM_RTED_0.0_60mins
- host: e.g., localhost
- crawl: e.g, crawl0
- python3 analyzeCrawl.py
- analyzes the classification for new crawls w.r.t ground truth and produces results
- /home/fraggen/fraggen/results/analysis_BestCrawls_60min.csv
- RQ3a
-
- cd /home/fraggen/fraggen/pythonCode
- python3 runGeneratedTests.py
- set ALL_CRAWLS = "/home/fraggen/fraggen/out"
- set (MUTATION=False)
- runs tests in each of the generated tests for new technique
- python3 analyzeTestRun_Regression.py
- use the function "analyzeNewTestRuns()"
- generates HTML to analyze failed Test events
- manually classify state-pairs using web interface in each crawl.
- python3 analyzeTestRun_Regression.py
- results generated in results folder
- raw results for all tests
- /home/fraggen/fraggen/results/testRunStats.csv
- RQ3b
-
- cd /home/fraggen/fraggen/pythonCode
- python3 runGeneratedTests.py
- set ALL_CRAWLS = "/home/fraggen/fraggen/out"
- set (MUTATION=True)
- runs tests in each of the generated tests for new technique
- python3 analyzeTestRun_alt.py
- set ALL_CRAWLS = "/home/fraggen/fraggen/out"
- mutation analysis for all the oracles.
- results generated in results folder
- test run stats (no of tests passed, failed etc)
- /home/fraggen/fraggen/results/mutationStats.csv
- raw results for all oracles
- /home/fraggen/fraggen/results/mutationOracleStats.csv
- Known Issues
-
- Selenium may fail to start a new chrome browser.
- possible reasons include internet connectivity
- Rerun fixes the issue if there is a working internet connection
- Existing crawljax testGenerator may produce multiple methods with the same name
- runGeneratedTests will fail if this is the case
- fix the compilation errors manually in GeneratedTests.java in corresponding crawl to continue
Files
Files
(29.0 GB)
| Name |
Size |
Download all
|
|
md5:d31475a1e7a292b78f5aac58cd577595
|
682.9 MB |
Download
|
|
md5:1b423f4a4bce9ab55eb6df85f8266b8d
|
14.5 GB |
Download
|
|
md5:14d8af45def2a8259ad8752d5d9825ed
|
13.8 GB |
Download
|