{"id":28181092,"url":"https://github.com/giuseppericcio/justintimeprediction","last_synced_at":"2026-02-14T21:32:09.805Z","repository":{"id":128127970,"uuid":"397858971","full_name":"giuseppericcio/JustinTimePrediction","owner":"giuseppericcio","description":"Tesi di Laurea in Ingegneria Informatica - Ingegneria del software - Just in Time Prediction di commit difettosi - Università degli Studi di Napoli \"Federico II\"","archived":false,"fork":false,"pushed_at":"2023-09-05T10:32:52.000Z","size":31682,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-10T21:05:15.169Z","etag":null,"topics":["devops","machine-learning","weka"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/giuseppericcio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-08-19T07:41:46.000Z","updated_at":"2024-03-15T10:16:17.000Z","dependencies_parsed_at":null,"dependency_job_id":"1d314671-0c06-40b4-a441-37fa5209fadf","html_url":"https://github.com/giuseppericcio/JustinTimePrediction","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/giuseppericcio/JustinTimePrediction","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/giuseppericcio%2FJustinTimePrediction","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/giuseppericcio%2FJustinTimePrediction/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/giuseppericcio%2FJustinTimePrediction/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/giuseppericcio%2FJustinTimePrediction/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/giuseppericcio","download_url":"https://codeload.github.com/giuseppericcio/JustinTimePrediction/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/giuseppericcio%2FJustinTimePrediction/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29456241,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-14T21:29:27.764Z","status":"ssl_error","status_checked_at":"2026-02-14T21:28:11.111Z","response_time":53,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["devops","machine-learning","weka"],"created_at":"2025-05-16T03:12:09.925Z","updated_at":"2026-02-14T21:32:09.800Z","avatar_url":"https://github.com/giuseppericcio.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Studio di tecniche di predizione 'Just-in-Time' di commit difettosi nello sviluppo software in contesti di Continuous Integration 📚\n\n## Introduzione 📝\nAll’interno di questa tesi di Laurea verranno trattate le tecniche di predizione di commit difettosi nell’ambito dello sviluppo del software usando la metodologia **DevOps**.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/giuseppericcio/JustinTimePrediction/blob/70e1188c720a4a81c97ad300d7b4994b80c1ecf3/Figure/Figura%201.png\" width=\"700\" height=\"400\"\u003e\n\u003c/p\u003e\n\nIn particolare, ci si riferisce al modello **Continuous Integration** che prevede una pipeline di deployment ben definita, mostrata di seguito:\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/giuseppericcio/JustinTimePrediction/blob/70e1188c720a4a81c97ad300d7b4994b80c1ecf3/Figure/Figura%202.png\" width=\"750\" height=\"200\"\u003e\n\u003c/p\u003e\n\nInnanzitutto, occorre definire cosa si intende con il termine **commit**, esso indica quell’operazione di aggiunta, modifica e/o rimozione di file all’interno di una cartella di lavoro, che può essere locale o distribuita; nel caso di directory distribuite ci si avvale del supporto di strumenti per il controllo di versione come GitHub. 🌐\n\n## Metodologia: Just-in-Time Prediction ⏱️\nIn particolare, si affronta attraverso l’uso della metodologia del **Just-in-Time Prediction**, il problema dell’estrazione delle metriche a partire da un log di commit e la conseguente creazione di un file .csv. Il file con le metriche estratte dai commit viene diviso in tre sottoinsiemi, in particolare si avrà training set, validation set e testing set al fine di etichettare ogni commit come difettoso o meno con l’uso di particolari algoritmi di **Machine Learning**. 🧠\n\n### Workflow seguito nella trattazione 🛠️\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/giuseppericcio/JustinTimePrediction/blob/70e1188c720a4a81c97ad300d7b4994b80c1ecf3/Figure/Figura%206.png\" width=\"700\" height=\"400\"\u003e\n\u003c/p\u003e\n\n## Step 1: Estrazione Commit History 📝\nPer l'estrazione dei commit da un progetto su **GitHub** si è fatto uso del tool online [CommitGuru](http://commit.guru/) che permette di effettuare tale operazione in maniera semplice ed intituiva come mostrato nella seguente Figura.\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/giuseppericcio/JustinTimePrediction/blob/70e1188c720a4a81c97ad300d7b4994b80c1ecf3/Figure/Figura%209.png\" width=\"740\" height=\"440\"\u003e\n\u003c/p\u003e\n\n## Step 2: Addestramento del JIT Models 🤖\nPer addestrare il modello di **Just-in-Time Prediction** occorre costruire, a partire dalla commit history, il **training set** contenente le metriche (feature) rilevanti al fine della classificazione dei commit come previsto da questa tecnica.\nIn particolare, tramite lo stesso tool visto in precedenza si ottiene il file .csv con le metriche dei commit, come mostrato in Figura.\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/giuseppericcio/JustinTimePrediction/blob/70e1188c720a4a81c97ad300d7b4994b80c1ecf3/Figure/Figura%2011.png\" width=\"740\" height=\"600\"\u003e\n\u003c/p\u003e\n\n### Addestramento dei modelli ML su Weka 🦤: Logistic Regression e Random Forest\nPer costruire i modelli predittivi si è scelto di confrontare le prestazioni di due diversi modelli nell'esecuzione del medesimo task di classificazione, in particolare si sono scelti un modello di **Logistic Regression**, particolarmente adatto a classificazioni binarie come nel nostro caso (il commit o è difettoso o non lo è), mentre l'altro modello scelto è il **Random Forest** che risulta un modello particolarmente utile quando si vogliono evitare troppi falsi positivi nei risultati di classificazione. Per effettuare l'addestramento di questi modelli si è usato [Weka](https://www.cs.waikato.ac.nz/ml/weka/), un tool scritto in Java da un gruppo di ricerca dell'Università della Nuova Zelanda; esso permette di allenare un modello senza scrivere codice con il supporto di un'interfaccia grafica (come in Figura).\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/giuseppericcio/JustinTimePrediction/blob/70e1188c720a4a81c97ad300d7b4994b80c1ecf3/Figure/Figura%2015.png\" width=\"700\" height=\"550\"\u003e\n\u003c/p\u003e\n\n## Step 3: Validazione del Modello ✔️\nPoi ci si preoccupa di validare questo modello sottoponendogli il secondo insieme di commit, ovvero il **validation set**, che permette di verificare le prestazioni relative di un dato modello rispetto ad un altro al fine di scegliere il modello più opportuno per la predizione. 📊\n\n## Step 4: Test del Modello 🧪\nIl terzo insieme di dati, non utilizzati nei passaggi precedenti, permette di testare il modello scelto, da cui il nome testing set; con la fase di test del modello si ottengono le prestazioni in operation, ovvero si osserva come il modello si comporta nella predizione di nuovi commit rappresentativi di rilasci successivi. 📈\n\nPer effettuare tale valutazione si possono utilizzare varie metriche, quelle scelte nel caso in esame sono tre ovvero:\n- la curva caratteristica di funzionamento del ricevitore (**Area Under the receiver operating characteristic Curve**, AUC);\n  \n  \u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://github.com/giuseppericcio/JustinTimePrediction/blob/70e1188c720a4a81c97ad300d7b4994b80c1ecf3/Figure/Figura%2016.jpg\" width=\"500\" height=\"400\"\u003e\n  \u003c/p\u003e\n  \n- il coefficiente di correlazione di Matthews (**Matthews Correlation Coefficient**, MCC);\n  \n  \u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://github.com/giuseppericcio/JustinTimePrediction/blob/70e1188c720a4a81c97ad300d7b4994b80c1ecf3/Formule/MCC.svg\" width=\"400\" height=\"200\"\u003e\n  \u003c/p\u003e\n  \n- il punteggio Brier (**Brier Score**).\n  \n  \u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://github.com/giuseppericcio/JustinTimePrediction/blob/70e1188c720a4a81c97ad300d7b4994b80c1ecf3/Formule/Brier.svg\" width=\"200\" height=\"100\"\u003e\n  \u003c/p\u003e\n\n## Caso di Studio: App Immuni 📱\nInfine, si tratta un caso di studio particolare, quello dall’app Immuni nelle due versioni per sistemi operativi mobile, ovvero Android e iOS, al fine di mettere in pratica il processo di predizione ‘Just-in-Time’ e verificare alcuni risultati molto importanti.\n\n### Estrazione Commit (sia per iOS che Android)\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/giuseppericcio/JustinTimePrediction/blob/70e1188c720a4a81c97ad300d7b4994b80c1ecf3/Figure/Figura%2018.png\" width=\"700\" height=\"400\"\u003e\n\u003c/p\u003e\n\n### Addestramento dei modelli\n- **Versione Android** 📱 (```Logistic Regression -\u003e AUC=0.551```, ```Random Forest -\u003e AUC=0.527```)\n  \n  \u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://github.com/giuseppericcio/JustinTimePrediction/blob/e8c4fd5b816ff6002c879bb073bd638ab44c3a7b/Grafici/AUC_Android_Training.png\" style=\"width:50%\"\u003e\n  \u003c/p\u003e\n  \n- **Versione iOS** 🍏 (```Logistic Regression -\u003e AUC=0.463```, ```Random Forest -\u003e AUC=0.533```)\n  \n  \u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://github.com/giuseppericcio/JustinTimePrediction/blob/e8c4fd5b816ff6002c879bb073bd638ab44c3a7b/Grafici/AUC_iOS_Training.png\" style=\"width:50%\"\u003e\n  \u003c/p\u003e\n  \n### Valutazione dei modelli\n- **Versione Android** 📱 (```Logistic Regression -\u003e AUC=0.929```, ```Random Forest -\u003e AUC=0.571```)\n  \n  \u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://github.com/giuseppericcio/JustinTimePrediction/blob/e8c4fd5b816ff6002c879bb073bd638ab44c3a7b/Grafici/AUC_Android_Testing.png\" style=\"width:50%\"\u003e\n  \u003c/p\u003e\n  \n- **Versione iOS** 🍏 (```Logistic Regression -\u003e AUC=0.417```, ```Random Forest -\u003e AUC=0.333```)\n  \n  \u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://github.com/giuseppericcio/JustinTimePrediction/blob/e8c4fd5b816ff6002c879bb073bd638ab44c3a7b/Grafici/AUC_iOS_Testing.png\" style=\"width:50%\"\u003e\n  \u003c/p\u003e\n  \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgiuseppericcio%2Fjustintimeprediction","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgiuseppericcio%2Fjustintimeprediction","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgiuseppericcio%2Fjustintimeprediction/lists"}