This repository provides an automated pipeline for mutant reduction in mutation testing, leveraging FSM-based mutation generation, feature extraction, clustering, and equivalent mutant detection. The framework helps optimize mutation testing by identifying and pruning redundant mutants, ultimately reducing computational costs.
- 📌 Installation
- 📂 Project Structure
- 🚀 Pipeline Overview
- 🔧 Running the Pipeline
- 📊 Results
- ❓ Troubleshooting
- 👥 Contributors
Ensure your system is updated and install the necessary dependencies:
sudo apt update
sudo apt install python3.8 python3.8-venv python3.8-dev default-jrepython3.8 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txtpip install pytest-mutagen hdbscan matplotlib numpy pandas sklearn pyqt5/mutantReduction
|-- data/
| |-- output/
| |-- clustering/ # Clustering results (DBSCAN/HDBSCAN/KMeans)
| |-- equivalence_testing/ # Test execution data for equivalent mutant analysis
| |-- evaluation_mutants/ # Selected mutants for evaluation
| |-- evaluation_results.json # Mutation testing evaluation results
| |-- equivalent_mutants.json # Identified equivalent mutants
| |-- features.json # Extracted features from mutants
| |-- fsm_transitions.json # FSM transition states for mutants
| |-- mutants/ # Generated mutants
| |-- pruned_equivalent_mutants.json # Pruned mutants after equivalence analysis
| |-- selected_mutants.json # Final selected mutants after pruning
|
|-- src/
| |-- benchmarks/ # Benchmarking tools
| |-- clustering/ # Clustering algorithms (HDBSCAN, KMeans)
| |-- equivalent_mutants/ # Equivalent mutant detection & pruning
| |-- feature_extraction/ # Structural metrics extraction
| |-- fsm_modeling/ # FSM-based mutation testing
| |-- mutation_testing/ # Mutation testing execution & evaluation
|
|-- requirements.txt # Project dependencies
|-- README.md # Project documentation
The framework follows these key steps:
1️⃣ Mutation Testing → Generate FSM-based mutants
2️⃣ Feature Extraction → Extract structural & behavioral features
3️⃣ Clustering → Identify redundant mutants via HDBSCAN/KMeans
4️⃣ Equivalent Mutant Detection → Detect semantically equivalent mutants
5️⃣ Equivalent Mutant Pruning → Keep only the most representative mutants
6️⃣ Evaluation → Run mutation testing on the pruned set
Generates FSM-based mutants and stores them in data/output/mutants/.
python -m src.mutation_testing.mutpy_integration📌 Output:
- Mutants stored in
data/output/mutants/ - FSM transition data in
data/output/fsm_transitions.json
Extracts structural metrics (e.g., function calls, arithmetic operations, conditionals, etc.).
python src/feature_extraction/structural_metrics.py📌 Output:
- Extracted features stored in
data/output/features.json
Clusters mutants using HDBSCAN or KMeans.
python src/clustering/hdbscan_clustering.pypython src/clustering/kmeans_clustering.py📌 Output:
data/output/clustering/hdbscan_clustering.pngdata/output/clustering/kmeans_clustering.png- Cluster assignments in
data/output/kmeans_cluster_assignments.json
Detects equivalent mutants using:
- Structural analysis (code similarity)
- Behavioral analysis (test execution comparison)
python src/equivalent_mutants/equivalent_mutant_detector.py📌 Output:
- Equivalent mutants stored in
data/output/equivalent_mutants.json
Removes redundant mutants while keeping the most representative ones.
python src/equivalent_mutants/equivalent_mutant_pruner.py📌 Output:
- Pruned mutants stored in
data/output/pruned_equivalent_mutants.json - Selected mutants stored in
data/output/selected_mutants.json - Evaluation mutants moved to
data/output/evaluation_mutants/
Runs mutation testing only on the pruned set of mutants.
python src/mutation_testing/mutpy_evaluation.py📌 Output:
- Evaluation results in
data/output/evaluation_results.json
After evaluation, compare:
- Mutation Score Before vs. After Reduction
- Impact of Clustering (HDBSCAN vs. KMeans)
- Effectiveness of Equivalent Mutant Pruning
- Computational Savings from Pruning Redundant Mutants
If dependencies are missing, install them:
pip install -r requirements.txtIf Matplotlib fails to render plots, install PyQt5:
pip install pyqt5Ensure Java is installed:
sudo apt install default-jre- Felipe Orlando & João Paulo Nogueira - Research & Implementation
Applying Machine Learning to Optimize Mutation Testing in Python Projects