REDUSE - Will it Work on My Machine?\\A Study on Reproducibility Smells in Ansible Scripts
Creators: name: Sobhani, Ghazal
name: Haque, Israat
name: Sharma, Tushar
Publisher: name: Zenodo
Year: 2024

description: A study on reproducibility smells

This study, first, identifies such programming practicesthat we refer to as reproducibility smells by conducting a comprehensive multi-vocal review. We implement a tool viz. REDUSE to identify reproducibility smells in Ansible scripts. Furthermore, we carry out an empirical study to reveal the proliferation of reproducibility smells in open-source projects and explore correlation and co-occurrence relationships among them. 

This tool detects programming practices, referred to as productivity smells, in Ansible scripts that can lead to reproducibility issues.

What is this tool?

This is a detection tool, designed to detect reproducibility smells in a pattern based mode.You can provide your ansible script in .yml format and get a .csv output containing task name, task number, smell name, reason of having the smell on  the task.

Content

Replication Package



Manual validation : This folder contains the repositories used for manual validation of the tool. In each folder, for each script we have `manual.csv`(smells detected by reviewers) file and `cleaned.csv`(smells detected by tool) file.

MLR : This folder contains all the files regarding multi-vocal literature review.

Reproducibility smell examples : This file contains the code for the example scenarios mentioned in the category in the paper.

Qualitative analysis sheet : This file contains the github issues analysis from the projects extracted for empirical study from 'ansible galaxy'.




Souce codes:**`src`**:- **`extraction`**:  - **`extracted_repos`**:       This folder contains text files.       Each text file contains the links extracted from 9 categories of the       ansible galaxy top 100 of the most-downloaded repositories after applying criteria check on the github repository.  - **`script`**:      - **`criteria_check.py`**:        This script applies criterias on the github links.         5 stars, 50 commits, last commit not older than 1 year ago.      - **`link_extractor.py`**:        This script extracts github links from the given url.         used for extracting the projects from the ansible galaxy.      - **`script_extractor.py`**:        This script gets a github link and extracts the .yml files of the repository.

- **`output`**:  This folder contains all the detection results on the scripts.

- **`detector.py`**:     - This scripts contains the main logic of the tool.    - It gets the path to the ansible script file and parse it.    - using parsed tasks it detects the smells for each task.- **`parser.py`**:     - This scripts parses a given ansible script and returns a dictionary containing the tasks of the script.- **`smell_detection.py`**:     - This scripts consists of the smell detection functions.       each function is trying to detect one smell according to the rules specified and provides a message.- **`results.py`**:    - This script creates 2 csv files in 2 formats as output. **`test`**:- **`testScripts`**:  This folder contains the original ansible scripts from the ansible galaxy and ansible-oci-collection.- **`unit_test`**:  This folder contains the unit-tests for the smell_detection functions.