- Author: Kristiyan Michaylov
- Supervisor: Dr.-Ing. Jacob Krüger
This repository contains the source code and datasets used for the experiments conducted as part of my Master's thesis, titled Tracing Evolutionary Changes of APIs.
The main objective of this research is to analyse the reasons behind API changes and evaluate their impact on both the functionalities and the architectural design of the APIs.
- Research Questions
- Methodology
- Project Structure
- Setup and Installation RQ1
- Setup and Installation RQ2
- Link to thesis
- RQ1 : To what extent can an automated machine learning technique analyse and categorise the causes of changes in Java APIs?
- RQ2 : How do changes impact the architecture and functionalities of APIs?
- RQ2.1 : Are changes impacting the architecture and functionality represented in the release log?
- RQ2.2 : How does the architecture of an API alter during evolution?
We studied the evolution of Java APIs (e.g., JUnit, Lombok, Log4J, Apache Commons IO) by analyzing release log messages and source code from the Maven Repository. Machine learning models were used to classify change reasons, while empirical methods examined how functionality and architecture evolve over time. This included software metrics evaluation, class diagram alternation throughout evolution, package structure analysis and mapping between release log messages and architecture and functionality. Below, images illustrating the methodology and training process are depicted.
Figure 1: Diagram capturing an overview of the whole methodology process
Figure 2: Overview of the training process for classification
The structure of the current repository is organised as follows:
Master-Thesis-Repository/
├── notebooks/ → Jupyter notebooks (main experiments for RQ1)
├── resources/ → Images, tables and other visuals
├── rq2_resources → Files related to experiments for RQ2
├──── arcana_json_files → JSON files generated by Arcana
├──── class_diagrams → Class diagrams from the JetBrains diagramming tool
├── requirements.txt → pip dependencies
├── LICENSE → Project license
└── README.md
Here is an example for building and environment setup
-
Create a virtual environment
python -m venv venv -
Activate the virtual environment
- On macOS/Linux:
source venv/bin/activate - On Windows:
venv\Scripts\activate
- On macOS/Linux:
-
Install and Upgrade pip (if not already done)
pip install --upgrade pip -
Install project dependencies
pip install -r requirements.txt -
Install Jupyter (if not already included)
pip install notebook -
Run Jupyter Notebook
jupyter notebook
To run the experiments related to RQ2, please refer to the following GitHub repositories:
The final variant of the thesis is attached in the current repository.